diff --git a/.claude/worktrees/feat-7786/changelog.d/features/7786-management-auth-terminology-docs.md b/.claude/worktrees/feat-7786/changelog.d/features/7786-management-auth-terminology-docs.md deleted file mode 100644 index 4a5fca7f9d..0000000000 --- a/.claude/worktrees/feat-7786/changelog.d/features/7786-management-auth-terminology-docs.md +++ /dev/null @@ -1 +0,0 @@ -- **docs:** add management authentication terminology guide ([#7786](https://github.com/diegosouzapw/OmniRoute/issues/7786)) diff --git a/.claude/worktrees/feat-7786/docs/guides/MANAGEMENT-AUTH.md b/.claude/worktrees/feat-7786/docs/guides/MANAGEMENT-AUTH.md deleted file mode 100644 index cc74622a5f..0000000000 --- a/.claude/worktrees/feat-7786/docs/guides/MANAGEMENT-AUTH.md +++ /dev/null @@ -1,41 +0,0 @@ -# Management Authentication - -OmniRoute uses four distinct credential families for management access. This guide -distinguishes them by purpose, scope, and locality. - -| Credential | Scope | Locality | Use Case | -|-------------------------|--------------------|---------------|-----------------------------------| -| Dashboard JWT session | Full management | Localhost | Web dashboard login | -| CLI machine-id token | Full management | Per-machine | `omniroute` CLI commands | -| Scoped `oma_` token | Configurable scope | External | Automation / CI / API access | -| Manage-scope API key | `manage` scope | External | Management API calls | - -## Dashboard JWT Session - -Generated on dashboard login (`/api/auth/login`). Stored in HTTP-only cookie. -Valid for the session duration. Cannot be used from external hosts. - -## CLI Machine-ID Token - -Created by `omniroute auth login` on first use. Stored in `~/.omniroute/auth.json`. -Used by the CLI for all management operations. Tied to the machine identity. - -## Scoped `oma_` Access Token - -Created via dashboard or CLI with configurable scopes (e.g., `manage`, `read`). -Format: `oma_`. Used for programmatic access from external systems. - -## Manage-Scope API Key - -Standard API key with the `manage` scope enabled. Created in dashboard API Keys page. -Used for management API calls from external hosts. - -## Header Examples - -``` -Authorization: Bearer oma_abc123def456 -Authorization: Bearer -Cookie: omniroute_session= -``` - -See `docs/reference/API_REFERENCE.md` for endpoint-specific auth requirements. diff --git a/.claude/worktrees/feat-7786/tests/unit/management-auth-docs.test.ts b/.claude/worktrees/feat-7786/tests/unit/management-auth-docs.test.ts deleted file mode 100644 index 35410e81c3..0000000000 --- a/.claude/worktrees/feat-7786/tests/unit/management-auth-docs.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { describe, it } from "node:test"; -import { ok } from "node:assert/strict"; -import { readFileSync } from "node:fs"; - -describe("Management auth documentation (#7786)", () => { - const docPath = "docs/guides/MANAGEMENT-AUTH.md"; - const content = readFileSync(docPath, "utf-8"); - - it("exists and has content", () => { - ok(content.length > 500, "should have substantial content"); - ok(content.includes("Dashboard JWT session")); - ok(content.includes("CLI machine-id token")); - ok(content.includes("oma_")); - }); - - it("documents all four credential families", () => { - const families = ["Dashboard JWT", "CLI machine-id", "oma_", "Manage-scope"]; - for (const f of families) { - ok(content.includes(f), `should document ${f}`); - } - }); - - it("mentions relevant auth header examples", () => { - ok(content.includes("Authorization")); - ok(content.includes("Bearer")); - }); -}); diff --git a/.claude/worktrees/feat-8635/changelog.d/features/8635-systemd-autostart-linux.md b/.claude/worktrees/feat-8635/changelog.d/features/8635-systemd-autostart-linux.md deleted file mode 100644 index 5388099604..0000000000 --- a/.claude/worktrees/feat-8635/changelog.d/features/8635-systemd-autostart-linux.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(infra):** add systemd autostart unit for Linux ([#8635](https://github.com/diegosouzapw/OmniRoute/issues/8635)) diff --git a/.claude/worktrees/feat-8635/contrib/systemd/omniroute.service b/.claude/worktrees/feat-8635/contrib/systemd/omniroute.service deleted file mode 100644 index c2dae17631..0000000000 --- a/.claude/worktrees/feat-8635/contrib/systemd/omniroute.service +++ /dev/null @@ -1,19 +0,0 @@ -[Unit] -Description=OmniRoute AI Proxy -After=network.target network-online.target -Wants=network-online.target - -[Service] -Type=simple -ExecStart=$(which omniroute) start -Restart=on-failure -RestartSec=5 -Environment=NODE_ENV=production - -# Security hardening -NoNewPrivileges=true -ProtectSystem=full -PrivateTmp=true - -[Install] -WantedBy=default.target diff --git a/.claude/worktrees/feat-8635/tests/unit/systemd-autostart.test.ts b/.claude/worktrees/feat-8635/tests/unit/systemd-autostart.test.ts deleted file mode 100644 index 0dca17303f..0000000000 --- a/.claude/worktrees/feat-8635/tests/unit/systemd-autostart.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { describe, it } from "node:test"; -import { ok } from "node:assert/strict"; -import { readFileSync, existsSync } from "node:fs"; - -describe("Systemd autostart (#8635)", () => { - const svcPath = "contrib/systemd/omniroute.service"; - const content = readFileSync(svcPath, "utf-8"); - - it("service file exists", () => { - ok(existsSync(svcPath)); - ok(content.length > 200); - }); - - it("defines required systemd sections", () => { - ok(content.includes("[Unit]")); - ok(content.includes("[Service]")); - ok(content.includes("[Install]")); - }); - - it("specifies WantedBy=default.target", () => { - ok(content.includes("WantedBy=default.target")); - }); -}); diff --git a/.dockerignore b/.dockerignore index be16eca2a2..70653bf14d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -53,8 +53,10 @@ reports/mutation # Local caches and quality-gate artifacts (all gitignored). `_*` does not match # dot-prefixed names, so these need explicit entries. .artifacts -.eslintcache -.eslintcache-complexity +.eslintcache* +.fakebin-* +MAX +quality-ratchet/ # Documentation # Issue #2348: The Dashboard Docs viewer reads markdown from `/app/docs` at diff --git a/.env.example b/.env.example index 5301a73185..f3ae64d57f 100644 --- a/.env.example +++ b/.env.example @@ -977,18 +977,17 @@ CODEX_OAUTH_CLIENT_ID=app_EMoamEEZ73f0CkXaXp7hrann # Used by: open-sse/executors/theoldllm.ts. Default: 30000 (30s). # THEOLDLLM_NAV_TIMEOUT_MS=30000 -# ── Gemini / Antigravity / Windsurf (all Google-based) ── -# These providers ship public OAuth client_id/secret values (or Firebase Web -# keys) embedded in their public CLIs/binaries. Defaults are baked into the -# code via open-sse/utils/publicCreds.ts — leave the env vars unset to use -# them. Only set these if you registered your own OAuth app and want to use -# your own credentials instead. See docs/security/PUBLIC_CREDS.md for context. +# ── Gemini / Antigravity (Google-based) ── +# These providers ship public OAuth client_id/secret values embedded in their +# public CLIs. Defaults are baked into the code via +# open-sse/utils/publicCreds.ts — leave the env vars unset to use them. Only +# set these if you registered your own OAuth app and want to use your own +# credentials instead. See docs/security/PUBLIC_CREDS.md for context. # # GEMINI_OAUTH_CLIENT_ID= # GEMINI_OAUTH_CLIENT_SECRET= # ANTIGRAVITY_OAUTH_CLIENT_ID= # ANTIGRAVITY_OAUTH_CLIENT_SECRET= -# WINDSURF_FIREBASE_API_KEY= # ── Kimi Coding (Moonshot) ── KIMI_CODING_OAUTH_CLIENT_ID=17e5f671-d194-4dfb-9706-5516cb48c098 @@ -2039,6 +2038,13 @@ APP_LOG_TO_FILE=true # DEVIN_BRIDGE_HAIKU_MODEL=devin-cli-agentic/swe-1-7 # DEVIN_BRIDGE_SUBAGENT_MODEL=devin-cli-agentic/swe-1-7 +# ── Devin Desktop upstream compatibility versions ── +# Desktop ide_version. Must use x.y.z format; invalid/unset values use 3.6.27. +# DEVIN_DESKTOP_VERSION=3.6.27 +# Bundled Codeium/language-server extension_version, distinct from Desktop. +# Must use x.y.z format; invalid/unset values use the bundled default 1.48.2. +# DEVIN_DESKTOP_EXTENSION_VERSION=1.48.2 + # ── Command Code (custom CLI) callback ── # Local port used for OAuth-style callbacks from the Command Code CLI helper. # Used by: src/app/api/providers/command-code/auth/shared.ts. @@ -2650,3 +2656,13 @@ QUOTA_STORE_DRIVER=sqlite # sqlite | redis # TELEGRAM_DEFAULT_MODEL=auto/chat # TELEGRAM_BOT_API_BASE=https://api.telegram.org # TELEGRAM_WEBHOOK_TIMEOUT_MS=60000 + +# ── OmniConductor bridge (Conductor PRD RF1) ────────────────────────────────── +# Mirrors the OmniConductor hub's tasks into the local A2A TaskManager via SSE. +# Opt-in: the bridge only starts when CONDUCTOR_HUB_URL is set. +# Token: emit a `spokesperson`-kind credential on the hub (POST /v1/peers, admin) — +# server-side only, never exposed to the browser. +# Used by: src/lib/conductor/boot.ts, src/lib/conductor/bridge.ts +# CONDUCTOR_HUB_URL=http://127.0.0.1:7910 +# CONDUCTOR_HUB_TOKEN= +feat/conductor-bridge diff --git a/.eslintcache-probe b/.eslintcache-probe deleted file mode 100644 index 9e65baabc5..0000000000 --- a/.eslintcache-probe +++ /dev/null @@ -1 +0,0 @@ -[{"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/src/index.ts":"1","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/src/logger.ts":"2","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/src/naming.ts":"3","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/auth.test.ts":"4","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/auto-combo-context.test.ts":"5","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/auto-sync.test.ts":"6","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/combos.test.ts":"7","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/config-shim.test.ts":"8","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/disk-snapshot-perms.test.ts":"9","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/feature-defaults.test.ts":"10","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/features.test.ts":"11","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/fetch-interceptor.test.ts":"12","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/fork-features.test.ts":"13","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/gemini-sanitize.test.ts":"14","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/management-read-token.test.ts":"15","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/model-allowlist.test.ts":"16","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/multi-instance.test.ts":"17","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/options-schema.test.ts":"18","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/provider-id-routing.test.ts":"19","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/provider.test.ts":"20","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/scaffold.test.ts":"21","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/usable-combo.test.ts":"22","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tsup.config.ts":"23","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-provider/src/index.ts":"24","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-provider/tests/index.test.ts":"25","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-provider/tsup.config.ts":"26","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/docker/devin-bridge/mock-devin.mjs":"27","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/docker/devin-bridge/network-guard/policy.mjs":"28","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/docker/devin-bridge/network-guard/proxy.mjs":"29","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/docker/devin-bridge/run-contract.mjs":"30","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/eslint.complexity-ratchets.config.mjs":"31","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/eslint.complexity.config.mjs":"32","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/eslint.config.mjs":"33","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/eslint.sonarjs.config.mjs":"34","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/examples/omniroute-cmd-hello/index.mjs":"35","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/examples/plugins/langfuse/index.mjs":"36","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/examples/plugins/request-logger/index.mjs":"37","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/examples/plugins/theme-manager/index.mjs":"38","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/examples/plugins/welcome-banner/index.mjs":"39","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/next.config.mjs":"40","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/agyModels.ts":"41","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/anthropicHeaders.ts":"42","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/antigravityModelAliases.ts":"43","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/antigravityUpstream.ts":"44","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/audioRegistry.ts":"45","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/azureAi.ts":"46","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/bedrock.ts":"47","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/claudeCodeCompatibleIdentity.ts":"48","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/claudeWebFingerprint.ts":"49","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/cliFingerprints.ts":"50","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/codexClient.ts":"51","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/codexIdentity.ts":"52","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/codexInstructions.ts":"53","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/codexQuotaScopes.ts":"54","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/constants.ts":"55","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/contextEditing.ts":"56","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/credentialLoader.ts":"57","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/datarobot.ts":"58","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/defaultThinkingSignature.ts":"59","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/embeddingRegistry.ts":"60","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/errorConfig.ts":"61","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/freeModelCatalog.data.ts":"62","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/freeModelCatalog.ts":"63","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/freeTierCatalog.ts":"64","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/glmProvider.ts":"65","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/grokBuild.ts":"66","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/imageRegistry.ts":"67","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/maritalk.ts":"68","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/mediaServiceKinds.ts":"69","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/moderationRegistry.ts":"70","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/musicRegistry.ts":"71","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/oci.ts":"72","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/ocrRegistry.ts":"73","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/ollamaModels.ts":"74","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerErrorRules.ts":"75","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerFieldStrips.ts":"76","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerHeaderProfiles.ts":"77","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerModels.ts":"78","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerPluginManifest.ts":"79","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerPluginManifestRegistry.ts":"80","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerPluginManifestUrl.ts":"81","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerRegistry.ts":"82","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/alternateFormats.ts":"83","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/index.ts":"84","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/adapta-web/index.ts":"85","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/agentrouter/index.ts":"86","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/agnes/index.ts":"87","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/agy/index.ts":"88","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/ai21/index.ts":"89","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/aihorde/index.ts":"90","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/aimlapi/index.ts":"91","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/ainative/index.ts":"92","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/aion/index.ts":"93","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/alibaba/cn/index.ts":"94","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/alibaba/index.ts":"95","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/ant-ling/index.ts":"96","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/anthropic/index.ts":"97","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/antigravity/index.ts":"98","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/anyapi/index.ts":"99","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/api-airforce/index.ts":"100","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/auggie/index.ts":"101","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/bai/index.ts":"102","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/baichuan/index.ts":"103","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/baidu/index.ts":"104","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/bailian-coding-plan/index.ts":"105","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/baseten/index.ts":"106","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/bazaarlink/index.ts":"107","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/bedrock/index.ts":"108","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/blackbox/index.ts":"109","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/blackbox/web/index.ts":"110","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/bluesminds/index.ts":"111","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/byteplus/index.ts":"112","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/bytez/index.ts":"113","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/cerebras/index.ts":"114","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/charm-hyper/index.ts":"115","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/chatgpt-web/index.ts":"116","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/cheaperinference/imageModels.ts":"117","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/cheaperinference/index.ts":"118","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/chenzk/index.ts":"119","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/chipotle/index.ts":"120","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/chutes/index.ts":"121","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/claude/index.ts":"122","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/claude/web/index.ts":"123","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/cline/index.ts":"124","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/clinepass/index.ts":"125","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/cloudflare-ai/index.ts":"126","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/clova-studio/index.ts":"127","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/codebuddy-cn/index.ts":"128","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/codestral/index.ts":"129","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/codex/index.ts":"130","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/cohere/index.ts":"131","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/command-code/index.ts":"132","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/copilot-m365-web/index.ts":"133","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/copilot-web/index.ts":"134","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/coze/index.ts":"135","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/crof/index.ts":"136","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/cursor/index.ts":"137","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/dahl/index.ts":"138","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/databricks/index.ts":"139","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/deepinfra/index.ts":"140","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/deepseek/index.ts":"141","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/deepseek/web/index.ts":"142","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/devin/catalog.ts":"143","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/devin-cli/index.ts":"144","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/devin-cli-agentic/index.ts":"145","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/dgrid/index.ts":"146","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/dify/index.ts":"147","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/digitalocean/index.ts":"148","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/dit/index.ts":"149","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/doubao/index.ts":"150","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/doubao/web/index.ts":"151","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/duckduckgo-web/index.ts":"152","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/electronhub/index.ts":"153","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/factory/index.ts":"154","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/fastrouter/index.ts":"155","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/featherless-ai/index.ts":"156","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/felo-web/index.ts":"157","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/fireworks/index.ts":"158","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/freeaiapikey/index.ts":"159","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/freemodel-dev/index.ts":"160","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/freepik/index.ts":"161","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/freetheai/index.ts":"162","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/friendliai/index.ts":"163","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/g4f-gemini/index.ts":"164","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/g4f-groq/index.ts":"165","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/g4f-nvidia/index.ts":"166","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/g4f-ollama/index.ts":"167","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/g4f-pollinations/index.ts":"168","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/galadriel/index.ts":"169","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/gemini/imageModels.ts":"170","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/gemini/index.ts":"171","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/gemini/web/index.ts":"172","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/ghe-copilot/index.ts":"173","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/gigachat/index.ts":"174","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/github/index.ts":"175","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/github/models/index.ts":"176","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/github/retiredModels.ts":"177","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/gitlab-duo/index.ts":"178","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/gitlawb/gmi/index.ts":"179","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/gitlawb/index.ts":"180","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/glm/cn/index.ts":"181","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/glm/index.ts":"182","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/glm/t/index.ts":"183","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/grok-cli/index.ts":"184","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/grok-web/index.ts":"185","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/groq/index.ts":"186","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/hackclub/index.ts":"187","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/haiper/index.ts":"188","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/hcnsec/index.ts":"189","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/heroku/index.ts":"190","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/huggingchat/index.ts":"191","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/huggingface/index.ts":"192","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/hyperagent/index.ts":"193","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/hyperbolic/index.ts":"194","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/ideogram/index.ts":"195","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/iflytek/index.ts":"196","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/inception/index.ts":"197","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/inference-net/index.ts":"198","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/inner-ai/index.ts":"199","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/internlm/index.ts":"200","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kenari/index.ts":"201","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kie/imageModels.ts":"202","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kie/index.ts":"203","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kie/models.ts":"204","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kilo-gateway/index.ts":"205","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kilocode/index.ts":"206","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kimi/coding/index.ts":"207","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kimi/coding/runtime.ts":"208","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kimi/coding-apikey/index.ts":"209","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kimi/index.ts":"210","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kimi/web/index.ts":"211","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kimi/web/runtime.ts":"212","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kiro/index.ts":"213","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/lambda-ai/index.ts":"214","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/leonardo/index.ts":"215","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/liquid/index.ts":"216","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/llamagate/index.ts":"217","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/llm-kiwi/index.ts":"218","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/llm7/index.ts":"219","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/llmgateway/index.ts":"220","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/lmarena/directModels.ts":"221","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/lmarena/index.ts":"222","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/longcat/index.ts":"223","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/maritalk/index.ts":"224","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/meta-llama/index.ts":"225","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/mimocode/index.ts":"226","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/minimax/cn/index.ts":"227","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/minimax/index.ts":"228","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/minimax/web/index.ts":"229","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/mistral/index.ts":"230","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/modal/index.ts":"231","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/modelscope/index.ts":"232","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/monsterapi/index.ts":"233","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/moonshot/index.ts":"234","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/morph/index.ts":"235","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/muse-spark-web/index.ts":"236","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nanogpt/index.ts":"237","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nara/index.ts":"238","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/navy/index.ts":"239","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nebius/index.ts":"240","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nlpcloud/index.ts":"241","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/notion-web/index.ts":"242","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nous-research/index.ts":"243","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/novita/index.ts":"244","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nscale/index.ts":"245","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nube/index.ts":"246","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nvidia/index.ts":"247","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/ollama-cloud/index.ts":"248","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/openadapter/index.ts":"249","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/openai/index.ts":"250","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/opencode/go/index.ts":"251","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/opencode/index.ts":"252","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/opencode/zen/index.ts":"253","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/openrouter/index.ts":"254","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/openvecta/index.ts":"255","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/orcarouter/index.ts":"256","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/ovhcloud/index.ts":"257","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/perplexity/index.ts":"258","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/perplexity/web/index.ts":"259","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/pioneer/index.ts":"260","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/plamo/index.ts":"261","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/poe/index.ts":"262","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/pollinations/index.ts":"263","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/predibase/index.ts":"264","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/promptql/index.ts":"265","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/publicai/index.ts":"266","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/puter/index.ts":"267","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/qianfan/index.ts":"268","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/qiniu/index.ts":"269","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/qoder/index.ts":"270","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/qwen/web/index.ts":"271","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/qwen-cloud/index.ts":"272","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/qwen-cloud-token-plan/index.ts":"273","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/raycast/index.ts":"274","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/regolo/index.ts":"275","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/reka/index.ts":"276","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/requesty/index.ts":"277","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/routeway/index.ts":"278","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/sambanova/index.ts":"279","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/sarvam/index.ts":"280","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/scaleway/index.ts":"281","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/sealion/index.ts":"282","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/segmind/imageModels.ts":"283","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/segmind/videoModels.ts":"284","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/sensenova/index.ts":"285","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/siliconflow/index.ts":"286","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/snowflake/index.ts":"287","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/sparkdesk/index.ts":"288","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/stability-ai/imageModels.ts":"289","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/stepfun/index.ts":"290","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/sumopod/index.ts":"291","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/suno/index.ts":"292","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/synthetic/index.ts":"293","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/t3-web/index.ts":"294","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/tencent/index.ts":"295","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/theoldllm/index.ts":"296","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/together/index.ts":"297","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/tokenrouter/index.ts":"298","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/trae/index.ts":"299","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/typhoon/index.ts":"300","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/udio/index.ts":"301","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/uncloseai/index.ts":"302","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/unorouter/index.ts":"303","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/upstage/index.ts":"304","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/v0-vercel/index.ts":"305","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/venice/index.ts":"306","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/veoaifree-web/index.ts":"307","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/vercel-ai-gateway/index.ts":"308","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/vertex/index.ts":"309","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/vertex/partner/index.ts":"310","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/volcengine/index.ts":"311","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/wafer/index.ts":"312","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/wandb/index.ts":"313","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/windsurf/index.ts":"314","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/writer/index.ts":"315","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/x5lab/index.ts":"316","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/xai/index.ts":"317","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/xai-oauth/index.ts":"318","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/xiaomi-mimo/index.ts":"319","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/xiaomi-mimo-token-plan/index.ts":"320","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/yi/index.ts":"321","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/yuanbao-web/index.ts":"322","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/zai/index.ts":"323","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/zai-web/index.ts":"324","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/zed-hosted/index.ts":"325","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/zenmux/index.ts":"326","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/zenmux-free/index.ts":"327","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/shared.ts":"328","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/registryUtils.ts":"329","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/rerankRegistry.ts":"330","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/runway.ts":"331","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/sap.ts":"332","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/searchRegistry.ts":"333","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/toolCloaking.ts":"334","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/upscaleRegistry.ts":"335","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/videoRegistry.ts":"336","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/watsonx.ts":"337","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/adapta-web.ts":"338","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/adobe-firefly.ts":"339","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/antigravity/executeAttempt.ts":"340","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/antigravity/proFallbackChain.ts":"341","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/antigravity/sseCollect.ts":"342","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/antigravity/streamingPassthrough.ts":"343","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/antigravity.ts":"344","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/antigravityUpstreamError.ts":"345","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/auggie.ts":"346","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/awsPollyTts.ts":"347","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/azure-openai.ts":"348","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/base/headers.ts":"349","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/base/reasoningEffort.ts":"350","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/base.ts":"351","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/bedrock.ts":"352","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/blackbox-web.ts":"353","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/chatgpt-web/citations.ts":"354","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/chatgpt-web/handoff.ts":"355","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/chatgpt-web/models.ts":"356","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/chatgpt-web.ts":"357","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/chatgptWebErrors.ts":"358","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/chatgptWebTools.ts":"359","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/cheaperinference.ts":"360","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/chipotle.ts":"361","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/claude-web/browserTransport.ts":"362","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/claude-web/payload.ts":"363","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/claude-web/session.ts":"364","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/claude-web/stream.ts":"365","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/claude-web/transport.ts":"366","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/claude-web.ts":"367","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/claudeIdentity.ts":"368","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/cliproxyapi.ts":"369","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/cloudflare-ai.ts":"370","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/codebuddy-cn.ts":"371","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/codex/bodyTimeout.ts":"372","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/codex/quota.ts":"373","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/codex/reasoningSuffix.ts":"374","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/codex/tools.ts":"375","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/codex.ts":"376","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/commandCode.ts":"377","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/copilot-m365-connection.ts":"378","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/copilot-m365-frames.ts":"379","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/copilot-m365-web.ts":"380","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/copilot-web.ts":"381","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/cursor/builtinToolBridge.ts":"382","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/cursor/composer.ts":"383","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/cursor/prompt.ts":"384","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/cursor.ts":"385","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/dario.ts":"386","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/deepseek-web/stream-format.ts":"387","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/deepseek-web-done-terminator.ts":"388","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/deepseek-web-with-auto-refresh.ts":"389","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/deepseek-web.ts":"390","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/default/nvidiaConcurrencyGate.ts":"391","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/default/urlNormalizers.ts":"392","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/default/zaiFormatOverride.ts":"393","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/default.ts":"394","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/devin-agentic/anthropicResponse.ts":"395","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/devin-agentic/serializer.ts":"396","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/devin-agentic/toolParser.ts":"397","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/devin-agentic/types.ts":"398","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/devin-cli-agentic.ts":"399","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/devin-cli.ts":"400","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/doubao-web.ts":"401","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/duckduckgo-web/challenge.ts":"402","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/duckduckgo-web.ts":"403","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/edgeTts.ts":"404","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/felo-web.ts":"405","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/firecrawl-fetch.ts":"406","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/forceResponsesUpstream.ts":"407","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/gemini-business.ts":"408","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/gemini-web.ts":"409","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/ghe-copilot.ts":"410","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/github.ts":"411","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/gitlab.ts":"412","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/gitlabResponses.ts":"413","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/glm.ts":"414","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/grok-cli.ts":"415","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/grok-web/native-tools.ts":"416","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/grok-web/text-cleanup.ts":"417","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/grok-web/tool-bridge.ts":"418","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/grok-web/types.ts":"419","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/grok-web.ts":"420","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/gtts.ts":"421","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/hailuo-web.ts":"422","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/huggingchat/jsonlStream.ts":"423","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/huggingchat.ts":"424","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/hyperagent.ts":"425","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/index.ts":"426","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/inner-ai.ts":"427","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/jina-reader-fetch.ts":"428","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kie.ts":"429","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kimi-web.ts":"430","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kimi.ts":"431","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kimiToolNames.ts":"432","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kiro/eventstream.ts":"433","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kiro.ts":"434","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kiroThinking.ts":"435","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kiroToolCallValidation.ts":"436","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/lmarena/cookie.ts":"437","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/lmarena/models.ts":"438","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/lmarena/response.ts":"439","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/lmarena/stream.ts":"440","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/lmarena.ts":"441","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/microsoft-designer-web.ts":"442","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/mimocode.ts":"443","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/moonshot.ts":"444","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/muse-spark-web/response-parser.ts":"445","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/muse-spark-web.ts":"446","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/ninerouter.ts":"447","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/nlpcloud.ts":"448","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/notion-web.ts":"449","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/opencode.ts":"450","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/perplexity-web/protocol.ts":"451","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/perplexity-web.ts":"452","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/poe-web.ts":"453","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/pollinations.ts":"454","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/promptql/eventTree.ts":"455","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/promptql/messageText.ts":"456","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/promptql/threadSticky.ts":"457","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/promptql.ts":"458","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/puter.ts":"459","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/qoder.ts":"460","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/qwen-web.ts":"461","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/raycast.ts":"462","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/t3-chat-web.ts":"463","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/tavily-fetch.ts":"464","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/theoldllm.ts":"465","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/tinyfish-fetch.ts":"466","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/trae.ts":"467","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/v0-vercel-web.ts":"468","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/venice-web.ts":"469","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/veoaifree-web.ts":"470","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/vertex.ts":"471","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/vertexMedia.ts":"472","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/windsurf.ts":"473","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/xai.ts":"474","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/yuanbao-web.ts":"475","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/zai-web.ts":"476","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/zed-hosted.ts":"477","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/zenmux-free.ts":"478","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/audioSpeech.ts":"479","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/audioTranscription.ts":"480","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/audioTranslation.ts":"481","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/autoComboCandidates.ts":"482","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/agentRouterProtocol.ts":"483","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/attemptLogging.ts":"484","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/backgroundRedirect.ts":"485","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/cacheUsageMeta.ts":"486","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/cavemanOutputAnalytics.ts":"487","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/ccDiscoveryAliasStrip.ts":"488","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/claudeClassifierCompat.ts":"489","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/claudeEffortVariant.ts":"490","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/claudeMessageTypes.ts":"491","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/claudeSystemRole.ts":"492","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/claudeToolDefaults.ts":"493","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/claudeUpstreamMessages.ts":"494","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/clientUsageBuffer.ts":"495","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/clineResponseEnvelope.ts":"496","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/cliproxyModelMapping.ts":"497","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/cliproxyapiCredentials.ts":"498","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/codexFailover.ts":"499","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/codexQuota.ts":"500","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/comboContextCache.ts":"501","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/compressionAnalyticsWrite.ts":"502","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/compressionCacheStats.ts":"503","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/compressionComboPredicates.ts":"504","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/compressionSettings.ts":"505","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/compressionUsageReceipt.ts":"506","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/contextEditingTelemetry.ts":"507","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/contextEstimation.ts":"508","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/cooldownClassification.ts":"509","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/executionCredentials.ts":"510","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/executorClientHeaders.ts":"511","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/executorHelpers.ts":"512","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/executorProxy.ts":"513","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/failureUsage.ts":"514","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/gamificationEvent.ts":"515","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/headers.ts":"516","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/idempotency.ts":"517","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/jsonBodyToSse.ts":"518","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/keyHealth.ts":"519","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/logTruncation.ts":"520","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/memoryExtraction.ts":"521","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/memorySkillsInjection.ts":"522","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/nonStreamingJsonResponse.ts":"523","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/nonStreamingResponseBody.ts":"524","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/nonStreamingResponseHeaders.ts":"525","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/nonStreamingResponseParse.ts":"526","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/nonStreamingSse.ts":"527","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/nonStreamingUsageStats.ts":"528","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/outputStyleTelemetry.ts":"529","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/outputTokenBudget.ts":"530","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/passthroughHelpers.ts":"531","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/passthroughToolNames.ts":"532","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/pluginOnRequest.ts":"533","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/pluginOnResponse.ts":"534","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/postCallGuardrailContext.ts":"535","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/quotaShareConsumption.ts":"536","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/requestFormat.ts":"537","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/requestSetup.ts":"538","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/responseHeaders.ts":"539","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/sanitization.ts":"540","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/semanticCache.ts":"541","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/semanticCacheStore.ts":"542","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/serviceTier.ts":"543","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/skillsFormat.ts":"544","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/stageTrace.ts":"545","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamErrorResult.ts":"546","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamFinalize.ts":"547","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamingCost.ts":"548","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamingPipeline.ts":"549","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamingQuotaShare.ts":"550","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamingResponseHeaders.ts":"551","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamingSemanticCacheStore.ts":"552","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamingUsageStats.ts":"553","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/targetFormat.ts":"554","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/telemetryHelpers.ts":"555","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/thinkingSignatureRecovery.ts":"556","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/toolCallingRequiredCheck.ts":"557","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/unsupportedParamsStrip.ts":"558","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/upstreamBody.ts":"559","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/upstreamExecuteHeaders.ts":"560","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/upstreamTimeouts.ts":"561","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore.ts":"562","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/embeddingStructuredInput.ts":"563","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/embeddings.ts":"564","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/pollinationsAnonAuth.ts":"565","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/adobeFirefly.ts":"566","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/alibabaImage.ts":"567","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/chatgptWeb.ts":"568","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/comfyUI.ts":"569","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/designerWeb.ts":"570","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/freepik.ts":"571","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/googleImagen.ts":"572","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/haiper.ts":"573","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/huggingface.ts":"574","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/hyperbolic.ts":"575","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/ideogram.ts":"576","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/imagen3.ts":"577","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/leonardo.ts":"578","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/minimax.ts":"579","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/nvidiaNim.ts":"580","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/sdWebUI.ts":"581","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/segmind.ts":"582","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration.ts":"583","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageUpscale/adobeFirefly.ts":"584","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageUpscale/shared.ts":"585","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageUpscale/stability.ts":"586","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageUpscale/topaz.ts":"587","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageUpscale.ts":"588","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/moderations.ts":"589","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/musicGeneration.ts":"590","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/ocr.ts":"591","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/openrouterTranscription.ts":"592","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/rerank.ts":"593","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/responseSanitizer/reasoning.ts":"594","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/responseSanitizer.ts":"595","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/responseTranslator.ts":"596","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/responsesHandler.ts":"597","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/search/firecrawlSearch.ts":"598","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/search/perplexitySearch.ts":"599","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/search.ts":"600","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/sseParser/geminiResponse.ts":"601","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/sseParser.ts":"602","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/usageExtractor.ts":"603","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/adobeFireflyHandler.ts":"604","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/dashscopeHandler.ts":"605","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/deepinfraHandler.ts":"606","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/googleFlow.ts":"607","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/googleFlowHandler.ts":"608","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/leonardoHandler.ts":"609","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/novita.ts":"610","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/novitaHandler.ts":"611","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/providers/segmind.ts":"612","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/xaiGrokImagineHandler.ts":"613","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration.ts":"614","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/webFetch.ts":"615","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/index.ts":"616","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/lib/deepseek-pow-solver.cjs":"617","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/lib/deepseek-pow.ts":"618","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/a2aLifecycle.test.ts":"619","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/advancedTools.test.ts":"620","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/audit.test.ts":"621","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/cacheTools.test.ts":"622","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/createComboTool.test.ts":"623","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/dbHealthTool.test.ts":"624","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/essentialTools.test.ts":"625","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/glmCodingProviderConfig.test.ts":"626","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/httpAuthContext.test.ts":"627","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/pricingSync.test.ts":"628","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/routingStrategyTool.test.ts":"629","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/toolSearch.catalog.test.ts":"630","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/toolSearch.search.test.ts":"631","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/toolSearch.signature.test.ts":"632","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/toolSearch.tool.test.ts":"633","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/audit.ts":"634","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/catalog.ts":"635","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/descriptionCompressor.ts":"636","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/httpAuthContext.ts":"637","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/httpTransport.ts":"638","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/index.ts":"639","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/mcpCallerIdentity.ts":"640","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/runtimeHeartbeat.ts":"641","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/a2a.ts":"642","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/audit.ts":"643","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/ccrTools.ts":"644","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/index.ts":"645","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/pickFastestModel.ts":"646","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/toolDefinition.ts":"647","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/toolSearch.ts":"648","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/tools.ts":"649","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/scopeEnforcement.ts":"650","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/server.ts":"651","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolCardinality.ts":"652","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolCount.ts":"653","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolSearch/catalog.ts":"654","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolSearch/handler.ts":"655","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolSearch/index.ts":"656","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolSearch/register.ts":"657","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolSearch/search.ts":"658","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolSearch/signature.ts":"659","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/advancedTools.ts":"660","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/agentSkillTools.ts":"661","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/compressionTools.ts":"662","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/gamificationTools.ts":"663","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/githubSkillTools.ts":"664","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/localCorpusTools.ts":"665","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/memoryTools.ts":"666","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/notionTools.ts":"667","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/obsidianTools.ts":"668","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/pickFastestModel.ts":"669","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/pluginTools.ts":"670","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/poolTools.ts":"671","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/skillTools.ts":"672","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/antigravity-quota-family.test.ts":"673","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/chatgptTlsClient.test.ts":"674","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/claudeTlsClient.test.ts":"675","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/fail-fast-concurrency-gate.test.ts":"676","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/grokTlsClient.test.ts":"677","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/manifestAdapter.test.ts":"678","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/specificityDetector.test.ts":"679","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/tierResolver.test.ts":"680","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/volumeDetector.test.ts":"681","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/accountFallback/cooldownCap.ts":"682","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/accountFallback/exactModelLock.ts":"683","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/accountFallback/lockoutEviction.ts":"684","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/accountFallback/nonRetryableUpstream.ts":"685","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/accountFallback.ts":"686","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/accountSelector.ts":"687","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/accountSemaphore.ts":"688","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/adaptation.ts":"689","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/config.ts":"690","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/controller.ts":"691","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/cost.ts":"692","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/index.ts":"693","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/queue.ts":"694","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/requestFeatures.ts":"695","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/runtime.ts":"696","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/types.ts":"697","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/adobeFireflyBrowserLogin.ts":"698","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/adobeFireflyClient.ts":"699","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/adobeFireflyModels.ts":"700","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/adobeFireflyUpscale.ts":"701","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/agentrouterQuotaFetcher.ts":"702","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravity429Engine.ts":"703","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityClientProfile.ts":"704","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityCredits.ts":"705","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityHeaderScrub.ts":"706","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityHeaders.ts":"707","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityIdentity.ts":"708","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityProjectBootstrap.ts":"709","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityProjectPersist.ts":"710","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityQuotaFamily.ts":"711","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityVersion.ts":"712","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/apiKeyRotator.ts":"713","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/__tests__/autoCombo.test.ts":"714","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/__tests__/chaosEngine.test.ts":"715","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/__tests__/chaosVirtualCombo.test.ts":"716","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/__tests__/providerDiversity.test.ts":"717","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/__tests__/speedRanking.test.ts":"718","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/__tests__/taskFitness-pattern-order-8603.test.ts":"719","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/autoPrefix.ts":"720","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/builtinCatalog.ts":"721","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/candidateOverrides.ts":"722","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/chaosEngine.ts":"723","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/complexityRouter.ts":"724","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/engine.ts":"725","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/index.ts":"726","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/modePacks.ts":"727","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/modelFamily.ts":"728","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/paidModelFilter.ts":"729","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/persistence.ts":"730","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/pipelineRouter.ts":"731","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/providerDiversity.ts":"732","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/providerRegistryAccessor.ts":"733","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/requestControls.ts":"734","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/resilienceCandidateFilter.ts":"735","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/routerStrategy.ts":"736","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/scoring.ts":"737","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/selfHealing.ts":"738","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/speedRanking.ts":"739","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/suffixComposition.ts":"740","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/taskFitness.ts":"741","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/virtualFactory.ts":"742","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoRefreshDaemon.ts":"743","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/backgroundTaskDetector.ts":"744","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/bailianQuotaFetcher.ts":"745","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/batchProcessor.ts":"746","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/bedrock.ts":"747","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/browserBackedChat.ts":"748","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/browserPool.ts":"749","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/ccBridgeTransforms.ts":"750","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/ccOpenAiMediaBlocks.ts":"751","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/ccWireImageBuiltins.ts":"752","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/chatgptImageCache.ts":"753","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/chatgptTlsClient.ts":"754","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeAdaptiveThinking.ts":"755","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeCCH.ts":"756","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeCompatible.ts":"757","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeCompatibleBeta.ts":"758","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeCompatibleThinkingDisplay.ts":"759","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeConstraints.ts":"760","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeExtraRemap.ts":"761","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeFingerprint.ts":"762","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeObfuscation.ts":"763","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeToolRemapper.ts":"764","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeHaikuConstraints.ts":"765","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeTlsClient.ts":"766","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeTurnstileSolver.ts":"767","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeUsageCooldown.ts":"768","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeWebAutoRefresh.ts":"769","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/clinepassModels.ts":"770","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/cloudCodeHeaders.ts":"771","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/cloudCodeThinking.ts":"772","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/codeAssistSubscription.ts":"773","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/codexQuotaFetcher.ts":"774","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/codexUsageQuotas.ts":"775","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/codexVerbosity.ts":"776","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/applyStrategyOrdering.ts":"777","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/autoConfig.ts":"778","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/autoStrategy.ts":"779","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/comboCompatFallback.ts":"780","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/comboCooldownRetry.ts":"781","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/comboData.ts":"782","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/comboPredicates.ts":"783","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/comboSetup.ts":"784","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/comboStructure.ts":"785","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/comboVisibility.ts":"786","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/concurrencyCaps.ts":"787","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/context.ts":"788","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/contextOverrideGate.ts":"789","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/contextRequirements.ts":"790","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/dispatchPrelude.ts":"791","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/failureTracker.ts":"792","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/fingerprintExpansion.ts":"793","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/fusionPanel.ts":"794","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/headroomRanking.ts":"795","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/knownContextOverflow.ts":"796","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/pinRecovery.ts":"797","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/promptCacheAffinity.ts":"798","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/providerWildcard.ts":"799","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/quotaExhaustionCutoff.ts":"800","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/quotaScoring.ts":"801","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/quotaShareConcurrency.ts":"802","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/quotaShareInflight.ts":"803","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/quotaShareStrategy.ts":"804","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/quotaStrategies.ts":"805","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/resolveAutoStrategy.ts":"806","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/responseValidation.ts":"807","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/rrState.ts":"808","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/runtimeUnitCapacity.ts":"809","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/runtimeUnits.ts":"810","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/sessionStickiness.ts":"811","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/shadowRouting.ts":"812","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/strategyDispatch.ts":"813","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/targetExhaustion.ts":"814","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/targetResolution.ts":"815","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/targetSorters.ts":"816","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/targetTimeoutRunner.ts":"817","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/types.ts":"818","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/unavailableRetryGate.ts":"819","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/validateQuality.ts":"820","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo.ts":"821","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/comboAgentMiddleware.ts":"822","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/comboConfig.ts":"823","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/comboManifestMetrics.ts":"824","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/comboMetrics.ts":"825","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/adaptiveCompression/computeTarget.ts":"826","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/adaptiveCompression/ladder.ts":"827","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/adaptiveCompression/resolveAdaptivePlan.ts":"828","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/adaptiveCompression/types.ts":"829","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/aggressive.ts":"830","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/bodyAdapter.ts":"831","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/cacheAwareConfig.ts":"832","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/cachingAware.ts":"833","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/caveman.ts":"834","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/cavemanRules.ts":"835","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/deriveDefaultPlan.ts":"836","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/diffHelper.ts":"837","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engineBreakdown.ts":"838","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engineCatalog.ts":"839","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/cavemanAdapter.ts":"840","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/ccr/ccrQuery.ts":"841","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/ccr/index.ts":"842","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/ccr/protocolInstruction.ts":"843","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/codexResponses/index.ts":"844","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/encoderComparison.ts":"845","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/gcf/decode_generic.ts":"846","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/gcf/generic.ts":"847","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/gcf/index.ts":"848","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/gcf/scalar.ts":"849","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/index.ts":"850","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/smartcrusher.ts":"851","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/tabular.ts":"852","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/toon.ts":"853","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/index.ts":"854","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/ionizer/index.ts":"855","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/ionizer/sample.ts":"856","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/llm/index.ts":"857","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/llmlingua/constants.ts":"858","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/llmlingua/index.ts":"859","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/llmlingua/modelStore.ts":"860","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/llmlingua/onnxWorker.ts":"861","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/llmlingua/ultraEntry.ts":"862","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/llmlingua/worker.ts":"863","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/mcpAccessibility/collapseRepeated.ts":"864","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/mcpAccessibility/constants.ts":"865","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/mcpAccessibility/index.ts":"866","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/omniglyphAdapter.ts":"867","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/omniglyphSingleMode.ts":"868","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/readLifecycle/index.ts":"869","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/registry.ts":"870","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/relevance/configSchema.ts":"871","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/relevance/index.ts":"872","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/relevance/scorer.ts":"873","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/codeStripper.ts":"874","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/commandDetector.ts":"875","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/configSchema.ts":"876","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/deduplicator.ts":"877","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/discover.ts":"878","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/filterLoader.ts":"879","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/filterSchema.ts":"880","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/grouper.ts":"881","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/index.ts":"882","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/learn.ts":"883","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/lineFilter.ts":"884","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/rawOutput.ts":"885","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/renderers/gitDiff.ts":"886","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/renderers/index.ts":"887","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/renderers/structuredTable.ts":"888","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/renderers/terraformPlan.ts":"889","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/renderers/testGreen.ts":"890","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/renderers/types.ts":"891","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/smartTruncate.ts":"892","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/splitCompositeCommand.ts":"893","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/tomlCompatibility.ts":"894","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/verify.ts":"895","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/session-dedup/fuzzy.ts":"896","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/session-dedup/index.ts":"897","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/types.ts":"898","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/entrypointWrap.ts":"899","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/aggregate.ts":"900","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/corpus.ts":"901","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/costMeter.ts":"902","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/executorModelClient.ts":"903","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/fidelityCheck.ts":"904","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/grader.ts":"905","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/judge.ts":"906","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/report.ts":"907","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/runner.ts":"908","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/savings.ts":"909","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/seedCorpus.ts":"910","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/types.ts":"911","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/exclusions.ts":"912","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/fidelityGate.ts":"913","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/fidelityGateStep.ts":"914","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/hardBudget.ts":"915","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/harness/benchmark.ts":"916","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/harness/budgetGate.ts":"917","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/harness/index.ts":"918","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/harness/measure.ts":"919","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/harness/replay.ts":"920","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/harness/runner.ts":"921","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/index.ts":"922","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/languageDetector.ts":"923","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/lite.ts":"924","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/liveZone.ts":"925","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/messageContent.ts":"926","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/outputMode.ts":"927","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/outputStyles/apply.ts":"928","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/outputStyles/backCompat.ts":"929","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/outputStyles/catalog.ts":"930","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/outputStyles/telemetry.ts":"931","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/pipelineEngineBreaker.ts":"932","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/pipelineGuards.ts":"933","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/planResolution.ts":"934","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/prefixFreeze.ts":"935","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/preservation.ts":"936","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/preserveSystemPromptMode.ts":"937","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/progressiveAging.ts":"938","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/quantumLock/index.ts":"939","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/quantumLock/quantumLock.ts":"940","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/quantumLock/quantumLockStep.ts":"941","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/quantumLock/quantumPatterns.ts":"942","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/quantumLock/strategyWrap.ts":"943","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/resolveCompressionPlan.ts":"944","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/resultMemo.ts":"945","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/riskGate/index.ts":"946","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/riskGate/riskGate.ts":"947","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/riskGate/riskGateStep.ts":"948","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/riskGate/riskPatterns.ts":"949","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/riskGate/strategyWrap.ts":"950","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/ruleLoader.ts":"951","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/stackedStepCore.ts":"952","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/stats.ts":"953","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/stepDetailConfig.ts":"954","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/strategySelector.ts":"955","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/summarizer.ts":"956","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/toolResultCompressor.ts":"957","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/types.ts":"958","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/ultra.ts":"959","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/ultraHeuristic.ts":"960","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/validation.ts":"961","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/contextHandoff.ts":"962","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/contextManager.ts":"963","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/credentialGate.ts":"964","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/crofUsageFetcher.ts":"965","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/cursorSessionManager.ts":"966","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/deepseekQuotaFetcher.ts":"967","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/defaultReasoningEffort.ts":"968","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/deviceTracker.ts":"969","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/emergencyFallback.ts":"970","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/errorClassifier.ts":"971","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/evalRouting.ts":"972","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/firecrawlQuotaFetcher.ts":"973","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/freeModelQuotaFetcher.ts":"974","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/freeWebSearch.ts":"975","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/fusion.ts":"976","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/geminiRateLimitTracker.ts":"977","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/geminiThoughtSignatureStore.ts":"978","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/genericQuotaFetcher.ts":"979","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/gigachatAuth.ts":"980","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/githubCopilotModels.ts":"981","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/gpt5SamplingGuard.ts":"982","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/grokClearance.ts":"983","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/grokCliQuotaFetcher.ts":"984","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/grokCliQuotaFrame.ts":"985","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/grokQuotaFetcher.ts":"986","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/grokTlsClient.ts":"987","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/hfModelSuggestions.ts":"988","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/httpBackedChatFingerprint.ts":"989","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/hyperagentModels.ts":"990","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/inAppLoginService.ts":"991","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/intentClassifier.ts":"992","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/ipFilter.ts":"993","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/keyGroupAuth.ts":"994","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/kiroExternalIdp.ts":"995","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/kiroModels.ts":"996","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/kiroRegion.ts":"997","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/learnedThinkingCaps.ts":"998","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/lmarenaTlsClient.ts":"999","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/manifestAdapter.ts":"1000","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/mimoThinking.ts":"1001","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/model.ts":"1002","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/modelCapabilities.ts":"1003","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/modelDeprecation.ts":"1004","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/modelFamilyFallback.ts":"1005","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/modelStrip.ts":"1006","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/modelscopePolicy.ts":"1007","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/newApiAggregatorQuotaFetcher.ts":"1008","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/notionStreamParser.ts":"1009","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/notionThreadSessions.ts":"1010","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/notionTlsClient.ts":"1011","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/notionTranscriptBuilder.ts":"1012","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/notionWebFallbackModels.ts":"1013","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/notionWebModels.ts":"1014","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/opencodeOllamaUsage.ts":"1015","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/opencodeQuotaFetcher.ts":"1016","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/opencodeReasoningSanitizer.ts":"1017","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/openrouterFreeWindow.ts":"1018","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/openrouterQuotaFetcher.ts":"1019","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/payloadRules.ts":"1020","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/perplexityTlsClient.ts":"1021","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/pipeline.ts":"1022","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/promptql/jwt.ts":"1023","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/promptqlModels.ts":"1024","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/provider.ts":"1025","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/providerCooldownTracker.ts":"1026","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/providerCostData.ts":"1027","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/providerDefaultRateLimit.ts":"1028","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/providerRequestDefaults.ts":"1029","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/proxyAutoSelector.ts":"1030","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/qoderCli.ts":"1031","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/qoderCliResolve.ts":"1032","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/quotaFetchThrottle.ts":"1033","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/quotaMonitor.ts":"1034","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/quotaPreflight.ts":"1035","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/quotaResetParsing.ts":"1036","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/quotaTextCooldowns.ts":"1037","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/quotaTrackersBatch.ts":"1038","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/qwenThinking.ts":"1039","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/rateLimitManager/admission.ts":"1040","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/rateLimitManager/headers.ts":"1041","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/rateLimitManager.ts":"1042","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/rateLimitSemaphore.ts":"1043","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/raycast.ts":"1044","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/reasoningCache.ts":"1045","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/reasoningTokenBuffer.ts":"1046","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/refreshSerializer.ts":"1047","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/requestDedup.ts":"1048","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/responseModelEcho.ts":"1049","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/responsesInputSanitizer.ts":"1050","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/retryAfterJson.ts":"1051","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/roleNormalizer.ts":"1052","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/rollingRpmGate.ts":"1053","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/rotationConfig.ts":"1054","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/searchCache.ts":"1055","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionManager.ts":"1056","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/fingerprintRotator.ts":"1057","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/index.ts":"1058","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/poolRegistry.ts":"1059","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/session.ts":"1060","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/sessionFactory.ts":"1061","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/sessionPool.ts":"1062","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/types.ts":"1063","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/webExecutorWrapper.ts":"1064","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/signatureCache.ts":"1065","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/slidingWindowLimiter.ts":"1066","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/specificityDetector.ts":"1067","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/specificityRules.ts":"1068","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/specificityTypes.ts":"1069","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/streamRecovery.ts":"1070","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/systemPrompt.ts":"1071","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/systemTransforms.ts":"1072","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/targetRequestSanitizer.ts":"1073","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/taskAwareRouter.ts":"1074","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/taskAwareRouting.ts":"1075","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/thinkingBudget.ts":"1076","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tierConfig.ts":"1077","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tierResolver.ts":"1078","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tierTypes.ts":"1079","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tlsClientDownloadDir.ts":"1080","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tlsClientProxy.ts":"1081","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenExtractionConfig.ts":"1082","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenLimitCounter.ts":"1083","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/casGuard.ts":"1084","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/circuitBreaker.ts":"1085","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/claudeOAuth.ts":"1086","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/cline.ts":"1087","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/codebuddyCn.ts":"1088","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/codex.ts":"1089","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/copilot.ts":"1090","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/github.ts":"1091","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/gitlabDuo.ts":"1092","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/google.ts":"1093","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/kimiCoding.ts":"1094","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/kiro.ts":"1095","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/qoder.ts":"1096","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/windsurf.ts":"1097","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/rotationMap.ts":"1098","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/shared.ts":"1099","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh.ts":"1100","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/toolLatencyTracker.ts":"1101","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/toolLimitDetector.ts":"1102","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/toolSchemaSanitizer.ts":"1103","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/adobeFirefly.ts":"1104","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/antigravity.ts":"1105","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/antigravityWeeklyQuota.ts":"1106","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/bailian.ts":"1107","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/claude.ts":"1108","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/codebuddy-cn.ts":"1109","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/codex.ts":"1110","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/crof.ts":"1111","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/cursor.ts":"1112","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/deepseek.ts":"1113","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/firecrawl.ts":"1114","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/github.ts":"1115","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/glm.ts":"1116","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/grokCli.ts":"1117","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/hyperagent.ts":"1118","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/kimi.ts":"1119","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/kiro.ts":"1120","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/minimax.ts":"1121","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/nanogpt.ts":"1122","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/opencode.ts":"1123","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/openrouter.ts":"1124","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/promptql.ts":"1125","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/qoder.ts":"1126","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/quota.ts":"1127","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/scalars.ts":"1128","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/vertex.ts":"1129","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/xai.ts":"1130","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/xaiOauth.ts":"1131","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/xiaomi-mimo.ts":"1132","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage.ts":"1133","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/v0QuotaFetcher.ts":"1134","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/volumeDetector.ts":"1135","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/wafRateLimit.ts":"1136","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/webFetchInterception.ts":"1137","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/webSearchFallback.ts":"1138","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/webSearchRouting.ts":"1139","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/webSessionPoolHealth.ts":"1140","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/wildcardRouter.ts":"1141","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/workflowFSM.ts":"1142","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/xaiOauthQuotaFetcher.ts":"1143","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/shared/zedAuth.ts":"1144","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/transformer/responsesTransformer.ts":"1145","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/bootstrap.ts":"1146","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/deepseekWebTools.ts":"1147","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/formats.ts":"1148","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/__tests__/maxTokensHelper.test.ts":"1149","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/__tests__/schemaCoercion.test.ts":"1150","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/claudeHelper.ts":"1151","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/geminiHelper.ts":"1152","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/geminiToolsSanitizer.ts":"1153","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/jsonUtil.ts":"1154","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/maxTokensHelper.ts":"1155","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/openaiHelper.ts":"1156","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/responsesApiHelper.ts":"1157","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/schemaCoercion.ts":"1158","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/strictSystemHoist.ts":"1159","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/toolCallHelper.ts":"1160","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/toolCallShim.ts":"1161","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/image/sizeMapper.ts":"1162","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/index.ts":"1163","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/paramSupport.ts":"1164","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/registry.ts":"1165","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/antigravity-to-openai.ts":"1166","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/claude-to-gemini.ts":"1167","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/claude-to-openai.ts":"1168","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/gemini-to-openai.ts":"1169","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-responses/additionalTools.ts":"1170","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-responses/helpers.ts":"1171","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-responses/namespaceFlatten.ts":"1172","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-responses/toResponses.ts":"1173","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-responses.ts":"1174","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-claude/sanitizeToolResultId.ts":"1175","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-claude/thinkingBudget.ts":"1176","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-claude/toolResultAdjacency.ts":"1177","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-claude.ts":"1178","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-cursor.ts":"1179","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-gemini/helpers.ts":"1180","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-gemini.ts":"1181","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-kiro/adaptiveThinking.ts":"1182","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-kiro/messageHelpers.ts":"1183","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-kiro.ts":"1184","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/claude-to-openai.ts":"1185","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/cursor-to-openai.ts":"1186","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/gemini-to-claude.ts":"1187","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/gemini-to-openai.ts":"1188","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/kiro-to-openai.ts":"1189","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-responses/eventEmitter.ts":"1190","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-responses/pureHelpers.ts":"1191","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-responses/requestToolIdentity.ts":"1192","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-responses/synthesizeCompletedToolCalls.ts":"1193","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-responses/toolSchemas.ts":"1194","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-responses.ts":"1195","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-to-antigravity.ts":"1196","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-to-claude.ts":"1197","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-to-gemini-sse.ts":"1198","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-to-gemini.ts":"1199","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/responsesToolItem.ts":"1200","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/webTools.ts":"1201","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/types.d.ts":"1202","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/agentGoalPolicy.ts":"1203","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/aiSdkCompat.ts":"1204","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/anthropicHost.ts":"1205","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/audioResponse.ts":"1206","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/awsSigV4.ts":"1207","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/bypassHandler.ts":"1208","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/bypassResponse.ts":"1209","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cacheControlPolicy.ts":"1210","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/ccDiscoveryAliases.ts":"1211","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/claudeCodeMetaRequests.ts":"1212","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/claudeEffortVariants.ts":"1213","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/clinepassEnvelope.ts":"1214","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/comfyuiClient.ts":"1215","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/composerToolCalls.ts":"1216","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cors.ts":"1217","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cursorAgentCliVersion.ts":"1218","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cursorAgentProtobuf/nativeTodoWrite.ts":"1219","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cursorAgentProtobuf/wire.ts":"1220","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cursorAgentProtobuf.ts":"1221","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cursorChecksum.ts":"1222","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cursorImages.ts":"1223","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cursorVersionDetector.ts":"1224","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/diagnostics.ts":"1225","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/earlyStreamKeepalive.ts":"1226","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/error.ts":"1227","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/estimateSize.ts":"1228","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/finishReason.ts":"1229","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/flattenToolHistory.ts":"1230","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/functionalGatewayMirrors.ts":"1231","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/headers.ts":"1232","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/heapPressure.ts":"1233","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/jsonSize.ts":"1234","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/jsonToSse.ts":"1235","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/keepaliveThreshold.ts":"1236","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/kieTask.ts":"1237","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/kimiDevice.ts":"1238","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/kiroSanitizer.ts":"1239","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/logger.ts":"1240","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/networkProxy.ts":"1241","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/nextAuthCookie.ts":"1242","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/noThinkingAlias.ts":"1243","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/number.ts":"1244","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/ollamaTransform.ts":"1245","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/openAIStreamChunk.ts":"1246","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/opencodeHeaders.ts":"1247","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/passthroughTailProcessor.ts":"1248","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/progressTracker.ts":"1249","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/providerRequestLogging.ts":"1250","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/proxyDispatcher.ts":"1251","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/proxyDispatcherCache.ts":"1252","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/proxyFallback.ts":"1253","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/proxyFamily.ts":"1254","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/proxyFamilyResolve.ts":"1255","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/proxyFetch.ts":"1256","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/publicCreds.ts":"1257","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/reasoningContentInjector.ts":"1258","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/reasoningFields.ts":"1259","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/reasoningPlaceholder.ts":"1260","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/registeredEffortVariants.ts":"1261","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/requestLogger.ts":"1262","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/resourcePressure.ts":"1263","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/resourcePressurePolicy.ts":"1264","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/resourcePressureSampler.ts":"1265","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/responsesCommentaryDrop.ts":"1266","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/responsesEndpoint.ts":"1267","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/responsesInputNormalization.ts":"1268","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/responsesStatePolicy.ts":"1269","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/responsesStreamHelpers.ts":"1270","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/segmindClient.ts":"1271","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/setupPolyfill.ts":"1272","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/sha3-512.ts":"1273","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/sleep.ts":"1274","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/socksConnectorWithFamily.ts":"1275","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/sseHeartbeat.ts":"1276","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/stream.ts":"1277","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/streamErrorFormat.ts":"1278","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/streamFailureFinalization.ts":"1279","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/streamHandler.ts":"1280","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/streamHelpers.ts":"1281","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/streamPayloadCollector.ts":"1282","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/streamReadiness.ts":"1283","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/streamReadinessPolicy.ts":"1284","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/syncedEffortVariants.ts":"1285","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/textualToolCall.ts":"1286","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/thinkCloseMarker.ts":"1287","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/thinkTagParser.ts":"1288","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/tlsClient.ts":"1289","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/toolCallArguments.ts":"1290","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/toolSources.ts":"1291","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/upstreamErrorPassthrough.ts":"1292","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/upstreamResponseHeaders.ts":"1293","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/urlSanitize.ts":"1294","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/usageTracking.ts":"1295","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/playwright.config.ts":"1296","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/postcss.config.mjs":"1297","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/prettier.config.mjs":"1298","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/public/sw.js":"1299","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/source.config.ts":"1300","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/BootstrapBanner.tsx":"1301","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/HomePageClient.tsx":"1302","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/HomeProviderTopologySection.tsx":"1303","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/KimiSponsorBanner.tsx":"1304","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/TierCoverageWidget.tsx":"1305","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/a2a/page.tsx":"1306","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/acp-agents/page.tsx":"1307","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/activity/ActivityFeedClient.tsx":"1308","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/activity/components/ActivityFeed.tsx":"1309","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/activity/components/ActivityItem.tsx":"1310","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/activity/components/DayHeader.tsx":"1311","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/activity/components/EventTypeFilter.tsx":"1312","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/activity/page.tsx":"1313","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/agent-skills/AgentSkillsPageClient.tsx":"1314","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/agent-skills/components/CoverageBar.tsx":"1315","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/agent-skills/components/McpA2aLinksBar.tsx":"1316","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/agent-skills/components/SkillCard.tsx":"1317","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/agent-skills/components/SkillPreviewPane.tsx":"1318","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/agent-skills/page.tsx":"1319","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/AutoRoutingAnalyticsTab.tsx":"1320","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/CacheHealthTab.tsx":"1321","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/ComboHealthTab.tsx":"1322","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/CompressionAnalyticsTab.tsx":"1323","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/ProviderUtilizationTab.tsx":"1324","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/RouteExplainabilityTab.tsx":"1325","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/SearchAnalyticsTab.tsx":"1326","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/combo-health/page.tsx":"1327","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/components/DiversityScoreCard.tsx":"1328","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/components/ProviderCharts.tsx":"1329","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/compression/page.tsx":"1330","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/evals/page.tsx":"1331","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/loading.tsx":"1332","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/page.tsx":"1333","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/search/page.tsx":"1334","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/utilization/page.tsx":"1335","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-endpoints/page.tsx":"1336","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/ApiManagerPageClient.tsx":"1337","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/apiManagerPageStorage.ts":"1338","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/apiManagerPageUtils.ts":"1339","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/apiManagerScopes.ts":"1340","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/components/ApiKeyFilterBar.tsx":"1341","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/components/ApiKeyFilterChip.tsx":"1342","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/components/BypassProviderQuotaToggle.tsx":"1343","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/components/ChaosModeAccessToggle.tsx":"1344","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/components/UsageLimitSettings.tsx":"1345","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/page.tsx":"1346","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/audit/A2aAuditTab.tsx":"1347","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/audit/ComplianceTab.tsx":"1348","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/audit/McpAuditTab.tsx":"1349","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/audit/a2a/page.tsx":"1350","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/audit/mcp/page.tsx":"1351","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/audit/page.tsx":"1352","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/auto-combo/page.tsx":"1353","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/BatchDetailModal.tsx":"1354","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/BatchListTab.tsx":"1355","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/FileDetailModal.tsx":"1356","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/FilesListTab.tsx":"1357","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/batch-utils.ts":"1358","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/BatchConceptCard.tsx":"1359","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/ExpirationBadge.tsx":"1360","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/FilesConceptCard.tsx":"1361","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/NewBatchWizard.tsx":"1362","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/ProgressBarBicolor.tsx":"1363","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/UploadFileModal.tsx":"1364","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/useBatchActions.ts":"1365","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/wizard/CostEstimateStep.tsx":"1366","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/wizard/CsvMappingStep.tsx":"1367","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/wizard/DestinationStep.tsx":"1368","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/wizard/InputStep.tsx":"1369","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/wizard/JsonlValidationStep.tsx":"1370","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/files/page.tsx":"1371","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/page.tsx":"1372","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/__tests__/CachePage.test.tsx":"1373","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/__tests__/CachePerformance.test.tsx":"1374","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/__tests__/CacheTrends.test.tsx":"1375","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/__tests__/IdempotencyLayer.test.tsx":"1376","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/__tests__/MemoryCards.test.tsx":"1377","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/components/CacheEntriesTab.tsx":"1378","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/components/CachePerformance.tsx":"1379","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/components/CacheTrends.tsx":"1380","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/components/IdempotencyLayer.tsx":"1381","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/components/MemoryCards.tsx":"1382","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/components/ReasoningCacheTab.tsx":"1383","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/media/MediaPageClient.tsx":"1384","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/media/mediaProviderModels.ts":"1385","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/media/page.tsx":"1386","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/page.tsx":"1387","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/changelog/components/ChangelogViewer.tsx":"1388","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/changelog/components/NewsViewer.tsx":"1389","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/changelog/page.tsx":"1390","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/ChaosConfigPageClient.tsx":"1391","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/chaosPageTypes.ts":"1392","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/components/ChaosBasicSettingsFields.tsx":"1393","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/components/ChaosConfigActionsBar.tsx":"1394","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/components/ChaosModeSelector.tsx":"1395","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/components/ChaosProviderOverridesPanel.tsx":"1396","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/components/ChaosStatusMessage.tsx":"1397","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/components/ChaosTestResultsPanel.tsx":"1398","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/page.tsx":"1399","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/useChaosConfigData.ts":"1400","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/useChaosConfigPage.ts":"1401","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/useChaosConfigPersistence.ts":"1402","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/useChaosTestRun.ts":"1403","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-agents/CliAgentsPageClient.tsx":"1404","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-agents/[id]/page.tsx":"1405","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-agents/page.tsx":"1406","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/CliCodePageClient.tsx":"1407","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/[id]/page.tsx":"1408","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/AntigravityToolCard.tsx":"1409","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/ClaudeCcDiscoveryInfoButton.tsx":"1410","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/ClaudeClassifierCompatToggle.tsx":"1411","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/ClaudeGatewayOnboardingBlock.tsx":"1412","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/ClaudeToolCard.tsx":"1413","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/CliProfileAutoSyncToggles.tsx":"1414","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/CliStatusBadge.tsx":"1415","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/ClineToolCard.tsx":"1416","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/CliproxyapiToolCard.tsx":"1417","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/CodexToolCard.tsx":"1418","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/CopilotToolCard.tsx":"1419","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/CustomCliCard.tsx":"1420","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/DefaultToolCard.tsx":"1421","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/DroidToolCard.tsx":"1422","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/HermesAgentToolCard.tsx":"1423","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/KiloToolCard.tsx":"1424","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/OpenClawToolCard.tsx":"1425","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/ToolDetailClient.tsx":"1426","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/codexButtonState.ts":"1427","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/codexToolOptions.ts":"1428","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/customCliConfig.ts":"1429","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/index.tsx":"1430","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/page.tsx":"1431","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cloud-agents/page.tsx":"1432","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/AutoComboCatalog.tsx":"1433","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/BuilderIntelligentStep.tsx":"1434","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/ComboControlCenterClient.tsx":"1435","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/FieldLabelWithHelp.tsx":"1436","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/IntelligentComboPanel.tsx":"1437","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/KimiComboPresetCard.tsx":"1438","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/ReasoningTokenBufferToggle.tsx":"1439","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/ResponseValidationEditor.tsx":"1440","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/WeightTotalBar.tsx":"1441","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/[id]/page.tsx":"1442","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/error.tsx":"1443","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/kimiComboPreset.ts":"1444","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/ComboLiveStudio.tsx":"1445","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/comboFlowModel.ts":"1446","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/fleetAggregation.ts":"1447","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/nodes/ProviderCascadeNode.tsx":"1448","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/nodes/RequestNode.tsx":"1449","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/nodes/ResponseNode.tsx":"1450","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/nodes/StrategyNode.tsx":"1451","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/page.tsx":"1452","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/loading.tsx":"1453","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/page.tsx":"1454","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/parts.ts":"1455","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/playground/ComboPlaygroundClient.tsx":"1456","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/playground/page.tsx":"1457","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/useComboProxyAssignments.ts":"1458","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/components/BadgeToast.tsx":"1459","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/exclusions/ExclusionsPanel.tsx":"1460","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/exclusions/page.tsx":"1461","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/live/page.tsx":"1462","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/page.tsx":"1463","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/CompareView.tsx":"1464","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/CompressionAnnotation.tsx":"1465","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/CompressionCockpit.tsx":"1466","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/DiffPane.tsx":"1467","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/EncoderComparisonTable.tsx":"1468","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/PlayView.tsx":"1469","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/PlaygroundInput.tsx":"1470","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/QuantumLockBadge.tsx":"1471","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/RiskGateBadge.tsx":"1472","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/SaliencyHeatmap.tsx":"1473","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/WaterfallInspector.tsx":"1474","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/compressionFlowModel.ts":"1475","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/nodes/EngineNode.tsx":"1476","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/nodes/IoNode.tsx":"1477","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/page.tsx":"1478","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/useCompressionReplay.ts":"1479","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/CompressionStylesTile.tsx":"1480","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/aggressive/page.tsx":"1481","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/caveman/CavemanContextPageClient.tsx":"1482","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/caveman/page.tsx":"1483","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/ccr/page.tsx":"1484","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/combos/CompressionCombosPageClient.tsx":"1485","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/combos/CompressionHub.tsx":"1486","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/combos/page.tsx":"1487","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/headroom/page.tsx":"1488","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/lite/page.tsx":"1489","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/llmlingua/page.tsx":"1490","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/omniglyph/OmniglyphContextPageClient.tsx":"1491","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/omniglyph/page.tsx":"1492","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/omniglyph/sampleData.ts":"1493","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/page.tsx":"1494","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/rtk/RtkContextPageClient.tsx":"1495","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/rtk/RtkLearnDiscoverCard.tsx":"1496","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/rtk/RtkTomlImportCard.tsx":"1497","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/rtk/page.tsx":"1498","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/session-dedup/page.tsx":"1499","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/settings/CompressionPanel.tsx":"1500","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/settings/EngineGuidanceDetail.tsx":"1501","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/settings/adaptiveTargetLabel.ts":"1502","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/settings/page.tsx":"1503","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/ultra/page.tsx":"1504","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/CostOverviewTab.tsx":"1505","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/budget/page.tsx":"1506","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/components/ApiKeyUsageLimitCard.tsx":"1507","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/components/CostCharts.tsx":"1508","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/components/MetricCard.tsx":"1509","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/components/TopListCard.tsx":"1510","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/costExplorerParams.ts":"1511","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/costExplorerUtils.ts":"1512","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/page.tsx":"1513","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/pricing/page.tsx":"1514","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/QuotaSharePageClient.tsx":"1515","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/AccountQuotaRow.tsx":"1516","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/AllocationTable.tsx":"1517","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/BurnRateChart.tsx":"1518","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/BurnRateChartInner.tsx":"1519","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/CreatePoolModal.tsx":"1520","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/DimensionBar.tsx":"1521","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/PoolCard.tsx":"1522","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/PoolWizard.tsx":"1523","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/QuotaConceptCard.tsx":"1524","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/QuotaEndpointsCard.tsx":"1525","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/StackedAllocationBar.tsx":"1526","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/UsageLogCard.tsx":"1527","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/hooks/useLocalStoragePoolMigration.ts":"1528","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/hooks/usePoolUsage.ts":"1529","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/hooks/usePools.ts":"1530","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/hooks/usePoolsUsageAggregate.ts":"1531","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/page.tsx":"1532","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/useApiKeyUsageLimits.ts":"1533","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/discovery/DiscoveryPageClient.tsx":"1534","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/discovery/__tests__/DiscoveryPageClient.test.tsx":"1535","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/discovery/page.tsx":"1536","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/ApiEndpointsTab.tsx":"1537","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx":"1538","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/VscodeTokenAliasCard.tsx":"1539","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/__tests__/ApiEndpointsTab.test.tsx":"1540","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/__tests__/EndpointPageClient.test.tsx":"1541","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/components/A2ADashboard.tsx":"1542","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/components/MCPDashboard.tsx":"1543","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/components/NotionSourceCard.tsx":"1544","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/components/ObsidianSourceCard.tsx":"1545","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/page.tsx":"1546","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/free-provider-rankings/page.tsx":"1547","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/free-tiers/page.tsx":"1548","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/gamification/admin/page.tsx":"1549","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/health/ProviderHealthAutopilotCard.tsx":"1550","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/health/ProviderHealthMatrixCard.tsx":"1551","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/health/TelemetryCard.tsx":"1552","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/health/page.tsx":"1553","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/homeAppearance.ts":"1554","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/kimiSponsorBannerGate.ts":"1555","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/leaderboard/page.tsx":"1556","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/limits/page.tsx":"1557","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/logs/CompressionLogTab.tsx":"1558","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/logs/activity/page.tsx":"1559","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/logs/console/page.tsx":"1560","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/logs/page.tsx":"1561","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/logs/proxy/page.tsx":"1562","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/logs/timeline/page.tsx":"1563","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/mcp/page.tsx":"1564","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/MediaProviderPageClient.tsx":"1565","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.tsx":"1566","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/[kind]/page.tsx":"1567","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/EmbeddingExampleCard.tsx":"1568","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/ImageExampleCard.tsx":"1569","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/LlmChatCard.tsx":"1570","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/MediaProviderHeader.tsx":"1571","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/MediaProviderKindNav.tsx":"1572","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/MusicExampleCard.tsx":"1573","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/OcrExampleCard.tsx":"1574","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/PlaygroundCard.tsx":"1575","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/ServiceKindTabs.tsx":"1576","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/SttExampleCard.tsx":"1577","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/TtsExampleCard.tsx":"1578","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/VideoExampleCard.tsx":"1579","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/WebFetchExampleCard.tsx":"1580","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/WebSearchExampleCard.tsx":"1581","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/mediaKinds.ts":"1582","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/page.tsx":"1583","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/EditMemoryModal.tsx":"1584","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/EmbeddingSourceSelector.tsx":"1585","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/MemoryConceptCard.tsx":"1586","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/MemoryEngineStatus.tsx":"1587","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/QdrantConfigCard.tsx":"1588","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/RerankConfigCard.tsx":"1589","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/RetrievePreview.tsx":"1590","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/tabs/EngineTab.tsx":"1591","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/tabs/MemoriesTab.tsx":"1592","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/tabs/PlaygroundTab.tsx":"1593","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/hooks/useEngineStatus.ts":"1594","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/hooks/useMemorySettings.ts":"1595","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/page.tsx":"1596","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/OmniSkillsPageClient.tsx":"1597","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/components/OmniExecutionsTab.tsx":"1598","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/components/OmniMarketplaceTab.tsx":"1599","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/components/OmniSandboxTab.tsx":"1600","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/components/OmniSkillCard.tsx":"1601","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/components/OmniSkillsList.tsx":"1602","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/components/SkillInspectorPane.tsx":"1603","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/page.tsx":"1604","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/onboarding/components/TierFlowDiagram.tsx":"1605","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/onboarding/page.tsx":"1606","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/onboarding/steps/TierTour.tsx":"1607","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/page.tsx":"1608","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/PlaygroundStudio.tsx":"1609","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/CompareColumn.tsx":"1610","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/ExportCodeModal.tsx":"1611","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/ImprovePromptButton.tsx":"1612","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/MarkdownMessage.tsx":"1613","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/ParamSliders.tsx":"1614","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/PresetPicker.tsx":"1615","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/ProviderMetrics.tsx":"1616","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/ReasoningControls.tsx":"1617","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/StructuredOutputEditor.tsx":"1618","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/StudioConfigPane.tsx":"1619","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/StudioTopBar.tsx":"1620","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/TokenCostCounter.tsx":"1621","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/ToolsBuilder.tsx":"1622","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/modelSelection.ts":"1623","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/reasoningControlUtils.ts":"1624","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/tabs/ApiTab.tsx":"1625","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/tabs/BuildTab.tsx":"1626","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/tabs/ChatTab.tsx":"1627","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/tabs/CompareTab.tsx":"1628","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/tabs/build/BuildWizard.tsx":"1629","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/hooks/useImprovePrompt.ts":"1630","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/hooks/usePresets.ts":"1631","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/hooks/useStreamMetrics.ts":"1632","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/hooks/useStructuredOutput.ts":"1633","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/hooks/useToolsBuilder.ts":"1634","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/page.tsx":"1635","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/plugins/[name]/config/page.tsx":"1636","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/plugins/page.tsx":"1637","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/profile/page.tsx":"1638","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/provider-stats/page.tsx":"1639","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/ProviderDetailPageClient.tsx":"1640","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/ProviderDetailPageClient.test.tsx":"1641","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/connectionRowAutoSyncToggle.test.tsx":"1642","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/modelVisibilityToolbarActiveCount.test.tsx":"1643","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/passthroughModelRowDisplayName.test.tsx":"1644","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/passthroughTestHelpers.test.tsx":"1645","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/phase1e.test.tsx":"1646","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/phase1f.test.tsx":"1647","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/providerModelsSectionVisibilityKey.test.tsx":"1648","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/useConnectionAutoSync.test.tsx":"1649","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/useModelImportHandlers.test.tsx":"1650","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/useModelVisibilityHandlers.test.tsx":"1651","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/codexPlanLabel.ts":"1652","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/AdaptaTutorialModal.tsx":"1653","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/BatchTestResultsModal.tsx":"1654","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/CompatibleModelsSection.tsx":"1655","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/CompatibleNodeCard.tsx":"1656","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ConnectionRow.tsx":"1657","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ConnectionsHeaderToolbar.tsx":"1658","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ConnectionsListPanel.tsx":"1659","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/CoolingConnectionsPanel.tsx":"1660","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/CustomModelsSection.tsx":"1661","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/EmptyConnectionsPlaceholder.tsx":"1662","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ExternalLinkModal.tsx":"1663","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ImportProgressModal.tsx":"1664","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/KimiCodeAuthMethodModal.tsx":"1665","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ModelCompatPopover.tsx":"1666","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ModelRow.tsx":"1667","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/NoAuthProviderControls.tsx":"1668","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/OpenRouterPresetInput.tsx":"1669","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/PassthroughModelRow.tsx":"1670","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/PassthroughModelsSection.tsx":"1671","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderCcAliasSection.tsx":"1672","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderExtraPanels.tsx":"1673","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderInterceptionSection.tsx":"1674","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderModalsPanel.tsx":"1675","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderModelsSection.tsx":"1676","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderPageHeader.tsx":"1677","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderParamFilterSection.tsx":"1678","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderPlaygroundPanel.tsx":"1679","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderQuotaVisibilityToggle.tsx":"1680","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/SearchProviderCard.tsx":"1681","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/SiliconFlowEndpointModal.tsx":"1682","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/UpstreamProxyCard.tsx":"1683","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/WebSessionCredentialGuide.tsx":"1684","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ZedImportCard.tsx":"1685","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/__tests__/phase1d.test.tsx":"1686","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/connectionRowHelpers.ts":"1687","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/AddApiKeyModal.tsx":"1688","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/AgentrouterConsoleFields.tsx":"1689","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/AlibabaProviderRegionField.tsx":"1690","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/CcCompatibleRequestDefaultsFields.tsx":"1691","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/EditCompatibleNodeModal.tsx":"1692","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/EditConnectionModal.tsx":"1693","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/GlmTeamQuotaFields.tsx":"1694","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/ImportClaudeAuthModal.tsx":"1695","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/ImportCodexAuthModal.tsx":"1696","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/ImportGrokCliAuthModal.tsx":"1697","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/NewApiAggregatorFields.tsx":"1698","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/ProviderTierField.tsx":"1699","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/QuotaScrapingFields.tsx":"1700","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/__tests__/authImportModals.test.tsx":"1701","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/__tests__/connModals.test.tsx":"1702","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/__tests__/editCompatibleNodeModal.test.tsx":"1703","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/ccCompatibleRequestDefaults.ts":"1704","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/commandCodeAuthPhase.ts":"1705","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/computeConnectionDefaultName.ts":"1706","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/connectionProviderSpecificData.ts":"1707","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/glmTeamQuotaProviderData.ts":"1708","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/m365Tier.ts":"1709","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/providerTierFieldApi.ts":"1710","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/passthroughAlias.ts":"1711","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/connectionsSearchFilter.ts":"1712","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/modelImportWarning.ts":"1713","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useApiKeySave.ts":"1714","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useAuthFileHandlers.ts":"1715","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useCommandCodeAuth.ts":"1716","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useConnectionAutoSync.ts":"1717","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useConnectionDeleteConfirm.ts":"1718","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useConnectionGate.ts":"1719","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useExternalLinkFlow.ts":"1720","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useModelCompatState.ts":"1721","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useModelImportHandlers.ts":"1722","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useModelVisibilityHandlers.ts":"1723","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useProviderConnections.ts":"1724","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useProviderModels.ts":"1725","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useProviderNodeActions.ts":"1726","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useProviderQuotaVisibility.ts":"1727","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useProviderSettings.ts":"1728","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useReorderByAvailability.ts":"1729","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/page.tsx":"1730","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/providerCredentialText.ts":"1731","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/providerDetailConstants.ts":"1732","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/providerInputParsers.ts":"1733","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/providerPageHelpers.ts":"1734","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/webSessionCredentials.ts":"1735","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/AddCompatibleProviderModal.tsx":"1736","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/CategoryDot.tsx":"1737","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/CodexCliGuideModal.tsx":"1738","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/HighlightableProviderCard.tsx":"1739","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/ImportProvidersFromFileModal.tsx":"1740","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/NoAuthProvidersSection.tsx":"1741","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/ProviderCard.tsx":"1742","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/ProviderCountBadge.tsx":"1743","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/ProviderDisplayModeControl.tsx":"1744","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/ProviderSummaryCard.tsx":"1745","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/RiskNoticeModal.tsx":"1746","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/__tests__/providerCardAudioBadge.test.tsx":"1747","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/onboarding/ProviderOnboardingWizard.tsx":"1748","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/onboarding/providerOnboardingApi.ts":"1749","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/onboarding/providerOnboardingCatalog.ts":"1750","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/onboarding/providerOnboardingHref.ts":"1751","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/parseProviderImportFile.ts":"1752","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/useImportProvidersFromFile.ts":"1753","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/context/openRouterProviderStatsContext.tsx":"1754","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/error.tsx":"1755","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/featuredProviders.ts":"1756","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/hooks/useApiKey.ts":"1757","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/hooks/useProviderModels.ts":"1758","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/hooks/useProviderUrlFilters.ts":"1759","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/hooks/useRiskAcknowledged.ts":"1760","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/hooks/useSyncedModelsByProvider.ts":"1761","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/loading.tsx":"1762","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/new/page.tsx":"1763","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/page.tsx":"1764","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/providerCompactMode.ts":"1765","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/providerPageHighlightUtils.ts":"1766","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/providerPageStorage.ts":"1767","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/providerPageUtils.ts":"1768","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/[name]/embed/[[...path]]/route.ts":"1769","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/ApiKeyField.tsx":"1770","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/AutoRestartAdoptedToggle.tsx":"1771","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/AutoStartToggle.tsx":"1772","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/CliproxyConnectionPanel.tsx":"1773","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/CliproxyModelMappingEditor.tsx":"1774","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/CliproxyProviderExposureCard.tsx":"1775","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/DarioAccountPanel.tsx":"1776","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/NinerouterEmbedFrame.tsx":"1777","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/NinerouterInstallWizard.tsx":"1778","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/NinerouterModelList.tsx":"1779","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/NinerouterProviderExposureCard.tsx":"1780","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/ServiceLifecycleButtons.tsx":"1781","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/ServiceLogsPanel.tsx":"1782","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/ServiceStatusCard.tsx":"1783","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/hooks/useServiceLogs.ts":"1784","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/hooks/useServiceStatus.ts":"1785","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/page.tsx":"1786","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/tabs/BifrostServiceTab.tsx":"1787","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/tabs/CliproxyServiceTab.tsx":"1788","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/tabs/DarioServiceTab.tsx":"1789","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/tabs/MuxServiceTab.tsx":"1790","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/tabs/NinerouterServiceTab.tsx":"1791","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/utils/buildCurl.ts":"1792","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/quota/page.tsx":"1793","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/radar/page.tsx":"1794","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/radar/setup/page.tsx":"1795","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/relay/RelayProxyClient.tsx":"1796","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/relay/page.tsx":"1797","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/runtime/RuntimePageClient.tsx":"1798","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/runtime/components/ModelCooldownsCard.tsx":"1799","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/runtime/page.tsx":"1800","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/SearchToolsClient.tsx":"1801","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/ProviderCatalog.tsx":"1802","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/ProviderComparison.tsx":"1803","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/RerankPanel.tsx":"1804","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/ResultsPanel.tsx":"1805","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/ScrapeResult.tsx":"1806","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/SearchConceptCard.tsx":"1807","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/SearchForm.tsx":"1808","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/SearchHistory.tsx":"1809","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/SearchToolsConfigPane.tsx":"1810","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/SearchToolsTopBar.tsx":"1811","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/tabs/CompareTab.tsx":"1812","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/tabs/ScrapeTab.tsx":"1813","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/tabs/SearchTab.tsx":"1814","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/hooks/useScrapeFetch.ts":"1815","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/page.tsx":"1816","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/access-tokens/page.tsx":"1817","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/advanced/page.tsx":"1818","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/ai/page.tsx":"1819","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/appearance/page.tsx":"1820","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/cache/page.tsx":"1821","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/AccessTokensTab.tsx":"1822","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/AccountEmailVisibilitySetting.tsx":"1823","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/AppearanceTab.tsx":"1824","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/AuthzSection.tsx":"1825","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/AutoDisableCard.tsx":"1826","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/BackgroundDegradationTab.tsx":"1827","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/CacheSettingsTab.tsx":"1828","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/CacheStatsCard.tsx":"1829","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ClaudeFastModeTab.tsx":"1830","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/CliproxyapiSettingsTab.tsx":"1831","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/CodexAutoPingTab.tsx":"1832","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/CodexFastTierTab.tsx":"1833","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ComboDefaultsTab.tsx":"1834","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ComplianceTab.tsx":"1835","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/CompressionSettingsTab.tsx":"1836","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/CompressionTokenSaverCard.tsx":"1837","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/DatabaseBackupRetentionCard.tsx":"1838","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/DebugModeCard.tsx":"1839","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/FallbackChainsEditor.tsx":"1840","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/FeatureFlagCard.tsx":"1841","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/FeatureFlagsGrid.tsx":"1842","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/FusionDefaultsFields.tsx":"1843","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/IPFilterSection.tsx":"1844","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/LogToolSourcesCard.tsx":"1845","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/MemorySkillsTab.tsx":"1846","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/MitmProxyTab.tsx":"1847","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ModelAliasesTab.tsx":"1848","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ModelAliasesUnified.tsx":"1849","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ModelCapabilityOverridesTab.tsx":"1850","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ModelLockoutCard.tsx":"1851","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ModelsDevSyncTab.tsx":"1852","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/OneproxyTab.tsx":"1853","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/PayloadRulesTab.tsx":"1854","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/PoliciesPanel.tsx":"1855","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/PricingTab.tsx":"1856","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProviderAccountRoutingCard.tsx":"1857","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProxyBatchActions.tsx":"1858","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProxyBulkImportModal.tsx":"1859","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProxyCheckboxCell.tsx":"1860","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProxyHealthCell.tsx":"1861","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProxyRegistryManager.tsx":"1862","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProxyStatusBadge.tsx":"1863","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProxyTab.tsx":"1864","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/RedisLauncherPanel.tsx":"1865","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/RequestLimitsTab.tsx":"1866","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ResilienceFields.tsx":"1867","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ResilienceTab.tsx":"1868","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ResponsesStatePolicyTab.tsx":"1869","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/RoutingStrategyCard.tsx":"1870","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/RoutingTab.tsx":"1871","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/SecurityTab.tsx":"1872","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/SessionInfoCard.tsx":"1873","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/SidebarTab.tsx":"1874","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/SystemPromptTab.tsx":"1875","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/SystemStorageTab.tsx":"1876","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ThinkingBudgetTab.tsx":"1877","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/UsageTokenBufferTab.tsx":"1878","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/VisionBridgeSettingsTab.tsx":"1879","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/parseBulkProxyImport.ts":"1880","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx":"1881","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/DenoRelayModal.tsx":"1882","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/DocumentationTab.tsx":"1883","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/FreePoolTab.tsx":"1884","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/FreeProxyRow.tsx":"1885","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/GlobalConfigTab.tsx":"1886","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx":"1887","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/SourceToggleBar.tsx":"1888","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/SubscriptionTab.tsx":"1889","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/VercelRelayModal.tsx":"1890","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxyRegistryTypes.ts":"1891","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxyStrategyOptions.ts":"1892","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/systemTransformsHermesDefaults.ts":"1893","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/useProxyBatchOperations.ts":"1894","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/useProxyBulkImport.ts":"1895","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/useProxyPoolModal.ts":"1896","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/error.tsx":"1897","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/feature-flags/page.tsx":"1898","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/general/page.tsx":"1899","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/loading.tsx":"1900","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/page.tsx":"1901","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/pricing/page.tsx":"1902","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/resilience/page.tsx":"1903","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/routing/page.tsx":"1904","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/security/page.tsx":"1905","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/sidebar/page.tsx":"1906","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/system/1proxy/page.tsx":"1907","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/system/mitm-proxy/error.tsx":"1908","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/system/mitm-proxy/page.tsx":"1909","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/system/proxy/page.tsx":"1910","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tokens/page.tsx":"1911","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/AgentBridgePageClient.tsx":"1912","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/AgentBridgeMaintenanceCard.tsx":"1913","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/AgentBridgeServerCard.tsx":"1914","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/AgentCard.tsx":"1915","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/AgentList.tsx":"1916","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/BypassListEditor.tsx":"1917","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/EmptyStateNoProviders.tsx":"1918","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/ModelMappingTable.tsx":"1919","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/ModelSelectorModal.tsx":"1920","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/RiskNoticeBanner.tsx":"1921","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/SetupWizard.tsx":"1922","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/UpstreamCaField.tsx":"1923","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/shared/AgentIcon.tsx":"1924","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/shared/CertStatusIcon.tsx":"1925","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/shared/DnsStatusBadge.tsx":"1926","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/hooks/useAgentBridgeState.ts":"1927","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/hooks/useMitmSudoPrompt.tsx":"1928","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/normalizeState.ts":"1929","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/page.tsx":"1930","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/TrafficInspectorPageClient.tsx":"1931","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/CaptureModesToolbar.tsx":"1932","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/CustomHostsManager.tsx":"1933","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/DetailsPanel.tsx":"1934","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/HttpProxySnippetCard.tsx":"1935","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/RequestRow.tsx":"1936","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/RequestStreamingList.tsx":"1937","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/TopBarControls.tsx":"1938","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/chat/ChatBubble.tsx":"1939","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/chat/MessageContent.tsx":"1940","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/chat/ToolCallBlock.tsx":"1941","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/chat/ToolResultBlock.tsx":"1942","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/session/HistoricSessionBanner.tsx":"1943","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/session/SessionPicker.tsx":"1944","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/session/SessionRecorderBar.tsx":"1945","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/AgentEmoji.tsx":"1946","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/AnnotationField.tsx":"1947","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/ContextColorBar.tsx":"1948","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/HeaderTable.tsx":"1949","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/JsonViewer.tsx":"1950","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/SecretMaskToggle.tsx":"1951","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/SseEventList.tsx":"1952","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/TimingWaterfall.tsx":"1953","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/TokenBadge.tsx":"1954","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/ConversationTab.tsx":"1955","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/HeadersTab.tsx":"1956","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/LlmDetailsTab.tsx":"1957","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/RequestBodyTab.tsx":"1958","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/ResponseBodyTab.tsx":"1959","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/StatsCharts.tsx":"1960","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/StatsTab.tsx":"1961","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/TimingTab.tsx":"1962","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useAnnotations.ts":"1963","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useReplay.ts":"1964","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useResizablePanels.ts":"1965","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useSessionRecorder.ts":"1966","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useSystemProxyExitGuard.ts":"1967","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useTrafficFilters.ts":"1968","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useTrafficStream.ts":"1969","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useVirtualList.ts":"1970","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/page.tsx":"1971","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/TranslatorPageClient.tsx":"1972","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/MonitorTab.tsx":"1973","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/ResultNarrated.tsx":"1974","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/SimpleControls.tsx":"1975","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/TranslateFlowDiagram.tsx":"1976","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/TranslateTab.tsx":"1977","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/TranslatorConceptCard.tsx":"1978","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/advanced/AdvancedSection.tsx":"1979","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/advanced/CompressionPreviewAccordion.tsx":"1980","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/advanced/PipelineView.tsx":"1981","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/advanced/RawJsonPanel.tsx":"1982","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/advanced/StreamTransformerAccordion.tsx":"1983","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/advanced/TestBenchAccordion.tsx":"1984","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/exampleTemplates.tsx":"1985","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/hooks/useAvailableModels.tsx":"1986","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/hooks/useProviderOptions.tsx":"1987","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/hooks/useTranslateDeepLink.tsx":"1988","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/hooks/useTranslateSession.tsx":"1989","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/page.tsx":"1990","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/types.ts":"1991","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/BudgetTab.tsx":"1992","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/BudgetTelemetryCards.tsx":"1993","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/EvalsTab.tsx":"1994","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/FreeBudgetCard.tsx":"1995","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/CodexResetCreditsModal.tsx":"1996","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/ProviderLimitCard.tsx":"1997","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/ProviderUsdCostModal.tsx":"1998","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaCard.tsx":"1999","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaCardGrid.tsx":"2000","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaCutoffModal.tsx":"2001","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaMiniBar.tsx":"2002","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaProgressBar.tsx":"2003","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaTable.tsx":"2004","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/constants.ts":"2005","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/formatters.ts":"2006","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/i18nFallback.ts":"2007","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.tsx":"2008","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/parts/QuotaCardBody.tsx":"2009","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/parts/QuotaCardExpanded.tsx":"2010","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/parts/QuotaCardHeader.tsx":"2011","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/parts/QuotaEnvGroup.tsx":"2012","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/providerColumns.ts":"2013","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/quotaParsing.ts":"2014","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/useCodexResetCreditRedemption.ts":"2015","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/useQuotaVisibility.ts":"2016","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/useVisibleQuotaData.ts":"2017","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.tsx":"2018","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/RateLimitStatus.tsx":"2019","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/SessionsTab.tsx":"2020","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/page.tsx":"2021","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/WebhooksPageClient.tsx":"2022","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/__tests__/webhook-wizard.test.tsx":"2023","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/AddWebhookWizard.tsx":"2024","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/HowItWorksSidebar.tsx":"2025","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/WebhookCard.tsx":"2026","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/WebhookDeliveriesPanel.tsx":"2027","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/WebhooksList.tsx":"2028","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/shared/DeliveryStatusBadge.tsx":"2029","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/shared/EventChecklist.tsx":"2030","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/shared/HmacRecipeBlock.tsx":"2031","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/shared/IntegrationCard.tsx":"2032","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/shared/PayloadPreview.tsx":"2033","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/steps/Step1ChooseIntegration.tsx":"2034","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/steps/Step2ConfigureIntegration.tsx":"2035","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/steps/Step3EventsAndTest.tsx":"2036","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/steps/integrations/CustomConfigForm.tsx":"2037","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/steps/integrations/DiscordConfigForm.tsx":"2038","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/steps/integrations/SlackConfigForm.tsx":"2039","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/steps/integrations/TelegramConfigForm.tsx":"2040","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/page.tsx":"2041","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/home/ProviderQuotaWidget.tsx":"2042","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/home/ProviderTopology.tsx":"2043","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/home/page.tsx":"2044","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/home/topologyLabel.ts":"2045","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/home/topologyUtils.ts":"2046","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/layout.tsx":"2047","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/.well-known/agent.json/route.ts":"2048","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/400/layout.tsx":"2049","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/400/page.tsx":"2050","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/401/layout.tsx":"2051","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/401/page.tsx":"2052","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/403/layout.tsx":"2053","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/403/page.tsx":"2054","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/408/layout.tsx":"2055","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/408/page.tsx":"2056","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/429/layout.tsx":"2057","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/429/page.tsx":"2058","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/500/layout.tsx":"2059","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/500/page.tsx":"2060","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/502/layout.tsx":"2061","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/502/page.tsx":"2062","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/503/layout.tsx":"2063","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/503/page.tsx":"2064","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/a2a/route.ts":"2065","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/[...omnirouteApiCatchAll]/route.ts":"2066","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/a2a/status/route.ts":"2067","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/a2a/tasks/[id]/cancel/route.ts":"2068","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/a2a/tasks/[id]/route.ts":"2069","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/a2a/tasks/route.ts":"2070","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/acp/agents/route.ts":"2071","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/admin/concurrency/route.ts":"2072","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/agent-skills/[id]/raw/route.ts":"2073","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/agent-skills/[id]/route.ts":"2074","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/agent-skills/coverage/route.ts":"2075","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/agent-skills/generate/route.ts":"2076","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/agent-skills/route.ts":"2077","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/analytics/auto-routing/route.ts":"2078","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/analytics/compression/route.ts":"2079","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/analytics/diversity/route.ts":"2080","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/assess/route.ts":"2081","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/auth/csrf/route.ts":"2082","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/auth/login/route.ts":"2083","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/auth/logout/route.ts":"2084","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/auth/oidc/callback/route.ts":"2085","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/auth/oidc/login/route.ts":"2086","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/auth/status/route.ts":"2087","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/batches/[id]/route.ts":"2088","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/batches/route.ts":"2089","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cache/entries/route.ts":"2090","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cache/reasoning/route.ts":"2091","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cache/route.ts":"2092","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cache/stats/route.ts":"2093","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/chaos/config/route.ts":"2094","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/chaos/run/route.ts":"2095","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli/connect/route.ts":"2096","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli/tokens/[id]/route.ts":"2097","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli/tokens/route.ts":"2098","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli/whoami/route.ts":"2099","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/_lib/jsoncConfig.ts":"2100","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/all-statuses/route.ts":"2101","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/antigravity-mitm/alias/route.ts":"2102","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/antigravity-mitm/route.ts":"2103","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/apply/route.ts":"2104","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/backups/route.ts":"2105","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/claude-settings/route.ts":"2106","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/cline-settings/route.ts":"2107","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/codewhale-settings/route.ts":"2108","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/codex-profiles/route.ts":"2109","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/codex-settings/route.ts":"2110","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/config/route.ts":"2111","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/crush-settings/route.ts":"2112","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/deepseek-tui-settings/route.ts":"2113","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/detect/route.ts":"2114","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/droid-settings/route.ts":"2115","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/forge-settings/route.ts":"2116","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/grok-build-settings/route.ts":"2117","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/guide-settings/[toolId]/route.ts":"2118","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/hermes-agent-settings/route.ts":"2119","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/jcode-settings/route.ts":"2120","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/keys/route.ts":"2121","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/kilo-settings/route.ts":"2122","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/letta-settings/route.ts":"2123","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/logs/route.ts":"2124","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/omp-settings/route.ts":"2125","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/openclaw/auto-order/route.ts":"2126","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/openclaw-settings/route.ts":"2127","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/pi-settings/route.ts":"2128","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/qwen-settings/route.ts":"2129","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/runtime/[toolId]/route.ts":"2130","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/smelt-settings/route.ts":"2131","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/status/route.ts":"2132","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cloud/auth/route.ts":"2133","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cloud/credentials/update/route.ts":"2134","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cloud/model/resolve/route.ts":"2135","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cloud/models/alias/route.ts":"2136","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/codex/connect/[token]/route.ts":"2137","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/combos/[id]/route.ts":"2138","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/combos/auto/route.ts":"2139","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/combos/builder/options/route.ts":"2140","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/combos/metrics/route.ts":"2141","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/combos/reorder/route.ts":"2142","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/combos/route.ts":"2143","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/combos/test/route.ts":"2144","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compliance/audit-log/route.ts":"2145","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compression/compare/route.ts":"2146","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compression/compare/verify/route.ts":"2147","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compression/engines/route.ts":"2148","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compression/language-packs/route.ts":"2149","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compression/preview/route.ts":"2150","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compression/retrieve/route.ts":"2151","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compression/rules/route.ts":"2152","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/analytics/engine/route.ts":"2153","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/analytics/route.ts":"2154","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/caveman/config/route.ts":"2155","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/combos/[id]/assignments/route.ts":"2156","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/combos/[id]/route.ts":"2157","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/combos/default/route.ts":"2158","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/combos/route.ts":"2159","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/rtk/config/route.ts":"2160","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/rtk/discover/route.ts":"2161","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/rtk/filters/route.ts":"2162","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/rtk/import/route.ts":"2163","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/rtk/learn/route.ts":"2164","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/rtk/raw-output/[id]/route.ts":"2165","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/rtk/test/route.ts":"2166","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/copilot/chat/route.ts":"2167","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/dahl/tokens/route.ts":"2168","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/db/health/route.ts":"2169","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/db-backups/export/route.ts":"2170","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/db-backups/exportAll/route.ts":"2171","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/db-backups/import/route.ts":"2172","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/db-backups/route.ts":"2173","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/discovery/results/[id]/route.ts":"2174","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/discovery/results/route.ts":"2175","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/discovery/scan/route.ts":"2176","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/discovery/verify/[id]/route.ts":"2177","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/docs/codex-cli/route.ts":"2178","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/docs/route.ts":"2179","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/evals/[suiteId]/route.ts":"2180","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/evals/route.ts":"2181","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/evals/suites/[suiteId]/route.ts":"2182","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/evals/suites/route.ts":"2183","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/fallback/chains/route.ts":"2184","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/files/[id]/content/route.ts":"2185","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/files/route.ts":"2186","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/free-models/route.ts":"2187","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/free-provider-rankings/route.ts":"2188","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/free-tier/summary/route.ts":"2189","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/anomalies/route.ts":"2190","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/badges/earned/route.ts":"2191","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/badges/route.ts":"2192","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/federation/leaderboard/route.ts":"2193","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/federation/score/route.ts":"2194","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/invite/redeem/route.ts":"2195","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/invite/route.ts":"2196","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/leaderboard/route.ts":"2197","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/level/route.ts":"2198","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/notifications/route.ts":"2199","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/rotate/route.ts":"2200","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/servers/route.ts":"2201","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/stream/route.ts":"2202","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/transfer/route.ts":"2203","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/github-skills/route.ts":"2204","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/guardrails/route.ts":"2205","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/guardrails/test/route.ts":"2206","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/headroom/start/route.ts":"2207","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/headroom/status/route.ts":"2208","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/headroom/stop/route.ts":"2209","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/health/degradation/route.ts":"2210","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/health/ping/route.ts":"2211","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/init/route.ts":"2212","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/intelligence/sync/route.ts":"2213","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/internal/codex-responses-ws/compression.ts":"2214","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/internal/codex-responses-ws/history.ts":"2215","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/internal/codex-responses-ws/modelResolution.ts":"2216","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/internal/codex-responses-ws/route.ts":"2217","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/issue-agent/runs/route.ts":"2218","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/[id]/devices/route.ts":"2219","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/[id]/regenerate/route.ts":"2220","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/[id]/reveal/route.ts":"2221","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/[id]/route.ts":"2222","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/[id]/usage-limits/route.ts":"2223","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/groups/[id]/keys/route.ts":"2224","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/groups/[id]/permissions/route.ts":"2225","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/groups/[id]/route.ts":"2226","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/groups/route.ts":"2227","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/route.ts":"2228","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/local/redis/redisRuntime.ts":"2229","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/local/redis/start/route.ts":"2230","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/local/redis/status/route.ts":"2231","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/local/redis/stop/route.ts":"2232","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/logs/[id]/route.ts":"2233","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/logs/console/route.ts":"2234","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/logs/detail/route.ts":"2235","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/logs/export/route.ts":"2236","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/mcp/audit/route.ts":"2237","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/mcp/audit/stats/route.ts":"2238","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/mcp/sse/route.ts":"2239","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/mcp/status/route.ts":"2240","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/mcp/stream/route.ts":"2241","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/mcp/tools/route.ts":"2242","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/[id]/route.ts":"2243","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/embedding-providers/route.ts":"2244","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/engine-status/route.ts":"2245","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/health/route.ts":"2246","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/reindex/route.ts":"2247","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/retrieve-preview/route.ts":"2248","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/route.ts":"2249","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/summarize/route.ts":"2250","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/middleware/hooks/[name]/route.ts":"2251","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/middleware/hooks/route.ts":"2252","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/model-capability-overrides/route.ts":"2253","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/model-combo-mappings/[id]/route.ts":"2254","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/model-combo-mappings/route.ts":"2255","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/models/alias/route.ts":"2256","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/models/catalog/route.ts":"2257","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/models/openrouter-catalog/route.ts":"2258","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/models/route.ts":"2259","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/models/test/route.ts":"2260","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/models/test-all/route.ts":"2261","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/monitoring/health/route.ts":"2262","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/network/info/route.ts":"2263","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/[provider]/[action]/keychainImportOnly.ts":"2264","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/[provider]/[action]/remoteOAuthHint.ts":"2265","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/[provider]/[action]/route.ts":"2266","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/[provider]/paste-credentials/route.ts":"2267","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/cliproxy-import/route.ts":"2268","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/codex/import/route.ts":"2269","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/codex/import-token/route.ts":"2270","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/cursor/auto-import/route.ts":"2271","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/cursor/import/route.ts":"2272","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/kiro/api-key/helpers.ts":"2273","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/kiro/api-key/route.ts":"2274","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/kiro/auto-import/route.ts":"2275","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/kiro/import/route.ts":"2276","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/kiro/social-authorize/route.ts":"2277","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/kiro/social-exchange/route.ts":"2278","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/raycast/auto-import/route.ts":"2279","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/raycast/import/route.ts":"2280","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/trae/import/route.ts":"2281","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/openapi/spec/route.ts":"2282","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/openapi/try/route.ts":"2283","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/playground/improve-prompt/route.ts":"2284","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/playground/presets/[id]/route.ts":"2285","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/playground/presets/route.ts":"2286","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/playground/simulate-route/route.ts":"2287","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/plugins/[name]/activate/route.ts":"2288","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/plugins/[name]/config/route.ts":"2289","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/plugins/[name]/deactivate/route.ts":"2290","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/plugins/[name]/route.ts":"2291","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/plugins/marketplace/route.ts":"2292","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/plugins/route.ts":"2293","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/plugins/scan/route.ts":"2294","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/policies/route.ts":"2295","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/pricing/defaults/route.ts":"2296","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/pricing/models/route.ts":"2297","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/pricing/route.ts":"2298","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/pricing/sync/route.ts":"2299","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/provider-metrics/route.ts":"2300","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/provider-models/route.ts":"2301","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/provider-nodes/[id]/route.ts":"2302","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/provider-nodes/route.ts":"2303","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/provider-nodes/urlGuard.ts":"2304","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/provider-nodes/validate/route.ts":"2305","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/provider-stats/route.ts":"2306","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/cc-alias/route.ts":"2307","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/claude-auth/apply-local/route.ts":"2308","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/claude-auth/export/route.ts":"2309","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/codex-auth/apply-local/route.ts":"2310","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/codex-auth/export/route.ts":"2311","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/interception-rules/route.ts":"2312","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/login/route.ts":"2313","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/discovery/codex.ts":"2314","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/discovery/helpers.ts":"2315","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/discovery/normalizers.ts":"2316","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/discovery/providerModelsConfig.ts":"2317","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/discovery/providerSets.ts":"2318","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/discoveryClientVersion.ts":"2319","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/discoveryConfig.ts":"2320","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/route.ts":"2321","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/staleEncryptionGuard.ts":"2322","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/param-filters/route.ts":"2323","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/refresh/route.ts":"2324","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/route.ts":"2325","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/sync-models/degradedLocalCatalog.ts":"2326","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/sync-models/route.ts":"2327","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/test/cliRuntimeProviderMap.ts":"2328","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/test/mistralAmbiguousAuth.ts":"2329","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/test/oauthTestConfig.ts":"2330","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/test/route.ts":"2331","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/agy-auth/apply-local/route.ts":"2332","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/agy-auth/import/route.ts":"2333","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/agy-auth/import-bulk/route.ts":"2334","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/agy-auth/zip-extract/route.ts":"2335","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/bulk/route.ts":"2336","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/bulk-web-session/route.ts":"2337","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/claude-auth/import/route.ts":"2338","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/claude-auth/import-bulk/route.ts":"2339","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/claude-auth/zip-extract/route.ts":"2340","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/client/route.ts":"2341","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/codex-auth/import/route.ts":"2342","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/codex-auth/import-bulk/route.ts":"2343","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/codex-auth/zip-extract/route.ts":"2344","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/command-code/auth/apply/route.ts":"2345","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/command-code/auth/callback/route.ts":"2346","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/command-code/auth/shared.ts":"2347","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/command-code/auth/start/route.ts":"2348","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/command-code/auth/status/route.ts":"2349","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/expiration/route.ts":"2350","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/health-autopilot/actions/route.ts":"2351","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/health-autopilot/route.ts":"2352","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/health-matrix/route.ts":"2353","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/import/route.ts":"2354","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/openrouter-stats/route.ts":"2355","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/quota-windows/route.ts":"2356","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/route.ts":"2357","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/test-batch/route.ts":"2358","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/validate/route.ts":"2359","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/zed/discover/route.ts":"2360","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/zed/import/route.ts":"2361","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/zed/manual-import/route.ts":"2362","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/proxy-fallback/test/route.ts":"2363","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/groups/[id]/route.ts":"2364","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/groups/route.ts":"2365","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/keys/[id]/models/route.ts":"2366","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/plans/[connectionId]/route.ts":"2367","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/plans/route.ts":"2368","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/pools/[id]/log/route.ts":"2369","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/pools/[id]/route.ts":"2370","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/pools/[id]/usage/route.ts":"2371","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/pools/route.ts":"2372","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/preview/route.ts":"2373","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/radar/catalog/route.ts":"2374","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/radar/settings/route.ts":"2375","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/radar/sync/route.ts":"2376","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/rate-limit/route.ts":"2377","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/rate-limits/route.ts":"2378","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/relay/tokens/[id]/route.ts":"2379","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/relay/tokens/route.ts":"2380","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/resilience/model-cooldowns/route.ts":"2381","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/resilience/reset/route.ts":"2382","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/resilience/route.ts":"2383","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/restart/route.ts":"2384","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/routing/decisions/[requestId]/route.ts":"2385","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/search/providers/route.ts":"2386","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/search/stats/route.ts":"2387","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/_lib.ts":"2388","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/auto-restart-adopted/route.ts":"2389","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/auto-start/route.ts":"2390","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/install/route.ts":"2391","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/models/route.ts":"2392","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/provider-expose/route.ts":"2393","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/restart/route.ts":"2394","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/rotate-key/route.ts":"2395","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/start/route.ts":"2396","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/status/route.ts":"2397","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/stop/route.ts":"2398","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/update/route.ts":"2399","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/[name]/logs/route.ts":"2400","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/_shared/installRoute.ts":"2401","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/_lib.ts":"2402","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/auto-restart-adopted/route.ts":"2403","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/auto-start/route.ts":"2404","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/install/route.ts":"2405","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/restart/route.ts":"2406","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/start/route.ts":"2407","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/status/route.ts":"2408","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/stop/route.ts":"2409","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/update/route.ts":"2410","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/_lib.ts":"2411","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/auto-restart-adopted/route.ts":"2412","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/auto-start/route.ts":"2413","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/install/route.ts":"2414","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/provider-expose/route.ts":"2415","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/restart/route.ts":"2416","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/start/route.ts":"2417","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/status/route.ts":"2418","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/stop/route.ts":"2419","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/update/route.ts":"2420","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/_lib.ts":"2421","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/admin/_lib.ts":"2422","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/admin/accounts/route.ts":"2423","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/admin/import-from-omniroute/route.ts":"2424","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/admin/login-complete/route.ts":"2425","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/admin/login-start/route.ts":"2426","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/auto-restart-adopted/route.ts":"2427","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/auto-start/route.ts":"2428","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/install/route.ts":"2429","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/restart/route.ts":"2430","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/start/route.ts":"2431","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/status/route.ts":"2432","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/stop/route.ts":"2433","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/update/route.ts":"2434","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/_lib.ts":"2435","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/auto-restart-adopted/route.ts":"2436","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/auto-start/route.ts":"2437","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/install/route.ts":"2438","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/restart/route.ts":"2439","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/start/route.ts":"2440","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/status/route.ts":"2441","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/stop/route.ts":"2442","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/update/route.ts":"2443","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/session-pools/[provider]/route.ts":"2444","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/session-pools/route.ts":"2445","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/sessions/route.ts":"2446","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/__tests__/memory.test.ts":"2447","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/__tests__/settings.test.ts":"2448","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/authz-inventory/route.ts":"2449","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/auto-disable-accounts/route.ts":"2450","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/background-degradation/route.ts":"2451","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/cache-config/route.ts":"2452","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/cache-metrics/route.ts":"2453","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/cc-discovery-metrics/route.ts":"2454","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/combo-defaults/route.ts":"2455","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/compression/mcp-accessibility/route.ts":"2456","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/compression/route.ts":"2457","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/compression/rules/route.ts":"2458","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/compression/run-telemetry/route.ts":"2459","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/database/refresh-stats/route.ts":"2460","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/database/route.ts":"2461","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/database/vacuum/route.ts":"2462","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/export-json/route.ts":"2463","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/favicon/route.ts":"2464","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/feature-flags/route.ts":"2465","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/free-proxies/[id]/add-to-pool/route.ts":"2466","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/free-proxies/bulk-add-to-pool/route.ts":"2467","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/free-proxies/route.ts":"2468","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/free-proxies/stats/route.ts":"2469","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/free-proxies/sync/route.ts":"2470","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/import-json/route.ts":"2471","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/ip-filter/route.ts":"2472","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/lkgp-cache/route.ts":"2473","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/local-corpus/route.ts":"2474","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/memory/route.ts":"2475","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/mitm/route.ts":"2476","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/model-aliases/route.ts":"2477","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/models-dev/route.ts":"2478","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/notion/route.ts":"2479","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/obsidian/route.ts":"2480","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/obsidian/webdav/route.ts":"2481","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/oneproxy/rotate/route.ts":"2482","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/oneproxy/route.ts":"2483","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/payload-rules/route.ts":"2484","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/[id]/repair-relay/route.ts":"2485","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/assignments/route.ts":"2486","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/auto-test/route.ts":"2487","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/batch-activate/route.ts":"2488","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/batch-delete/route.ts":"2489","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/bulk-assign/route.ts":"2490","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/bulk-import/route.ts":"2491","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/egress/route.ts":"2492","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/health/route.ts":"2493","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/migrate/route.ts":"2494","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/pool/route.ts":"2495","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/route.ts":"2496","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxy/cloudflare-deploy/route.ts":"2497","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxy/deno-deploy/route.ts":"2498","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxy/route.ts":"2499","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxy/test/relayTestResult.ts":"2500","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxy/test/route.ts":"2501","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxy/vercel-deploy/route.ts":"2502","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/purge-call-logs/route.ts":"2503","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/purge-detailed-logs/route.ts":"2504","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/purge-logs/route.ts":"2505","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/purge-quota-snapshots/route.ts":"2506","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/purge-request-history/route.ts":"2507","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/purge-usage-history/route.ts":"2508","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/qdrant/cleanup/route.ts":"2509","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/qdrant/embedding-models/route.ts":"2510","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/qdrant/health/route.ts":"2511","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/qdrant/route.ts":"2512","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/qdrant/search/route.ts":"2513","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/quota-store/route.ts":"2514","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/reasoning-routing-rules/[id]/route.ts":"2515","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/reasoning-routing-rules/route.ts":"2516","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/reasoning-routing-rules/simulate/route.ts":"2517","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/require-login/route.ts":"2518","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/route.ts":"2519","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/system-prompt/route.ts":"2520","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/task-routing/route.ts":"2521","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/thinking-budget/route.ts":"2522","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/tier-config/route.ts":"2523","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/shutdown/route.ts":"2524","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/[id]/route.ts":"2525","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/collect/chaos/route.ts":"2526","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/collect/detect/route.ts":"2527","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/collect/install/route.ts":"2528","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/executions/route.ts":"2529","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/install/route.ts":"2530","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/marketplace/install/route.ts":"2531","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/marketplace/route.ts":"2532","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/route.ts":"2533","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/skillssh/install/route.ts":"2534","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/skillssh/route.ts":"2535","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/storage/health/route.ts":"2536","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/sync/bundle/route.ts":"2537","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/sync/cloud/route.ts":"2538","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/sync/initialize/route.ts":"2539","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/sync/tokens/[id]/route.ts":"2540","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/sync/tokens/route.ts":"2541","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/synced-available-models/route.ts":"2542","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/system/env/repair/route.ts":"2543","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/system/version/route.ts":"2544","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tags/route.ts":"2545","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/telemetry/summary/route.ts":"2546","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/token-health/route.ts":"2547","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/agents/[id]/detect/route.ts":"2548","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/agents/[id]/detected-models/route.ts":"2549","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/agents/[id]/dns/route.ts":"2550","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/agents/[id]/mappings/route.ts":"2551","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/agents/[id]/route.ts":"2552","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/agents/route.ts":"2553","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/bypass/route.ts":"2554","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/cert/download/route.ts":"2555","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/cert/regenerate/route.ts":"2556","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/cert/route.ts":"2557","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/config/route.ts":"2558","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/diagnose/route.ts":"2559","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/repair/route.ts":"2560","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/server/route.ts":"2561","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/state/route.ts":"2562","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/tproxy/route.ts":"2563","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/upstream-ca/route.ts":"2564","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/upstream-ca/test/route.ts":"2565","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/capture-modes/http-proxy/route.ts":"2566","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/capture-modes/route.ts":"2567","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/capture-modes/system-proxy/route.ts":"2568","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/capture-modes/tls-intercept/route.ts":"2569","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/export.har/route.ts":"2570","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/hosts/[host]/route.ts":"2571","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/hosts/route.ts":"2572","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/internal/ingest/route.ts":"2573","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/requests/[id]/annotation/route.ts":"2574","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/requests/[id]/replay/route.ts":"2575","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/requests/[id]/route.ts":"2576","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/requests/route.ts":"2577","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/sessions/[id]/export.har/route.ts":"2578","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/sessions/[id]/requests/route.ts":"2579","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/sessions/[id]/route.ts":"2580","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/sessions/route.ts":"2581","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/ws/route.ts":"2582","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/translator/detect/route.ts":"2583","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/translator/history/route.ts":"2584","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/translator/send/route.ts":"2585","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/translator/transform-stream/route.ts":"2586","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/translator/translate/route.ts":"2587","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/cloudflared/route.ts":"2588","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/ngrok/route.ts":"2589","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/check/route.ts":"2590","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/disable/route.ts":"2591","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/enable/route.ts":"2592","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/install/route.ts":"2593","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/login/route.ts":"2594","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/route.ts":"2595","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/routeUtils.ts":"2596","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/start-daemon/route.ts":"2597","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/upstream-proxy/[providerId]/route.ts":"2598","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/[connectionId]/route.ts":"2599","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/analytics/route.ts":"2600","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/budget/bulk/route.ts":"2601","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/budget/route.ts":"2602","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/cache-health/route.ts":"2603","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/call-logs/[id]/route.ts":"2604","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/call-logs/route.ts":"2605","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/codex-reset-credit/route.ts":"2606","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/combo-forecast/route.ts":"2607","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/combo-health/route.ts":"2608","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/combo-health-autopilot/route.ts":"2609","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/combo-health-dashboard/route.ts":"2610","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/combo-scoring-inspector/route.ts":"2611","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/history/route.ts":"2612","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/logs/route.ts":"2613","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/model-latency-stats/route.ts":"2614","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/om-usage/route.ts":"2615","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/provider-limits/route.ts":"2616","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/provider-window-costs/route.ts":"2617","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/proxy-logs/route.ts":"2618","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/quota/route.ts":"2619","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/request-logs/route.ts":"2620","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/requests-by-provider-date/route.ts":"2621","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/route-explain/[id]/route.ts":"2622","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/token-limits/route.ts":"2623","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/utilization/route.ts":"2624","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/[...omnirouteCatchAll]/route.ts":"2625","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/_helpers/apiKeyScope.ts":"2626","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/_shared/audioProviderNodes.ts":"2627","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/_shared/mediaGenerationRoute.ts":"2628","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/_shared/rateLimit.ts":"2629","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/_shared/specialtyCatalog.ts":"2630","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/accounts/[id]/limits/route.ts":"2631","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/agents/credentials/route.ts":"2632","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/agents/health/route.ts":"2633","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/agents/tasks/[id]/route.ts":"2634","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/agents/tasks/route.ts":"2635","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/antigravity/route.ts":"2636","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/api/chat/route.ts":"2637","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/audio/speech/route.ts":"2638","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/audio/transcriptions/route.ts":"2639","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/audio/translations/route.ts":"2640","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/auto-combo/[channel]/candidates/route.ts":"2641","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/batches/[id]/cancel/route.ts":"2642","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/batches/[id]/route.ts":"2643","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/batches/delete-completed/route.ts":"2644","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/batches/formatBatchResponse.ts":"2645","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/batches/parseListLimit.ts":"2646","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/batches/route.ts":"2647","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/chat/completions/route.ts":"2648","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/chatgpt-web/image/[id]/route.ts":"2649","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/combos/projectCombo.ts":"2650","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/combos/route.ts":"2651","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/completions/route.ts":"2652","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/completions/textCompletionTransform.ts":"2653","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/embeddings/route.ts":"2654","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/files/[id]/content/route.ts":"2655","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/files/[id]/route.ts":"2656","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/files/route.ts":"2657","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/images/edits/route.ts":"2658","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/images/generations/route.ts":"2659","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/images/upscale/route.ts":"2660","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/issues/report/route.ts":"2661","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxies/assignments/route.ts":"2662","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxies/bulk-assign/route.ts":"2663","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxies/health/route.ts":"2664","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxies/route.ts":"2665","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxy-subscriptions/[id]/nodes/route.ts":"2666","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxy-subscriptions/[id]/refresh/route.ts":"2667","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxy-subscriptions/[id]/route.ts":"2668","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxy-subscriptions/route.ts":"2669","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/me/status/route.ts":"2670","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/messages/count_tokens/route.ts":"2671","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/messages/route.ts":"2672","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/[...model]/route.ts":"2673","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/aliasBackedModels.ts":"2674","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalog.ts":"2675","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogCache.ts":"2676","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogDedupe.ts":"2677","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogHelpers.ts":"2678","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogOpenrouter.ts":"2679","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogOrder.ts":"2680","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogProviderMaps.ts":"2681","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogRequest.ts":"2682","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogResponse.ts":"2683","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogSyncedCoverage.ts":"2684","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogVision.ts":"2685","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/ccAliasPredicate.ts":"2686","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/functionalGatewayPredicate.ts":"2687","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/modelById.ts":"2688","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/route.ts":"2689","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/syncedCapabilities.ts":"2690","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/moderations/route.ts":"2691","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/music/generations/route.ts":"2692","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/ocr/route.ts":"2693","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/provider-plugin-manifest/route.ts":"2694","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/providers/[provider]/chat/completions/route.ts":"2695","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/providers/[provider]/embeddings/route.ts":"2696","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/providers/[provider]/images/generations/route.ts":"2697","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/providers/[provider]/limits/route.ts":"2698","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/providers/[provider]/models/route.ts":"2699","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/providers/suggested-models/route.ts":"2700","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/quotas/check/route.ts":"2701","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/registered-keys/[id]/revoke/route.ts":"2702","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/registered-keys/[id]/route.ts":"2703","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/registered-keys/route.ts":"2704","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/relay/chat/completions/bifrost/route.ts":"2705","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/relay/chat/completions/bifrostCooldown.ts":"2706","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/relay/chat/completions/relaySecurity.ts":"2707","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/relay/chat/completions/route.ts":"2708","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/relay/chat/completions/routingBackend.ts":"2709","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/relay/chat/completions/streamFinalizer.ts":"2710","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/rerank/route.ts":"2711","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/responses/[...path]/route.ts":"2712","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/responses/route.ts":"2713","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/route.ts":"2714","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/search/analytics/route.ts":"2715","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/search/route.ts":"2716","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/videos/generations/route.ts":"2717","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/api/chat/route.ts":"2718","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/api/show/route.ts":"2719","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/api/tags/route.ts":"2720","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/api/version/route.ts":"2721","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/chat/completions/route.ts":"2722","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/combos/route.ts":"2723","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/familyFirstModelIds.ts":"2724","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/modelPresentation.ts":"2725","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/models/route.ts":"2726","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/reasoningMetadata.ts":"2727","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/responses/route.ts":"2728","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/route.ts":"2729","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/serviceTierVariants.ts":"2730","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/tokenizedRequest.ts":"2731","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/usableChatModel.ts":"2732","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/v1/chat/completions/route.ts":"2733","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/v1/models/route.ts":"2734","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/combos/[token]/[[...slug]]/route.ts":"2735","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/contextSanitizer.ts":"2736","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/api/chat/route.ts":"2737","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/api/show/route.ts":"2738","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/api/tags/route.ts":"2739","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/api/version/route.ts":"2740","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/chat/completions/route.ts":"2741","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/combos/route.ts":"2742","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/familyFirstModelIds.ts":"2743","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/modelPresentation.ts":"2744","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/models/route.ts":"2745","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/reasoningMetadata.ts":"2746","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/responses/route.ts":"2747","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/route.ts":"2748","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/serviceTierVariants.ts":"2749","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/tokenizedRequest.ts":"2750","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/v1/chat/completions/route.ts":"2751","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/v1/models/route.ts":"2752","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/web/fetch/route.ts":"2753","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/ws/route.ts":"2754","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1beta/models/[...path]/convertGeminiToInternal.ts":"2755","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1beta/models/[...path]/route.ts":"2756","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1beta/models/route.ts":"2757","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/version-manager/check-update/route.ts":"2758","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/version-manager/install/route.ts":"2759","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/version-manager/request.ts":"2760","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/version-manager/restart/route.ts":"2761","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/version-manager/start/route.ts":"2762","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/version-manager/status/route.ts":"2763","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/version-manager/stop/route.ts":"2764","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/vnc-session/[...params]/route.ts":"2765","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/vnc-session/route.ts":"2766","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/webhooks/[id]/deliveries/route.ts":"2767","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/webhooks/[id]/route.ts":"2768","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/webhooks/[id]/test/route.ts":"2769","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/webhooks/route.ts":"2770","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/webhooks/validate-url/route.ts":"2771","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/auth/callback/page.tsx":"2772","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/authorize/parseCallback.ts":"2773","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/authorize/route.ts":"2774","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/callback/page.tsx":"2775","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/connect/codex/[token]/CodexConnectClient.tsx":"2776","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/connect/codex/[token]/page.tsx":"2777","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/[...slug]/page.tsx":"2778","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/api/search/route.ts":"2779","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/api-explorer/page.tsx":"2780","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/components/ApiExplorerClient.tsx":"2781","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/components/DocsPageAnalytics.tsx":"2782","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/components/FeedbackWidget.tsx":"2783","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/layout.tsx":"2784","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/lib/openapi.generated.ts":"2785","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/page.tsx":"2786","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/error.tsx":"2787","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/forbidden/page.tsx":"2788","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/forgot-password/page.tsx":"2789","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/global-error.tsx":"2790","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/healthz/route.ts":"2791","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/AnimatedBackground.tsx":"2792","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/Features.tsx":"2793","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/FlowAnimation.tsx":"2794","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/Footer.tsx":"2795","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/GetStarted.tsx":"2796","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/HeroSection.tsx":"2797","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/HowItWorks.tsx":"2798","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/Navigation.tsx":"2799","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/page.tsx":"2800","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/layout.tsx":"2801","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/loading.tsx":"2802","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/login/page.tsx":"2803","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/maintenance/page.tsx":"2804","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/manifest.ts":"2805","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/not-found.tsx":"2806","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/offline/page.tsx":"2807","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/page.tsx":"2808","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/privacy/page.tsx":"2809","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/status/page.tsx":"2810","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/terms/page.tsx":"2811","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/assessment/assessor.ts":"2812","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/assessment/categorizer.ts":"2813","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/assessment/index.ts":"2814","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/assessment/migration.ts":"2815","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/assessment/selfHealer.ts":"2816","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/assessment/types.ts":"2817","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/comboResolver.ts":"2818","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/configAudit.ts":"2819","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/connectionModelRules.ts":"2820","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/costRules.ts":"2821","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/degradation.ts":"2822","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/fallbackPolicy.ts":"2823","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/lockoutPolicy.ts":"2824","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/modelAvailability.ts":"2825","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/omnirouteResponseMeta.ts":"2826","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/persistence/comboRepositories.ts":"2827","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/pipeline.ts":"2828","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/policyEngine.ts":"2829","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/prompts.ts":"2830","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/providerExpiration.ts":"2831","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/quotaCache.ts":"2832","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/responses.ts":"2833","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/tagRouter.ts":"2834","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/types.ts":"2835","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/hooks/useLiveCompression.ts":"2836","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/hooks/useLiveDashboard.ts":"2837","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/hooks/usePreviewCompression.ts":"2838","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/hooks/useProviderBreakerHealth.ts":"2839","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/i18n/config.ts":"2840","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/i18n/detectBrowserLocale.ts":"2841","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/i18n/request.ts":"2842","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/instrumentation-node.ts":"2843","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/instrumentation.ts":"2844","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/routingLogger.ts":"2845","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/skills/costAnalysis.ts":"2846","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/skills/healthReport.ts":"2847","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/skills/listCapabilities.ts":"2848","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/skills/providerDiscovery.ts":"2849","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/skills/quotaManagement.ts":"2850","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/skills/smartRouting.ts":"2851","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/streaming.ts":"2852","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/taskExecution.ts":"2853","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/taskManager.ts":"2854","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/accessTokens/scopes.ts":"2855","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/acp/index.ts":"2856","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/acp/manager.ts":"2857","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/acp/registry.ts":"2858","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/agentSkills/catalog.ts":"2859","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/agentSkills/cliRegistryParser.ts":"2860","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/agentSkills/generator.ts":"2861","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/agentSkills/openapiParser.ts":"2862","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/agentSkills/schemas.ts":"2863","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/agentSkills/types.ts":"2864","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/comboErrorResponse.ts":"2865","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/errorResponse.ts":"2866","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/internalServiceAuth.ts":"2867","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/modelTestRunner.ts":"2868","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/proxyRegistryRouteHandlers.ts":"2869","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/requireCliToolsAuth.ts":"2870","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/requireManagementAuth.ts":"2871","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/serverErrorMessage.ts":"2872","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/apiBridgeServer.ts":"2873","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/apiKeyExposure.ts":"2874","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/arenaEloSync.ts":"2875","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/audit/activityIcons.ts":"2876","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/audit/highLevelActions.ts":"2877","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/audit/timeline.ts":"2878","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/auth/managementPassword.ts":"2879","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/batches/costEstimator.ts":"2880","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/batches/csvToJsonl.ts":"2881","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/batches/dispatch.ts":"2882","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/batches/retryFailed.ts":"2883","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/batches/schemas.ts":"2884","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/batches/types.ts":"2885","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/batches/validateJsonl.ts":"2886","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/benchmarks.ts":"2887","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/build-profile/featureDisabled.ts":"2888","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cacheControlSettings.ts":"2889","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cacheLayer.ts":"2890","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/catalog/openrouterCatalog.ts":"2891","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/catalog/openrouterProviderStats.ts":"2892","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/ccDiscoveryAliasResolve.ts":"2893","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/chaos/chaosConfig.ts":"2894","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/chaos/chaosExecutor.ts":"2895","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/claudeProfileAutoSync.ts":"2896","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/codexProfileAutoSync.ts":"2897","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/claude.ts":"2898","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/cline.ts":"2899","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/codex.ts":"2900","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/continue.ts":"2901","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/hermes-agent.ts":"2902","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/hermes.ts":"2903","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/hermesHome.ts":"2904","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/index.ts":"2905","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/kilocode.ts":"2906","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/opencode.ts":"2907","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/doctor/checks.ts":"2908","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/log-streamer.ts":"2909","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/tool-detector.ts":"2910","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cliTools/batchStatusCache.ts":"2911","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cliTools/checkToolConfigStatus.ts":"2912","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/agents/codex.ts":"2913","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/agents/cursor.ts":"2914","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/agents/devin.ts":"2915","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/agents/jules.ts":"2916","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/api.ts":"2917","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/baseAgent.ts":"2918","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/credentials.ts":"2919","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/db.ts":"2920","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/index.ts":"2921","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/julesApi.ts":"2922","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/registry.ts":"2923","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/types.ts":"2924","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudSync.stub.ts":"2925","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudSync.ts":"2926","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudflaredTunnel.ts":"2927","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/autoPromote.ts":"2928","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/builderDraft.ts":"2929","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/builderOptions.ts":"2930","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/comboContext.ts":"2931","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/compositeTiers.ts":"2932","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/controlCenter.ts":"2933","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/intelligentRouting.ts":"2934","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/invariants.ts":"2935","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/modelNameCollision.ts":"2936","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/steps.ts":"2937","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/testHealth.ts":"2938","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/compliance/index.ts":"2939","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/compliance/noLog.ts":"2940","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/compliance/providerAudit.ts":"2941","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/compression/judgeModelClient.ts":"2942","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/config/hotReload.ts":"2943","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/config/runtimeSettings.ts":"2944","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/consoleInterceptor.ts":"2945","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/container.ts":"2946","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/contextWindowResolver.ts":"2947","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/copilot/codegraphKnowledge.ts":"2948","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/copilot/commandClassification.ts":"2949","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/copilot/engine.ts":"2950","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/copilot/systemPrompt.ts":"2951","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/copilot/tools.ts":"2952","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/credentialHealth/cache.ts":"2953","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/credentialHealth/scheduler.ts":"2954","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/dataPaths.ts":"2955","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/__tests__/quotaSnapshots.test.ts":"2956","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/_rowTypes.ts":"2957","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/accessTokens.ts":"2958","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/adapters/betterSqliteAdapter.ts":"2959","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/adapters/bunSqliteAdapter.ts":"2960","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/adapters/driverFactory.ts":"2961","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/adapters/nodeSqliteAdapter.ts":"2962","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/adapters/nodeSqliteShared.ts":"2963","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/adapters/sqljsAdapter.ts":"2964","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/adapters/types.ts":"2965","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/agentBridgeBypass.ts":"2966","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/agentBridgeMappings.ts":"2967","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/agentBridgeState.ts":"2968","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeyColumnFallbacks.ts":"2969","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeyContextSources.ts":"2970","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeyGroups.ts":"2971","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeyUsageLimitFields.ts":"2972","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeys/modelPermissions.ts":"2973","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeys/rowParsers.ts":"2974","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeys/types.ts":"2975","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeys.ts":"2976","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/autoCandidateOverrides.ts":"2977","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/backup.ts":"2978","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/batches.ts":"2979","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/callLogStats.ts":"2980","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/caseMapping.ts":"2981","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/ccDiscoveryAliases.ts":"2982","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/ccDiscoveryMetrics.ts":"2983","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/ccrBlocks.ts":"2984","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/cleanup/usagePurge.ts":"2985","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/cleanup.ts":"2986","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/cliToolState.ts":"2987","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/comboForecast.ts":"2988","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/combos.ts":"2989","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/commandCodeAuth.ts":"2990","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/compression.ts":"2991","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/compressionAnalytics.ts":"2992","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/compressionCacheStats.ts":"2993","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/compressionCombos.ts":"2994","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/compressionContextBudget.ts":"2995","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/compressionDetailNormalizers.ts":"2996","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/compressionRunTelemetry.ts":"2997","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/contextHandoffs.ts":"2998","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/core.ts":"2999","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/creditBalance.ts":"3000","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/databaseSettings.ts":"3001","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/detailedLogs.ts":"3002","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/discovery.ts":"3003","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/discoveryResults.ts":"3004","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/domainState.ts":"3005","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/encryption.ts":"3006","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/evals.ts":"3007","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/featureFlags.ts":"3008","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/files.ts":"3009","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/freeProxies.ts":"3010","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/functionalGatewayMirrors.ts":"3011","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/gamification.ts":"3012","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/healthCheck.ts":"3013","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/inspectorCustomHosts.ts":"3014","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/inspectorSessions.ts":"3015","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/interceptionRules.ts":"3016","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/jsonMigration.ts":"3017","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/localCorpus.ts":"3018","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/memoryVec.ts":"3019","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/middleware.ts":"3020","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/migrationRunner/constants.ts":"3021","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/migrationRunner/extraDirs.ts":"3022","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/migrationRunner.ts":"3023","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/modelCapabilityOverrides.ts":"3024","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/modelComboMappings.ts":"3025","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/modelContextOverrides.ts":"3026","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/modelIntelligence.ts":"3027","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/models/activeSyncedCatalog.ts":"3028","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/models/aliases.ts":"3029","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/models/compat.ts":"3030","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/models/mitmAlias.ts":"3031","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/models/shared.ts":"3032","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/models/synced.ts":"3033","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/models.ts":"3034","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/notion.ts":"3035","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/obsidian.ts":"3036","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/omp.ts":"3037","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/oneproxy.ts":"3038","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/optimizationSettings.ts":"3039","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/paramFilters.ts":"3040","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/playgroundPresets.ts":"3041","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/pluginMetrics.ts":"3042","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/plugins.ts":"3043","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/probeUtils.ts":"3044","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/prompts.ts":"3045","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providerLimits.ts":"3046","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providerNodeSelect.ts":"3047","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providerPlans.ts":"3048","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providerStats.ts":"3049","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers/columns.ts":"3050","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers/deletion.ts":"3051","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers/lazyConnectionView.ts":"3052","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers/migrations.ts":"3053","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers/nodes.ts":"3054","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers/rateLimit.ts":"3055","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers/usageIdentityReconciliation.ts":"3056","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers.ts":"3057","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxies/guards.ts":"3058","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxies/mappers.ts":"3059","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxies/registryGeneration.ts":"3060","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxies/rotation.ts":"3061","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxies/types.ts":"3062","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxies.ts":"3063","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxyLatency.ts":"3064","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxyLogs.ts":"3065","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxySubscriptions.ts":"3066","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/quotaConsumption.ts":"3067","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/quotaGroups.ts":"3068","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/quotaModelCaps.ts":"3069","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/quotaPools.ts":"3070","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/quotaResetEvents.ts":"3071","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/quotaSnapshots.ts":"3072","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/radar.ts":"3073","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/readCache.ts":"3074","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/reasoningCache.ts":"3075","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/reasoningRoutingRules.ts":"3076","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/recovery.ts":"3077","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/registeredKeys.ts":"3078","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/relayProbeStats.ts":"3079","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/relayProxies.ts":"3080","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/repositories/routingConfigRepositories.ts":"3081","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/repositories/sqliteComboRepository.ts":"3082","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/repositories/sqliteModelComboMappingRepository.ts":"3083","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/schemaColumns.ts":"3084","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/secrets.ts":"3085","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/semanticCache.ts":"3086","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/serviceModels.ts":"3087","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/sessionAccountAffinity.ts":"3088","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/settings/cacheMetrics.ts":"3089","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/settings/lkgp.ts":"3090","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/settings/noAuthProxyFallback.ts":"3091","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/settings/pricing.ts":"3092","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/settings/shared.ts":"3093","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/settings.ts":"3094","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/skills.ts":"3095","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/stateReset.ts":"3096","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/stats.ts":"3097","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/syncTokens.ts":"3098","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/tierConfig.ts":"3099","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/tokenLimits.ts":"3100","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/upstreamProxy.ts":"3101","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/usageAnalytics/sources.ts":"3102","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/usageAnalytics.ts":"3103","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/usageLogs.ts":"3104","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/usageSummary.ts":"3105","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/vacuumScheduler.ts":"3106","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/versionManager.ts":"3107","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/webSessionDedup.ts":"3108","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/webhookDeliveries.ts":"3109","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/webhooks.ts":"3110","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/discovery/index.ts":"3111","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/display/names.ts":"3112","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/display/useProviderNodeMap.ts":"3113","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/docsI18nPath.ts":"3114","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/docsSanitizer.ts":"3115","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/embeddings/familyGuard.ts":"3116","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/embeddings/service.ts":"3117","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/env/runtimeEnv.ts":"3118","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/evals/evalRunner/builtinSuites.ts":"3119","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/evals/evalRunner.ts":"3120","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/evals/runtime.ts":"3121","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/events/eventBus.ts":"3122","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/events/types.ts":"3123","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProviderRankings.ts":"3124","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProviderRankingsAuthType.ts":"3125","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/index.ts":"3126","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/iplocate.ts":"3127","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/oneproxy.ts":"3128","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/proxifly.ts":"3129","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/scheduler.ts":"3130","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/syncCycle.ts":"3131","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/types.ts":"3132","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/webshare.ts":"3133","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/antiCheat.ts":"3134","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/badges.ts":"3135","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/events.ts":"3136","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/index.ts":"3137","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/invites.ts":"3138","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/leaderboard.ts":"3139","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/notifications.ts":"3140","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/servers.ts":"3141","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/sharing.ts":"3142","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/streaks.ts":"3143","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/xp.ts":"3144","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gracefulShutdown.ts":"3145","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/base.ts":"3146","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/credentialMasker.ts":"3147","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/index.ts":"3148","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/piiMasker.ts":"3149","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/promptInjection.ts":"3150","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/registry.ts":"3151","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/visionBridge.ts":"3152","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/visionBridgeCredentials.ts":"3153","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/visionBridgeHelpers.ts":"3154","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/visionBridgeRouter.ts":"3155","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/headroom/detect.ts":"3156","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/headroom/process.ts":"3157","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/idempotencyLayer.ts":"3158","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/images/imageRouteModel.ts":"3159","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/initCloudSync.ts":"3160","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/inspector/agentBridgeMaintenanceApi.ts":"3161","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/inspector/captureState.ts":"3162","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/inspector/configPortability.ts":"3163","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/inspector/harExport.ts":"3164","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/inspector/matchesTrafficFilter.ts":"3165","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/inspector/secretMask.ts":"3166","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/inspector/tproxyCaptureApi.ts":"3167","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/ipUtils.ts":"3168","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/issueAgent/audit.ts":"3169","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/issueAgent/execution.ts":"3170","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/issueAgent/githubExport.ts":"3171","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/issueAgent/recordedTriage.ts":"3172","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/jobs/backupScheduleJob.ts":"3173","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/jobs/budgetResetJob.ts":"3174","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/jobs/cronMatch.ts":"3175","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/jobs/reasoningCacheCleanupJob.ts":"3176","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/localCorpus/configured.ts":"3177","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/localCorpus/index.ts":"3178","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/localDb.ts":"3179","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/localHealthCheck.ts":"3180","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/logEnv.ts":"3181","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/logPayloads.ts":"3182","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/logRotation.ts":"3183","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/machineToken.ts":"3184","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/__tests__/generic-backend.test.ts":"3185","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/__tests__/injection.test.ts":"3186","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/__tests__/qdrant-wiring.test.ts":"3187","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/__tests__/retrieval.test.ts":"3188","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/__tests__/schemas.test.ts":"3189","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/backend.ts":"3190","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/cache.ts":"3191","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/embedding/cache.ts":"3192","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/embedding/index.ts":"3193","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/embedding/remote.ts":"3194","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/embedding/staticPotion.ts":"3195","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/embedding/transformersLocal.ts":"3196","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/embedding/types.ts":"3197","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/extraction.ts":"3198","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/genericBackend.ts":"3199","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/index.ts":"3200","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/injection.ts":"3201","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/manager.ts":"3202","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/obsidianBackend.ts":"3203","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/qdrant.ts":"3204","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/reindex.ts":"3205","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/retrieval/scoring.ts":"3206","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/retrieval.ts":"3207","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/schemas.ts":"3208","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/settings.ts":"3209","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/sqliteBackend.ts":"3210","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/store.ts":"3211","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/summarization.ts":"3212","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/typedDecay.ts":"3213","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/types.ts":"3214","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/vectorStore.ts":"3215","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/verify.ts":"3216","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/middleware/cliTokenAuth.ts":"3217","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/middleware/registry.ts":"3218","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/middleware/types.ts":"3219","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/modelAliasResolver.ts":"3220","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/modelAliasSeed.ts":"3221","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/modelCapabilities.ts":"3222","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/modelMetadataRegistry.ts":"3223","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/modelsDevSync/transform.ts":"3224","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/modelsDevSync.ts":"3225","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/monitoring/comboHealthAutopilot.ts":"3226","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/monitoring/observability.ts":"3227","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/monitoring/providerHealthAutopilot.ts":"3228","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/monitoring/providerHealthMatrix.ts":"3229","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/ngrokTunnel.ts":"3230","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/notion/api.ts":"3231","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/codexDeviceFlow.ts":"3232","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/config/index.ts":"3233","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/connectionPersistence.ts":"3234","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/constants/oauth.ts":"3235","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/credentialBlob.ts":"3236","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/deviceFlowTickets.ts":"3237","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/gitlab.ts":"3238","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/kiroConnectionIdentity.ts":"3239","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/kiroSocialPoll.ts":"3240","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/pasteCredentials.ts":"3241","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/agy.ts":"3242","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/antigravity.ts":"3243","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/claude.ts":"3244","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/cline.ts":"3245","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/codebuddy-cn.ts":"3246","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/codex.ts":"3247","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/cursor.ts":"3248","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/ghe-copilot.ts":"3249","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/github.ts":"3250","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/gitlab-duo.ts":"3251","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/grok-cli-oauth.ts":"3252","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/grok-cli.ts":"3253","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/index.ts":"3254","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/kilocode.ts":"3255","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/kimi-coding.ts":"3256","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/kiro.ts":"3257","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/qoder.ts":"3258","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/raycast.ts":"3259","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/trae.ts":"3260","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/windsurf.ts":"3261","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/xai-oauth.ts":"3262","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/zed-hosted.ts":"3263","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/zed.ts":"3264","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers.ts":"3265","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/services/codexImport.ts":"3266","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/services/cursor.ts":"3267","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/services/kiro.ts":"3268","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/services/raycast.ts":"3269","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/services/raycastLocal.ts":"3270","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/agyAuthImport.ts":"3271","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/banner.ts":"3272","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/claudeAuthFile.ts":"3273","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/claudeAuthImport.ts":"3274","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/claudeAuthZipExtract.ts":"3275","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/cliProxyAuthImport.ts":"3276","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/codexAuthFile.ts":"3277","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/codexAuthImport.ts":"3278","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/codexAuthZipExtract.ts":"3279","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/codexConnectionSelection.ts":"3280","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/codexSessionImport.ts":"3281","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/googleLoopbackHint.ts":"3282","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/grokCliAuthJson.ts":"3283","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/jsonZipExtract.ts":"3284","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/loopbackTunnel.ts":"3285","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/pkce.ts":"3286","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/pkceLoopbackWarning.ts":"3287","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/server.ts":"3288","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/ui.ts":"3289","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/obsidian/api.ts":"3290","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/obsidianSync.ts":"3291","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oneproxyRotator.ts":"3292","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oneproxySync.ts":"3293","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/piiSanitizer.ts":"3294","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/playground/codeExport.ts":"3295","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/playground/promptImprover.ts":"3296","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/playground/streamMetrics.ts":"3297","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/playground/types.ts":"3298","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/devMode.ts":"3299","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/doctor.ts":"3300","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/errors.ts":"3301","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/hooks.ts":"3302","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/index.ts":"3303","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/loader.ts":"3304","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/logger.ts":"3305","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/manager.ts":"3306","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/manifest.ts":"3307","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/marketplace.ts":"3308","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/scanner.ts":"3309","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/sdk.ts":"3310","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/testRunner.ts":"3311","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/watcher.ts":"3312","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/pricingSync.ts":"3313","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/promptCache/index.ts":"3314","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/promptCache/prefixAnalyzer.ts":"3315","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providerModels/cursorAgent.ts":"3316","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providerModels/geminiModelsParser.ts":"3317","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providerModels/managedAvailableModels.ts":"3318","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providerModels/managedModelImport.ts":"3319","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providerModels/modelDiscovery.ts":"3320","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/catalog.ts":"3321","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/claudeExtraUsage.ts":"3322","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/claudeFastMode.ts":"3323","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/codexConnectionDefaults.ts":"3324","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/codexFastTier.ts":"3325","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/imageValidation.ts":"3326","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/managedAvailableModels.ts":"3327","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/modelListingCapability.ts":"3328","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/nvidiaValidationModel.ts":"3329","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/requestDefaults.ts":"3330","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/serviceKindIndex.ts":"3331","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/staticModels.ts":"3332","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/anthropicFormat.ts":"3333","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/audioMiscProviders.ts":"3334","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/cloudProviders.ts":"3335","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/cozeError.ts":"3336","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/directChatProbe.ts":"3337","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/embeddingProviders.ts":"3338","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/headers.ts":"3339","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/kiro.ts":"3340","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/metaAi.ts":"3341","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/openaiFormat.ts":"3342","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/searchProviders.ts":"3343","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/specialtyInline.ts":"3344","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/transport.ts":"3345","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/urlHelpers.ts":"3346","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/webCookie.ts":"3347","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/webProvidersA.ts":"3348","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/webProvidersB.ts":"3349","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation.ts":"3350","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/webCookieAuth.ts":"3351","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/xai/thinking.ts":"3352","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/xai/translators/claude.ts":"3353","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/xai/translators/gemini.ts":"3354","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/xai/translators/openai-chat.ts":"3355","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/xai/translators/openai-responses.ts":"3356","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxyEgress.ts":"3357","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxyHealth/decision.ts":"3358","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxyHealth/scheduler.ts":"3359","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxyHealth/statusPolicy.ts":"3360","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxyHealth.ts":"3361","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxyLogger.ts":"3362","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxyRelay/cloudflareWorkerScript.ts":"3363","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/coreEndpoint.ts":"3364","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/due.ts":"3365","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/fetchGuard.ts":"3366","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/fetchRetry.ts":"3367","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/index.ts":"3368","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/needsCore.ts":"3369","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/parse.ts":"3370","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/schema.ts":"3371","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/scopes.ts":"3372","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/subscriptionService.ts":"3373","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/url.ts":"3374","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/QuotaStore.ts":"3375","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/accountBuckets.ts":"3376","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/burnRate.ts":"3377","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/connectionProvider.ts":"3378","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/connectionRecovery.ts":"3379","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/dimensions.ts":"3380","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/enforce.ts":"3381","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/fairShare.ts":"3382","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/planRegistry.ts":"3383","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/planResolver.ts":"3384","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/quotaCombos.ts":"3385","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/quotaKey.ts":"3386","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/quotaModelNaming.ts":"3387","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/redisQuotaStore.ts":"3388","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/saturationSignals.ts":"3389","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/spendRecorder.ts":"3390","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/sqliteQuotaStore.ts":"3391","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/storeFactory.ts":"3392","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/types.ts":"3393","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/radar/applyFeed.ts":"3394","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/radar/feedSchema.ts":"3395","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/radar/index.ts":"3396","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/radar/pinnedKeys.ts":"3397","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/radar/sync.ts":"3398","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/radar/verify.ts":"3399","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/reasoningRouting/input.ts":"3400","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/reasoningRouting/policy.ts":"3401","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/resilience/modelLockoutSettings.ts":"3402","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/resilience/settings/normalize.ts":"3403","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/resilience/settings/types.ts":"3404","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/resilience/settings.ts":"3405","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/routerEval/index.ts":"3406","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/runtime/ports.ts":"3407","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/search/executeWebSearch.ts":"3408","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/security/localEndpoints.ts":"3409","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/semanticCache.ts":"3410","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/serverLifecycle.ts":"3411","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/ServiceSupervisor.ts":"3412","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/apiKey.ts":"3413","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/bootstrap.ts":"3414","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/embedPath.ts":"3415","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/embedWsProxy.ts":"3416","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/healthCheck.ts":"3417","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/htmlRewriter.ts":"3418","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/installers/bifrost.ts":"3419","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/installers/cliproxy.ts":"3420","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/installers/dario.ts":"3421","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/installers/mux.ts":"3422","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/installers/ninerouter.stub.ts":"3423","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/installers/ninerouter.ts":"3424","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/installers/utils.ts":"3425","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/modelSync.ts":"3426","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/portProbe.ts":"3427","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/providerPlugins/registry.ts":"3428","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/providerPlugins/types.ts":"3429","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/quotaAutoPing.ts":"3430","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/registry.ts":"3431","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/reverseProxy.ts":"3432","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/ringBuffer.ts":"3433","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/serviceBackends.ts":"3434","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/types.ts":"3435","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/__tests__/integration.test.ts":"3436","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/a2a.ts":"3437","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/builtin/browser.ts":"3438","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/builtins.ts":"3439","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/containerProvider.ts":"3440","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/custom.ts":"3441","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/executor.ts":"3442","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/githubCollector.ts":"3443","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/hybrid.ts":"3444","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/injection.ts":"3445","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/interception.ts":"3446","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/providerSettings.ts":"3447","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/registry.ts":"3448","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/sandbox.ts":"3449","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/schemas.ts":"3450","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/skillssh.ts":"3451","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/types.ts":"3452","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/webFetchExecution.ts":"3453","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/source.ts":"3454","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/spend/batchWriter.ts":"3455","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/sseTextTransform.ts":"3456","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/streamingPiiTransform.ts":"3457","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/sync/bundle.ts":"3458","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/sync/tokens.ts":"3459","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/system/autoUpdate.ts":"3460","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/system/globalPackagePath.ts":"3461","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/system/versionCheck.ts":"3462","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/system/versionCompare.ts":"3463","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/tailscaleTunnel.ts":"3464","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/tokenHealthCheck.ts":"3465","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/tokenHealthCheckCopilot.ts":"3466","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/toolPolicy.ts":"3467","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/translator/streamTransform.ts":"3468","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/translatorEvents.ts":"3469","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/accountIdentity.ts":"3470","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/aggregateHistory.ts":"3471","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/apiKeySelfService.ts":"3472","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/apiKeyUsageLimits.ts":"3473","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/cacheHealth.ts":"3474","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/callLogApiKeyContext.ts":"3475","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/callLogArtifacts.ts":"3476","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/callLogs/format.ts":"3477","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/callLogs.ts":"3478","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/callLogsBoundedQueries.ts":"3479","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/codexResetCredits.ts":"3480","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/comboForecast.ts":"3481","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/comboHealth.ts":"3482","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/comboHealthDashboard.ts":"3483","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/comboScoringInspector.ts":"3484","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/completedRequestDetails.ts":"3485","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/costCalculator.ts":"3486","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/fetcher.ts":"3487","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/flatRateProviders.ts":"3488","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/internalUsageCommand.ts":"3489","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/migrations.ts":"3490","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/pendingRequestScope.ts":"3491","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/providerDisplayNames.ts":"3492","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/providerLimits/chunkedSpacingSync.ts":"3493","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/providerLimits/quotaNormalize.ts":"3494","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/providerLimits.ts":"3495","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/providerLimitsCache.ts":"3496","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/providerWindowCosts.ts":"3497","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/resilienceExplain.ts":"3498","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/routeExplain.ts":"3499","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/tokenAccounting.ts":"3500","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/usageEvents.ts":"3501","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/usageHistory/helpers.ts":"3502","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/usageHistory.ts":"3503","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/usageStats.ts":"3504","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usageAnalytics.ts":"3505","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usageDb.ts":"3506","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/versionManager/binaryManager.ts":"3507","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/versionManager/healthMonitor.ts":"3508","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/versionManager/index.ts":"3509","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/versionManager/processManager.ts":"3510","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/versionManager/releaseChecker.ts":"3511","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vncSession/harvest.ts":"3512","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vncSession/manifest.ts":"3513","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vncSession/service.ts":"3514","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vscode/familyFirstModelIds.ts":"3515","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vscode/modelPresentation.ts":"3516","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vscode/reasoningMetadata.ts":"3517","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vscode/serviceTierVariants.ts":"3518","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vscode/tokenizedRequest.ts":"3519","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/webhookDispatcher.ts":"3520","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/webhooks/eventDescriptions.ts":"3521","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/webhooks/integrations/discord.ts":"3522","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/webhooks/integrations/slack.ts":"3523","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/webhooks/integrations/telegram.ts":"3524","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/ws/handshake.ts":"3525","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/zed-oauth/confirmedAccounts.ts":"3526","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/zed-oauth/credentialFingerprint.ts":"3527","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/zed-oauth/dockerDetect.ts":"3528","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/zed-oauth/importUtils.ts":"3529","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/zed-oauth/keychain-reader.stub.ts":"3530","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/zed-oauth/keychain-reader.ts":"3531","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/middleware/promptInjectionGuard.ts":"3532","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/_internal/aliasConfig.cjs":"3533","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/_internal/bypass.cjs":"3534","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/_internal/forwardTarget.cjs":"3535","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/_internal/ingest.cjs":"3536","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/_internal/rootCaShim.cjs":"3537","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/_internal/standaloneRouting.cjs":"3538","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/aliasConfig.ts":"3539","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/cert/generate.ts":"3540","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/cert/install.stub.ts":"3541","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/cert/install.ts":"3542","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/cert/migration.ts":"3543","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/cert/rootCa.ts":"3544","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/dataDir.ts":"3545","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/antigravity.ts":"3546","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/claudeCode.ts":"3547","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/codex.ts":"3548","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/copilot.ts":"3549","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/cursor.ts":"3550","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/index.ts":"3551","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/kiro.ts":"3552","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/openCode.ts":"3553","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/zed.ts":"3554","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/dns/dnsConfig.ts":"3555","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/dns/provision.ts":"3556","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/antigravity.ts":"3557","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/base.ts":"3558","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/claudeCode.ts":"3559","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/codex.ts":"3560","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/copilot.ts":"3561","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/cursor.ts":"3562","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/kiro.ts":"3563","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/openCode.ts":"3564","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/trae.ts":"3565","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/zed.ts":"3566","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/agentBridgeHook.ts":"3567","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/buffer.ts":"3568","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/contextKey.ts":"3569","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/conversationNormalizer.ts":"3570","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/diagnostics.ts":"3571","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/httpProxyServer.ts":"3572","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/kindDetector.ts":"3573","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/llmMetadataExtractor.ts":"3574","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/pricing.ts":"3575","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/processAttribution.ts":"3576","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/sseMerger.ts":"3577","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/systemProxyConfig.ts":"3578","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/types.ts":"3579","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/manager.runtime.ts":"3580","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/manager.stub.ts":"3581","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/manager.ts":"3582","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/maskSecrets.ts":"3583","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/passthrough.ts":"3584","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/privilegedMitmStep.ts":"3585","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/repair.ts":"3586","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/sanitizeHeaders.ts":"3587","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/server.cjs":"3588","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/socketTimeouts.ts":"3589","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/stopDnsTeardown.ts":"3590","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/sudoGate.ts":"3591","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/systemCommands.ts":"3592","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/antigravity.ts":"3593","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/claudeCode.ts":"3594","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/codex.ts":"3595","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/copilot.ts":"3596","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/cursor.ts":"3597","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/ghe-copilot.ts":"3598","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/index.ts":"3599","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/kiro.ts":"3600","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/openCode.ts":"3601","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/trae.ts":"3602","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/zed.ts":"3603","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/caTrust.ts":"3604","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/captureManager.ts":"3605","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/captureMode.ts":"3606","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/commands.ts":"3607","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/dynamicCert.ts":"3608","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/setup.ts":"3609","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/tlsCapture.ts":"3610","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/transparentSocket.ts":"3611","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/types.ts":"3612","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/upstreamTrust.ts":"3613","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/models/index.ts":"3614","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/proxy.ts":"3615","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/scripts/backfillAggregation.ts":"3616","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/auth/loginGuard.ts":"3617","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/accessScopes.ts":"3618","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/accessTokenAuth.ts":"3619","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/assertAuth.ts":"3620","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/classify.ts":"3621","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/context.ts":"3622","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/csrf.ts":"3623","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/headers.ts":"3624","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/peerStamp.ts":"3625","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/pipeline.ts":"3626","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/policies/clientApi.ts":"3627","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/policies/management.ts":"3628","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/policies/public.ts":"3629","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/routeGuard.ts":"3630","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/types.ts":"3631","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/cors/origins.ts":"3632","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/origin/publicOrigin.ts":"3633","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/ws/liveServer.ts":"3634","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/ws/liveServerAllowList.ts":"3635","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/ws/types.ts":"3636","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server-init.ts":"3637","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Avatar.tsx":"3638","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Badge.tsx":"3639","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/BasePathNetworkProvider.tsx":"3640","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Breadcrumbs.tsx":"3641","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Button.tsx":"3642","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Card.tsx":"3643","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Checkbox.tsx":"3644","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/CloudSyncStatus.tsx":"3645","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Collapsible.tsx":"3646","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/CollapsibleSection.tsx":"3647","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ColumnToggle.tsx":"3648","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/CommandPalette.tsx":"3649","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ConsoleLogViewer.tsx":"3650","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/CursorAuthModal.tsx":"3651","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/DataTable.tsx":"3652","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/DegradationBadge.tsx":"3653","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/DistributeProxiesButton.test.tsx":"3654","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/DistributeProxiesButton.tsx":"3655","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/EmptyState.tsx":"3656","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ErrorPageScaffold.tsx":"3657","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/FilterBar.tsx":"3658","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Footer.tsx":"3659","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Header.tsx":"3660","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/InfoTooltip.tsx":"3661","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Input.tsx":"3662","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/KiroAuthModal.tsx":"3663","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/KiroOAuthWrapper.tsx":"3664","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/KiroSocialOAuthModal.tsx":"3665","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/LanguageSelector.tsx":"3666","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/LinkifiedText.tsx":"3667","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Loading.tsx":"3668","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/LocaleAutoDetect.tsx":"3669","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/MaintenanceBanner.tsx":"3670","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ManualConfigModal.tsx":"3671","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Modal.tsx":"3672","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ModelRoutingSection.tsx":"3673","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ModelSelectField.tsx":"3674","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ModelSelectModal.tsx":"3675","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/MonacoEditor.tsx":"3676","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/NavigationProgress.tsx":"3677","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/NoAuthAccountCard.tsx":"3678","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/NoAuthProviderCard.tsx":"3679","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/NoAuthProviderToggle.tsx":"3680","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/NotificationToast.tsx":"3681","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/OAuthModal.tsx":"3682","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/OAuthModalPanels.tsx":"3683","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/OmniRouteLogo.tsx":"3684","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/PresetSlider.tsx":"3685","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/PricingModal.tsx":"3686","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ProviderCooldownCard.test.tsx":"3687","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ProviderIcon.tsx":"3688","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ProviderTestSlideOver.tsx":"3689","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ProxyConfigModal.tsx":"3690","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ProxyLogDetail.tsx":"3691","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ProxyLogger.tsx":"3692","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/PwaRegister.tsx":"3693","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/RaycastAuthModal.tsx":"3694","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ReasoningRoutingRules.tsx":"3695","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/RequestLoggerDetail.tsx":"3696","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/RequestLoggerV2.tsx":"3697","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/RequestTimeline.tsx":"3698","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/RiskNoticeModal.tsx":"3699","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/SegmentedControl.tsx":"3700","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Select.tsx":"3701","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Sidebar.search.test.tsx":"3702","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Sidebar.tsx":"3703","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/SkillsConceptCard.tsx":"3704","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/SystemMonitor.tsx":"3705","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Textarea.tsx":"3706","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ThemeProvider.tsx":"3707","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ThemeToggle.tsx":"3708","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Toggle.tsx":"3709","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/TokenHealthBadge.tsx":"3710","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Tooltip.tsx":"3711","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/TraeAuthModal.tsx":"3712","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/UsageAnalytics.tsx":"3713","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/UsageStats.tsx":"3714","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/ApiKeyFilterDropdown.tsx":"3715","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/CustomRangePicker.tsx":"3716","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/ModelTable.tsx":"3717","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/RequestCountByProviderDateTable.tsx":"3718","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/RequestCountDateFilter.tsx":"3719","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/RequestCountTable.tsx":"3720","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/TimeRangeSelector.tsx":"3721","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/chartColors.ts":"3722","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/charts.tsx":"3723","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/index.tsx":"3724","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/modelBreakdownSort.ts":"3725","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/rechartsCore.tsx":"3726","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/rechartsDonuts.tsx":"3727","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/rechartsUsageCharts.tsx":"3728","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/requestCountSort.ts":"3729","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/useProviderDailyUsage.ts":"3730","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/cli/CliComparisonCard.tsx":"3731","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/cli/CliConceptCard.tsx":"3732","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/cli/CliToolCard.tsx":"3733","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/cli/index.ts":"3734","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/compression/ComboCompressionModeSelect.tsx":"3735","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/compression/CompressionPipelineEditor.tsx":"3736","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/compression/EngineConfigForm.tsx":"3737","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/compression/EngineConfigPage.tsx":"3738","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/compression/compressionPipelineModel.ts":"3739","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/APIReference.stories.tsx":"3740","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/APIReference.tsx":"3741","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/Callout.stories.tsx":"3742","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/Callout.tsx":"3743","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/CodeBlock.stories.tsx":"3744","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/CodeBlock.tsx":"3745","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/DocsBreadcrumbs.stories.tsx":"3746","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/DocsBreadcrumbs.tsx":"3747","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/DocsSidebar.stories.tsx":"3748","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/DocsSidebar.tsx":"3749","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/DocsThemeProvider.tsx":"3750","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/Tabs.stories.tsx":"3751","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/Tabs.tsx":"3752","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/tokens.ts":"3753","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/flow/FlowCanvas.tsx":"3754","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/flow/StatusDot.tsx":"3755","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/flow/edgeStyles.ts":"3756","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/index.tsx":"3757","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/layouts/AuthLayout.tsx":"3758","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/layouts/DashboardLayout.tsx":"3759","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/layouts/index.tsx":"3760","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/lobeProviderIcons.ts":"3761","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/logTableStyles.ts":"3762","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/modelSelectModalHelpers.ts":"3763","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/oauthBlobSubmit.ts":"3764","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/oauthModal/GheConfigStep.tsx":"3765","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/oauthModal/GitlabDuoSetupStep.tsx":"3766","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/oauthModal/OAuthErrorStep.tsx":"3767","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/oauthModal/OAuthWaitingStep.tsx":"3768","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/proxyAssignment.test.tsx":"3769","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/proxyAssignment.ts":"3770","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/requestLoggerPreferences.ts":"3771","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/requestLoggerSignature.ts":"3772","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/agentSkills.ts":"3773","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/alibabaProviderRegions.ts":"3774","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/antigravityClientProfile.ts":"3775","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/apiKeyPolicyScopes.ts":"3776","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/appConfig.ts":"3777","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/batch.ts":"3778","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/batchEndpoints.ts":"3779","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/bodySize.ts":"3780","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/claudeCodeClient.ts":"3781","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/cliCompatProviders.ts":"3782","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/cliTools.ts":"3783","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/cliToolsGrokBuild.ts":"3784","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/clientIdentityProfiles.ts":"3785","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/codexClient.ts":"3786","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/colors.ts":"3787","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/comboConfigMode.ts":"3788","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/config.ts":"3789","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/dashboardCsrf.ts":"3790","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/endpointCategories.ts":"3791","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/errorCodes.ts":"3792","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/featureFlagDefinitions.ts":"3793","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/gitlabDuoSetupMessage.ts":"3794","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/headers.ts":"3795","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/homeWidgets.ts":"3796","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/index.ts":"3797","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/managementScopes.ts":"3798","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/mcpScopes.ts":"3799","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/mitmToolHosts.ts":"3800","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/modal.ts":"3801","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/modelCompat.ts":"3802","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/modelSpecs.ts":"3803","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/models.ts":"3804","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/openRouterPreset.ts":"3805","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/pricing/default-pricing.ts":"3806","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/pricing/frontier-labs.ts":"3807","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/pricing/inference-hosts.ts":"3808","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/pricing/oauth-subscriptions.ts":"3809","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/pricing/regional.ts":"3810","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/pricing/shared-tiers.ts":"3811","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/pricing.ts":"3812","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/apikey/enterprise-cloud.ts":"3813","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/apikey/frontier-labs.ts":"3814","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/apikey/gateways.ts":"3815","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/apikey/index.ts":"3816","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/apikey/inference-hosts.ts":"3817","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/apikey/regional.ts":"3818","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/apikey/specialty-media.ts":"3819","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/audio.ts":"3820","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/cloud-agent.ts":"3821","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/local.ts":"3822","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/noauth.ts":"3823","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/oauth.ts":"3824","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/search.ts":"3825","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/system.ts":"3826","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/upstream-proxy.ts":"3827","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/web-cookie.ts":"3828","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers.ts":"3829","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/publicApiRoutes.ts":"3830","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/quotaAutoPing.ts":"3831","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/responsesPreviousResponseId.ts":"3832","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/routingStrategies.ts":"3833","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/selfServiceScopes.ts":"3834","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/serviceKinds.ts":"3835","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/sidebarGroupVisibility.ts":"3836","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/sidebarVisibility/sections.ts":"3837","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/sidebarVisibility/types.ts":"3838","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/sidebarVisibility.ts":"3839","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/spawnCapablePrefixes.ts":"3840","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/statusColors.ts":"3841","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/upstreamHeaders.ts":"3842","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/visionBridgeDefaults.ts":"3843","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/visionModels.ts":"3844","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/contracts/quota.ts":"3845","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/hooks/__tests__/useDisplayBaseUrl.test.tsx":"3846","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/hooks/cli/useToolBatchStatuses.ts":"3847","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/hooks/index.ts":"3848","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/hooks/useCopyToClipboard.ts":"3849","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/hooks/useDisplayBaseUrl.ts":"3850","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/hooks/useElectron.ts":"3851","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/hooks/useTheme.ts":"3852","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/http/apiErrorMessage.ts":"3853","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/lib/persistLocale.ts":"3854","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/middleware/bodySizeGuard.ts":"3855","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/middleware/chatBodyAdmission.ts":"3856","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/middleware/correlationId.ts":"3857","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/middleware/requireJsonContentType.ts":"3858","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/network/outboundUrlGuard.ts":"3859","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/network/outboundUrlGuardPolicy.ts":"3860","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/network/remoteImageFetch.ts":"3861","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/network/safeOutboundFetch.ts":"3862","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/platform/windowsProcess.ts":"3863","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/providers/webSessionCredentials.ts":"3864","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/reasoning/effortStandardization.ts":"3865","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/resilience/peerRouting.ts":"3866","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/agentBridge.ts":"3867","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/cliCatalog.ts":"3868","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/inspector.ts":"3869","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/memory.ts":"3870","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/playground.ts":"3871","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/qdrant.ts":"3872","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/quota.ts":"3873","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/searchTools.ts":"3874","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/validation.ts":"3875","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/apiKeyResolver.ts":"3876","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/backupService.ts":"3877","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/claudeCliConfig.ts":"3878","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/cliInstallFallback.ts":"3879","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/cliRuntime.ts":"3880","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/cliRuntimeGrokBuild.ts":"3881","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/cliRuntimeHealthcheckPath.ts":"3882","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/cliRuntimeKnownPath.ts":"3883","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/cloudSyncScheduler.ts":"3884","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/codexCatalogRevalidation.ts":"3885","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/codexDiscoveryPolicy.ts":"3886","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/droidCustomModels.ts":"3887","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/initializeCloudSync.ts":"3888","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/loginShellPath.ts":"3889","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/modelSyncScheduler.ts":"3890","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/opencodeConfig.ts":"3891","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/providerLimitsSyncScheduler.ts":"3892","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/qwenCodeConfig.ts":"3893","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/types/cliBatchStatus.ts":"3894","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/types/index.ts":"3895","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/types/pagination.ts":"3896","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/types/utilization.ts":"3897","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/a11yAudit.ts":"3898","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/api.ts":"3899","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/apiAuth.ts":"3900","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/apiKey.ts":"3901","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/apiKeyPolicy.ts":"3902","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/apiResponse.ts":"3903","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/basePath.ts":"3904","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/basePathFetch.ts":"3905","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/bulkApiKeyParser.ts":"3906","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/circuitBreaker.ts":"3907","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/classify429.ts":"3908","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/cliCompat.ts":"3909","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/clientApiRouteAuth.ts":"3910","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/clineAuth.ts":"3911","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/clipboard.ts":"3912","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/cloud.ts":"3913","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/cn.ts":"3914","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/codexBaseUrl.ts":"3915","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/codexConfig.ts":"3916","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/compatibleProviderId.ts":"3917","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/compressionHeaderEcho.ts":"3918","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/connectionStatus.ts":"3919","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/cors.ts":"3920","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/costEstimator.ts":"3921","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/dashboardCsrf.ts":"3922","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/envBoolean.ts":"3923","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/featureFlags.ts":"3924","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/fetchError.ts":"3925","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/fetchTimeout.ts":"3926","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/formatting.ts":"3927","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/freeModels.ts":"3928","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/globPattern.ts":"3929","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/grokBilling.ts":"3930","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/index.ts":"3931","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/injectionSeverity.ts":"3932","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/inputSanitizer.ts":"3933","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/linkify.ts":"3934","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/logRedaction.ts":"3935","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/logger.ts":"3936","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/machine.ts":"3937","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/machineId.ts":"3938","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/maskEmail.ts":"3939","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/modelCatalogSearch.ts":"3940","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/noAuthProviders.ts":"3941","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/nodeRuntimeSupport.ts":"3942","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/numeric.ts":"3943","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/parseApiKeys.ts":"3944","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/providerConnectionStatus.ts":"3945","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/providerCredentialRequirement.ts":"3946","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/providerDisplayLabel.ts":"3947","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/providerFallbackColor.ts":"3948","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/providerHints.ts":"3949","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/providerModelAliases.ts":"3950","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/providerQuotaVisibility.ts":"3951","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/rateLimiter.ts":"3952","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/releaseNotes.ts":"3953","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/requestId.ts":"3954","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/requestTelemetry.ts":"3955","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/requestTimeout.ts":"3956","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/resolveOmniRouteBaseUrl.ts":"3957","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/runtimeTimeouts.ts":"3958","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/secretsValidator.ts":"3959","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/secureRandom.ts":"3960","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/serviceTierLabels.ts":"3961","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/shuffleDeck.ts":"3962","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/sidebarExpansionState.ts":"3963","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/sidebarRouteMatch.ts":"3964","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/sidebarSearch.ts":"3965","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/streamTracker.ts":"3966","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/structuredLogger.ts":"3967","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/testProcess.ts":"3968","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/tiktokenCounter.ts":"3969","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/turkishText.ts":"3970","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/upstreamError.ts":"3971","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/wsPath.ts":"3972","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/compressionConfigSchemas.ts":"3973","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/freeProxySchemas.ts":"3974","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/helpers.ts":"3975","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/oneproxySchemas.ts":"3976","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/providerSchema.ts":"3977","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/providerSpecificData.ts":"3978","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/apiV1.ts":"3979","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/auth.ts":"3980","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/cli.ts":"3981","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/cloud.ts":"3982","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/combo.ts":"3983","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/evals.ts":"3984","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/gemini.ts":"3985","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/keys.ts":"3986","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/misc.ts":"3987","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/payloadRules.ts":"3988","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/pricing.ts":"3989","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/provider.ts":"3990","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/proxy.ts":"3991","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/reasoningRouting.ts":"3992","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/routing.ts":"3993","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/settings.ts":"3994","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/translator.ts":"3995","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas.ts":"3996","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/settingsSchemas.ts":"3997","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/autoRouting.ts":"3998","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/chat/clientRawRequest.ts":"3999","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/chat.ts":"4000","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/chatAdmission.ts":"4001","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/chatHelpers.ts":"4002","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/chatPredicates.ts":"4003","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/comboFailureLogging.ts":"4004","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/reasoningRouting.ts":"4005","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/rejectedRequestUsage.ts":"4006","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/requestBody.ts":"4007","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/resolveRoutingModel.ts":"4008","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/auth.ts":"4009","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/cooldownAwareRetry.ts":"4010","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/googApiKeyAuth.ts":"4011","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/headerReader.ts":"4012","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/imageCredentialRetry.ts":"4013","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/model.ts":"4014","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/noAuthProviderSettings.ts":"4015","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/noAuthProviderSiblings.ts":"4016","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/noAuthProxyResolution.ts":"4017","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/requestResourceHealth.ts":"4018","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/sessionAffinityPin.ts":"4019","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/streamState.ts":"4020","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/tokenRefresh.ts":"4021","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/utils/backpressure.ts":"4022","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/utils/logger.ts":"4023","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/store/emailPrivacyStore.ts":"4024","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/store/index.ts":"4025","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/store/notificationStore.ts":"4026","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/store/themeStore.ts":"4027","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/types/databaseSettings.ts":"4028","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/types/global.d.ts":"4029","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/types/index.ts":"4030","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/types/provider.ts":"4031","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/types/sqljs.d.ts":"4032","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/_cp_mock_hook.mts":"4033","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/_cp_mock_module.mts":"4034","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/_helpers/readSrc.ts":"4035","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/_setup/isolateDataDir.ts":"4036","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/_setup/vitestUiPolyfills.ts":"4037","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/benchmarks/pipeline-accuracy.test.ts":"4038","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/boundary/gemini-double-escaping.live.test.ts":"4039","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/boundary/gemini-midstream-503-e2e.live.test.ts":"4040","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/boundary/gemma4-multiturn.live.test.ts":"4041","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/boundary/gemma4-newline-investigation.live.test.ts":"4042","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/boundary/openclaw-omniroute-tool-boundary.live.test.ts":"4043","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/a11y-resilience.spec.ts":"4044","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/a11y.spec.ts":"4045","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/agent-bridge-traffic-cross.spec.ts":"4046","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/agent-bridge.spec.ts":"4047","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/agent-skills-page.spec.ts":"4048","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/analytics-tabs.spec.ts":"4049","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/api-keys-flow.spec.ts":"4050","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/api.spec.ts":"4051","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/combo-live-studio.spec.ts":"4052","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/combo-unification.spec.ts":"4053","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/combos-flow.spec.ts":"4054","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/compression-studio.spec.ts":"4055","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/ecosystem.test.ts":"4056","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/error-pages.spec.ts":"4057","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/group-b-activity-feed.spec.ts":"4058","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/group-b-quota-plans-config.spec.ts":"4059","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/group-b-quota-share-pools.spec.ts":"4060","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/group-b-redirect-logs-activity.spec.ts":"4061","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/helpers/dashboardAuth.ts":"4062","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/helpers/mockUpstreamServer.ts":"4063","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/memory-engine.spec.ts":"4064","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/memory-qdrant-routes.spec.ts":"4065","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/memory-settings.spec.ts":"4066","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/navigation.spec.ts":"4067","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/playground-compare.spec.ts":"4068","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/playground-studio.spec.ts":"4069","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/protocol-clients.test.ts":"4070","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/protocol-visibility.spec.ts":"4071","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/providers-bailian-coding-plan.spec.ts":"4072","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/providers-management.spec.ts":"4073","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/proxy-registry.smoke.spec.ts":"4074","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/resilience-plan-alignment.spec.ts":"4075","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/responsive.spec.ts":"4076","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/responsiveSpecs.ts":"4077","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/search-tools-studio.spec.ts":"4078","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/settings-toggles.spec.ts":"4079","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/skills-marketplace.spec.ts":"4080","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/smoke.spec.ts":"4081","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/system-failover.test.ts":"4082","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/traffic-inspector.spec.ts":"4083","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/translator-friendly.spec.ts":"4084","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/visual-resilience-smoke.spec.ts":"4085","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/fixtures/compression/session-dedup-memory-7849.ts":"4086","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/fixtures/devin-bridge/e2e-workspace/.claude/hooks/log-tool.mjs":"4087","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/fixtures/devin-bridge/e2e-workspace/math.js":"4088","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/fixtures/devin-bridge/e2e-workspace/math.test.js":"4089","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/fixtures/sanitizerFixtures.ts":"4090","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/fixtures/welcome-banner-plugin/index.mjs":"4091","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/golden-set/compression-caveman-v2.test.ts":"4092","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/golden-set/compression-quality.test.ts":"4093","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/golden-set/compression-savings.test.ts":"4094","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/golden-set/compression-upstream-parity.test.ts":"4095","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/helpers/fakeUpstreamStream.ts":"4096","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/helpers/faultyUpstream.ts":"4097","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/helpers/goldenSnapshot.ts":"4098","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/helpers/managementSession.ts":"4099","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/helpers/persistence/comboRepositoryConformance.ts":"4100","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/helpers/propertyConfig.ts":"4101","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/helpers/translationFixtures.ts":"4102","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/homolog/ui/api-key-flow.spec.ts":"4103","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/homolog/ui/auth.setup.ts":"4104","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/homolog/ui/playwright.config.ts":"4105","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/homolog/ui/routes.spec.ts":"4106","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/_chatPipelineCallLogs.ts":"4107","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/_chatPipelineHarness.ts":"4108","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/_comboRoutingHarness.ts":"4109","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/active-request-completion.test.ts":"4110","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/agent-bridge-bypass-flow.test.ts":"4111","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/agent-bridge-cert-flow.test.ts":"4112","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/agent-bridge-mappings.test.ts":"4113","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/agent-bridge-routes.test.ts":"4114","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/agent-skills-content.test.ts":"4115","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/agent-skills-discovery.test.ts":"4116","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/aihorde-load-test.test.ts":"4117","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/all-statuses-route.test.ts":"4118","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/antigravity-projectid-discovery-persist-8491.test.ts":"4119","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/api-keys.test.ts":"4120","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/api-routes-critical.test.ts":"4121","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/audit-log-level-filter.test.ts":"4122","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/batch-e2e-rate-limit.test.ts":"4123","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/batch-processor-escaping.test.ts":"4124","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/chat-pipeline.test.ts":"4125","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/chatcore-compression-integration.test.ts":"4126","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/chatcore-context-window-boundary.test.ts":"4127","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-codewhale.test.ts":"4128","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-deepseek-tui.test.ts":"4129","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-forge.test.ts":"4130","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-grok-build.test.ts":"4131","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-jcode.test.ts":"4132","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-letta.test.ts":"4133","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-omp.test.ts":"4134","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-pi.test.ts":"4135","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-smelt.test.ts":"4136","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/codex-chat-reasoning-http-e2e.test.ts":"4137","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-failover-e2e.test.ts":"4138","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-live/_liveHarness.ts":"4139","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-live/auto.live.test.ts":"4140","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-live/cost-and-fusion.live.test.ts":"4141","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-live/ordered.live.test.ts":"4142","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/auto.test.ts":"4143","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/context-relay-codex.test.ts":"4144","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/context-relay-handoff.test.ts":"4145","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/cost-and-context.test.ts":"4146","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/fusion.test.ts":"4147","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/ordered.test.ts":"4148","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/quota-aware.test.ts":"4149","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/quota-share.test.ts":"4150","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/weighted.test.ts":"4151","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-provider-exhaustion.test.ts":"4152","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-routing-e2e.test.ts":"4153","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/compression-pipeline.test.ts":"4154","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cursor-e2e.test.ts":"4155","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/files-api.test.ts":"4156","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/fingerprint-expansion.test.ts":"4157","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/free-models-benchmark.test.ts":"4158","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/free-models-tpm-stress.test.ts":"4159","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/freeModelBenchmarkShared.ts":"4160","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/gemini-combo-cooldown-wait.test.ts":"4161","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/gemini-large-context-tpm.test.ts":"4162","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/gemini-live-429-classification.test.ts":"4163","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/gemini-malformed-function-call-stream.test.ts":"4164","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/gemini-rate-limit-classification.test.ts":"4165","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/gemini-tool-call-escaping.test.ts":"4166","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/heap-growth.test.ts":"4167","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/historical-tool-call-leak.test.ts":"4168","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/integration-wiring.test.ts":"4169","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/live-gemini-agentic-loop.test.ts":"4170","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/live-gemini-nonstream.test.ts":"4171","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/live-gemini-workload.test.ts":"4172","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/live-gemini.test.ts":"4173","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/live-ws-startup.test.ts":"4174","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/liveGeminiShared.ts":"4175","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/llama-cpp-provider.test.ts":"4176","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/manifest-routing.test.ts":"4177","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/memory-embedding-providers.test.ts":"4178","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/memory-engine-status.test.ts":"4179","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/memory-pipeline.test.ts":"4180","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/memory-reindex.test.ts":"4181","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/memory-retrieve-preview.test.ts":"4182","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/memory-route-put.test.ts":"4183","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/memory-summarize.test.ts":"4184","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/mimocode-proxy.integration.test.ts":"4185","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/modelsDevSync.test.ts":"4186","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/monitoring-health-cache.test.ts":"4187","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/newly-enabled-providers.test.ts":"4188","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/obsidian-plugin-e2e.test.ts":"4189","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/performance-regression.test.ts":"4190","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/pipeline-combo.test.ts":"4191","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/playground-improve-prompt.test.ts":"4192","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/playground-presets-crud.test.ts":"4193","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/playground-presets-zod.test.ts":"4194","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/plugins-lifecycle.test.ts":"4195","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/presets-dashboard-auth.test.ts":"4196","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/provider-journey.contract.test.ts":"4197","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/proxy-context-passthrough.test.ts":"4198","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/proxy-pipeline.test.ts":"4199","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/proxy-registry-flow.test.ts":"4200","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/qdrant-routes.test.ts":"4201","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/quota-plans-crud.test.ts":"4202","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/quota-pool-usage-provider-resolution.test.ts":"4203","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/quota-pools-crud.test.ts":"4204","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/quota-pools-usage.test.ts":"4205","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/quota-preview.test.ts":"4206","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/quota-routes-error-sanitization.test.ts":"4207","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/quota-store-settings.test.ts":"4208","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/reasoning-routing-pipeline.test.ts":"4209","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/resilience-chaos.test.ts":"4210","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/resilience-http-e2e.test.ts":"4211","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/search-providers-catalog.test.ts":"4212","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/security-hardening.test.ts":"4213","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/services/cliproxy-coexistence.test.ts":"4214","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/services/full-lifecycle.int.test.ts":"4215","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/services/route-guard-services.int.test.ts":"4216","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/skills-pipeline.test.ts":"4217","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/sse-correctness.test.ts":"4218","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/stream-recovery-wiring.test.ts":"4219","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/test-model-compression-off-6240.test.ts":"4220","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-capture-modes.test.ts":"4221","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-error-sanitization.test.ts":"4222","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-hosts.test.ts":"4223","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-internal-ingest.test.ts":"4224","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-localonly.test.ts":"4225","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-requests.test.ts":"4226","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-session-requests.test.ts":"4227","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-sessions.test.ts":"4228","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-ws.test.ts":"4229","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/v1-contracts-behavior.test.ts":"4230","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/live/deepseek-web-live.test.ts":"4231","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/load/k6-soak.js":"4232","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/load/proxy-load.ts":"4233","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/scratch_test.mjs":"4234","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/theoldllm-stress.test.ts":"4235","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/translator/testFromFile.ts":"4236","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/7993-noauth-proxy-routing.test.ts":"4237","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8134-github-t5-fallback-filter.test.ts":"4238","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8169-lite-word-boundary-truncation.test.ts":"4239","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8189-classifier-compat-auto-narrow.test.ts":"4240","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8200-perplexity-web-401-cooldown.test.ts":"4241","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8200-perplexity-web-cookie-rotation.test.ts":"4242","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8231-gemini-civic-integrity-default.test.ts":"4243","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8247-accountfallback-model-unhealthy.test.ts":"4244","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8248-accountfallback-nvidia-degraded.test.ts":"4245","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8295-namespace-leaf-collision.test.ts":"4246","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8326-compatible-id-regex.test.ts":"4247","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8327-models-owned-by-prefix.test.ts":"4248","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8328-topology-custom-providers.test.ts":"4249","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8331-usage-buffer-inflation.test.ts":"4250","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8332-combo-vision-fallback.test.ts":"4251","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8336-audit-loopback-login.test.ts":"4252","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8350-hermes-oauth-usage-400.test.ts":"4253","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8368-image-token-context.test.ts":"4254","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8370-priority-affinity-reorder.test.ts":"4255","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8374-plugins-status-optional.test.ts":"4256","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8376-econnrefused-breaker.test.ts":"4257","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8385-perkey-proxy-global-toggle.test.ts":"4258","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8388-compression-detail-persist.test.ts":"4259","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8395-plugin-hooks-fire.test.ts":"4260","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8396-cooldown-429-cap.test.ts":"4261","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8431-multiwindow-quota-eviction.test.ts":"4262","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8488-capability-filter-fail-closed.test.ts":"4263","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8510-adobe-firefly-edits-route.test.ts":"4264","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8560-responses-image-compaction.test.ts":"4265","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8594-compress-image-token-stringify.test.ts":"4266","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8676-monsterapi-deprecation.test.ts":"4267","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8958-alias-backed-node-prefix.test.ts":"4268","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8989-perplexity-catalog-mode-repro.test.ts":"4269","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/9232-purge-proxy-assignments-on-delete.test.ts":"4270","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/9474-claude-code-oauth-mismap.test.ts":"4271","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/9536-usage-misreporting-openai-to-claude.test.ts":"4272","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/9545-gpt56-reasoning-tools.test.ts":"4273","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/9551-proxyfetch-no-proxy-context-bypass.test.ts":"4274","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/9560-turbopack-nft-lazy-module-fs.test.ts":"4275","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/9568-gemini-tool-casing-mismatch.test.ts":"4276","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/AutoComboCatalog.test.tsx":"4277","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/SkillsConceptCard.test.tsx":"4278","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/_fixtures/tsx-runtime-modern-syntax.ts":"4279","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/_mitmHandlerHarness.ts":"4280","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/_mocks/settings.ts":"4281","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/a2a-auth-timing-safe.test.ts":"4282","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/a2a-cost-analysis-numeric-fallback.test.ts":"4283","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/a2a-enabled-route.test.ts":"4284","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/a2a-routing-logger.test.ts":"4285","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/access-scopes-infer.test.ts":"4286","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/access-token-scopes.test.ts":"4287","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/access-tokens-db.test.ts":"4288","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-concurrency-cap.test.ts":"4289","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-fallback-anthropic-quota.test.ts":"4290","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-fallback-cf1010-no-retry-8775.test.ts":"4291","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-fallback-lockout-eviction.test.ts":"4292","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-fallback-retry-after-json.test.ts":"4293","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-fallback-route-restriction-403.test.ts":"4294","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-fallback-service.test.ts":"4295","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-selector.test.ts":"4296","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/accountSemaphore.test.ts":"4297","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/accountfallback-ratelimit-400-4976.test.ts":"4298","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/acp-agents-route.test.ts":"4299","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/acp-registry.test.ts":"4300","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/active-request-stream-chunks-lifecycle.test.ts":"4301","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-controller.test.ts":"4302","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-cost.test.ts":"4303","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-domain.test.ts":"4304","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-features.test.ts":"4305","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-lifecycle.test.ts":"4306","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-queue.test.ts":"4307","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-route-matrix.test.ts":"4308","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-runtime.test.ts":"4309","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/admin-audit-events.test.ts":"4310","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adobe-firefly-browser-login.test.ts":"4311","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adobe-firefly-jwt-redos-guard.test.ts":"4312","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adobe-firefly.test.ts":"4313","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/advanced-fase07-09.test.ts":"4314","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adversarialPii.test.ts":"4315","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-cert-install-fallback-4546.test.ts":"4316","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-cert-route-validation.test.ts":"4317","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-cert-trust-sudo-gate.test.ts":"4318","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-config-portability.test.ts":"4319","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-detected-models-8656.test.ts":"4320","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-dns-params-7271.test.ts":"4321","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-dns-per-agent-8466.test.ts":"4322","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-dns-route-validation.test.ts":"4323","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-dns-sudo-gate.test.ts":"4324","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-dns-toggle-method-7157.test.ts":"4325","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-maintenance-api.test.ts":"4326","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-mappings-sync-8656.test.ts":"4327","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-repair-route-validation.test.ts":"4328","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-repair-sudo-gate.test.ts":"4329","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-server-route-dynamic-import.test.ts":"4330","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-state-full-payload-8656.test.ts":"4331","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-state-normalize-3318.test.ts":"4332","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-targets-serializable.test.ts":"4333","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-card-route.test.ts":"4334","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-goal-policy.test.ts":"4335","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-skills-page.test.tsx":"4336","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentSkillTools-mcp.test.ts":"4337","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentSkills-catalog.test.ts":"4338","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentSkills-cliRegistryParser.test.ts":"4339","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentSkills-generator.test.ts":"4340","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentSkills-openapiParser.test.ts":"4341","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentSkills-routes.test.ts":"4342","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentSkills-schemas.test.ts":"4343","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentbridge-antigravity-cert-hosts-6494.test.ts":"4344","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentbridge-mitm-router-key-6403.test.ts":"4345","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentrouter-cc-wire-image.test.ts":"4346","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentrouter-chatcore-protocols.test.ts":"4347","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentrouter-executor-protocols.test.ts":"4348","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentrouter-live-catalog.test.ts":"4349","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentrouter-models-discovery-7016.test.ts":"4350","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentrouter-quota-fetcher.test.ts":"4351","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agnes-provider.test.ts":"4352","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agy-auth-import.test.ts":"4353","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agy-gemini-3696-tier-passthrough.test.ts":"4354","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agy-gemini-400-3229.test.ts":"4355","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agy-pro-fallback-chain-3786.test.ts":"4356","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agy-projectid-ui.test.ts":"4357","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agy-provider.test.ts":"4358","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agy-usage-quota.test.ts":"4359","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/aihorde-tools-unsupported-provider-fallback.test.ts":"4360","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/airforce-v1-double-prefix-5899.test.ts":"4361","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/alibaba-image-media.test.ts":"4362","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/alibaba-provider-regions.test.ts":"4363","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/alibaba-video-media.test.ts":"4364","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/alternate-formats.test.ts":"4365","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/anthropic-cache-fingerprint.test.ts":"4366","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/anthropic-compat-validation-v1-messages.test.ts":"4367","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/anthropic-header-dedupe-1475.test.ts":"4368","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/anthropic-official-baseurl-host.test.ts":"4369","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/anthropic-stream-thinking-close-marker.test.ts":"4370","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/anthropic-thinking-signature-recovery.test.ts":"4371","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/anthropic-toolcall-args-6459.test.ts":"4372","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-429-quota-cooldown.test.ts":"4373","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-429-quota-tdd.test.ts":"4374","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-claude-prefill-strip.test.ts":"4375","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-client-identity-paths.test.ts":"4376","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-client-profile.test.ts":"4377","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-credits.test.ts":"4378","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-discovery-bootstrap.test.ts":"4379","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-executor-split.test.ts":"4380","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-finish-reason-normalization.test.ts":"4381","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-format-detection.test.ts":"4382","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-headers.test.ts":"4383","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-image-catalog-separation.test.ts":"4384","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-local-usage-fallback-3821.test.ts":"4385","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-missing-project-chat.test.ts":"4386","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-mitm-model-resolution.test.ts":"4387","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-model-aliases.test.ts":"4388","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-native-toolcall-collect.test.ts":"4389","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-oauth-client-profile.test.ts":"4390","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-oauth-no-pkce-no-openid.test.ts":"4391","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-oauth-postexchange-nonblocking.test.ts":"4392","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-orphan-toolresult-6026.test.ts":"4393","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-orphan-tooluse-7752.test.ts":"4394","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-prefer-stored-project.test.ts":"4395","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-projectid.test.ts":"4396","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-quota-skipping.test.ts":"4397","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-refresh-empty-token-3850.test.ts":"4398","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-retired-public-models.test.ts":"4399","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-retry-hook.test.ts":"4400","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-safetysettings-5003.test.ts":"4401","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-server-side-tools-6914.test.ts":"4402","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-sse-collect-socket-release-4309.test.ts":"4403","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-streaming-error-body-sanitized-2461.test.ts":"4404","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-streaming-passthrough.test.ts":"4405","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-strip-builtin-tools-funcdecls-1095.test.ts":"4406","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-strip-output-config-1944.test.ts":"4407","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-strip-thinking-fields-1926.test.ts":"4408","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-tool-cloak-server-side-invocations.test.ts":"4409","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-tool-cloaking.test.ts":"4410","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-usage-fetcher.test.ts":"4411","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-usage-service.test.ts":"4412","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-version.test.ts":"4413","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-weekly-quota-4017.test.ts":"4414","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/api-catchall-json-404.test.ts":"4415","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/authz-inventory.test.ts":"4416","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/auto-combo-candidates-route-7819.test.ts":"4417","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/cli-tools/detect.test.ts":"4418","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/combo-002-first-field.test.ts":"4419","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/combo-error-response.test.ts":"4420","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/compression/compression-api.test.ts":"4421","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/compression/rtk-learn-discover-routes.test.ts":"4422","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/compression/rtk-toml-import-route.test.ts":"4423","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/compression-engines-route.test.ts":"4424","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/compression-preview-caveman-and-stacked-6425.test.ts":"4425","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/compression-preview-engine.test.ts":"4426","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/context-analytics-engine-route.test.ts":"4427","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/context-combos-default-route.test.ts":"4428","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/discovery-routes.test.ts":"4429","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/free-proxies-list-route.test.ts":"4430","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/free-proxies-route.test.ts":"4431","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/providers-import-route-6836.test.ts":"4432","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/proxies-repair-relay.test.ts":"4433","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/root-catchall-json-404.test.ts":"4434","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/server-error-message.test.ts":"4435","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/services/9router-models.test.ts":"4436","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/services/9router-provider-expose.test.ts":"4437","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/services/9router-status-reveal.test.ts":"4438","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/services/cliproxy-provider-expose.test.ts":"4439","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/settings-audit.test.ts":"4440","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/sync-models-readiness.test.ts":"4441","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/v1/bifrost-cooldown.test.ts":"4442","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/v1/bifrost-sidecar.test.ts":"4443","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/v1/provider-plugin-manifest-route.test.ts":"4444","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/v1/relay-routing-backend.test.ts":"4445","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/v1/relay-stream-finalizer.test.ts":"4446","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/v1-catchall-json-404.test.ts":"4447","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/v1-me-status-route.test.ts":"4448","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/validated-json-body.test.ts":"4449","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/webhooks/webhook-url-ssrf-guard.test.ts":"4450","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-auth.test.ts":"4451","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-docs-route.test.ts":"4452","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-error-message-5340.test.ts":"4453","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-lifecycle.test.ts":"4454","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-mask-fix.test.mjs":"4455","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-policy.test.ts":"4456","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-provider-quota-bypass-scope.test.ts":"4457","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-regeneration.test.ts":"4458","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-reveal-route.test.ts":"4459","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-rotator-health.test.ts":"4460","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-scope-validation.test.ts":"4461","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-self-service.test.ts":"4462","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-usage-limits.test.ts":"4463","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-utils-public-surface.test.ts":"4464","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-keys-create-no-hang-6570.test.ts":"4465","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-malformed-json-400.test.ts":"4466","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-manager-filters.test.ts":"4467","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-manager-key-visibility.test.ts":"4468","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-manager-mask-key-passthrough.test.ts":"4469","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-manager-page-static.test.ts":"4470","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-manager-quota-keys-section.test.ts":"4471","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-manager-scope-preservation.test.ts":"4472","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-manager-usage-command.test.ts":"4473","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-models-hide-paid-6328.test.ts":"4474","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-parse-response.test.ts":"4475","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-routes-lib.test.ts":"4476","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikey-connection-health-check.test.ts":"4477","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikey-policy-default-rate-limits.test.ts":"4478","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikeypolicy-disable-non-public.test.ts":"4479","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikeypolicy-quota-only.test.ts":"4480","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikeys-allowed-quotas.test.ts":"4481","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikeys-disable-non-public.test.ts":"4482","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikeys-model-permissions-split.test.ts":"4483","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikeys-row-parsers-split.test.ts":"4484","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikeys-usage-command.test.ts":"4485","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/appearance-widget-settings-schema.test.ts":"4486","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apply-executor-proxy-info-5217.test.ts":"4487","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/approvalGate.test.ts":"4488","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/arena-cookie-validation-redirect-7542.test.ts":"4489","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/arena-elo-sync.test.ts":"4490","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audio-provider-nodes-selection.test.ts":"4491","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audio-speech-fishaudio.test.ts":"4492","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audio-speech-handler.test.ts":"4493","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audio-transcription-handler.test.ts":"4494","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audio-transcription-openrouter.test.ts":"4495","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audio-transcriptions-combo-resolution.test.ts":"4496","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audio-translations-route.test.ts":"4497","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audit-activity-icons.test.ts":"4498","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audit-allowlist-real-actions.test.ts":"4499","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audit-eventtype-i18n.test.ts":"4500","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audit-high-level-actions.test.ts":"4501","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audit-timeline.test.ts":"4502","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auggie-executor.test.ts":"4503","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auggie-win32-spawn-6304.test.ts":"4504","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth/loginGuard.test.ts":"4505","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-antigravity-account-retry-v2.test.ts":"4506","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-clear-account-error.test.ts":"4507","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-clear-provider-routes.test.ts":"4508","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-disable-cooling-2997.test.ts":"4509","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-extract-api-key.test.ts":"4510","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-login-route.test.ts":"4511","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-noauth-fallback-loop-3061.test.ts":"4512","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-ollama-cloud-per-model-403-3027.test.ts":"4513","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-opencode-zen-noauth-fallback.test.ts":"4514","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-policy-embeddings-webfetch-7785.test.ts":"4515","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-redirect-login.test.ts":"4516","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-terminal-status.test.ts":"4517","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/classify.test.ts":"4518","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/client-api-policy-fallback.test.ts":"4519","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/client-api-policy.test.ts":"4520","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/csrf.test.ts":"4521","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/discovery-routes-local-only.test.ts":"4522","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/ip-filter-enforcement-6131.test.ts":"4523","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/management-policy.test.ts":"4524","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/pipeline.test.ts":"4525","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/probe-9033-repro.test.ts":"4526","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/proxy-contract.test.ts":"4527","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/public-origin.test.ts":"4528","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/public-policy.test.ts":"4529","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/route-guard-local-prefix.test.ts":"4530","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/route-guard-skills-collect.test.ts":"4531","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/route-guard-version-get-exemption.test.ts":"4532","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/route-guard-vnc-session-local-only.test.ts":"4533","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/routeGuard.test.ts":"4534","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/spawn-capable-prefixes-client-safe.test.ts":"4535","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-candidate-overrides-7819.test.ts":"4536","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-candidate-overrides-regression-7819.test.ts":"4537","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-candidate-pool-filter-7819.test.ts":"4538","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-budget-fallback-3470.test.ts":"4539","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-codex-responses-3509.test.ts":"4540","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-context-advertising.test.ts":"4541","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-credentialed-model-pool.test.ts":"4542","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-engine.test.ts":"4543","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-hidden-models-4558.test.ts":"4544","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-request-controls-6024.test.ts":"4545","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-scoring-clamp.test.ts":"4546","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combos-enhanced-4235.test.ts":"4547","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combos-free-models-routes.test.ts":"4548","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combos-suffixes-4235.test.ts":"4549","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-custom-provider-5873.test.ts":"4550","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-empty-pool-fastfail-6458.test.ts":"4551","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-family-classification-8866.test.ts":"4552","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-routing-settings-resolve.test.ts":"4553","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-update-mode-detection.test.ts":"4554","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-update-runtime.test.ts":"4555","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-update.test.ts":"4556","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoCombo/free-alias-intelligence-8601.test.ts":"4557","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoCombo/paid-model-filter-6512.test.ts":"4558","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoCombo/paid-tier-auto-id-6328.test.ts":"4559","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoCombo/provider-family-combos.test.ts":"4560","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoCombo/static-table-longest-match-8603.test.ts":"4561","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoCombo/suffixComposition-4517.test.ts":"4562","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoCombo/tieredRotation.test.ts":"4563","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoPrefix.test.ts":"4564","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autocombo-unification.test.ts":"4565","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autostart-cli-shorthand-3331.test.ts":"4566","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoupdate-npm-win32-5542.test.ts":"4567","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/azure-openai-executor.test.ts":"4568","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/azureAiMultiModelTest.test.ts":"4569","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/background-task-detector.test.ts":"4570","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/backpressure.test.ts":"4571","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bai-provider.test.ts":"4572","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/baidu-qianfan-website-urls-6271.test.ts":"4573","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bailian-coding-plan-media.test.ts":"4574","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bailian-coding-plan-provider.test.ts":"4575","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bailian-quota-fetcher.test.ts":"4576","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bailian-schema-validation.test.ts":"4577","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bailian-usage.test.ts":"4578","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/balance-e2e-shards.test.ts":"4579","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bare-model-autopick.test.ts":"4580","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/base-executor-buildheaders-extra-keys-8493.test.ts":"4581","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/base-executor-sanitize-effort.test.ts":"4582","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/base-executor-waf-retry.test.ts":"4583","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/base-headers-split.test.ts":"4584","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/base-reasoning-effort-split.test.ts":"4585","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/base-thinking-budget-config-5312.test.ts":"4586","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-a-domain.test.ts":"4587","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-b-final.test.ts":"4588","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-deletion-route-logic.test.ts":"4589","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-deletion.test.ts":"4590","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-file-download.test.ts":"4591","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-list-limit-validation.test.ts":"4592","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-maybe-throttle.test.ts":"4593","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-processor-expiration.test.ts":"4594","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-processor.test.ts":"4595","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-status-cache.test.ts":"4596","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-status-logic.test.mjs":"4597","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch_api.test.ts":"4598","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch_results.test.ts":"4599","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batches-f9-helpers.test.ts":"4600","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bazaarlink-provider-integrity.test.ts":"4601","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bedrock-image-log-redaction-7297.test.ts":"4602","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bin-omniroute-mcp.test.ts":"4603","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/binary-manager-extract-zip-5590.test.ts":"4604","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/binaryManager.test.ts":"4605","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/blackbox-web-validated-token.test.ts":"4606","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/blackbox-web.test.ts":"4607","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/blackbox.test.ts":"4608","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/body-read-timeout.test.ts":"4609","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/body-size-guard.test.ts":"4610","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/body-timeout-integration.test.ts":"4611","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bootstrap-env.test.ts":"4612","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/browser-pool-optional-import.test.ts":"4613","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/browserBackedChat-matcher.test.ts":"4614","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/browserPool-proxy.test.ts":"4615","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/budget-route-auth.test.ts":"4616","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/budget-schema-empty-limits-3537.test.ts":"4617","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bug-7940-gemini-retrydelay.test.ts":"4618","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bug-8020-codex-peek-body-timeout.test.ts":"4619","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bug-8029-promptql-issuer-substring.test.ts":"4620","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/allowlist-helper.test.ts":"4621","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/assemble-standalone.test.ts":"4622","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/backend-only-smoke-workflows.test.ts":"4623","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-bundle-size.test.ts":"4624","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-circular-deps.test.ts":"4625","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-codeql-ratchet.test.ts":"4626","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-cognitive-complexity.test.ts":"4627","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-complexity-rule-count.test.ts":"4628","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-complexity.test.ts":"4629","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-dashboard-typecheck.test.ts":"4630","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-dead-code.test.ts":"4631","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-licenses.test.ts":"4632","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-lockfile.test.ts":"4633","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-mutation-ratchet.test.ts":"4634","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-mutation-test-coverage.test.ts":"4635","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-openapi-breaking.test.ts":"4636","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-pr-evidence.test.ts":"4637","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-secrets.test.ts":"4638","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-test-runner-api.test.ts":"4639","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-tracked-artifacts.test.ts":"4640","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-type-coverage.test.ts":"4641","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-vuln-ratchet.test.ts":"4642","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-workflows.test.ts":"4643","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/docker-next-channel-8576.test.ts":"4644","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/electron-release-latest-yml.repro.test.ts":"4645","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/mcp-bundle-no-eager-ioredis.test.ts":"4646","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/mitm-server-bundle-contents.test.ts":"4647","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/mutation-radiography.test.ts":"4648","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/opencode-plugin-esm-only.test.ts":"4649","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/optional-transformers-dependency.test.ts":"4650","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/resolve-npm-entry.test.ts":"4651","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/should-promote-latest-5301.test.ts":"4652","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/sync-changelog-i18n.test.ts":"4653","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build-bundler-default-turbopack.test.ts":"4654","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build-next-isolated-windows-home-2402.test.ts":"4655","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build-next-isolated.test.ts":"4656","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/buildCurl.test.ts":"4657","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bulk-add-keys-no-overwrite-2587.test.ts":"4658","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bulk-api-key-parser-cloudflare.test.ts":"4659","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bulk-paste-api-keys.test.ts":"4660","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bulk-web-session-import.test.ts":"4661","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bulkApiKeyParser.test.ts":"4662","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bypass-handler.test.ts":"4663","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bypass-response-claude-merge.test.ts":"4664","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bytez-validation-5422.test.ts":"4665","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cache-config-route-8219.test.ts":"4666","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cache-control-claude-providers.test.ts":"4667","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cache-control-policy.test.ts":"4668","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cache-metrics.test.ts":"4669","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cache-sweeps.test.ts":"4670","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-cap.test.ts":"4671","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-detailed-tokens.test.ts":"4672","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-file-rotation.test.ts":"4673","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-oom-unbounded-5618.test.ts":"4674","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-provider-display.test.ts":"4675","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-startup.test.ts":"4676","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-stream-debug.test.ts":"4677","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-trim-sql-vars-5217.test.ts":"4678","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-logs-correlation-sort.test.ts":"4679","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-logs-correlation-substring.test.ts":"4680","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-logs-pagination.test.ts":"4681","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-logs-requested-model.test.ts":"4682","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-logs-session-tag.test.ts":"4683","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/calllogs-format-split.test.ts":"4684","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cap-thinking-budget-gemini-fallback.test.ts":"4685","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/capture-critical-db-state.test.ts":"4686","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/card-hover-visible.test.ts":"4687","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/case-collision-6584.test.ts":"4688","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-helpers-extraction.test.ts":"4689","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-hide-auto-no-think.test.ts":"4690","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-order-contract.test.ts":"4691","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-order-helper.test.ts":"4692","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-pricing-lookup-index-8697.test.ts":"4693","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-pricing-surface-8018.test.ts":"4694","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-synced-static-preservation.test.ts":"4695","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-updates-v3829-kimi-qwen.test.ts":"4696","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-updates-v3x.test.ts":"4697","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/caveman-packs-de-fr-ja.test.ts":"4698","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/caveman-packs-zh-wenyan.test.ts":"4699","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-bridge-openai-image-7777.test.ts":"4700","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-bridge-tool-pair-guard.test.ts":"4701","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-bridge-transforms.test.ts":"4702","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-compatible-model-catalog.test.ts":"4703","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-compatible-provider.test.ts":"4704","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-discovery-alias-api.test.ts":"4705","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-discovery-alias-resolve.test.ts":"4706","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-discovery-alias-strip.test.ts":"4707","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-discovery-aliases-append.test.ts":"4708","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-discovery-aliases-catalog.test.ts":"4709","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-discovery-aliases-gate.test.ts":"4710","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-discovery-metrics.test.ts":"4711","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ccr-durable-store-9061.test.ts":"4712","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ccr-protocol-instruction.test.ts":"4713","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/changelog-fragments.test.ts":"4714","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chaos-api-routes.test.ts":"4715","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chaos-config.test.ts":"4716","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chaos-executor.test.ts":"4717","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/charm-hyper-provider.test.ts":"4718","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-adaptive-admission-binding.test.ts":"4719","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-admission-wrapper.test.ts":"4720","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-auth-log-redaction.test.ts":"4721","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-body-admission.test.ts":"4722","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-build-client-raw-request.test.ts":"4723","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-combo-live-test.test.ts":"4724","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-completions-parse-once-7847.test.ts":"4725","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-completions-route-shape-gate.test.ts":"4726","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-content-type-6414.test.ts":"4727","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-context-relay.test.ts":"4728","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-cooldown-aware-retry.test.ts":"4729","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-core-intercept-fetch.test.ts":"4730","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-early-schema-validation-6412.test.ts":"4731","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-helpers.test.ts":"4732","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-messages-validation-6402.test.ts":"4733","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-non-string-model-6407.test.ts":"4734","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-openai-compat-providers.test.ts":"4735","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-rate-limit-body-lock.test.ts":"4736","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-rejects-image-only-model.test.ts":"4737","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-request-body-parse-once-4380.test.ts":"4738","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-route-coverage.test.ts":"4739","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-route-edge-cases.test.ts":"4740","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-safetynet-reqid-6097.test.ts":"4741","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-attempt-logging.test.ts":"4742","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-background-redirect.test.ts":"4743","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-cache-usage-meta.test.ts":"4744","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-caveman-output-analytics.test.ts":"4745","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-claude-effort-variant.test.ts":"4746","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-claude-upstream-messages.test.ts":"4747","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-client-usage-buffer.test.ts":"4748","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-codex-quota.test.ts":"4749","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-combo-context-limit-8378.test.ts":"4750","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-combo-context-override-rescue.test.ts":"4751","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-compression-analytics-write.test.ts":"4752","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-compression-cache-stats.test.ts":"4753","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-compression-combo-predicates.test.ts":"4754","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-compression-integration.test.ts":"4755","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-compression-settings.test.ts":"4756","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-compression-usage-receipt.test.ts":"4757","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-context-editing-telemetry.test.ts":"4758","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-context-estimation.test.ts":"4759","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-execution-credentials.test.ts":"4760","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-executor-client-headers.test.ts":"4761","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-executor-helpers.test.ts":"4762","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-executor-proxy.test.ts":"4763","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-extracted-modules-3821.test.ts":"4764","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-failure-usage.test.ts":"4765","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-gamification-event.test.ts":"4766","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-headers.test.ts":"4767","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-imports-cleanly.test.ts":"4768","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-json-body-to-sse.test.ts":"4769","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-key-health.test.ts":"4770","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-log-truncation.test.ts":"4771","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-memory-extraction.test.ts":"4772","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-memory-pressure.test.ts":"4773","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-memory-skills-injection.test.ts":"4774","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-model-output-cap-wiring.test.ts":"4775","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-non-streaming-response-body.test.ts":"4776","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-non-streaming-response-parse.test.ts":"4777","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-non-streaming-sse.test.ts":"4778","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-non-streaming-usage-stats.test.ts":"4779","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-nonstreaming-json-response.test.ts":"4780","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-nonstreaming-response-headers.test.ts":"4781","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-output-style-telemetry.test.ts":"4782","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-passthrough-tool-names.test.ts":"4783","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-plugin-onrequest.test.ts":"4784","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-plugin-onresponse.test.ts":"4785","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-postcall-guardrail-context.test.ts":"4786","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-quota-share-consumption.test.ts":"4787","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-request-format.test.ts":"4788","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-request-setup.test.ts":"4789","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-sanitization.test.ts":"4790","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-semantic-cache-store.test.ts":"4791","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-semantic-cache.test.ts":"4792","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-service-tier.test.ts":"4793","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-skills-format.test.ts":"4794","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-stage-trace.test.ts":"4795","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-stream-error-result.test.ts":"4796","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-stream-finalize.test.ts":"4797","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-streaming-cache-store.test.ts":"4798","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-streaming-cost.test.ts":"4799","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-streaming-pipeline.test.ts":"4800","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-streaming-quota-share.test.ts":"4801","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-streaming-response-headers.test.ts":"4802","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-streaming-usage-stats.test.ts":"4803","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-strip-stale-headers.test.ts":"4804","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-target-format.test.ts":"4805","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-telemetry-helpers.test.ts":"4806","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-tool-calling-required-check.test.ts":"4807","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-translation-paths.test.ts":"4808","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-unsupported-params-strip.test.ts":"4809","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-upstream-body.test.ts":"4810","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-upstream-execute-headers.test.ts":"4811","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-upstream-timeouts.test.ts":"4812","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-image-cache.test.ts":"4813","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-async-image-ws-shapes-7357.test.ts":"4814","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-citations-escape.test.ts":"4815","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-citations.test.ts":"4816","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-handoff-resume.test.ts":"4817","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-image-silentdrop.test.ts":"4818","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-models-split.test.ts":"4819","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-sha3-boringssl-5531.test.ts":"4820","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-tools-5240.test.ts":"4821","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web.test.ts":"4822","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cheaperinference-executor.test.ts":"4823","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cheaperinference-image-models.test.ts":"4824","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cheaperinference-provider-registration.test.ts":"4825","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-changelog-integrity.test.ts":"4826","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-cognitive-complexity.test.ts":"4827","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-complexity.test.ts":"4828","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-db-rules-classification.test.ts":"4829","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-db-rules.test.ts":"4830","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-dead-code.test.ts":"4831","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-deps.test.ts":"4832","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-docs-counts-sync.test.ts":"4833","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-docs-symbols.test.ts":"4834","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-duplication.test.ts":"4835","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-env-doc-sync.test.ts":"4836","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-error-helper.test.ts":"4837","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-fabricated-docs.test.ts":"4838","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-fetch-targets.test.ts":"4839","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-file-size.test.ts":"4840","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-install-upgrade-convergence.test.ts":"4841","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-known-symbols.test.ts":"4842","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-migration-numbering.test.ts":"4843","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-openapi-breaking-ratchet.test.ts":"4844","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-openapi-routes.test.ts":"4845","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-pack-boot.test.ts":"4846","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-pr-evidence.test.ts":"4847","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-provider-consistency.test.ts":"4848","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-public-creds.test.ts":"4849","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-route-guard-membership.test.ts":"4850","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-rtl-ratchet.test.ts":"4851","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-test-discovery.test.ts":"4852","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-test-masking-selfref-6634.test.ts":"4853","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-test-masking.test.ts":"4854","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-tool-config-status.test.ts":"4855","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-type-coverage.test.ts":"4856","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chenzk-provider-2437.test.ts":"4857","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chipotle-executor.test.ts":"4858","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chutes-registry-baseurl-7621.test.ts":"4859","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/circuit-breaker-abort-provider-trip-7907.test.ts":"4860","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/circuit-breaker-client-abort.test.ts":"4861","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/circuit-breaker-failure-kind.test.ts":"4862","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/circuit-breaker-registry-cap.test.ts":"4863","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/circuit-breaker-stream-controller-4602.test.ts":"4864","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/classify-pr-changes.test.ts":"4865","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/classify429.test.ts":"4866","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-adaptive-sampling-params.test.ts":"4867","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-adaptive-thinking-normalize.test.ts":"4868","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-atu-effort-leak-9505.test.ts":"4869","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-beta-client-header-3415.test.ts":"4870","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-beta-flags-2454.test.ts":"4871","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-cache-control-passthrough.test.ts":"4872","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-classifier-compat.test.ts":"4873","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-cli-config.test.ts":"4874","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-cli-defaults.test.ts":"4875","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-code-compatible-helpers.test.ts":"4876","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-code-compatible-request.test.ts":"4877","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-code-meta-requests.test.ts":"4878","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-code-obfuscation.test.ts":"4879","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-code-parity.test.ts":"4880","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-code-rendering-fixes.test.ts":"4881","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-code-tool-remapper-flag-leak.test.ts":"4882","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-codex-identity-version-sync.test.ts":"4883","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-context-1m-client-beta-forward.test.ts":"4884","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-context-1m-supported-models.test.ts":"4885","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-effort-suffix-strip.test.ts":"4886","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-effort-variants.test.ts":"4887","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-empty-stream-error-3685.test.ts":"4888","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-extra-usage.test.ts":"4889","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-fast-mode.test.ts":"4890","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-gemini-thought-signature-8979.test.ts":"4891","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-haiku-no-adaptive-thinking.test.ts":"4892","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-helper-minimax-output-config.test.ts":"4893","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-identity-version-sync.test.ts":"4894","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-import-route.test.ts":"4895","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-native-passthrough-tools.test.ts":"4896","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-oauth-provider.test.ts":"4897","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-oauth-tool-cloak.test.ts":"4898","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-oauth-usage-429-backoff.test.ts":"4899","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-oauth-vps-endpoints.test.ts":"4900","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-passthrough-stream-boolean.test.ts":"4901","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-passthrough-thinking-2454.test.ts":"4902","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-prepare-request-preserve-fallback.test.ts":"4903","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-profile-auto-sync-gate.test.ts":"4904","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-server-tool-name-preserve.test.ts":"4905","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-stream-reconstructed-body.test.ts":"4906","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-thinking-tool-choice-guard.test.ts":"4907","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-to-gemini-budget-tokens-zero-6813.test.ts":"4908","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-to-openai-image-toolresult.test.ts":"4909","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-to-openai-system-role-6954.test.ts":"4910","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-to-openai-think-close-5123.test.ts":"4911","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-tool-result-pairing.test.ts":"4912","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-tool-search-beta-3974.test.ts":"4913","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-tool-type-default-2195.test.ts":"4914","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-auto-refresh.test.ts":"4915","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-browser-transport.test.ts":"4916","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-executor-split.test.ts":"4917","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-live-alignment.test.ts":"4918","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-payload-runtime.test.ts":"4919","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-session.test.ts":"4920","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-slow-first-byte.test.ts":"4921","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-sonnet5-registry-6209.test.ts":"4922","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-stream.test.ts":"4923","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-transport.test.ts":"4924","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-turnstile-ua-mismatch-7548.test.ts":"4925","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web.test.ts":"4926","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claudeAuthFile.test.ts":"4927","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claudeAuthImport.test.ts":"4928","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cleanup-column-fix.test.mjs":"4929","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/alias-resolver-7791.test.ts":"4930","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/autostart-linux.test.ts":"4931","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/autostart-macos-launchctl.test.ts":"4932","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/autostart-windows.test.ts":"4933","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/autostart.test.ts":"4934","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/launch-claude-exe-windows-9454.test.ts":"4935","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/launch-codex-windows-spawn-args.test.ts":"4936","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/launch-codex.test.ts":"4937","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/launch-command.test.ts":"4938","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/launch-windows-spawn-args.test.ts":"4939","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-aider.test.ts":"4940","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-claude.test.ts":"4941","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-cline.test.ts":"4942","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-codex.test.ts":"4943","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-continue.test.ts":"4944","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-crush.test.ts":"4945","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-cursor.test.ts":"4946","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-goose.test.ts":"4947","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-kilo.test.ts":"4948","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-opencode.test.ts":"4949","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-qwen.test.ts":"4950","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-roo.test.ts":"4951","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/tray.test.ts":"4952","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-a2a-invoke-commands.test.ts":"4953","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-audit-commands.test.ts":"4954","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-auth-export-command.test.ts":"4955","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-backup-command.test.ts":"4956","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-batches-commands.test.ts":"4957","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-catalog-acpspawnable.test.ts":"4958","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-catalog-counts.test.ts":"4959","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-catalog-display-contract.test.ts":"4960","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-catalog-newentries.test.ts":"4961","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-catalog-removed.test.ts":"4962","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-catalog-schema.test.ts":"4963","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-chat.test.ts":"4964","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-clipboard.test.ts":"4965","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-cloud-commands.test.ts":"4966","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-combo-command.test.ts":"4967","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-combo-suggest-commands.test.ts":"4968","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-completion-dynamic.test.ts":"4969","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-compression-commands.test.ts":"4970","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-connect-helpers.test.ts":"4971","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-context-eng-commands.test.ts":"4972","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-contexts.test.ts":"4973","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-cost.test.ts":"4974","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-dashboard-open-fallback.test.ts":"4975","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-dashboard-port.test.ts":"4976","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-data-dir-env-loading.test.ts":"4977","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-data-dir-env.test.ts":"4978","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-doctor-command.test.ts":"4979","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-doctor-liveness-fallback-6162.test.ts":"4980","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-doctor-rooturl-windows-5844.test.ts":"4981","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-electron-to-cli-migration-server-env-7302.test.ts":"4982","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-entrypoint.test.ts":"4983","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-environment-helpers.test.ts":"4984","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-environment.test.ts":"4985","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-eval-commands.test.ts":"4986","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-exit-codes.test.ts":"4987","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-expanded-commands.test.ts":"4988","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-files-commands.test.ts":"4989","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-fingerprints.test.ts":"4990","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-health-monitoring-route.test.ts":"4991","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-helper/config-generator.test.ts":"4992","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-helper/hermes-home-env.test.ts":"4993","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-helper/tool-detector-win32-7279.test.ts":"4994","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-helper/tool-detector.test.ts":"4995","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-helper-tool-detector-paths-6162.test.ts":"4996","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-i18n-catalog.test.ts":"4997","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-io.test.ts":"4998","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-ipv4-first-dns-2699.test.ts":"4999","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-keys-command.test.ts":"5000","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-lang-commands.test.ts":"5001","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-login-antigravity.test.ts":"5002","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-login-push-remote.test.ts":"5003","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-logs-route.test.ts":"5004","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-machine-token.test.ts":"5005","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-mcp-call-commands.test.ts":"5006","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-memory-commands.test.ts":"5007","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-memory-types.test.mjs":"5008","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-memory.test.ts":"5009","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-mitm-schema.test.ts":"5010","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-model-config-schema.test.ts":"5011","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-models-command.test.ts":"5012","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-nodes-commands.test.ts":"5013","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-oauth-commands.test.ts":"5014","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-oneproxy-commands.test.ts":"5015","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-open-command.test.ts":"5016","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-openapi-codegen.test.ts":"5017","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-openapi-commands.test.ts":"5018","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-output-render-table.test.ts":"5019","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-output.test.ts":"5020","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-plugin-system.test.ts":"5021","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-policy-commands.test.ts":"5022","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-pricing-commands.test.ts":"5023","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-process-supervisor-spawn-error-8091.test.ts":"5024","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-process-supervisor.test.ts":"5025","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-program.test.ts":"5026","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-providers-command.test.ts":"5027","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-providers-metrics.test.ts":"5028","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-providers-rotate.test.ts":"5029","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-redis-command.test.ts":"5030","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-remote-mode.test.ts":"5031","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-repl.test.ts":"5032","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-resilience-commands.test.ts":"5033","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-runtime-detection.test.ts":"5034","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-runtime-extended.test.ts":"5035","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-runtime-imports-packaged-5227.test.ts":"5036","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-runtime-known-path-shortcircuit-7774.test.ts":"5037","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-runtime.test.ts":"5038","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-serve-hostname.test.ts":"5039","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-serve-port.test.ts":"5040","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-serve-readiness-timeout-6321.test.ts":"5041","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-serve-startup-time.test.ts":"5042","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-serve-stop-command.test.ts":"5043","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-serve-version-banner.test.ts":"5044","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-server-commands.test.ts":"5045","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-sessions-commands.test.ts":"5046","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-setup-command.test.ts":"5047","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-setup-opencode-nested-alias-7682.test.ts":"5048","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-setup-opencode.test.ts":"5049","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-simulate.test.ts":"5050","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-skills-commands.test.ts":"5051","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-spinner.test.ts":"5052","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-sqlite-bindings-not-found-7868.test.ts":"5053","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-sqlite-no-fallback-7586.test.ts":"5054","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-stop-supervisor-respawn-9455.test.ts":"5055","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-storage-key-bootstrap.test.ts":"5056","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-storage-key-provision.test.ts":"5057","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-stream.test.ts":"5058","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-sync-commands.test.ts":"5059","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tags-commands.test.ts":"5060","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-telemetry-commands.test.ts":"5061","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tool-detector-imports.test.ts":"5062","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tools-auth-hardening.test.ts":"5063","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tools-crush.test.ts":"5064","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tools-i18n.test.ts":"5065","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tools-keys-route.test.ts":"5066","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tools-schema.test.ts":"5067","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tools-settings-jsonc.test.ts":"5068","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tools.test.ts":"5069","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-translator-commands.test.ts":"5070","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tray-systray2.test.ts":"5071","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tray.test.ts":"5072","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tui.test.ts":"5073","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-update-global-paths-3295.test.ts":"5074","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-update-notifier.test.ts":"5075","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-update-prefer-online-4376.test.ts":"5076","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-update-shadow-install-9475.test.ts":"5077","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-usage.test.ts":"5078","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-version-fastpath.test.ts":"5079","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-waitForServer.test.mjs":"5080","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-webhooks-commands.test.ts":"5081","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cliRuntime-codex-shebang-8036.test.ts":"5082","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cliRuntime-symlink-escape-7753.test.ts":"5083","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/client-identity-profiles.test.ts":"5084","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cline-catalog-models-3321.test.ts":"5085","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cline-force-stream.test.ts":"5086","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cline-response-envelope.test.ts":"5087","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cline-workos-auth-token-shape.test.ts":"5088","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/clinepass-provider.test.ts":"5089","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/clinepass-thinking-budget.test.ts":"5090","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cliproxy-auth-import-1934.test.ts":"5091","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cliproxyapi-dedicated-credential-7645.test.ts":"5092","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cliproxyapi-executor.test.ts":"5093","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cliproxyapi-fallback-wiring.test.ts":"5094","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cliproxyapi-model-mapping-dispatch.test.ts":"5095","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-agent-cors-failclosed.test.ts":"5096","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-agent-credentials-api.test.ts":"5097","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-agent-credentials.test.ts":"5098","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-agent-cursor-4227.test.ts":"5099","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-agent-health-api.test.ts":"5100","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-agent-tasks-route-auth.test.ts":"5101","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-sync.test.ts":"5102","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-write-auth.test.ts":"5103","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudAgent-types.test.ts":"5104","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudflare-ai-catalog-8717.test.ts":"5105","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudflare-ai-image-parts-6390.test.ts":"5106","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudflare-ai-neuron-exhaustion-6980.test.ts":"5107","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudflare-models-uuid-4259.test.ts":"5108","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudflare-worker-upload-content-type-6416.test.ts":"5109","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudflaredTunnel-extended.test.ts":"5110","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudflaredTunnel.test.ts":"5111","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/code-assist-subscription.test.ts":"5112","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codebuddy-cn-provider.test.ts":"5113","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codebuddy-reasoning-optin.test.ts":"5114","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-auth-import-expiry.test.ts":"5115","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-auth-import-userid-dedup-6301.test.ts":"5116","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-banked-reset-credits-5199.test.ts":"5117","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-base-url.test.ts":"5118","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-cache-key.test.ts":"5119","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-capacity-limit-merge.test.ts":"5120","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-catalog-revalidation-runtime.test.ts":"5121","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-catalog-revalidation.test.ts":"5122","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-compact-strip-include-6805.test.ts":"5123","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-config-hooks-migration.test.ts":"5124","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-connection-defaults.test.ts":"5125","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-connection-edit-6562.test.ts":"5126","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-custom-tool-image-output-7698.test.ts":"5127","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-device-flow-tickets.test.ts":"5128","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-device-flow.test.ts":"5129","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-drop-nonstandard-events.test.ts":"5130","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-effort-alias-priority.test.ts":"5131","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-effort-model-echo-3697.test.ts":"5132","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-executor-split.test.ts":"5133","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-failover.test.ts":"5134","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-fast-tier.test.ts":"5135","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-finalize-tokens.test.ts":"5136","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-free-plan-image-generation.test.ts":"5137","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-gpt55-effort-routing.test.ts":"5138","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-gpt55-routing-5887.test.ts":"5139","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-gpt56-catalog.test.ts":"5140","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-import-refresh-validation-7522.test.ts":"5141","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-import-route.test.ts":"5142","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-import-token-route.test.ts":"5143","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-manual-refresh-rotating-guard.test.ts":"5144","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-models-catalog-refresh.test.ts":"5145","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-oauth-refresh-persist-6352.test.ts":"5146","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-oauth-remote-host-hint-7523.test.ts":"5147","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-orphaned-tool-outputs-2928.test.ts":"5148","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-peek-nonsse-body-untouched-7536.test.ts":"5149","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-plan-label-2570.test.ts":"5150","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-profile-auto-sync-gate.test.ts":"5151","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-quota-fetcher.test.ts":"5152","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-quota-selection-hydration.test.ts":"5153","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-quota-sync-no-proactive-refresh.test.ts":"5154","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-reset-credits.test.ts":"5155","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-responses-passthrough-strip-3317.test.ts":"5156","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-responses-ws-memory.test.ts":"5157","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-responses-ws-model-resolution.test.ts":"5158","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-session-affinity-reset-aware-5903.test.ts":"5159","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-session-json-import-6636.test.ts":"5160","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-spark-image-generation.test.ts":"5161","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-sse-capacity-fallback.test.ts":"5162","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-sse-peek-body-double-read.test.ts":"5163","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-stream-false.test.ts":"5164","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-synced-bare-model-routing.test.ts":"5165","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-system-message-image-8089.test.ts":"5166","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-tool-card-button-state.test.ts":"5167","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-tools-regex-lookaround.test.ts":"5168","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-tools-split.test.ts":"5169","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-usage-quotas-latent-window.test.ts":"5170","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-usage-quotas-review-window.test.ts":"5171","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-usage-windows.test.ts":"5172","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-verbosity.test.ts":"5173","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-ws-http-fallback.test.ts":"5174","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-ws-policy-enforcement-6564.test.ts":"5175","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codexAuthFile.test.ts":"5176","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codexAuthImport.test.ts":"5177","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codexAuthImportBulk.test.ts":"5178","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codexAuthZipExtract.test.ts":"5179","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codexBulkImport.test.ts":"5180","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/collect-metrics-module-coverage.test.ts":"5181","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/colocate-optionals.test.ts":"5182","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/auto-quota-cutoff.test.ts":"5183","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/auto-status-penalty-4540.test.ts":"5184","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/combo-context.test.ts":"5185","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/combo-exhausted-skip.test.ts":"5186","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/combo-failure-tracker-session-isolation.test.ts":"5187","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/combo-failure-tracker.test.ts":"5188","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/combo-target-exhaustion.test.ts":"5189","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/combo-target-timeout-standards.test.ts":"5190","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/context-requirements-integration.test.ts":"5191","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/effective-max-concurrency.test.ts":"5192","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/pin-recovery.test.ts":"5193","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/quota-share-concurrency.test.ts":"5194","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/recovery-hint.test.ts":"5195","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/strict-context-failopen-8786.test.ts":"5196","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-499-abort.test.ts":"5197","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-account-allowlist-3266.test.ts":"5198","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-antigravity-missing-project-reset-8486.test.ts":"5199","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-apply-strategy-ordering-split.test.ts":"5200","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-attempt-body-isolation-7847.test.ts":"5201","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-auto-candidate-expansion.test.ts":"5202","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-auto-config-split.test.ts":"5203","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-auto-promote.test.ts":"5204","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-body-specific-400-stop-4279.test.ts":"5205","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-bracket-names.test.ts":"5206","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-breaker-429.test.ts":"5207","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-builder-draft.test.ts":"5208","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-builder-effort-variants-8072.test.ts":"5209","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-builder-eligible-connection-2057.test.ts":"5210","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-builder-fingerprint-expansion.test.ts":"5211","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-builder-model-source-5477.test.ts":"5212","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-builder-opencode-prefix.test.ts":"5213","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-builder-options-route.test.ts":"5214","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-cache-invalidation.test.ts":"5215","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-cleanup-stale-connection.test.ts":"5216","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-config.test.ts":"5217","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-context-length.test.ts":"5218","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-context-prefix-resolution.test.ts":"5219","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-context-relay.test.ts":"5220","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-context-requirements.test.ts":"5221","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-context-window-filter.test.ts":"5222","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-control-center.test.ts":"5223","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-cooldown-retry.test.ts":"5224","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-cost-blending.test.ts":"5225","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-custom-provider-resolution.test.ts":"5226","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-description-5005.test.ts":"5227","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-diagnostics-trace.test.ts":"5228","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-disable-session-stickiness.test.ts":"5229","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-dispatch-prelude.test.ts":"5230","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-empty-content-failover-5085.test.ts":"5231","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-failure-log-message.test.ts":"5232","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-fallback-token-estimate-7847.test.ts":"5233","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-fingerprint-expansion.test.ts":"5234","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-fingerprint-pin-6696.test.ts":"5235","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-flatten-anthropic-tool-messages.test.ts":"5236","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-forecast.test.ts":"5237","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-fusion-config-warn-6455.test.ts":"5238","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-fusion-strategy-comboref-6764.test.ts":"5239","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-fusion-strategy.test.ts":"5240","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-headroom-ranking.test.ts":"5241","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-headroom-strategy.test.ts":"5242","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-health-dashboard.test.ts":"5243","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-health-route.test.ts":"5244","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-hedging.test.ts":"5245","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-hidden-leaf-routing.test.ts":"5246","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-id-resolution-4446.test.ts":"5247","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-input-bound-failure-8375.test.ts":"5248","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-input-bound-heterogeneous-8375.test.ts":"5249","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-least-used-account.test.ts":"5250","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-lockout-quota-reset-6863.test.ts":"5251","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-max-depth-config.test.ts":"5252","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-model-lockout-honors-reset-1308.test.ts":"5253","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-model-name-collision-8530.test.ts":"5254","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-model-scoped-400-advance.test.ts":"5255","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-name-codex-responses-rewrite.test.ts":"5256","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-omnimodel-tag-stripping.test.ts":"5257","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-param-validation-fallback-4519.test.ts":"5258","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-pin-health-gate.test.ts":"5259","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-pipeline-strategy.test.ts":"5260","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-pipeline.test.ts":"5261","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-prescreen.test.ts":"5262","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-priority-quota-exhaustion-cutoff-5923.test.ts":"5263","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-projection-capabilities-3979.test.ts":"5264","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-provider-cooldown-sibling.test.ts":"5265","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-provider-cooldown.test.ts":"5266","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-provider-diversity-wiring.test.ts":"5267","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-provider-wildcard.test.ts":"5268","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-proxy-assignments-parse-7149.test.ts":"5269","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-quality-validator-reasoning.test.ts":"5270","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-quota-share-cooldown-wait.test.ts":"5271","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-quota-soft-penalty.test.ts":"5272","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-resolve-auto-strategy-split.test.ts":"5273","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-resource-404-health.test.ts":"5274","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-response-validation-failover.test.ts":"5275","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-response-validation.test.ts":"5276","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-responses-sse-failure-fallback.test.ts":"5277","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-round-robin-streaming-lock-3811.test.ts":"5278","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-roundrobin-compat-fallback-6238.test.ts":"5279","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-routes-composite-tiers.test.ts":"5280","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-routing-engine.test.ts":"5281","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-rr-fallback-advance-948.test.ts":"5282","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-rr-session-stickiness-3825.test.ts":"5283","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-rr-sticky-9router.test.ts":"5284","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-runtime-unit-concurrency.test.ts":"5285","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-same-provider-cascade.test.ts":"5286","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-scope-proxy-dead-7149.test.ts":"5287","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-scoring-inspector.test.ts":"5288","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-select-all-batch-8526.test.ts":"5289","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-selected-connection-success.test.ts":"5290","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-session-stickiness.test.ts":"5291","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-sessionless-pin-3825.test.ts":"5292","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-skip-conn-disable-plugin-block-7806.test.ts":"5293","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-speed-telemetry-6875.test.ts":"5294","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-stickiness-responses-input-7270.test.ts":"5295","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-strategies.test.ts":"5296","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-strategy-fallbacks.test.ts":"5297","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-stream-readiness-fallback.test.ts":"5298","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-streaming-empty-content-failover.test.ts":"5299","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-streaming-openai-no-finish-reason-7285.test.ts":"5300","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-strict-random-distribution-3959.test.ts":"5301","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-target-defensive-modelstr.test.ts":"5302","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-target-resolution-split.test.ts":"5303","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-target-timeout-runner.test.ts":"5304","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-target-token-limit-8716.test.ts":"5305","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-task-aware.test.ts":"5306","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-test-health.test.ts":"5307","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-test-route.test.ts":"5308","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-thinking-disabled-fable5-3554.test.ts":"5309","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-vision-aware-routing.test.ts":"5310","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combos-quota-protected.test.ts":"5311","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/comfyui-baseurl-override-6928.test.ts":"5312","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/command-code-auth-assist.test.ts":"5313","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/command-code-executor.test.ts":"5314","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/command-code-maxtokens-negative-5166.test.ts":"5315","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/command-code-mimo-v2-5-safety.test.ts":"5316","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/command-code-registry-vision.test.ts":"5317","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/command-code-user-array-5166.test.ts":"5318","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/command-code-vision.test.ts":"5319","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/commandClassification.test.ts":"5320","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/completions-body-model-echo.test.ts":"5321","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/completions-provider-removed.test.ts":"5322","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/completions-text-format-3571.test.ts":"5323","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/complexity-aware-scoring-wiring.test.ts":"5324","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/complexity-router.test.ts":"5325","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compliance-audit-route.test.ts":"5326","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compliance-index.test.ts":"5327","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compliance-noLog-cycle.test.ts":"5328","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compose-redis-loopback-bind.test.ts":"5329","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/composer-tool-calls.test.ts":"5330","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/composite-tiers-validation.test.ts":"5331","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/active-combo-dispatch.test.ts":"5332","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/active-combo-integration.test.ts":"5333","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/adaptive-chatcore-source-guard.test.ts":"5334","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/adaptive-compute-target.test.ts":"5335","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/adaptive-context-budget-config.test.ts":"5336","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/adaptive-panel-target.test.ts":"5337","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/adaptive-resolve-plan.test.ts":"5338","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/adaptive-select-plan-wiring.test.ts":"5339","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/aggressive-fidelity.test.ts":"5340","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/aggressive.test.ts":"5341","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/applycompression-bailout-optin.test.ts":"5342","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/bailout.test.ts":"5343","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/benchmark.test.ts":"5344","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/body-adapter.test.ts":"5345","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/cache-aware-preserve-mode.test.ts":"5346","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/cachingAware.test.ts":"5347","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-db.test.ts":"5348","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-dedup.test.ts":"5349","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-engine.test.ts":"5350","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-hedging.test.ts":"5351","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-preservation.test.ts":"5352","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-rules.test.ts":"5353","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-structural.test.ts":"5354","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-v379.test.ts":"5355","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/cavemanSharedBoundaries.test.ts":"5356","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-cross-tenant.test.ts":"5357","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-eviction-scope-9146.test.ts":"5358","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-marker-retrieve.test.ts":"5359","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-mcp-integration.test.ts":"5360","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-mcp-principal-5649.test.ts":"5361","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-non-mcp-full-prompt-loss-7746.test.ts":"5362","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-retrieval-ramp.test.ts":"5363","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-skip-tool-outputs.test.ts":"5364","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccrQuery.test.ts":"5365","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccrRanged.test.ts":"5366","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/codestripper-lazy-ts-7096.test.ts":"5367","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/codex-responses.test.ts":"5368","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/combos-engine-ui-schema-parity-4955.test.ts":"5369","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compareRoute.test.ts":"5370","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-aggressive.test.ts":"5371","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-benchmark-cli.test.ts":"5372","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-budget-gate.test.ts":"5373","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-combos-db.test.ts":"5374","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-engines-map-migration.test.ts":"5375","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-header-dispatch.test.ts":"5376","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-preview-api.test.ts":"5377","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-preview-auth.test.ts":"5378","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-registry-clear.test.ts":"5379","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-step-streaming.test.ts":"5380","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-tool-cardinality-env.test.ts":"5381","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compressionAnalytics.test.ts":"5382","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compressionAnnotation.test.ts":"5383","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compressionChannel.test.ts":"5384","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compressionMcpTools.test.ts":"5385","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/context-compression-api.test.ts":"5386","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/context-editing-telemetry.test.ts":"5387","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/context-editing.test.ts":"5388","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/db.test.ts":"5389","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/derive-default-plan.test.ts":"5390","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/derived-pipeline-integration.test.ts":"5391","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/diffHelper.test.ts":"5392","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/encoderComparison.test.ts":"5393","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/engine-breakdown-synthesis.test.ts":"5394","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/engine-catalog.test.ts":"5395","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/engine-enabled-toggle.test.ts":"5396","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/engine-guidance-7530.test.ts":"5397","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/engine-registry.test.ts":"5398","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-aggregate.test.ts":"5399","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-corpus.test.ts":"5400","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-cost-meter.test.ts":"5401","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-grader.test.ts":"5402","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-judge.test.ts":"5403","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-report.test.ts":"5404","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-runner.test.ts":"5405","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-savings.test.ts":"5406","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-seed-corpus.test.ts":"5407","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-selftest.test.ts":"5408","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/fidelityCheck.test.ts":"5409","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/fidelityGate.test.ts":"5410","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/fidelityGateStacked.test.ts":"5411","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/fidelityGateTypes.test.ts":"5412","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/fuzzyDedup.test.ts":"5413","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/gcf-benchmark.test.ts":"5414","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/gcf-inline-array-quote.test.ts":"5415","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/golden-eval.test.ts":"5416","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/hard-budget.test.ts":"5417","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/harness.test.ts":"5418","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/headroom-developer-role-2132.test.ts":"5419","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/headroom-minrows-persist-8056.test.ts":"5420","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/headroom-smartcrusher.test.ts":"5421","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/heatmap-build.test.ts":"5422","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/image-aware-tokens.test.ts":"5423","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ionizerEngine.test.ts":"5424","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ionizerGateSkip.test.ts":"5425","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ionizerSample.test.ts":"5426","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/language-detect-select.test.ts":"5427","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/language-packs.test.ts":"5428","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/lite.test.ts":"5429","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/live-zone.test.ts":"5430","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/llm-compressor-engine.test.ts":"5431","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/llmlingua-failopen.test.ts":"5432","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/llmlingua-model-store.test.ts":"5433","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/llmlingua-ultra-entry.test.ts":"5434","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/llmlingua-worker-resolution.test.ts":"5435","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/llmlingua-worker.test.ts":"5436","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/mcp-accessibility-config.test.ts":"5437","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/mcp-description-compressor.test.ts":"5438","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/mcpAccessibility-anchors.test.ts":"5439","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/mcpAccessibility-clamp.test.ts":"5440","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/mcpAccessibility-config-bounds.test.ts":"5441","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/mcpAccessibility.test.ts":"5442","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/mode-and-pipeline.test.ts":"5443","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/omniglyph-adapter.test.ts":"5444","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/omniglyph-chatcore-plumbing.test.ts":"5445","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/omniglyph-import.test.ts":"5446","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/omniglyph-plumbing.test.ts":"5447","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/omniglyph-registries.test.ts":"5448","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/omniglyph-registry.test.ts":"5449","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/omniglyph-single-mode.test.ts":"5450","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/output-styles-apply.test.ts":"5451","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/output-styles-backcompat.test.ts":"5452","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/output-styles-catalog.test.ts":"5453","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/output-styles-config.test.ts":"5454","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/output-styles-wiring.test.ts":"5455","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/outputMode.test.ts":"5456","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/pipeline-circuit-breaker.test.ts":"5457","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/pipeline-integration.test.ts":"5458","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ponytail-catalog.test.ts":"5459","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/prefix-freeze.test.ts":"5460","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/preservation-redos-4795.test.ts":"5461","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/preserve-system-prompt-mode-db.test.ts":"5462","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/preserve-system-prompt-mode.test.ts":"5463","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/preview-fallback-reasons-6461.test.ts":"5464","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/preview-outer-engine-token-reconcile-6488.test.ts":"5465","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/previewRouteBreakdown.test.ts":"5466","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/previewRouteFidelity.test.ts":"5467","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/previewRouteFuzzy.test.ts":"5468","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/previewRouteIonizer.test.ts":"5469","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/previewRoutePipeline.test.ts":"5470","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/previewRouteTokens.test.ts":"5471","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/previewRouteToon.test.ts":"5472","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/progressiveAging.test.ts":"5473","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/quantumLockDetect.test.ts":"5474","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/quantumLockIntegration.test.ts":"5475","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/quantumLockStep.test.ts":"5476","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/read-lifecycle.test.ts":"5477","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/relevance-engine.test.ts":"5478","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/relevance-scorer.test.ts":"5479","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/repro-6479-6491-null-stats-silent-drop.test.ts":"5480","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/repro-6480-noop-guard-misfire.test.ts":"5481","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/resolve-compression-plan.test.ts":"5482","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/responses-orphan-tool-call.test.ts":"5483","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/result-memo.test.ts":"5484","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/retrieveRoute.test.ts":"5485","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/retrieveRouteRanged.test.ts":"5486","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/riskGateDetect.test.ts":"5487","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/riskGateIntegration.test.ts":"5488","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/riskGateStep.test.ts":"5489","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-anthropic-tool-result.test.ts":"5490","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-cache-control-preserve.test.ts":"5491","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-code-stripper.test.ts":"5492","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-command-detector.test.ts":"5493","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-command-samples.test.ts":"5494","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-comments.test.ts":"5495","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-custom-filters.test.ts":"5496","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-deduplicator.test.ts":"5497","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-discover-redos.test.ts":"5498","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-dsl-pipeline.test.ts":"5499","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-engine.test.ts":"5500","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-file-read-no-truncate-4559.test.ts":"5501","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-filter-catalog.test.ts":"5502","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-filter-deduplicate.test.ts":"5503","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-filter-loader-resilience.test.ts":"5504","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-filter-redos-guard.test.ts":"5505","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-grouping-config.test.ts":"5506","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-grouping.test.ts":"5507","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-intensity.test.ts":"5508","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-learn.test.ts":"5509","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-line-filter.test.ts":"5510","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-loader-dir-resolution-5089.test.ts":"5511","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-mcp-tools.test.ts":"5512","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-raw-output-route.test.ts":"5513","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-raw-output.test.ts":"5514","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-render-gitdiff.test.ts":"5515","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-render-table.test.ts":"5516","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-render-terraform.test.ts":"5517","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-render-testgreen.test.ts":"5518","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-renderers-integration.test.ts":"5519","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-smart-truncate.test.ts":"5520","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-strip-comments.test.ts":"5521","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-toml-compatibility.test.ts":"5522","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-truncate-preserve.test.ts":"5523","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-verify.test.ts":"5524","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rule-loader.test.ts":"5525","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/session-dedup-intra-message-6467.test.ts":"5526","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/session-dedup-memory-7849.test.ts":"5527","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/session-dedup.test.ts":"5528","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/sessionDedupFuzzy.test.ts":"5529","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/smartcrusherToon.test.ts":"5530","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/splitCompositeCommand.test.ts":"5531","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/stacked-async.test.ts":"5532","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/stacked-pipeline-engines-fallback-6463.test.ts":"5533","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/stats.test.ts":"5534","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/strategySelector-cache-aware.test.ts":"5535","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/strategySelector.test.ts":"5536","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/summarizer.test.ts":"5537","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/toolResultCompressor.test.ts":"5538","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/toon.test.ts":"5539","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/types.test.ts":"5540","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ultra-code-preservation.test.ts":"5541","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ultra-slm-tier.test.ts":"5542","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ultra.test.ts":"5543","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/validation.test.ts":"5544","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-cache-guard-3955.test.ts":"5545","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-cli-rest-fallback-6571.test.ts":"5546","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-exclusions.test.ts":"5547","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-header-echo-6422.test.ts":"5548","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-noop-guard.test.ts":"5549","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-pipeline-inflation-guard.test.ts":"5550","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-pipeline-model.test.ts":"5551","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-run-telemetry-auth.test.ts":"5552","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-settings-cache.test.ts":"5553","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-tokens.test.ts":"5554","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-unknown-engine-validation-6485.test.ts":"5555","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compute-connection-default-name-6499.test.ts":"5556","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/config-hot-reload.test.ts":"5557","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/connection-cache-override-6880.test.ts":"5558","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/connection-level-upstream-headers.test.ts":"5559","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/connection-model-rules.test.ts":"5560","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/connection-reorder-by-availability.test.ts":"5561","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/connection-row-last-error-visibility.test.ts":"5562","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/connection-row-rtl-margin.test.ts":"5563","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/connection-status-filter-active-2526.test.ts":"5564","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/console-log-levels.test.ts":"5565","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-editing-executor-injection.test.ts":"5566","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-editing-relays.test.ts":"5567","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-editing-streaming-telemetry.test.ts":"5568","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-handoff.test.ts":"5569","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-manager.test.ts":"5570","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-pinning-tool-calls.test.ts":"5571","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-window-reconcile-persisted-overrides.test.ts":"5572","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-window-reconcile.test.ts":"5573","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cooldown-aware-retry-budget.test.ts":"5574","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cooldown-epoch-string-3954.test.ts":"5575","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-agent-antigravity-parity.test.ts":"5576","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-codegraph-knowledge.test.ts":"5577","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-free-quota-not-inverted.test.ts":"5578","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-gemini-claude-route-no-responses.test.ts":"5579","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-m365-edu-writeatcursor-6210.test.ts":"5580","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-m365-enterprise-6334.test.ts":"5581","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-m365-enterprise-invocation-7870.test.ts":"5582","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-m365-web-executor.test.ts":"5583","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-m365-web-logging-6210.test.ts":"5584","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-m365-web-silent-empty-7858.test.ts":"5585","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-runOmniRouteCli.test.ts":"5586","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-usage.test.ts":"5587","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-web-executor.test.ts":"5588","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/combo.property.test.ts":"5589","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/fakeUpstreamStream.test.ts":"5590","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/fixtures.test.ts":"5591","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/goldenSnapshot.test.ts":"5592","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/sanitizers.property.test.ts":"5593","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/sse-parser.property.test.ts":"5594","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/translation.golden.test.ts":"5595","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/translators.property.test.ts":"5596","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cors/origins.test.ts":"5597","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cost-explorer-params.test.ts":"5598","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cost-explorer-utils.test.ts":"5599","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/coze-validation-error-5426.test.ts":"5600","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/credential-health-active-connections-9180.test.ts":"5601","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/credential-health-boot-wiring.test.ts":"5602","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/credential-hint-copy-3180-3091.test.ts":"5603","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/credential-masker-guardrail.test.ts":"5604","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/crof-provider.test.ts":"5605","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/crof-usage-fetcher.test.ts":"5606","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/crof-usage.test.ts":"5607","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/crypto-randomuuid-polyfill.test.ts":"5608","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/csp-lan-ws-5083.test.ts":"5609","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-agent-cli-version.test.ts":"5610","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-agent-exec-router.test.ts":"5611","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-agent-models.test.ts":"5612","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-agent-protobuf.test.ts":"5613","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-agent-session.test.ts":"5614","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-agent-system-prompt.test.ts":"5615","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-agent-tool-calls.test.ts":"5616","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-builtin-tool-bridge.test.ts":"5617","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-composer-thinking.test.ts":"5618","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-executor-split.test.ts":"5619","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-image-input.test.ts":"5620","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-model-effort-suffix-7289.test.ts":"5621","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-protobuf-wire-split.test.ts":"5622","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-registry-claude-families.test.ts":"5623","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-streaming.test.ts":"5624","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-usage-fetcher.test.ts":"5625","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-version-detector.test.mjs":"5626","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/custom-cli-config.test.ts":"5627","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/custom-endpoint-paths.test.ts":"5628","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/custom-endpoint-system-prompt.test.ts":"5629","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/custom-headers-provider-nodes.test.ts":"5630","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/custom-model-target-format.test.ts":"5631","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/custom-provider-combo-models.test.ts":"5632","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dahl-manual-api-key.test.ts":"5633","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dahl-provider-config.test.ts":"5634","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dahl-registry.test.ts":"5635","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dahl-tokens-route.test.ts":"5636","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/agentrouter-connection-modal-fields.test.ts":"5637","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/components/BatchDetailModal.test.tsx":"5638","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/components/ExpirationBadge.test.tsx":"5639","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/components/NewBatchWizard.test.tsx":"5640","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/components/ProgressBarBicolor.test.tsx":"5641","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/components/UploadFileModal.test.tsx":"5642","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/components/useBatchActions.test.tsx":"5643","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/concept-cards.test.tsx":"5644","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/list-regression.test.tsx":"5645","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/sanitization.test.tsx":"5646","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/context-parent-redirect-5298.test.ts":"5647","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/crypto-randomuuid-polyfill.test.ts":"5648","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/hydration-extension-attrs.test.ts":"5649","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/material-icons-self-hosted.test.ts":"5650","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providerPageStorage.test.ts":"5651","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providers/services/api-key-field.test.ts":"5652","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providers/services/auto-start-toggle.test.ts":"5653","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providers/services/cliproxy-model-mapping.test.ts":"5654","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providers/services/cliproxy-tab.test.ts":"5655","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providers/services/mux-tab.test.ts":"5656","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providers/services/ninerouter-tab.test.ts":"5657","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providers/services/page.test.ts":"5658","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard-localization-contract.test.ts":"5659","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard-shell-tabs.test.ts":"5660","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard-sidebar-desktop-visible.test.ts":"5661","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashscope-cache-control-openai-2069.test.ts":"5662","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashscope-text-models-discovery.test.ts":"5663","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dast-method-not-allowed.test.ts":"5664","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/data-dir-writable-fallback.test.ts":"5665","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/database-settings-maintenance.test.ts":"5666","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/api-keys.test.ts":"5667","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/compressionRunTelemetry.test.ts":"5668","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/context-editing-telemetry-record.test.ts":"5669","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/default-combo-toggle.test.ts":"5670","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/discovery-results.test.ts":"5671","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/encryption-error-handling.test.mjs":"5672","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/migration-071.test.ts":"5673","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/no-migration-collisions.test.ts":"5674","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/notion.test.mjs":"5675","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/obsidian.test.mjs":"5676","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/omp.test.ts":"5677","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/per-engine-analytics.test.ts":"5678","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/per-engine-breakdown-analytics.test.ts":"5679","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/quota-pools.test.ts":"5680","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/repositories/sqliteComboRepositories.test.ts":"5681","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/serviceModels.test.ts":"5682","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/stats-virtual-table.test.ts":"5683","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/vacuum-scheduler.test.ts":"5684","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/weak-rng-fixes.test.ts":"5685","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-adapters/betterSqliteAdapter.test.ts":"5686","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-adapters/bunSqliteAdapter.test.ts":"5687","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-adapters/cliSqlite.test.mjs":"5688","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-adapters/driverFactory.test.ts":"5689","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-adapters/nodeSqliteShared.test.ts":"5690","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-adapters/sqljsAdapter.test.ts":"5691","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-agent-bridge-bypass.test.ts":"5692","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-agent-bridge-mappings.test.ts":"5693","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-agent-bridge-state.test.ts":"5694","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-api-key-groups.test.ts":"5695","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-apiKeys-crud.test.ts":"5696","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-backup-autobackup-setting-5871.test.ts":"5697","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-backup-extended.test.ts":"5698","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-backups-skills-3500.test.ts":"5699","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-call-log-stats-3500.test.ts":"5700","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-case-mapping-split.test.ts":"5701","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-cleanup-xp-audit-log.test.ts":"5702","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-cleanup.test.ts":"5703","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-cli-tool-state.test.ts":"5704","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-combos-crud.test.ts":"5705","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-command-code-auth.test.ts":"5706","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-compression-cache-stats.test.ts":"5707","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-context-handoffs.test.ts":"5708","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-core-extended.test.ts":"5709","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-core-init.test.ts":"5710","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-core-migration.test.ts":"5711","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-core-native-error.test.ts":"5712","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-core-temp-store-pragma.test.ts":"5713","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-core.test.ts":"5714","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-credit-balance.test.ts":"5715","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-detailed-logs.test.ts":"5716","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-domainState-crud.test.ts":"5717","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-driver-bundling-externals.test.ts":"5718","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-driver-logs-english-5103.test.ts":"5719","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-encryption.test.ts":"5720","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-gamification-federation-3500.test.ts":"5721","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-health-check.test.ts":"5722","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-health-route.test.ts":"5723","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-import-ebusy-5406.test.ts":"5724","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-import-max-size-4719.test.ts":"5725","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-import-resilient-driver-3025.test.ts":"5726","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-inspector-custom-hosts.test.ts":"5727","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-inspector-sessions.test.ts":"5728","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-logs-cache-3500.test.ts":"5729","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-middleware.test.ts":"5730","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-migration-runner-account-identity.test.ts":"5731","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-migration-runner-extra-dirs.test.ts":"5732","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-migration-runner.test.ts":"5733","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-migration-version-uniqueness.test.ts":"5734","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-migrationrunner-constants-split.test.ts":"5735","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-model-aliases-cascade.test.ts":"5736","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-model-context-overrides.test.ts":"5737","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-models-crud.test.ts":"5738","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-models-extended.test.ts":"5739","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-models-split.test.ts":"5740","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-playground-presets.test.ts":"5741","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-provider-cookie-dedup-3368.test.ts":"5742","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-provider-daily-usage-4009.test.ts":"5743","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-provider-limits.test.ts":"5744","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-provider-plans.test.ts":"5745","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-provider-stats.test.ts":"5746","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-providers-access-token-1290.test.ts":"5747","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-providers-cross-idp-dedup-2244.test.ts":"5748","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-providers-crud.test.ts":"5749","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-providers-split.test.ts":"5750","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-proxies-crud.test.ts":"5751","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-proxies-family.test.ts":"5752","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-proxies-split.test.ts":"5753","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-quota-consumption.test.ts":"5754","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-quota-migrations-idempotency.test.ts":"5755","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-quota-pools.test.ts":"5756","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-quota-snapshots.test.ts":"5757","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-read-cache.test.ts":"5758","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-recovery.test.ts":"5759","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-registered-keys.test.ts":"5760","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-registeredKeys-crud.test.ts":"5761","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-reset-module-state.test.ts":"5762","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-schema-columns-split.test.ts":"5763","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-secrets.test.ts":"5764","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-session-account-affinity.test.ts":"5765","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-settings-crud.test.ts":"5766","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-settings-extended.test.ts":"5767","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-settings-split.test.ts":"5768","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-sqljs-close-poison-7494.test.ts":"5769","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-sqljs-preinit-ordering-gap-7288.test.ts":"5770","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-state-reset.test.ts":"5771","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-sync-tokens.test.ts":"5772","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-tier-config.test.ts":"5773","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-upstreamProxy.test.ts":"5774","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-usage-analytics-3500.test.ts":"5775","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-usageanalytics-split.test.ts":"5776","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-versionManager.test.ts":"5777","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-webhooks.test.ts":"5778","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ddg-circuit-breaker-null-content-6999-7000.test.ts":"5779","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/decrypt-stale-key-hint-6148.test.ts":"5780","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-pow-solver-strict.test.ts":"5781","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-quota-fetcher.test.ts":"5782","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-autorefresh-401-response.test.ts":"5783","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-executor-split.test.ts":"5784","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-rolling-window-2942.test.ts":"5785","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-session-persistence-2942.test.ts":"5786","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-tool-result-prompt-4712.test.ts":"5787","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-tools-execute-2820.test.ts":"5788","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-tools-execute.test.ts":"5789","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-tools-nameless-5154.test.ts":"5790","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-tools-variants.test.ts":"5791","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web.test.ts":"5792","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/default-reasoning-effort-6879.test.ts":"5793","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/default-url-normalizers-split.test.ts":"5794","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/delete-provider-connection-purges-key-health-7740.test.ts":"5795","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deno-deploy-relay-path-ssrf.test.ts":"5796","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/derive-discovery-config-5087.test.ts":"5797","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/design-grid-background.test.ts":"5798","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/designer-web-empty-response-502.test.ts":"5799","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dev-ensure-native-sqlite.test.ts":"5800","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dev-origins-config.test.ts":"5801","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dev-script-heap-limit.test.ts":"5802","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/device-tracker.test.ts":"5803","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/devin-bridge-live-runtime.test.ts":"5804","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/devin-bridge-network-guard.test.ts":"5805","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/devin-cli-catalog.test.ts":"5806","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/devin-cloud-agent-validator-6142.test.ts":"5807","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dgrid-provider.test.ts":"5808","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/diagnostics-claude-thinking-5108.test.ts":"5809","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/diagnostics.test.ts":"5810","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/digitalocean-provider.test.ts":"5811","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/direct-dispatcher-pipelining-4580.test.ts":"5812","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/discontinued-providers-2026.test.ts":"5813","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/display-and-error-utils.test.ts":"5814","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dns-config-generic.test.ts":"5815","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/docker-base-path-patch.test.ts":"5816","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/docker-ensure-base-path.test.ts":"5817","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/docker-healthcheck-3151.test.ts":"5818","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/docker-healthcheck-base-path.test.ts":"5819","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/docker-llmlingua-optionals-9166.test.ts":"5820","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dockerfile-base-path-arg.test.ts":"5821","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dockerfile-better-sqlite3-node-gyp-6700.test.ts":"5822","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dockerfile-build-heap-4076.test.ts":"5823","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dockerignore-docs-coverage.test.ts":"5824","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/docs/skillManifestsLint.test.ts":"5825","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/domain-branch-hardening.test.ts":"5826","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/domain-cost-rules.test.ts":"5827","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/domain-degradation.test.ts":"5828","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/domain-fallback-policy.test.ts":"5829","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/domain-lockout-policy.test.ts":"5830","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/domain-persistence.test.ts":"5831","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/droid-custom-models.test.ts":"5832","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/duckduckgo-challenge-split.test.ts":"5833","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/duckduckgo-domain-4037.test.ts":"5834","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/duckduckgo-vqd-429-misclassification-6996.test.ts":"5835","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/duckduckgo-web-executor.test.ts":"5836","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/duckduckgo-web-model-catalog-8000.test.ts":"5837","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/early-stream-keepalive.test.ts":"5838","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/earlyStreamKeepalive.test.ts":"5839","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/edgetts-provider.test.ts":"5840","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/effort-thinking-standardization-6241.test.ts":"5841","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-main.test.ts":"5842","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-packaging.test.ts":"5843","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-preload.test.ts":"5844","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-processtree.test.ts":"5845","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-rebuild-spawn-win.test.ts":"5846","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-release-desktop-channel-8949.test.ts":"5847","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-remote-server.test.ts":"5848","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-resolve-node-executable-7941.test.ts":"5849","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-resolve-server-entry.test.ts":"5850","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-smoke-script.test.ts":"5851","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embed-ws-host-empty-messages-5110.test.ts":"5852","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embedding-family-guard.test.ts":"5853","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embedding-rerank-provider-registry.test.ts":"5854","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-auth.test.ts":"5855","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-combo-dimensions.test.ts":"5856","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-combo-family-reject.test.ts":"5857","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-cost-telemetry-headers.test.ts":"5858","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-flatten-single-row-9089.test.ts":"5859","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-gemini-dimensions.test.ts":"5860","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-handler.test.ts":"5861","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-lan-noauth-6925.test.ts":"5862","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-multimodal-7956.test.ts":"5863","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-nvidia-input-type.test.ts":"5864","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-proxy-forwarding.test.ts":"5865","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-route-apikeymeta-6929.test.ts":"5866","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/emergency-fallback-service.test.ts":"5867","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/empty-choices-no-inject.test.ts":"5868","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/empty-content-stopreason-3572.test.ts":"5869","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/empty-response-hardening.test.ts":"5870","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/empty-stream-no-content-8649.test.ts":"5871","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/empty-tool-name-loop.test.ts":"5872","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/encrypted-reasoning-summary-7243.test.ts":"5873","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/encryption.spec.ts":"5874","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/endpoint-categories.test.ts":"5875","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/endpoint-restrictions-policy.test.ts":"5876","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/env-docs-input-sanitizer-8093.test.ts":"5877","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/error-boundary-stack.test.ts":"5878","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/error-classification.test.ts":"5879","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/error-classifier.test.ts":"5880","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/error-config.test.ts":"5881","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/error-message-sanitization.test.ts":"5882","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/error-sensitive-redaction.test.ts":"5883","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/errorClassifier-noauth-403-6315.test.ts":"5884","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/errorclassifier-antigravity-403.test.ts":"5885","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/eslint-import-boundaries.test.ts":"5886","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/estimateSizeFast.test.ts":"5887","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/evalrunner-builtinsuites-split.test.ts":"5888","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/evals-history.test.ts":"5889","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/evals-route.test.ts":"5890","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/event-bus.test.ts":"5891","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/eviction-guards-apiKeyRotator.test.ts":"5892","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/eviction-guards-codexQuotaFetcher.test.ts":"5893","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/execute-chat-resource-pressure-breaker.test.ts":"5894","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-adapta-web.test.ts":"5895","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-agy.test.ts":"5896","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-antigravity-credits.test.ts":"5897","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-antigravity-protocol.test.ts":"5898","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-antigravity.test.ts":"5899","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-azure-ai-responses.test.ts":"5900","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-base-utils.test.ts":"5901","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-bedrock.test.ts":"5902","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-claude-identity.test.ts":"5903","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-cloudflare-ai.test.ts":"5904","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-codex-gpt56-lite-ultra.test.ts":"5905","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-codex-gpt56.test.ts":"5906","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-codex.test.ts":"5907","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-command-code.test.ts":"5908","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-deepseek-web-auto-refresh.test.ts":"5909","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-default-anthropic-auth-8653.test.ts":"5910","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-default-anthropic-compatible-bearer.test.ts":"5911","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-default-base.test.ts":"5912","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-default-strip-client-metadata.test.ts":"5913","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-devin-cli-acp-protocol-8406.test.ts":"5914","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-devin-cli-agentic-acp.test.ts":"5915","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-devin-cli-agentic-core.test.ts":"5916","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-devin-cli.test.ts":"5917","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-doubao-web.test.ts":"5918","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-firecrawl-fetch.test.ts":"5919","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-github-prefill-sanitize.test.ts":"5920","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-github.test.ts":"5921","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-gitlab.test.ts":"5922","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-hailuo-web.test.ts":"5923","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-huggingchat.test.ts":"5924","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-hyperagent.test.ts":"5925","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-inner-ai.test.ts":"5926","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-kimi-web-decoder.test.ts":"5927","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-kimi-web.test.ts":"5928","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-kimi.test.ts":"5929","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-kiro.test.ts":"5930","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-nlpcloud.test.ts":"5931","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-notion-web-thread-sessions.test.ts":"5932","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-notion-web.test.ts":"5933","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-nous-research.test.ts":"5934","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-poe-web.test.ts":"5935","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-pollinations.test.ts":"5936","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-promptql.test.ts":"5937","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-puter.test.ts":"5938","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-qwen-web.test.ts":"5939","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-strip-stainless-openai-compat.test.ts":"5940","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-tinyfish-fetch.test.ts":"5941","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-v0-vercel-web.test.ts":"5942","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-venice-web.test.ts":"5943","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-vertex-extended.test.ts":"5944","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-web-cookie-sweep.test.ts":"5945","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-xai.test.ts":"5946","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-zai-web.test.ts":"5947","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executors-strip-unsupported-params.test.ts":"5948","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/export-json-hide-paid-combos-6328.test.ts":"5949","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/factory-provider-registry.test.ts":"5950","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/faulty-upstream.test.ts":"5951","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-flags-settings.test.ts":"5952","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-triage/args.test.mjs":"5953","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-triage/classify.test.mjs":"5954","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-triage/delivered.test.mjs":"5955","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-triage/frontmatter.test.mjs":"5956","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-triage/integration.test.mjs":"5957","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-triage/lifecycle.test.mjs":"5958","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-triage/resync.test.mjs":"5959","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/featured-providers-rank.test.ts":"5960","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/felo-web-executor.test.ts":"5961","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fetch-error-message.test.ts":"5962","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fetch-timeout.test.ts":"5963","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/field-400-downgrade.test.ts":"5964","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/file-deletion.test.ts":"5965","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/file-expiration-policy.test.ts":"5966","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/finishReason.test.ts":"5967","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/firecrawl-executor.test.ts":"5968","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/firecrawl-quota-fetcher.test.ts":"5969","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/firecrawl-search.test.ts":"5970","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/firecrawl-usage.test.ts":"5971","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fireworks-model-id-prefix.test.ts":"5972","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fix-2130-system-passthrough.test.ts":"5973","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fix-bare-model-precedence.test.ts":"5974","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fix-bare-routing-fallback.test.ts":"5975","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fix-error-message-candidates.test.ts":"5976","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fix-synced-model-validation.test.ts":"5977","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fix-tls-client-node-binary-7802.test.ts":"5978","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fix-tool-adjacency.test.ts":"5979","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fixes-p1.test.ts":"5980","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/flat-rate-cost-5552.test.ts":"5981","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/format-provider-error-cause.test.ts":"5982","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/format-reset-countdown.test.ts":"5983","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/formatting-public-surface.test.ts":"5984","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/forwarded-header-budget.test.ts":"5985","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-catalog-2026-07-expansion.test.ts":"5986","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-model-catalog.test.ts":"5987","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-models.test.ts":"5988","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-note-freshness.test.ts":"5989","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-provider-rankings-custom-models-6368.test.ts":"5990","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-providers-batch-2026-07.test.ts":"5991","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-proxies-add-to-pool.test.ts":"5992","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-proxies-db.test.ts":"5993","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-proxies-list-search.test.ts":"5994","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-proxy-auto-sync-scheduler.test.ts":"5995","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-proxy-providers.test.ts":"5996","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-proxy-sync-cycle.test.ts":"5997","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-tier-catalog.test.ts":"5998","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-tier-providers-wave1-b.test.ts":"5999","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-tier-providers-wave1-c.test.ts":"6000","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-tier-summary-route.test.ts":"6001","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-tier-used-this-month.test.ts":"6002","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-web-search.test.ts":"6003","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/freeProviderRankings-authtype-6915.test.ts":"6004","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/freeProviderRankings-filters.test.ts":"6005","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/freeProviderRankings.test.ts":"6006","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/freemodel-quota-fetcher.test.ts":"6007","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/freepik-image-handler.test.ts":"6008","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/functional-gateway-mirrors-append.test.ts":"6009","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/functional-gateway-mirrors-db.test.ts":"6010","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/functional-gateway-predicate.test.ts":"6011","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fusion-judge-model-6455.test.ts":"6012","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fusion-judge-own-intelligence.test.ts":"6013","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fusion-judge-survivor.test.ts":"6014","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fusion-panel-size-cap-1905.test.ts":"6015","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fusion-partial-panel-failure-6454.test.ts":"6016","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fusion-tools-bypass-6771.test.ts":"6017","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/g13-combo-chatcore-golden.test.ts":"6018","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/g4f-space-gateway-6650.test.ts":"6019","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/aggregate-profile-3484.test.ts":"6020","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/antiCheat.test.ts":"6021","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/badge-unlock-once-3472.test.ts":"6022","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/badges.test.ts":"6023","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/db-gamification.test.ts":"6024","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/events.test.ts":"6025","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/federation-auth.test.ts":"6026","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/invites.test.ts":"6027","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/leaderboard.test.ts":"6028","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/sharing.test.ts":"6029","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/streaks.test.ts":"6030","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/xp.test.ts":"6031","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification-display-contract.test.ts":"6032","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-antigravity-pattern-preserved.test.ts":"6033","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-business-provider.test.ts":"6034","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-cli-ansi-sanitization.test.ts":"6035","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-cli-deprecation.test.ts":"6036","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-cli-legacy-refresh.test.ts":"6037","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-finish-reason-normalization.test.ts":"6038","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-helper-audio-input-912.test.ts":"6039","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-helper-http-image-url-port344.test.ts":"6040","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-helper.test.ts":"6041","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-imagen-predict.test.ts":"6042","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-malformed-function-call-finish-reason-2462.test.ts":"6043","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-midstream-error-4177.test.ts":"6044","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-midstream-nonstreaming-responses.test.ts":"6045","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-midstream-responses.test.ts":"6046","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-models-parser.test.ts":"6047","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-multipleof-2309.test.ts":"6048","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-signatureless-text-mode.test.ts":"6049","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-strict-tool-schema.test.ts":"6050","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-thinking-budget-fallback.test.ts":"6051","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-thinking-budget-zero-6813.test.ts":"6052","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-to-openai-function-response.test.ts":"6053","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-tool-choice.test.ts":"6054","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-tool-params-object-3357.test.ts":"6055","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-web-cookie-rotation-7676.test.ts":"6056","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-web-missing-browser-3516.test.ts":"6057","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-web-multiturn-context-8371.test.ts":"6058","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-web-tool-calling-7286.test.ts":"6059","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-web.test.ts":"6060","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gen-contributors.test.ts":"6061","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/generic-quota-fetcher.test.ts":"6062","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ghe-copilot-targetformat-parity.test.ts":"6063","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ghe-copilot.test.ts":"6064","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-claude-reasoning-effort-granular.test.ts":"6065","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-collector.test.ts":"6066","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-copilot-claude-native-messages.test.ts":"6067","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-copilot-gpt-4o-mini.test.ts":"6068","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-copilot-model-discovery.test.ts":"6069","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-copilot-retired-models.test.ts":"6070","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-models-curated-catalog.test.ts":"6071","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-models-request-compat.test.ts":"6072","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-skill-tools-mcp.test.ts":"6073","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-skills-route-validation.test.ts":"6074","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gitlab-duo-oauth-setup-8688.test.ts":"6075","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gitlab-duo-toolcalls-6051.test.ts":"6076","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gitlab-tool-exchange-bounded-6220.test.ts":"6077","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gitlab-tool-result-feedback-6220.test.ts":"6078","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gitlawb-provider.test.ts":"6079","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/glm-executor-max-tokens-clamp-7364.test.ts":"6080","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/glm-executor.test.ts":"6081","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/glm-provider-model-import-route.test.ts":"6082","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/glm-team-quota.test.ts":"6083","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/glm-think-close-marker-leak.test.ts":"6084","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/glob-pattern-6540.test.ts":"6085","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/global-package-path.test.ts":"6086","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/google-flow-video-4569.test.ts":"6087","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gpt-max-input-tokens-6191.test.ts":"6088","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gpt5-sampling-guard.test.ts":"6089","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gpt5-tools-reasoning-guard.test.ts":"6090","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gptoss-provider-inference-5852.test.ts":"6091","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/graceful-shutdown-sighup-8045.test.ts":"6092","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-auth-json-paste-7610.test.ts":"6093","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-device-route.test.ts":"6094","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-function-call-output-sanitize-7611.test.ts":"6095","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-oauth-test-supported-7610.test.ts":"6096","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-oauth.test.ts":"6097","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-proactive-refresh-7610.test.ts":"6098","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-provider-limits-ui.test.ts":"6099","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-provider-limits.test.ts":"6100","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-proxy-selection.test.ts":"6101","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-quota-fetcher.test.ts":"6102","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-quota-frame.test.ts":"6103","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-reasoning-strip-6288.test.ts":"6104","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-responses-compat.test.ts":"6105","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-strip-params.test.ts":"6106","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-quota-fetcher.test.ts":"6107","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-web-cloudflare-classification.test.ts":"6108","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-web-executor-split.test.ts":"6109","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-web.test.ts":"6110","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grokweb-cookie-ua-hint-7567.test.ts":"6111","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/groq-field-strip-wiring.test.ts":"6112","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/group-provider-permission.test.ts":"6113","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gtts-provider.test.ts":"6114","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/injection-extraction.test.ts":"6115","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/injection-route-coverage.test.ts":"6116","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/vision-bridge-callmodel.test.ts":"6117","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/vision-bridge-sse-and-reasoning.test.ts":"6118","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/visionBridge.test.ts":"6119","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/visionBridgeHelpers.callVisionModel.test.ts":"6120","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/visionBridgeHelpers.extractImageParts.test.ts":"6121","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/visionBridgeHelpers.replaceImageParts.test.ts":"6122","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/visionBridgeHelpers.resolveImageAsDataUri.test.ts":"6123","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/visionBridgeRouter.test.ts":"6124","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails-api-3496.test.ts":"6125","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails-registry.test.ts":"6126","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails-void-no-change-contract.test.ts":"6127","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guide-settings-apikey-null-3552.test.ts":"6128","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guide-settings-route.test.ts":"6129","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/hcnsec-provider.test.ts":"6130","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/head-request-closes-6400.test.ts":"6131","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/head-request-v1-models-6400.test.ts":"6132","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/headers-normalize.test.ts":"6133","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/headroom-codex-quota-snapshot-6379.test.ts":"6134","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/headroom-detect.test.ts":"6135","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/headroom-proxy-lifecycle.test.ts":"6136","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/headroom-responses-format.test.ts":"6137","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/health-ping-route.test.ts":"6138","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/healthMonitor.test.ts":"6139","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/healthz-route.test.ts":"6140","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/heap-autocalibrate-5172.test.ts":"6141","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/heap-benchmark-corpus.test.ts":"6142","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/heap-pressure.test.ts":"6143","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/hf-model-suggestions.test.ts":"6144","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/hide-paid-models-settings-schema.test.ts":"6145","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/home-no-autorouting-banner.test.ts":"6146","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/home-page-client-hook-imports-4759.test.ts":"6147","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/home-provider-topology-default-4596.test.ts":"6148","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/home-provider-topology-live-state.test.ts":"6149","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/homolog-admin-client.test.ts":"6150","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/homolog-parity.test.ts":"6151","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/homolog-promptfoo-ctrf.test.ts":"6152","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/homolog-provider-tiers.test.ts":"6153","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/homolog-sse-parser.test.ts":"6154","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/huggingchat-jsonl-split.test.ts":"6155","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/huggingchat-model-catalog.test.ts":"6156","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-block-extra-usage-copy.test.ts":"6157","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-cli-namespaces.test.ts":"6158","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-config.test.ts":"6159","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-detect-browser-locale.test.ts":"6160","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-fallback.test.ts":"6161","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-glossary-consistency-check.test.ts":"6162","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-hardcoded-pt-dashboard-6761.test.ts":"6163","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-missing-placeholder-fallback.test.ts":"6164","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-nest-dotted-keys.test.ts":"6165","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-provider-filter-keys-6290.test.ts":"6166","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-provider-visibility-filter-keys-6694.test.ts":"6167","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-pt-br.test.ts":"6168","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-quota-share-english.test.ts":"6169","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-ui-value-drift.test.ts":"6170","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-vi-completeness.test.ts":"6171","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/idempotency-fusion-collision.test.ts":"6172","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/idempotency.test.ts":"6173","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-compat-node-alias-shadow.test.ts":"6174","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-edits-multipart-3273.test.ts":"6175","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-generation-baseurl-3205.test.ts":"6176","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-generation-fetch-timeout.test.ts":"6177","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-generation-handler.test.ts":"6178","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-generation-route-auth.test.ts":"6179","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-generation-route.test.ts":"6180","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-model-not-in-chat-catalog-6457.test.ts":"6181","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-registry-gpt56.test.ts":"6182","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-routes-combo-edits-3214-3215.test.ts":"6183","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-text-to-image-modality.test.ts":"6184","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-upscale.test.ts":"6185","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inclusionai-provider.test.ts":"6186","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/injection-guard-scan-bound-3932.test.ts":"6187","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/injection-system-prompt-leak-heuristic-4041.test.ts":"6188","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inner-ai-find-model.test.ts":"6189","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/input-sanitizer-pii-redaction.test.ts":"6190","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-agent-bridge-hook.test.ts":"6191","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-buffer.test.ts":"6192","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-context-key.test.ts":"6193","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-conversation-normalizer.test.ts":"6194","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-har-export.test.ts":"6195","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-http-proxy.test.ts":"6196","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-kind-detector.test.ts":"6197","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-llm-metadata.test.ts":"6198","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-pricing.test.ts":"6199","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-process-attribution.test.ts":"6200","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-sse-merger.test.ts":"6201","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-system-proxy.test.ts":"6202","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-types.test.ts":"6203","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/instrumentation-database-closed-6560.test.ts":"6204","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/instrumentation-live-ws.test.ts":"6205","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/instrumentation-node-boot-db-failure.test.ts":"6206","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/instrumentation-process-title.test.ts":"6207","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/instrumentation-warm-catalog-cache.test.ts":"6208","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/intent-classifier-pipeline.test.ts":"6209","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/intercept-fetch-resolver.test.ts":"6210","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/interception-rules.test.ts":"6211","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/internal-service-auth.test.ts":"6212","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/internal-usage-command.test.ts":"6213","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ip-filter-persistence-6131.test.ts":"6214","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ip-filter.test.ts":"6215","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ipUtils.test.ts":"6216","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/isLocalStreamLifecycleError-abort-shape.test.ts":"6217","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/isolate-datadir.test.ts":"6218","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-6343-v0-web-alias-collision.test.ts":"6219","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-6623-opencode-mimo-reasoning-details-nonstream.test.ts":"6220","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-6638-ollama-quota.test.ts":"6221","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-6662-repro.test.ts":"6222","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-6686-quota-preflight-coverage.test.ts":"6223","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-7071-ollama-session-quota.test.ts":"6224","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-7284-connection-test-masks-429.test.ts":"6225","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-7705-tool-use-id-mismatch.test.ts":"6226","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-7793-env-doc-sync-repro.test.ts":"6227","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-7856-copilot-reasoning-text-nonstream.test.ts":"6228","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-7859-gemini-web-redirect-valid.test.ts":"6229","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-9407-gemini-web-validation-false-positive.test.ts":"6230","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-agent-audit.test.ts":"6231","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-agent-execution.test.ts":"6232","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-agent-github-export.test.ts":"6233","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-agent-route-execution.test.ts":"6234","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-agent-runner.test.ts":"6235","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-agent-runs-route.test.ts":"6236","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-fixes-v3.7.9.test.ts":"6237","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/jina-reader-executor.test.ts":"6238","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/json-migration-combos.test.ts":"6239","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/json-size-exactness.test.ts":"6240","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/json-to-sse-3089.test.ts":"6241","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/keepalive-cleanup-8140.test.ts":"6242","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/keepalive-threshold.test.ts":"6243","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kenari.test.ts":"6244","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/key-health-402-disable-5239.test.ts":"6245","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kie-audio-transcription-result.test.ts":"6246","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kie-executor-routing.test.ts":"6247","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kie-task-helpers.test.ts":"6248","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kilocode-anonymous-fallback-4019.test.ts":"6249","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-cn-region-baseurl.test.ts":"6250","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-coding-apikey-quota-4435.test.ts":"6251","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-coding-model-discovery.test.ts":"6252","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-coding-translator.test.ts":"6253","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-combo-preset.test.ts":"6254","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-k2.7-code-registration.test.ts":"6255","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-native-reasoning-injected-1480.test.ts":"6256","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-partner-aff-links.test.ts":"6257","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-quota-reset-recovery.test.ts":"6258","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-sponsor-banner-version-gate.test.ts":"6259","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-web-models-discovery.test.ts":"6260","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-api-key-route-helpers.test.ts":"6261","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-api-key-service.test.ts":"6262","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-auto-import-idc-2059.test.ts":"6263","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-auto-import-name-dedup-3615.test.ts":"6264","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-available-models.test.ts":"6265","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-builder-id-import-3333.test.ts":"6266","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-catalog-real-models.test.ts":"6267","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-claude-sonnet-5-2267.test.ts":"6268","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-connection-identity.test.ts":"6269","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-continue-filler-5231.test.ts":"6270","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-eventstream-split.test.ts":"6271","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-external-idp.test.ts":"6272","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-gpt56-family-registration.test.ts":"6273","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-iam-profilearn-usage.test.ts":"6274","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-iam-region.test.ts":"6275","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-idc-cross-region.test.ts":"6276","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-import-error-3589.test.ts":"6277","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-import-overwrite-9435.test.ts":"6278","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-long-tool-description-docs.test.ts":"6279","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-model-aliases.test.ts":"6280","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-multi-account-isolation.test.ts":"6281","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-overage-usage-4469.test.ts":"6282","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-region-ssrf-guard.test.ts":"6283","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-social-poll.test.ts":"6284","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-sso-cache-direct-clientid-1253.test.ts":"6285","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-streaming-finish-reason-3980.test.ts":"6286","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-system-reminder-2306.test.ts":"6287","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-tool-args-streaming.test.ts":"6288","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-tool-call-validation.test.ts":"6289","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-tool-schema-sanitize-1375.test.ts":"6290","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-toolresult-compression.test.ts":"6291","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-usage-empty-breakdown-3506.test.ts":"6292","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-windows-auto-import-3363.test.ts":"6293","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiroThinking.test.ts":"6294","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ladder-engine-maps-6533.test.ts":"6295","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/latency-stats-ttft-6875.test.ts":"6296","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/launch-codex-windows-spawn-6312.test.ts":"6297","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/learned-thinking-caps.test.ts":"6298","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/batches/costEstimator.test.ts":"6299","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/batches/csvToJsonl.test.ts":"6300","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/batches/retryFailed.test.ts":"6301","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/batches/schemas.test.ts":"6302","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/batches/validateJsonl.test.ts":"6303","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/connection-cooldown-summary.test.ts":"6304","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/consoleInterceptor-epipe.test.ts":"6305","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/consoleInterceptor-writes.test.ts":"6306","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/jobs/backupScheduleJob.test.ts":"6307","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/jobs/cronMatch.test.ts":"6308","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/machineToken.test.ts":"6309","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/managementCliToken.test.ts":"6310","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/quota-reset-events.test.ts":"6311","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/limiter-lifecycle.test.ts":"6312","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/list-uncovered-commits.test.ts":"6313","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/listCapabilities-a2a.test.ts":"6314","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/live-model-catalog-reconciliation-8926.test.ts":"6315","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/live-ws-cookie-parse.test.ts":"6316","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/live-ws-eaddrinuse-6324.test.ts":"6317","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/live-ws-public-url.test.ts":"6318","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/live-ws-standalone-wiring.test.ts":"6319","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/livews-forward-backoff-4604.test.ts":"6320","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/llama-cpp-local-url.test.ts":"6321","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/llamacpp-model-delete.test.ts":"6322","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/llm-selector-custom-vision-models.test.ts":"6323","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/llm7-byteplus-models-fetch-3976.test.ts":"6324","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lmarena-provider.test.ts":"6325","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lmarena-split-cookie-4271.test.ts":"6326","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lmstudio-embedding-provider-7601.test.ts":"6327","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/local-aliases-precedence.test.ts":"6328","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/local-corpus-index.test.ts":"6329","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/local-corpus-tools.test.ts":"6330","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/local-redis-runtime.test.ts":"6331","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/log-export-routes.test.mjs":"6332","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/log-redaction.test.ts":"6333","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/log-retention.test.ts":"6334","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/log-rotation.test.ts":"6335","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/logenv-datadir-path-6197.test.ts":"6336","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/logger-redaction-wiring.test.ts":"6337","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/logger-write-after-datadir-removed-6360.test.ts":"6338","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/login-bootstrap-route.test.ts":"6339","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/login-shell-path-3321.test.ts":"6340","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/m365-bizchat-frames-4042.test.ts":"6341","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/m365-connection-4042.test.ts":"6342","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/m365-tier-selector-6334.test.ts":"6343","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/m365-tone-model-variants.test.ts":"6344","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/m365-web-token-extraction-7078.test.ts":"6345","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mac-update-manifest-merge.test.ts":"6346","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/machine-id.test.ts":"6347","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/main-server-keepalive-timeout-7003.test.ts":"6348","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/main-server-timeouts-parity.test.ts":"6349","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/managed-available-models.test.ts":"6350","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/managed-model-import.test.ts":"6351","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/management-auth-docs.test.ts":"6352","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/management-auth-hardening.test.ts":"6353","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/management-password-insecure-default.test.ts":"6354","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/management-password.test.ts":"6355","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/manual-config-modal-clipboard.test.ts":"6356","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/maritalk-model-catalog.test.ts":"6357","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mark-account-unavailable-numeric-epoch-guard.test.ts":"6358","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mask-email.test.ts":"6359","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/masked-200-exhaustion-fallback-6427.test.ts":"6360","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/materialize-bundled-symlinks.test.ts":"6361","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp/serverSmartFilter.test.ts":"6362","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp/tool-cardinality.test.ts":"6363","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp/tool-definition-reexport.test.ts":"6364","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-connect-scope.test.ts":"6365","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-extra-forward-6178.test.ts":"6366","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-memory-tools-strategy.test.ts":"6367","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-model-catalog.test.ts":"6368","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-pool-tools-3368.test.ts":"6369","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-published-files-closure-3578.test.ts":"6370","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-server-entry.test.ts":"6371","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-server-hollow-dist-deps.test.ts":"6372","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-session-sweep.test.ts":"6373","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-sse-response-headers-8277.test.ts":"6374","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-tool-collections-shape.test.ts":"6375","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-tool-count-dedup-6854.test.ts":"6376","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-web-fetch-tool.test.ts":"6377","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/media-body-arraybuffer-backing.test.ts":"6378","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/media-cost-headers-handlers.test.ts":"6379","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/media-cost-headers.test.ts":"6380","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/media-provider-ordering.test.ts":"6381","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory/typed-decay.test.ts":"6382","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-cache-safe-injection.test.ts":"6383","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-cache.test.ts":"6384","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-embedding-cache.test.ts":"6385","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-embedding-list-providers.test.ts":"6386","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-embedding-remote.test.ts":"6387","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-embedding-resolve.test.ts":"6388","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-embedding-static-potion.test.ts":"6389","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-embedding-transformers.test.ts":"6390","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-engine-status.test.ts":"6391","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-extraction.test.ts":"6392","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-glm-injection.test.ts":"6393","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-needs-reindex.test.ts":"6394","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-reindex-batch.test.ts":"6395","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-retrieval-hybrid.test.ts":"6396","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-retrieval-rerank.test.ts":"6397","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-retrieval-semantic.test.ts":"6398","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-retrieve-preview.test.ts":"6399","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-route.test.ts":"6400","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-schemas-roundtrip.test.ts":"6401","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-settings-default.test.ts":"6402","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-settings-extended.test.ts":"6403","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-settings.test.ts":"6404","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-stats-api.test.ts":"6405","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-store-sync.test.ts":"6406","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-store.test.ts":"6407","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-summarization-older-than.test.ts":"6408","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-summarization.test.ts":"6409","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-system-first-6135.test.ts":"6410","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-tools.test.ts":"6411","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vec-meta.test.ts":"6412","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vectorstore-crud.test.ts":"6413","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vectorstore-ensure-ready.test.ts":"6414","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vectorstore-int8-quant.test.ts":"6415","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vectorstore-load.test.ts":"6416","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vectorstore-rrf.test.ts":"6417","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vectorstore-stats.test.ts":"6418","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vectorstore-upsert-self-heal.test.ts":"6419","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/merge-train-plan.test.ts":"6420","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/messages-count-tokens-route.test.ts":"6421","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/microsoft-designer-web-6672.test.ts":"6422","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/middleware-header-strip-5849.test.ts":"6423","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/middleware-hook-sandbox-5872.test.ts":"6424","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/middleware-hooks-error-sanitization.test.ts":"6425","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/migration-107-quota-share-strategy.test.ts":"6426","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/migration-safety-abort-6260.test.ts":"6427","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mimo-thinking-normalize.test.ts":"6428","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mimocode-executor.test.ts":"6429","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/minimax-coding-plan-usage.test.ts":"6430","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/minimax-image-provider-2482.test.ts":"6431","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/minimax-m3-maxtokens.test.ts":"6432","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/minimax-m3-model-registry.test.ts":"6433","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/minimax-media-servicekinds.test.ts":"6434","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/minimax-thinking-signature-2706.test.ts":"6435","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/minimax-tts-1043.test.ts":"6436","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mistral-strip-reasoning-content-1649.test.ts":"6437","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mistral-trailing-assistant.test.ts":"6438","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-alias-config-shim.test.ts":"6439","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-antigravity-reasoning-effort-override.test.ts":"6440","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-cert-install-mode-9442.test.ts":"6441","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-cert-mac-fingerprint.test.ts":"6442","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-cert-migration-6684.test.ts":"6443","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-cert-removal-wiring.test.ts":"6444","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-detection.test.ts":"6445","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-diagnostics.test.ts":"6446","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-dns-graceful-degrade-6127.test.ts":"6447","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-dnsConfig.test.ts":"6448","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-forward-target.test.ts":"6449","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-antigravity.test.ts":"6450","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-base.test.ts":"6451","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-claudeCode.test.ts":"6452","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-codex.test.ts":"6453","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-copilot.test.ts":"6454","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-cursor.test.ts":"6455","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-kiro.test.ts":"6456","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-openCode.test.ts":"6457","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-trae.test.ts":"6458","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-zed.test.ts":"6459","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-hosts-cleanup-on-exit.test.ts":"6460","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-ingest-route-sanitize.test.ts":"6461","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-ingest-shim.test.ts":"6462","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-manager-bypass-json.test.ts":"6463","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-manager-cleanup-symmetry.test.ts":"6464","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-manager-repair.test.ts":"6465","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-manager-stub.test.ts":"6466","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-masksecrets.test.ts":"6467","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-passthrough.test.ts":"6468","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-privileged-steps-sudo-gate.test.ts":"6469","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-root-ca-leaf-issuance-6684.test.ts":"6470","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-root-ca-persistence-6684.test.ts":"6471","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-sanitize-headers.test.ts":"6472","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-server-claude-code-routing.test.ts":"6473","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-server-connect.test.ts":"6474","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-server-loop-guard.test.ts":"6475","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-server-timeouts.test.ts":"6476","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-start-guard.test.ts":"6477","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-startup-error-3606.test.ts":"6478","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-stop-dns-before-kill-1809.test.ts":"6479","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-stub-alias-6344.test.mjs":"6480","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-sudo-gate-822.test.ts":"6481","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-sudo-graceful-degrade.test.ts":"6482","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-system-commands-prefix-3641.test.ts":"6483","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-systemCommands-no-sudo.test.ts":"6484","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-targets-resolve.test.ts":"6485","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-targets-route.test.ts":"6486","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-tool-hosts.test.ts":"6487","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-upstream-ca-wiring.test.ts":"6488","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-upstream-trust.test.ts":"6489","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mixedbread-embedding-provider-6660.test.ts":"6490","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modal-credential-combine.test.ts":"6491","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modal-validation-model-prefill.test.ts":"6492","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modalCost.test.ts":"6493","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-alias-provider-resolution.test.ts":"6494","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-alias-route.test.ts":"6495","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-alias-seed.test.ts":"6496","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-aliases-globalthis-5777.test.ts":"6497","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-aliases-settings-route-selfheal.test.ts":"6498","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-breakdown-sort-8769.test.ts":"6499","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capabilities-kimi-k3-vision-8250.test.ts":"6500","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capabilities-mimo-vision-override.test.ts":"6501","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capabilities-mistral-vision-sync-4073.test.ts":"6502","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capabilities-path-shaped-vision-8032.test.ts":"6503","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capabilities-provider-unsupported-tools.test.ts":"6504","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capabilities-registry.test.ts":"6505","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capabilities-specialty-8016.test.ts":"6506","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capability-overrides.test.ts":"6507","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-catalog-name-disambiguation.test.ts":"6508","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-catalog-search.test.ts":"6509","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-catalog-source.test.ts":"6510","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-combo-mappings-db.test.ts":"6511","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-combo-mappings.test.ts":"6512","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-connid-prefix-normalization-6772.test.ts":"6513","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-context-override-readpath.test.ts":"6514","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-cooldowns-route-auth.test.ts":"6515","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-cooldowns-route.test.ts":"6516","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-cross-proxy-compat.test.ts":"6517","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-deprecation.test.ts":"6518","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-discovery-reasoning-levels.test.ts":"6519","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-family-fallback-notation.test.ts":"6520","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-intelligence-db.test.ts":"6521","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-latency-stats-route.test.ts":"6522","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-listing-capability-5420.test.ts":"6523","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-lockout-decay.test.ts":"6524","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-lockout-exact-cooldown-cap.test.ts":"6525","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-lockout-max-cooldown.test.ts":"6526","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-metadata-registry.test.ts":"6527","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-output-cap-synced-fallthrough-6714.test.ts":"6528","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-parse.test.ts":"6529","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-pricing-litellm-gap-9364.test.ts":"6530","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-resolver.test.ts":"6531","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-select-all-confirm-threshold-8526.test.ts":"6532","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-select-hidden-map-helpers-9203.test.ts":"6533","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-select-null-alias-guard-2247.test.ts":"6534","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-select-passthrough-alias-485.test.ts":"6535","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-spec-lookup-index-8697.test.ts":"6536","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-strip.test.ts":"6537","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-sync-custom-preservation.test.ts":"6538","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-sync-route.test.ts":"6539","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-sync-scheduler.test.ts":"6540","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-test-route.test.ts":"6541","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-test-runner-compression-off-6240.test.ts":"6542","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-test-runner.test.ts":"6543","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-token-limit-catalog.test.ts":"6544","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-auto-combos-4164.test.ts":"6545","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-block-auto-5192.test.ts":"6546","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-combo-metadata.test.ts":"6547","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-envkey-6406.test.ts":"6548","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-exact-dup-4424.test.ts":"6549","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-functional-gateway.test.ts":"6550","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-hidden-combo-leaves.test.ts":"6551","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-hide-paid.test.ts":"6552","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-low-noise-flag.test.ts":"6553","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-route.test.ts":"6554","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-dev-pricing-memoization-8697.test.ts":"6555","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-test-error-shape.test.ts":"6556","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modelsDevSync-extended.test.ts":"6557","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modelsDevSync.test.ts":"6558","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modelscope-policy.test.ts":"6559","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modelscope-provider.test.ts":"6560","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modelsdev-specialty-keying-8017.test.ts":"6561","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modelsdevsync-transform-split.test.ts":"6562","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/moderations-handler.test.ts":"6563","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modular-schemas.test.ts":"6564","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/monaco-editor-import-path.test.ts":"6565","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/moonshot-k3.test.ts":"6566","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/morph-provider-catalog.test.ts":"6567","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/multipart-body-arraybuffer-backing.test.ts":"6568","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/muse-spark-cookie-copy-5449.test.ts":"6569","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/muse-spark-response-parser-split.test.ts":"6570","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/muse-spark-web-continuation.test.ts":"6571","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/muse-spark-ws-auth-token-9502.test.ts":"6572","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/music-generation-handler.test.ts":"6573","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/namespace-tool-identity-integration.test.ts":"6574","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nanobanana-image-generation.test.ts":"6575","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nanobanana-image-handler.test.ts":"6576","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/native-binary-compat.test.ts":"6577","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/new-content-providers.test.ts":"6578","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/newapi-aggregator-preflight-dispatch.test.ts":"6579","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/newapi-aggregator-quota-fetcher.test.ts":"6580","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/next-config.test.ts":"6581","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nightly-compat-node26-webpack-8090.test.ts":"6582","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ninerouter-embed-port-6205.test.ts":"6583","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ninerouter-executor.test.ts":"6584","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/no-memory-header.test.ts":"6585","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/no-src-open-sse-alias.test.ts":"6586","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/no-thinking-alias.test.ts":"6587","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noAuthProxyResolution.relayAuth.test.ts":"6588","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-autocombo-allowlist.test.ts":"6589","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-autocombo-exclude-7622.test.ts":"6590","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-autocombo-hidden-7620.test.ts":"6591","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-autocombo-lockout-7623.test.ts":"6592","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-blocked-partition-5183.test.ts":"6593","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-imported-models-3200.test.ts":"6594","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-provider-validation.test.ts":"6595","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-proxy-resolution.test.ts":"6596","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/node-runtime-support.test.ts":"6597","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/non-streaming-sse-terminal-typescan-4459.test.ts":"6598","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nonstream-usage-cache-tokens.test.ts":"6599","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nonstreaming-gemini-family-response-projection.test.ts":"6600","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/normalize-base-path.test.ts":"6601","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/notification-toast-coercion.test.ts":"6602","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/notificationStore.test.ts":"6603","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/notion-api.test.ts":"6604","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/notion-thread-idor-7900.test.ts":"6605","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/notion-tools.test.ts":"6606","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/notion-web-models-discovery.test.ts":"6607","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/npm-publish-artifact-provenance.test.ts":"6608","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/npm-runtime-deps-fumadocs-mdx-7661.test.ts":"6609","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nube-provider.test.ts":"6610","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/numeric-helpers.test.ts":"6611","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-catalog-drift.test.ts":"6612","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-minimax-m3-removed-3329.test.ts":"6613","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-minimax-thinking-strip.test.ts":"6614","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-nim-catalog-expansion-2373.test.ts":"6615","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-nim-image.test.ts":"6616","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-nim-registry-6108.test.ts":"6617","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-nim-validator.test.ts":"6618","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-passthrough-models-6773.test.ts":"6619","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-quota-phase1.test.ts":"6620","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-strip-prompt-cache-key.test.ts":"6621","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-tool-compatibility-2840.test.ts":"6622","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-validation-bypass-proxy-3226.test.ts":"6623","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-validation-model-3116.test.ts":"6624","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-callback-path-doc.test.ts":"6625","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-connection-persistence-codex-dedup.test.ts":"6626","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-connection-test-codex-endpoint.test.ts":"6627","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-connection-test-timeout.test.ts":"6628","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-connection-tokenexpiresat-5326.test.ts":"6629","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-credential-blob.test.ts":"6630","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-cursor-auto-import.test.ts":"6631","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-device-code-endpoints.test.ts":"6632","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-device-code-error-transparency.test.ts":"6633","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-error-linkify-5486.test.ts":"6634","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-google-loopback-guidance.test.ts":"6635","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-grok-cli-browser.test.ts":"6636","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-keychain-import-only-6041.test.ts":"6637","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-keychain-import-only-guard.test.ts":"6638","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-kiro-idc.test.ts":"6639","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-kiro.test.ts":"6640","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-lan-loopback-guidance.test.ts":"6641","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-legacy-services-removed.test.ts":"6642","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-modal-codex-lan-ip-8046.test.ts":"6643","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-modal-grok-cli-browser-login-7013.test.ts":"6644","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-modal-grok-cli-paste-7610.test.ts":"6645","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-modal-typescript-regressions.test.ts":"6646","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-paste-credentials-route.test.ts":"6647","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-paste-credentials.test.ts":"6648","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-providers-config.test.ts":"6649","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-providers-error-handling.test.ts":"6650","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-redirect-uri-mismatch.test.ts":"6651","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-refresh-connection-dedup-8059.test.ts":"6652","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-refresh-error-resilience.test.ts":"6653","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-test-config-8408.test.ts":"6654","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-trae.test.ts":"6655","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/observability-fase04.test.ts":"6656","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/observability-payloads.test.ts":"6657","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/obsidian-api.test.ts":"6658","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/obsidian-config.test.ts":"6659","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/obsidian-plugin-sync.test.ts":"6660","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/obsidian-tools.test.ts":"6661","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/obsidian-webdav-route.test.ts":"6662","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ocr-route.test.ts":"6663","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oidc-callback.test.ts":"6664","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ollama-cloud-usage.test.ts":"6665","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ollama-cloud-weekly-quota-cooldown-3709.test.ts":"6666","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ollama-local-embedding-2824.test.ts":"6667","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ollama-local-provider.test.ts":"6668","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ollama-transform.test.ts":"6669","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/omni-skills-page.test.tsx":"6670","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/omniroute-decision-header.test.ts":"6671","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/omniroute-meta-fallback-attempts.test.ts":"6672","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/omniroute-response-meta.test.ts":"6673","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/onboarding-step-titles-i18n-4698.test.ts":"6674","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/onboarding-wizard-details-link-6145.test.ts":"6675","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/onboarding-wizard-route-5427.test.ts":"6676","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-developer-role-normalize.test.ts":"6677","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-gpt56-catalog.test.ts":"6678","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-gpt56-responses-routing.test.ts":"6679","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-responses-only-models-5842.test.ts":"6680","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-responses-reasoning-effort.test.ts":"6681","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-responses-request-split.test.ts":"6682","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-responses-single-text-content-string.test.ts":"6683","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-responses-subagent-strip-2446.test.ts":"6684","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-responses-verbosity.test.ts":"6685","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-style-providers-4239-4155-3841.test.ts":"6686","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-bare-tool.test.ts":"6687","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-empty-messages-5245.test.ts":"6688","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-file-attachments.test.ts":"6689","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-glm-split-tool-name-2077.test.ts":"6690","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-redacted-replay-5312.test.ts":"6691","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-strip-empty-signature-6953.test.ts":"6692","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-strip-empty.test.ts":"6693","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-strip-temperature-thinking.test.ts":"6694","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-thinking-budget-split.test.ts":"6695","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-gemini-gemma-thinking.test.ts":"6696","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-gemini-helpers-split.test.ts":"6697","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-kiro-helpers-split.test.ts":"6698","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-tool-opaque-object-schema.test.ts":"6699","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openapi-coverage.test.ts":"6700","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openapi-security-tiers.test.ts":"6701","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openapi-spec-example-body.test.ts":"6702","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openapi-spec-route.test.ts":"6703","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openapi-try-route.test.ts":"6704","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openapi-ws-endpoint.test.ts":"6705","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-cli-headers-synthesis-5997.test.ts":"6706","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-deepseek-reasoning-injected.test.ts":"6707","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-executor.test.ts":"6708","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-free-tier-catalog-stale-6998.test.ts":"6709","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-go-catalog-alignment.test.ts":"6710","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-go-effort-aliases-6922.test.ts":"6711","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-go-effort-aliases-8353.test.ts":"6712","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-go-quota-no-zai.test.ts":"6713","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-go-usage.test.ts":"6714","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-noauth-models-route.test.ts":"6715","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-proxy-rotation-4954.test.ts":"6716","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-quota-fetcher.test.ts":"6717","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-strip-client-metadata-1442.test.ts":"6718","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-zen-alias-combo-e2e.test.ts":"6719","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencodeReasoningSanitizer.test.ts":"6720","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-context-length-3202.test.ts":"6721","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-embeddings-catalog-6976.test.ts":"6722","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-free-window-wiring-6842.test.ts":"6723","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-midstream-error-chunk.test.ts":"6724","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-provider-stats.test.ts":"6725","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-quota-6842.test.ts":"6726","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-registry.test.ts":"6727","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-vision-sync-4264.test.ts":"6728","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openvecta-provider-registration.test.ts":"6729","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ops-scripts.test.ts":"6730","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/orphaned-tool-filter.test.ts":"6731","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/outbound-url-guard-feature-flag.test.ts":"6732","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/output-token-budget-model-cap.test.ts":"6733","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/output-token-budget.test.ts":"6734","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pack-artifact-entrypoint-closures.test.ts":"6735","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pack-artifact-policy.test.ts":"6736","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pack-artifact-server-ws-closure.test.ts":"6737","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pagination.test.ts":"6738","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/paid-model-target-6540.test.ts":"6739","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/paid-model-target-routes-6540.test.ts":"6740","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/param-filters-apply.test.ts":"6741","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/param-filters-auto-learn.test.ts":"6742","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/param-filters-db.test.ts":"6743","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/parse-model-defensive.test.ts":"6744","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/parse-provider-import-6836.test.ts":"6745","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/passthrough-alias-1850.test.ts":"6746","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/payload-rules-restart-persistence.test.ts":"6747","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/payload-rules-route.test.ts":"6748","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/payload-rules.test.ts":"6749","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/peer-routing.test.ts":"6750","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pending-counter-drift-8141.test.ts":"6751","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/perplexity-key-validation-models.test.ts":"6752","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/perplexity-tls-client.test.ts":"6753","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/perplexity-web-executor-split.test.ts":"6754","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/perplexity-web-model-mappings.test.ts":"6755","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/perplexity-web-streaming-tools-5927.test.ts":"6756","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/perplexity-web.test.ts":"6757","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/persist-429-cooldown-account-fallback.test.ts":"6758","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pick-internal-api-key-6372.test.ts":"6759","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pii-opt-in-default.test.ts":"6760","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/piiReproduction.test.ts":"6761","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/piiSanitizer.test.ts":"6762","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/piiSanitizerIpv6.test.ts":"6763","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pioneer-provider.test.ts":"6764","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pipeline-router.test.ts":"6765","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pipeline.test.ts":"6766","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plan3-p0.test.ts":"6767","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-code-export.test.ts":"6768","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-key-policy-3503.test.ts":"6769","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-model-filter-3505.test.ts":"6770","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-model-qualify.test.ts":"6771","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-model-selection-3731.test.ts":"6772","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-prompt-improver.test.ts":"6773","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-reasoning-controls-6241.test.ts":"6774","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-schemas.test.ts":"6775","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-stream-metrics.test.ts":"6776","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-analytics.test.ts":"6777","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-api-routes.test.ts":"6778","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-config-route.test.ts":"6779","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-config-validation.test.ts":"6780","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-config.test.ts":"6781","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-db.test.ts":"6782","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-dev-mode.test.ts":"6783","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-doctor.test.ts":"6784","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-edge-cases.test.ts":"6785","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-errors.test.ts":"6786","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-fs-safety.test.ts":"6787","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-hook-payload-chaining-3286.test.ts":"6788","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-hooks-rate-limit.test.ts":"6789","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-hooks.test.ts":"6790","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-index.test.ts":"6791","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-loader-ipc.test.ts":"6792","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-loader.test.ts":"6793","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-logger.test.ts":"6794","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-manager-lifecycle.test.ts":"6795","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-manager-restart-reload-7806.test.ts":"6796","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-manager.test.ts":"6797","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-manifest.test.ts":"6798","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-marketplace.test.ts":"6799","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-metrics.test.ts":"6800","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-permissions.test.ts":"6801","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-route-error-sanitization.test.ts":"6802","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-scanner.test.ts":"6803","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-set-enabled-shim-3473.test.ts":"6804","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-signing.test.ts":"6805","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-tools.test.ts":"6806","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-upgrade.test.ts":"6807","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-welcome-banner-e2e.test.ts":"6808","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/podman-machine-guidance-8497.test.ts":"6809","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/poe-api-executor-regression.test.ts":"6810","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/poe-provider-models-baseurl.test.ts":"6811","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/policy-engine.test.ts":"6812","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pollinations-image-anon-fallback-8085.test.ts":"6813","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pollinations-jsonmode-3981.test.ts":"6814","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/postinstall-support.test.ts":"6815","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pr-self-target-guard.test.ts":"6816","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-ag-flash-tiers.test.ts":"6817","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-cc-anthropic-rates.test.ts":"6818","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-constants-split.test.ts":"6819","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-route-sources.test.ts":"6820","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-sync-cross-instance.test.ts":"6821","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-sync-extended.test.ts":"6822","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-sync-status-7955.test.ts":"6823","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-sync.test.ts":"6824","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricingSync.modal.test.ts":"6825","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-6409-turbopack-memory-doc.test.ts":"6826","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-6699-jules-executor-misroute.test.ts":"6827","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-6835-cyclebreaker.test.ts":"6828","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-6835-oom-uncapped.test.ts":"6829","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-7134-claude-web-empty-error-body.test.ts":"6830","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-7293-strict-system-hoist.test.ts":"6831","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-9064-code-execution-beta.test.ts":"6832","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-9408-tool-use-protocol.test.ts":"6833","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-9541-repro.test.ts":"6834","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-9575-tool-name-case.test.ts":"6835","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/processManager.test.ts":"6836","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/progress-tracker.test.ts":"6837","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/prompt-cache-affinity.test.ts":"6838","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/prompt-cache-prefix-analyzer.test.ts":"6839","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/prompt-injection-guard-db-flag.test.ts":"6840","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/prompt-injection-guard.test.ts":"6841","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/prompt-required-routes.test.ts":"6842","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-add-ux-i18n-import-warning.test.ts":"6843","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-alias-transitive-5918.test.ts":"6844","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-alias-uniqueness.test.ts":"6845","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-apikey-cap-6715.test.ts":"6846","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-audit.test.ts":"6847","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-columns.test.ts":"6848","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-connection-apikey-dedup.test.ts":"6849","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-connection-healthcheck-interval-zero.test.ts":"6850","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-connection-status.test.ts":"6851","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-connections-fetch-url-2998.test.ts":"6852","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-connections-pagination-2998.test.ts":"6853","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-connections-quota-threshold.test.ts":"6854","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-connections-ui-regression.test.ts":"6855","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-credential-requirement.test.ts":"6856","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-detect-format-endpoint.test.ts":"6857","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-display-label.test.ts":"6858","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-endpoints-friendliai-novita.test.ts":"6859","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-error-rules.test.ts":"6860","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-field-strips.test.ts":"6861","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-filters-url-sync.test.ts":"6862","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-header-profiles.test.ts":"6863","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-health-matrix.test.ts":"6864","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-hints.test.ts":"6865","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-icon-arena-themed.test.ts":"6866","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-learn-more-link.test.ts":"6867","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-401-reauth-hint.test.ts":"6868","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-accesstoken-fallback-on-refresh-failure.test.ts":"6869","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-apikey-proxy-context.test.ts":"6870","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-chunked-spacing-sync.test.ts":"6871","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-force-refresh-imported.test.ts":"6872","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-local-apikey-sync-spacing.test.ts":"6873","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-oauth-sequential-sync.test.ts":"6874","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-provider-filter.test.ts":"6875","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-proxy-fail-closed.test.ts":"6876","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-recovery.test.ts":"6877","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-rotating-expired-guard.test.ts":"6878","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-sanitize-scope-3821.test.ts":"6879","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-sync-scheduler-public-surface.test.ts":"6880","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-ui.test.ts":"6881","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-metadata-5461-5470-5534.test.ts":"6882","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-metrics-route.test.ts":"6883","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-model-filter-live-catalog-7250.test.ts":"6884","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-config.test.ts":"6885","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-context-window-override-4125.test.ts":"6886","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-custom-merge-6247.test.ts":"6887","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-discovery-split.test.ts":"6888","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-management-route.test.ts":"6889","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-qwen-web-redirect-6267.test.ts":"6890","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-route-codex.test.ts":"6891","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-route-lan-guard.test.ts":"6892","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-route.test.ts":"6893","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-token-limits.test.ts":"6894","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-v1-route.test.ts":"6895","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-vision-override-1904.test.ts":"6896","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-node-dedup-4746.test.ts":"6897","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-node-icon-url.test.ts":"6898","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-node-select-4421.test.ts":"6899","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-nodes-route.test.ts":"6900","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-nodes-validate-docker-hint.test.ts":"6901","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-nodes-validate-modelid.test.ts":"6902","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-nodes-vibeproxy-preset.test.ts":"6903","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-onboarding-href.test.ts":"6904","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-onboarding-wizard.test.ts":"6905","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-page-helpers-3501.test.ts":"6906","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-plugin-manifest-url.test.ts":"6907","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-plugin-manifest.test.ts":"6908","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-proxy-lazy.test.ts":"6909","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-quota-visibility.test.ts":"6910","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-quota-widget-icon-prop.test.ts":"6911","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-rate-limit-overrides-schema.test.ts":"6912","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-freetheai.test.ts":"6913","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-github-copilot-gpt-4.test.ts":"6914","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-github-copilot-gpt-4o.test.ts":"6915","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-github-copilot-targetformat.test.ts":"6916","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-kilocode-format.test.ts":"6917","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-llm7-cohere.test.ts":"6918","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-models-guard.test.ts":"6919","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-openai-gemini-expanded-models.test.ts":"6920","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-qwen-vision.test.ts":"6921","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-request-capture-toolname-antigravity-4181.test.ts":"6922","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-request-capture-toolname-map-4091.test.ts":"6923","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-request-failure-pipeline.test.ts":"6924","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-request-logging.test.ts":"6925","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-route-schemas.test.ts":"6926","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-scoped-aliases.test.ts":"6927","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-scoped-chat-completions-validation.test.ts":"6928","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-scoped-models-route.test.ts":"6929","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-section-visibility.test.ts":"6930","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-service-kind-filter-4240.test.ts":"6931","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-service.test.ts":"6932","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-settings-default.test.ts":"6933","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-setup-links-5572.test.ts":"6934","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-specific-data-schema.test.ts":"6935","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-sweep-live-discovery.test.ts":"6936","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-target-format-badge-4475.test.ts":"6937","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-test-account-deactivated.test.ts":"6938","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-test-mistral-401-classify.test.ts":"6939","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-tier-field-helpers.test.ts":"6940","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-translate-path-golden.test.ts":"6941","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-azure-vertex.test.ts":"6942","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-branches.test.ts":"6943","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-firepass-403.test.ts":"6944","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-hardening.test.ts":"6945","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-image-only.test.ts":"6946","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-qwen-web-5855.test.ts":"6947","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-specialty.test.ts":"6948","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-ssrf-guard.test.ts":"6949","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-tinyfish.test.ts":"6950","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-web-cookie-auth007.test.ts":"6951","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-webfetch-4401.test.ts":"6952","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-wafer.test.ts":"6953","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-window-costs.test.ts":"6954","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providerlimits-quotanormalize-split.test.ts":"6955","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-autosync-ssrf-323.test.ts":"6956","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-batch-update.test.ts":"6957","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-bulk-route.test.ts":"6958","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-constants-split.test.ts":"6959","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-free-tier-filter.test.ts":"6960","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-page-data-timeout.test.ts":"6961","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-page-utils-kimi.test.ts":"6962","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-page-utils.test.ts":"6963","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-route-managed-catalog.test.ts":"6964","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-test-route-cli-map.test.ts":"6965","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-validate-route.test.ts":"6966","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-yuanbao-web.test.ts":"6967","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-assigned-unavailable-6246.test.ts":"6968","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-autoselect-optin-3332.test.ts":"6969","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-batch-routes-5918.test.ts":"6970","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-bulk-import-dedup-7594.test.ts":"6971","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-bypass-scope-guard-3226.test.ts":"6972","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-concurrency-keepalive-regression.test.ts":"6973","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-connection-test.test.ts":"6974","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-dispatcher-cache-cap.test.ts":"6975","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-dispatcher-family.test.ts":"6976","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-egress-isolation-bdd.test.ts":"6977","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-egress-validate-pool-default.test.ts":"6978","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-egress-visibility.test.ts":"6979","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-fallback-cache-key.test.ts":"6980","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-fallback-candidates-listproxies-shape.test.ts":"6981","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-fallback-ssrf.test.ts":"6982","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-family-migration.test.ts":"6983","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-family-resolve-cache.test.ts":"6984","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-family-resolve.test.ts":"6985","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-family.test.ts":"6986","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-fetch.test.ts":"6987","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-health-6246.test.ts":"6988","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-health-decide-action-6246.test.ts":"6989","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-health-ipv6.test.ts":"6990","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-health-scheduler-listproxies-shape.test.ts":"6991","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-logger-client-ip.test.ts":"6992","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-logs-egress-ip.test.ts":"6993","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-logs-route.test.ts":"6994","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-management-v1-route.test.ts":"6995","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-nested-context-skip.test.ts":"6996","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-noauth-provider-6272.test.ts":"6997","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-pool-cloudflare-workers-deployer.test.ts":"6998","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-pool-deno-deploy-relay.test.ts":"6999","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-pool-rotation-6365.test.ts":"7000","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-pool-route-6365.test.ts":"7001","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-pool-sync-4878.test.ts":"7002","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-registry-manager.test.ts":"7003","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-registry-route-handlers.test.ts":"7004","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-registry.test.ts":"7005","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-relay-mappers.test.ts":"7006","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-relay-test-error-5716.test.ts":"7007","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-resolution-status-filter.test.ts":"7008","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-rotation-latency.test.ts":"7009","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-subscriptions-route-validation.test.ts":"7010","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-types-socks5-runtime-3508.test.ts":"7011","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.coreEndpoint.test.ts":"7012","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.due.test.ts":"7013","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.fetchGuard.test.ts":"7014","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.fetchRetry.test.ts":"7015","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.needsCore.test.ts":"7016","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.parse.test.ts":"7017","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.scopes.test.ts":"7018","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.service.test.ts":"7019","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.url.test.ts":"7020","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxyfetch-caller-abort-log-suppression.test.ts":"7021","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxyfetch-retry-fresh-socket-4252.test.ts":"7022","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxyfetch-undici-retry.test.ts":"7023","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxyfetch-vercel-relay-2743.test.ts":"7024","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/public-api-routes.test.ts":"7025","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/public-client-ids-3493.test.ts":"7026","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/publicCreds.test.ts":"7027","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/publicai-not-keyless-3558.test.ts":"7028","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qdrant-schemas.test.ts":"7029","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qianfan-provider.test.ts":"7030","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qiniu-provider.test.ts":"7031","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-cli.test.ts":"7032","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-display-label.test.ts":"7033","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-executor.test.ts":"7034","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-jobtoken-exchange-4683.test.ts":"7035","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-oauth-config.test.ts":"7036","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-test-runtime-disambiguation.test.ts":"7037","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-unwrap-error-envelope.test.ts":"7038","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-usage-quota.test.ts":"7039","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qodercli-windows-resolve-6263.test.ts":"7040","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quality-rail-gate-membership.test.ts":"7041","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quality-ratchet.test.ts":"7042","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-account-buckets.test.ts":"7043","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-account-quota-row.test.ts":"7044","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-auto-ping.test.ts":"7045","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-burn-rate.test.ts":"7046","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-cache-hydrate-5015.test.ts":"7047","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-cache-is-exhausted-per-window-5923.test.ts":"7048","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-cache-snapshot-dedup-4438.test.ts":"7049","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-card-expanded-fixed-order-6687.test.ts":"7050","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-card-expanded-loading-placeholder.test.ts":"7051","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-card-expanded-sort-collapse.test.ts":"7052","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-card-grid-density-6815.test.ts":"7053","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-card-grid-horizontal-layout.test.ts":"7054","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-card-grid-mobile-7072.test.ts":"7055","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-catalog-filter.test.ts":"7056","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-combo-balancing.test.ts":"7057","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-combo-cli-providers.test.ts":"7058","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-combo-groups.test.ts":"7059","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-combos-sync.test.ts":"7060","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-concept-card-i18n.test.ts":"7061","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-connection-recovery.test.ts":"7062","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-constrain-connections.test.ts":"7063","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-deactivate-toggle.test.ts":"7064","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-deterministic-order.test.ts":"7065","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-dimensions.test.ts":"7066","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-edit-opens-wizard.test.ts":"7067","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-email-privacy.test.ts":"7068","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-endpoints-card.test.ts":"7069","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-enforce-await-store.test.ts":"7070","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-enforce.test.ts":"7071","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-epsilon-unconfigured-allow.test.ts":"7072","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-equal-split.test.ts":"7073","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-exclusive-catalog-4806.test.ts":"7074","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-exclusive-catalog-short-circuit.test.ts":"7075","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-exclusivity-reconcile.test.ts":"7076","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-fair-share.test.ts":"7077","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-fetch-throttle-6009.test.ts":"7078","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-fetch-throttle-scope-6911.test.ts":"7079","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-group-allocations.test.ts":"7080","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-group-scope.test.ts":"7081","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-groups-crud.test.ts":"7082","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-groups-migration.test.ts":"7083","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-groups-route.test.ts":"7084","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-groups-ui.test.ts":"7085","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-helpers.test.ts":"7086","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-key-models-route.test.ts":"7087","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-key-resolve.test.ts":"7088","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-model-naming.test.ts":"7089","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-monitor.test.ts":"7090","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-multiprovider.test.ts":"7091","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-parsing-claude-extra-usage.test.ts":"7092","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-per-key-model-hotpath.test.ts":"7093","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-per-key-model.test.ts":"7094","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-plan-registry.test.ts":"7095","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-plan-resolver.test.ts":"7096","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-plans-route-retired.test.ts":"7097","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-policy-generalization.test.ts":"7098","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-connections.test.ts":"7099","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-delete-prune.test.ts":"7100","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-log-route.test.ts":"7101","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-single-provider.test.ts":"7102","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-update-full.test.ts":"7103","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-usage-shape.test.ts":"7104","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-wizard-edit.test.ts":"7105","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-wizard-multi.test.ts":"7106","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-wizard.test.ts":"7107","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-preflight.test.ts":"7108","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-redis-store.test.ts":"7109","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-saturation-anthropic-oauth.test.ts":"7110","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-saturation-signals.test.ts":"7111","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-saturation-token-headers.test.ts":"7112","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-schemas.test.ts":"7113","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-share-bugfixes-v388.test.ts":"7114","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-share-grid.test.ts":"7115","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-share-layout-v2.test.ts":"7116","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-share-strategy.test.ts":"7117","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-sharing-fixes.test.ts":"7118","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-spend-recorder.test.ts":"7119","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-sqlite-store.test.ts":"7120","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-store-factory.test.ts":"7121","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-store-pool-total.test.ts":"7122","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-streaming-consumption-usd.test.ts":"7123","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-summed-budget.test.ts":"7124","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-token-expiry-display.test.ts":"7125","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-cloud-image-media.test.ts":"7126","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-cloud-token-plan-media.test.ts":"7127","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-cloud-video-media.test.ts":"7128","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-code-config.test.ts":"7129","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-settings-route.test.ts":"7130","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-web-content-array-serialization.test.ts":"7131","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-web-cookie-validation-3958.test.ts":"7132","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-web-models-discovery-3931.test.ts":"7133","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/radar-api-routes.test.ts":"7134","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/radar-apply-feed.test.ts":"7135","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/radar-db.test.ts":"7136","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/radar-flag-default.test.ts":"7137","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/radar-inertia.test.ts":"7138","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/radar-page-state.test.ts":"7139","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/radar-sync.test.ts":"7140","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limit-enhanced.test.ts":"7141","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limit-manager.test.ts":"7142","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limit-provider-default.test.ts":"7143","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limit-queue-timeout-lockout.test.ts":"7144","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limit-queue-timeout-message-4165.test.ts":"7145","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limit-wedge-recovery.test.ts":"7146","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limiter-eviction-4041.test.ts":"7147","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limiter-fallback.test.ts":"7148","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limiter-redis-optional.test.ts":"7149","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rateLimitManager-idle-eviction.test.ts":"7150","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rateLimitSemaphore.test.ts":"7151","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ratelimit-admission-control-6593.test.ts":"7152","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ratelimit-reservoir-refresh.test.ts":"7153","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ratelimitmanager-headers-split.test.ts":"7154","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/raycast-auth.test.ts":"7155","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/raycast-local-extract.test.ts":"7156","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reactive-context-compaction-policy.test.mjs":"7157","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-cache-truncation.test.ts":"7158","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-cache.test.ts":"7159","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-cost-double-billing.test.ts":"7160","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-placeholder-strip.test.ts":"7161","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-replay-big-pickle.test.ts":"7162","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-routing-api.test.ts":"7163","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-routing-decision-guards.test.ts":"7164","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-routing.test.ts":"7165","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-token-buffer-6274.test.ts":"7166","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-token-buffer-9507.test.ts":"7167","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-token-source-6187.test.ts":"7168","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoningContentInjector.test.ts":"7169","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/redirects-cli-renames.test.ts":"7170","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-buildHeaders-default.test.ts":"7171","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-buildHeaders-opencode.test.ts":"7172","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-buildHeaders-preamble.test.ts":"7173","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-effortLevel.test.ts":"7174","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-opencodeHeaders.test.ts":"7175","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-registryFactory.test.ts":"7176","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-resolveBaseUrl.test.ts":"7177","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-urlSanitize.test.ts":"7178","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refresh-serializer-spacing.test.ts":"7179","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refresh-serializer.test.ts":"7180","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/regional-provider-cn-notices-5462.test.ts":"7181","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/registry-direct-exports.test.ts":"7182","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/registry-utils.test.ts":"7183","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/regolo-provider.test.ts":"7184","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rehome-open-prs.test.ts":"7185","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rejected-request-usage.test.ts":"7186","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/relay-check-rate-limit-existing-token.test.ts":"7187","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/relay-deploy-5128.test.ts":"7188","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/relay-minified-fn-6149.test.ts":"7189","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/relay-probe-stats.test.ts":"7190","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/relay-test-result-awareness.test.ts":"7191","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/release-cycle-base-resolver.test.ts":"7192","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/release-green-docs-drift-7253.test.ts":"7193","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/release-notes.test.ts":"7194","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/releaseChecker.test.ts":"7195","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/remaining-tasks.test.ts":"7196","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/remote-image-fetch-dns-rebinding.test.ts":"7197","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/remote-image-fetch-pin-dns-connection.test.ts":"7198","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/remote-image-fetch.test.ts":"7199","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/replace-custom-models-preserve-hidden-5086.test.ts":"7200","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6142-devin-cloud-agent-unwired.test.ts":"7201","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6377-agentrouter-validation.test.ts":"7202","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6524.test.ts":"7203","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6557-noauth-connection-disable-ignored.test.ts":"7204","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6576-kiro-thinking-unsupported-model.test.ts":"7205","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6637-kimi-token-limit.test.ts":"7206","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6692-sticky-terminal.test.ts":"7207","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6701-claude-detect-fallback.test.ts":"7208","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6912-volcengine-max-completion-tokens.test.ts":"7209","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6951.test.ts":"7210","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6952-commentary.test.ts":"7211","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6953.test.ts":"7212","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6957.test.ts":"7213","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6975.test.ts":"7214","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-7023.test.ts":"7215","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-7268-401-model-not-supported-lockout.test.ts":"7216","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-7387-sticky-quota-exhausted.test.ts":"7217","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-7503-no-choices.test.ts":"7218","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-7764-collapsed-quota-order.test.ts":"7219","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-7820-amazon-q-static-models.test.ts":"7220","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-7847-bound-client-raw-request.test.ts":"7221","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-8065-quota-cache-cross-instance.test.ts":"7222","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-8136-antigravity-400-model-not-supported-lockout.test.ts":"7223","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-8429-capability-canonicalization.test.ts":"7224","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-8430.test.ts":"7225","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-8522.test.ts":"7226","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-8956.test.ts":"7227","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-9406-claude-web-429-valid.test.ts":"7228","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-9500-reasoning-separator.test.ts":"7229","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-9550-amazon-q-alias-resolution.test.ts":"7230","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-antigravity-404-family-cooldown-hijack.test.ts":"7231","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-defaults-store-session.test.ts":"7232","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-log-detail-layout.test.ts":"7233","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-log-detail-stream.test.ts":"7234","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-log-migration.test.ts":"7235","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-log-payloads.test.ts":"7236","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-logger-bounded-clone.test.ts":"7237","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-logger-bounded-idempotence.test.ts":"7238","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-logger-endpoints.test.ts":"7239","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-logger-preferences.test.ts":"7240","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-logger-signature.test.ts":"7241","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/requesty-provider.test.ts":"7242","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/require-management-auth-access-token.test.ts":"7243","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rerank-object-documents-response-path.test.ts":"7244","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rerank-openrouter-6574.test.ts":"7245","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rerank-providers-5332.test.ts":"7246","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rerank-proxy-pinning-7350.test.ts":"7247","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rerank-voyage-7809.test.ts":"7248","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rerank.test.ts":"7249","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reset-connection-backoff.test.ts":"7250","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reset-password-cli-6261-6258.test.ts":"7251","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-provider-cooldown-api-3556.test.ts":"7252","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-settings-combo-cooldown-wait.test.ts":"7253","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-settings-normalize-split.test.ts":"7254","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-settings-provider-breaker.test.ts":"7255","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-settings-quota-preflight.test.ts":"7256","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-settings-quota-share-concurrency.test.ts":"7257","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-settings-stream-recovery.test.ts":"7258","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-settings-upstream429-breaker.test.ts":"7259","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-stream-recovery-feature-flags.test.ts":"7260","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-tab-response-fields.test.ts":"7261","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolve-bare-model-to-connection-default-474.test.ts":"7262","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolve-model-alias-index-8697.test.ts":"7263","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolve-omniroute-base-url.test.ts":"7264","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolve-proxy-family.test.ts":"7265","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolve-routing-model.test.ts":"7266","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolve-stream-flag.test.ts":"7267","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolve-web-provider-host.test.ts":"7268","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolveComboContextLimit.test.ts":"7269","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resource-pressure-policy.test.ts":"7270","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resource-pressure-runtime.test.ts":"7271","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resource-pressure-sampler.test.ts":"7272","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resource-pressure.test.ts":"7273","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/response-model-echo-1311.test.ts":"7274","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/response-openai-responses-purehelpers-split.test.ts":"7275","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/response-sanitizer.test.ts":"7276","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-active-stream-custom-tool.test.ts":"7277","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-additional-tools.test.ts":"7278","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-chat-assistant-role-first-chunk.test.ts":"7279","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-chat-namespace-identity-map.test.ts":"7280","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-chat-namespace-qualified-name.test.ts":"7281","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-chat-translation-gaps.test.ts":"7282","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-combo-resolution-3227.test.ts":"7283","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-commentary-event-frame-6561.test.ts":"7284","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-commentary-passthrough-6199.test.ts":"7285","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-default-text-format.test.ts":"7286","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-handler.test.ts":"7287","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-input-item-status-8083.test.ts":"7288","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-input-sanitizer-name.test.ts":"7289","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-nameless-hosted-tool-filter.test.ts":"7290","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-namespace-flatten.test.ts":"7291","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-parse-once-4041.test.ts":"7292","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-reasoning-close-before-message-466.test.ts":"7293","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-state-policy.test.ts":"7294","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-strip-truncation-2311.test.ts":"7295","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-textless-terminal-3948.test.ts":"7296","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-to-claude-whitespace-9170.test.ts":"7297","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-tool-search-call-skip.test.ts":"7298","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-transformer-dense-output.test.ts":"7299","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-transformer.test.ts":"7300","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-translation-fixes.test.ts":"7301","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-usage-trailing-6906.test.ts":"7302","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-ws-proxy-compression-parity.test.ts":"7303","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-ws-proxy-headers.test.mjs":"7304","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-ws-proxy-multi-turn-history.test.ts":"7305","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-ws-proxy.test.mjs":"7306","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responsesanitizer-reasoning-split.test.ts":"7307","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/retrieval-scoring-split.test.ts":"7308","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reverse-models-dev-providers-8697.test.ts":"7309","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/review-reviews-v3814-fixes.test.ts":"7310","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/risk-notice-acknowledged.test.ts":"7311","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/risk-notice-modal-button-import.test.ts":"7312","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/role-normalizer.test.ts":"7313","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rotation-config-omniroute.test.ts":"7314","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-edge-coverage.test.ts":"7315","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-error-sanitization-v382.test.ts":"7316","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-explainability.test.ts":"7317","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-acp-agents-local-only.test.ts":"7318","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-forge-jcode-settings-local-only.test.ts":"7319","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-grok-build-settings-local-only.test.ts":"7320","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-loopback-via-proxy.test.ts":"7321","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-middleware-local-only.test.ts":"7322","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-plugins-local-only.test.ts":"7323","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-private-lan.test.ts":"7324","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-provider-login-local-only.test.ts":"7325","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-qwen-settings-local-only.test.ts":"7326","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval-check.test.ts":"7327","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval-cli.test.ts":"7328","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval-compare.test.ts":"7329","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval-e2e-chain.test.ts":"7330","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval-patch-compare.test.ts":"7331","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval-search.test.ts":"7332","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval-trends.test.ts":"7333","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval.test.ts":"7334","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-strategies.test.ts":"7335","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/routing-settings-ux-6147.test.ts":"7336","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rtk-enable-renderers-6703.test.ts":"7337","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rtk-gradle-dotnet-filters.test.ts":"7338","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rtk-new-filters.test.ts":"7339","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rule12-error-sanitization-sweep.test.ts":"7340","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/run-next-node-env.test.ts":"7341","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/run-next-playwright.test.ts":"7342","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime/live-ws-default.test.ts":"7343","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime/magicBytes.test.ts":"7344","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime/sqliteRuntime-node26-compat.test.ts":"7345","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime/sqliteRuntime.test.ts":"7346","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime-config-globalthis-5312.test.ts":"7347","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime-deps-save-exact-no-prune.test.ts":"7348","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime-env-max-old-space.test.ts":"7349","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime-env.test.ts":"7350","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime-ports.test.ts":"7351","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime-timeouts.test.ts":"7352","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/safe-outbound-fetch.test.ts":"7353","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/safe-resolve-proxy-fail-closed.test.ts":"7354","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sanitizer-residual-policy.test.ts":"7355","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/save-call-log-persistence.test.ts":"7356","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/schema-coercion.test.ts":"7357","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-cache-ttl-zero.test.ts":"7358","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-handler-duckduckgo.test.ts":"7359","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-handler-extended.test.ts":"7360","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-handler-perplexity-options.test.ts":"7361","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-provider-validation.test.ts":"7362","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-providers-static-model-catalog-7529.test.ts":"7363","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-registry.test.ts":"7364","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-route.test.ts":"7365","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-select-provider-searxng-bug-9543.test.ts":"7366","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-tools-schemas.test.ts":"7367","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/secure-random-routing.test.ts":"7368","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/build-profile-stubs.test.ts":"7369","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/cloud-sync-hmac.test.ts":"7370","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/docs-path-traversal.test.ts":"7371","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/docs-sanitization.test.ts":"7372","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/elevated-powershell-no-encoded.test.ts":"7373","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/live-server-allowlist.test.ts":"7374","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/local-endpoints.test.ts":"7375","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/zed-credential-fingerprint.test.ts":"7376","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/zed-import-two-step.test.ts":"7377","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security-docs-truthfulness-8097.test.ts":"7378","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security-fase01.test.ts":"7379","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security-hashkey.test.ts":"7380","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/segmind-image-video-provider-6656.test.ts":"7381","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/select-impacted-tests.test.ts":"7382","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/self-inflicted-upstream-timeout.test.ts":"7383","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/semantic-cache.test.ts":"7384","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sensenova-image-provider-2233.test.ts":"7385","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sensenova-provider.test.ts":"7386","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/serial/combo-health-autopilot.test.ts":"7387","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/serial/combo-quota-share-cooldown-wait-timing.test.ts":"7388","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/serial/combo-strategy-fallbacks-half-open-timing.test.ts":"7389","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/serial/glm-coding-plan-monthly-3580.test.ts":"7390","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/serial/provider-health-autopilot.test.ts":"7391","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/serial/quota-division-blocks.test.ts":"7392","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/serve-node-options-preserve-5238.test.ts":"7393","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-backends.test.ts":"7394","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-batch-processor.test.ts":"7395","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-combo-metrics.test.ts":"7396","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-context-handoff.test.ts":"7397","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-context-manager.test.ts":"7398","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-intent-classifier.test.ts":"7399","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-payload-rules.test.ts":"7400","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-provider-plugin-manifest.test.ts":"7401","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-provider-plugin-registry.test.ts":"7402","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-quota-monitor.test.ts":"7403","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-reasoning-cache.test.ts":"7404","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-session-manager.test.ts":"7405","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-system-transforms.test.ts":"7406","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-thinking-budget.test.ts":"7407","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-tier-labels.test.ts":"7408","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-token-limit-counter.test.ts":"7409","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-token-refresh.test.ts":"7410","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-worker-navigation-fallback.test.ts":"7411","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/ServiceSupervisor.test.ts":"7412","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/bifrost-route-guard.test.ts":"7413","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/bifrost-routing-backend.test.ts":"7414","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/combo-metrics-memory.test.ts":"7415","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/embed-proxy.test.ts":"7416","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/embedWsProxy.test.ts":"7417","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/emergency-fallback.test.ts":"7418","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/end-to-end-shape.test.ts":"7419","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/fusion-min-panel-and-failure-detail.test.ts":"7420","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/geminiRateLimitTracker.test.ts":"7421","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/htmlRewriter.test.ts":"7422","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/install-route-helper.test.ts":"7423","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/installers/bifrost-transport-version-format.test.ts":"7424","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/installers/bifrost.test.ts":"7425","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/installers/cliproxy-resolve-spawn-args-6877.test.ts":"7426","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/installers/cliproxy.test.ts":"7427","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/installers/mux.test.ts":"7428","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/installers/ninerouter.test.ts":"7429","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/installers/runNpm-shell-5379.test.ts":"7430","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/lifecycle.test.ts":"7431","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/logs-sse.test.ts":"7432","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/modelSync.test.ts":"7433","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/providerCooldownTracker.test.ts":"7434","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/ringBuffer.test.ts":"7435","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services-branch-hardening.test.ts":"7436","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/session-affinity-generic-7274.test.ts":"7437","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/session-manager-sweep.test.ts":"7438","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/session-manager.test.ts":"7439","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/session-pool-modular.test.ts":"7440","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/session-pool-rest-api.test.ts":"7441","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/session-pool.test.ts":"7442","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings/authz-bypass.test.ts":"7443","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings/probe-8950-set-password.test.ts":"7444","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings-api.test.ts":"7445","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings-cas-7784.test.ts":"7446","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings-i18n-keys.test.ts":"7447","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings-route-password.test.ts":"7448","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings-schema-routing-strategies.test.ts":"7449","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings-transform-schema.test.ts":"7450","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings-ui-layout-static.test.ts":"7451","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/setup-open-code-win32-shell.test.mjs":"7452","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/analytics-recharts-lazy.test.ts":"7453","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/basePath.test.ts":"7454","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/basePathFetch.test.ts":"7455","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/components/AutoRoutingBanner.test.tsx":"7456","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/components/KiroAuthModal.test.tsx":"7457","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/components/ProxyConfigModal.test.tsx":"7458","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/machineId.test.ts":"7459","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/structuredLogger-raw-write-guard.test.ts":"7460","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared-api-utils.test.ts":"7461","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared-clipboard.test.tsx":"7462","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared-schemas.test.ts":"7463","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-back-compat.test.ts":"7464","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-cli-renames.test.ts":"7465","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-costs-quota-plans.test.ts":"7466","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-costs-section.test.ts":"7467","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-customization.test.ts":"7468","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-icon-accents-3812.test.ts":"7469","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-monitoring-reorg.test.ts":"7470","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-prefetch-policy-8281.test.ts":"7471","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-quota-share-placement.test.ts":"7472","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-route-match.test.ts":"7473","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-search-filter.test.ts":"7474","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-tools-group.test.ts":"7475","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-visibility.test.ts":"7476","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/signature-cache-bypass.test.ts":"7477","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/signature-cache.test.ts":"7478","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/silent-sse-close-7699.test.ts":"7479","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/siliconflow-model-sync.test.ts":"7480","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/siliconflow-registry-models.test.ts":"7481","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-builtins-sandbox.test.ts":"7482","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-collect-routes.test.ts":"7483","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-executor.test.ts":"7484","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-injection.test.ts":"7485","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-interception.test.ts":"7486","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-provider-setting.test.ts":"7487","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-registry.test.ts":"7488","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-routes-error-sanitization.test.ts":"7489","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-routes.test.ts":"7490","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-schemas.test.ts":"7491","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-skillssh.test.ts":"7492","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skip-provider-breaker-consumer-2743.test.ts":"7493","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sliding-window-limiter.test.ts":"7494","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/small-vps-docs.test.ts":"7495","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/socks-connector-family.test.ts":"7496","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/socks-handshake-timeout-5109.test.ts":"7497","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/socks5-default-on.test.ts":"7498","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sonar-quality-gate-fixes.test.ts":"7499","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/source-scanner-guards.test.ts":"7500","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/spark-openai-compatible-endpoint-7942.test.ts":"7501","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/specialty-model-catalog-routes.test.ts":"7502","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/specificity-rules.test.ts":"7503","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/speechmatics-transcription-provider.test.ts":"7504","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/spend-batch-writer.test.ts":"7505","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sqlite-repair-discoverability-3476.test.ts":"7506","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sqljs-build-warning-8135.test.ts":"7507","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sre-oncall-rotation.test.ts":"7508","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sre-redact-logs.test.ts":"7509","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sre-tcp-close-analyzer.test.ts":"7510","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-auth-antigravity-credits.test.ts":"7511","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-auth-resource-404.test.ts":"7512","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-auth.test.ts":"7513","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-error-passthrough-3324.test.ts":"7514","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-finish-reason-synthesis-7800.test.ts":"7515","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-heartbeat-integration.test.ts":"7516","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-heartbeat.test.ts":"7517","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-nonstream-accept-5305.test.ts":"7518","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-parser-numeric-ids.test.ts":"7519","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-parser.test.ts":"7520","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-shim-contract.test.ts":"7521","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sseHeartbeat.test.ts":"7522","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sseTextTransform.test.ts":"7523","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/standalone-server-ws-keepalive-timeout-7003.test.ts":"7524","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/start-ws-server-cwd-4055.test.mjs":"7525","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/startup-stale-cooldown-recovery.test.ts":"7526","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/static-constants-public-surface.test.ts":"7527","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/static-models-venice-web-6269.test.ts":"7528","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stepfun-mono-fallback-and-sidebar-hydration-7743.test.ts":"7529","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sticky-affinity-failover-6219.test.ts":"7530","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stmt-cache-lru.test.ts":"7531","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-continuation-wiring.test.ts":"7532","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-continuation.test.ts":"7533","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-early-eof-affinity-8928.test.ts":"7534","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-early-eof-breaker.test.ts":"7535","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-early-eof-retry-3758.test.ts":"7536","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-failure-499-classification.test.ts":"7537","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-handler-catch-logging-8143.test.ts":"7538","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-handler-client-disconnect.test.ts":"7539","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-handler.test.ts":"7540","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-helpers.test.ts":"7541","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-non-json-sse.test.ts":"7542","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-numeric-ids.test.ts":"7543","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-onfailure-callback-logging.test.ts":"7544","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-options-nonstreaming-3884.test.ts":"7545","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-payload-collector.test.ts":"7546","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-prompt-tokens-zero-upstream.test.ts":"7547","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-readiness-policy.test.ts":"7548","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-readiness.test.ts":"7549","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-recovery.test.ts":"7550","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-request-body-size-mark-7045.test.ts":"7551","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-strip-responses-lifecycle-echo.test.ts":"7552","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-utilities.test.ts":"7553","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-utils.test.ts":"7554","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/streamHelpers.test.ts":"7555","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/streaming-empty-content-block-1382.test.ts":"7556","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/streaming-reasoning-dedup-5786.test.ts":"7557","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/streamingPiiInitialization.test.ts":"7558","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/streamingPiiTransform.test.ts":"7559","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/strict-random-deck.test.ts":"7560","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/strip-reasoning-blobs-agentic-context-1599.test.ts":"7561","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/strip-reasoning-header.test.ts":"7562","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/structured-logger-dedup-bound.test.ts":"7563","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/suggested-models-route.test.ts":"7564","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sumopod-x5lab-provider.test.ts":"7565","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/supervisor-policy-4425.test.ts":"7566","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sweep-stale-fragments.test.ts":"7567","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-bundle.test.ts":"7568","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-env-bundled-require-5006.test.ts":"7569","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-env.test.ts":"7570","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-models-degraded-local-catalog-5460-5465.test.ts":"7571","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-next-cycle.test.ts":"7572","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-reasoning-supported-efforts-7694.test.ts":"7573","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-routes.test.ts":"7574","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-search-to-url-8624.test.ts":"7575","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-wiki.test.ts":"7576","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/synced-capability-warmup-8697.test.ts":"7577","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/synced-model-delete-persist-3199.test.ts":"7578","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/synced-model-hide-persist-3782.test.ts":"7579","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/synthetic-provider.test.ts":"7580","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/system-prompt.test.ts":"7581","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/system-role-extraction.test.ts":"7582","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/system-transforms.test.ts":"7583","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/system-trust-test-guard.test.ts":"7584","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/system-version-cache-8278.test.ts":"7585","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/system-version-check-4100.test.ts":"7586","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t06-schema-hardening.test.ts":"7587","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t07-no-log-key-config.test.ts":"7588","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t08-allowed-connections.test.ts":"7589","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t08-mcp-scope-enforcement.test.ts":"7590","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t09-a2a-lifecycle.test.ts":"7591","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t12-pricing-updates.test.ts":"7592","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t13-stale-quota-display.test.ts":"7593","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t14-proxy-fast-fail.test.ts":"7594","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t16-gemini-enum-type-string.test.ts":"7595","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t19-codex-responses-empty-content.test.ts":"7596","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t23-t24-fallback-resilience.test.ts":"7597","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t25-provider-validation-modelid-fallback.test.ts":"7598","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t26-ai-sdk-accept-header-compat.test.ts":"7599","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t27-github-copilot-response-format.test.ts":"7600","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t28-model-catalog-updates.test.ts":"7601","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t29-vertex-sa-json-executor.test.ts":"7602","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t3-chat-web-credentials.test.ts":"7603","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t3-chat-web.test.ts":"7604","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t30-kiro-400-model-unavailable.test.ts":"7605","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t31-t33-t34-t38-model-specs.test.ts":"7606","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t3chat-web-cookie-hint-5465.test.ts":"7607","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t40-opencode-cli-tools-integration.test.ts":"7608","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t42-image-size-to-aspect-ratio.test.ts":"7609","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t43-gemini-tool-call-no-thought-signature.test.ts":"7610","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t44-antigravity-thought-signature-preserved.test.ts":"7611","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tag-routing.test.ts":"7612","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tailscale-authkey.test.ts":"7613","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tailscaleTunnel.test.ts":"7614","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/task-fitness-missing-table-8603.test.ts":"7615","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/task-router-auto-intent-8602.test.ts":"7616","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/task-routing-config-restore-8601.test.ts":"7617","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/telemetry-auto-cleanup-6848.test.ts":"7618","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/telemetry-summary-route.test.ts":"7619","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/termux-android-cache-dir.test.ts":"7620","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/termux-android-playwright-static-import-7265.test.ts":"7621","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/test-all-model-status.test.ts":"7622","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/test-all-results-i18n.test.ts":"7623","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/test-masking-release-scale.test.ts":"7624","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/test-process-detection.test.ts":"7625","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/test-scoped-selection.test.ts":"7626","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/test-serial-quarantine.test.ts":"7627","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/textual-toolcall-sanitizer-false-positive.test.ts":"7628","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/theoldllm-body-double-read-3296.test.ts":"7629","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/theoldllm-context-length-4184.test.ts":"7630","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/theoldllm-model-refresh-5181.test.ts":"7631","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/theoldllm-provider-proxy.test.ts":"7632","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/theoldllm-request-token-3491.test.ts":"7633","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/think-close-marker-responses-format.test.ts":"7634","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/think-close-marker-suppress-5245.test.ts":"7635","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/think-tag-parser.test.ts":"7636","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/thinking-budget-boot-wiring-5312.test.ts":"7637","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/thinking-budget-globalthis-5312.test.ts":"7638","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/thinking-budget-groq-3258.test.ts":"7639","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/thinking-budget-hydration-5312.test.ts":"7640","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/thinking-budget.test.ts":"7641","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/thundering-herd.test.ts":"7642","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tier-config-provider-override-route.test.ts":"7643","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tier-coverage-widget-provider-override.test.ts":"7644","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tier-resolver-provider-override.test.ts":"7645","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tiktoken-counter.test.ts":"7646","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tls-client-download-dir-8579.test.ts":"7647","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tls-client-node-docker-binary-7802.test.ts":"7648","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tls-client-proxy-fail-closed.test.ts":"7649","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tls-options.test.ts":"7650","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tls-profiles-valid-5591.test.mjs":"7651","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tlsClient-circuit-breaker.test.ts":"7652","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-accounting-input-fix.test.ts":"7653","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-health-check-circuit-breaker.test.ts":"7654","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-health-check-devin-cli-8407.test.ts":"7655","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-health-check-sweep.test.ts":"7656","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-health-check-tickms-defined.test.ts":"7657","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-health-check.test.ts":"7658","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-health-no-refresh-token-expired-5326.test.ts":"7659","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-limits.test.ts":"7660","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-refresh-cas-guard-4038.test.ts":"7661","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-refresh-cas-guard.test.ts":"7662","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-refresh-circuit-breaker.test.ts":"7663","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-refresh-race-comprehensive.test.ts":"7664","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-refresh-rotation-map.test.ts":"7665","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-refresh-route-service.test.ts":"7666","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-refresh-service.test.ts":"7667","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tokenExtractionConfig.test.ts":"7668","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tokenHealthCheck-batchSize.test.ts":"7669","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tokenHealthCheck-transient.test.ts":"7670","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-call-arguments.test.ts":"7671","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-latency-tracker.test.ts":"7672","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-limit-detector.test.ts":"7673","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-name-case-preserve-4307.test.ts":"7674","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-request-sanitization.test.ts":"7675","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-schema-sanitizer.test.mjs":"7676","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-search-filtered-responses-to-chat-7532.test.ts":"7677","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-source-diagnostics.test.ts":"7678","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tools-filter-anthropic-format.test.ts":"7679","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tooltip-portal-behavior.test.ts":"7680","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/topology-active-requests-3507.test.ts":"7681","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/topology-connection-health.test.ts":"7682","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/topology-filtering-and-click.test.ts":"7683","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/topology-label-3198.test.ts":"7684","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/topology-request-lifecycle-emit.test.ts":"7685","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-build-native.test.ts":"7686","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-ca-trust.test.ts":"7687","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-capture-api.test.ts":"7688","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-capture-manager.test.ts":"7689","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-capture-mode.test.ts":"7690","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-commands.test.ts":"7691","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-dynamic-cert.test.ts":"7692","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-route.test.ts":"7693","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-setup.test.ts":"7694","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-tls-capture.test.ts":"7695","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-transparent-socket.test.ts":"7696","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/trae-executor.test.ts":"7697","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/trae-publiccred.test.ts":"7698","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/traffic-filter-live.test.ts":"7699","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/transform-stream-hwm.test.ts":"7700","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-ai-sdk-image-parts.test.ts":"7701","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-antigravity-to-openai.test.ts":"7702","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-claude-helper-thinking.test.ts":"7703","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-claude-to-gemini.test.ts":"7704","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-claude-to-openai-orphan-tool-4385.test.ts":"7705","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-claude-to-openai-strip-billing-header.test.ts":"7706","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-claude-to-openai.test.ts":"7707","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-format-detection-2949.test.ts":"7708","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-advanced-section.test.tsx":"7709","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-compression.test.tsx":"7710","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-concept-card.test.tsx":"7711","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-deeplink.test.ts":"7712","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-i18n-keys.test.ts":"7713","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-integration.test.tsx":"7714","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-monitor-tab.test.tsx":"7715","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-page-client.test.tsx":"7716","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-pipeline-view.test.tsx":"7717","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-raw-json-panel.test.tsx":"7718","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-result-narrated.test.tsx":"7719","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-session.test.ts":"7720","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-simple-controls.test.tsx":"7721","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-stream-transformer.test.tsx":"7722","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-test-bench.test.tsx":"7723","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-translate-tab.test.tsx":"7724","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-gemini-audio-input.test.ts":"7725","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-gemini-consecutive-role-2191.test.ts":"7726","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-gemini-schema-pattern-property.test.ts":"7727","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-gemini-thinking-budget-6943.test.ts":"7728","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-gemini-to-openai.test.ts":"7729","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-helper-branches.test.ts":"7730","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-helper-tool-description-coercion.test.ts":"7731","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-json-util.test.ts":"7732","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-mistral-strip-echo-fields.test.ts":"7733","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-responses-custom-tool-1007.test.ts":"7734","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-responses-empty-input-419.test.ts":"7735","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-responses-image-output-8459.test.ts":"7736","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-responses-req.test.ts":"7737","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-to-claude-empty-reasoning.test.ts":"7738","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-to-claude.test.ts":"7739","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-to-cursor.test.ts":"7740","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-to-gemini-defaults.test.ts":"7741","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-to-gemini-sse.test.ts":"7742","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-to-gemini.test.ts":"7743","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-to-kiro.test.ts":"7744","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-redacted-thinking-model-aware-4479.test.ts":"7745","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-request-openai-responses.test.ts":"7746","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-antigravity-thinking-boundary.test.ts":"7747","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-claude-to-openai.test.ts":"7748","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-cursor-to-openai.test.ts":"7749","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-empty-string-tool-arg.test.ts":"7750","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-gemini-to-claude.test.ts":"7751","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-gemini-to-openai.test.ts":"7752","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-kiro-to-openai.test.ts":"7753","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-openai-responses-completed-synthesis.test.ts":"7754","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-openai-responses-namespace-identity.test.ts":"7755","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-openai-responses-roundtrip.test.ts":"7756","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-openai-responses.test.ts":"7757","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-openai-to-antigravity.test.ts":"7758","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-openai-to-claude.test.ts":"7759","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-openai-to-gemini.test.ts":"7760","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-same-format-null-flush.test.ts":"7761","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-stream-transform.test.ts":"7762","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-strip-client-metadata-1157.test.ts":"7763","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-thinking-provider-compat-2043.test.ts":"7764","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-tool-call-shim.test.ts":"7765","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-toolcall-helper.test.ts":"7766","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-tools-anthropic-shape.test.ts":"7767","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-xiaomi-mimo-reasoning-replay-1321.test.ts":"7768","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tray-kill-orphan-pid.test.ts":"7769","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tray-systray-loader-4605.test.ts":"7770","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/triage-bugs-2026-08-02.test.ts":"7771","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tryBackedChat.test.ts":"7772","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ts7-executor-override-signatures.test.ts":"7773","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ts7-executor-result-contract.test.ts":"7774","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ts7-executor-shared-shapes.test.ts":"7775","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ts7-open-sse-type-fixes.test.ts":"7776","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tsconfig-ts7-readiness.test.ts":"7777","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tsx-runtime-transform-5757.test.ts":"7778","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/turbopack-cache-heal-6289.test.ts":"7779","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/turkishText.test.ts":"7780","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/types-barrel-model-cooldown.test.ts":"7781","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/AcpAgentsPage.test.tsx":"7782","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/AntigravityToolCard-model-aliases.test.tsx":"7783","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/ClaudeClassifierCompatToggle.test.tsx":"7784","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/ClaudeToolCard-manual-config-fallback.test.tsx":"7785","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/CliAgentsPage.test.tsx":"7786","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/CliCodePage.test.tsx":"7787","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/CliComparisonCard.test.tsx":"7788","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/CliConceptCard.test.tsx":"7789","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/CliToolCard.test.tsx":"7790","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/CompressionHub-patch-only.test.tsx":"7791","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/CoolingConnectionsPanel.test.tsx":"7792","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/HermesAgentToolCard-model-aliases.test.tsx":"7793","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/LocaleAutoDetect-refresh.test.tsx":"7794","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/OpenClawToolCard-manual-config-fallback.test.tsx":"7795","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/ProviderIcon-icon-url.test.tsx":"7796","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/ProxyRegistryManager-tdz-render.test.tsx":"7797","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/ToolDetailClient.test.tsx":"7798","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/activity-page-redirect.test.ts":"7799","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/add-api-key-modal-free-models.test.tsx":"7800","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/add-api-key-modal-unsupported-save-5565.test.tsx":"7801","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/add-api-key-modal-validation-error-5088.test.tsx":"7802","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/agent-bridge-page.test.tsx":"7803","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/agent-bridge-server-card-a11y.test.tsx":"7804","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/agent-card-risk-modal.test.tsx":"7805","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/agent-card.test.tsx":"7806","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/allocation-table.test.tsx":"7807","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/authz-cors-banner.test.tsx":"7808","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/burn-rate-chart.test.tsx":"7809","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/bypass-list-editor.test.tsx":"7810","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/cache-settings-tab-bounds-8219.test.tsx":"7811","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/cli-agents-detail-page.test.tsx":"7812","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/cli-code-detail-page.test.tsx":"7813","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/cli-tools-no-mitm-tab.test.tsx":"7814","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/combo-compression-mode-select.test.tsx":"7815","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/combo-defaults-fusion-5598.test.tsx":"7816","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/combo-form-deselect-handler.test.tsx":"7817","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/combo-form-select-all-handlers.test.tsx":"7818","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/combo-response-validation-editor.test.tsx":"7819","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/comboFlowModel-breakers.test.ts":"7820","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/comboFlowModel-cooldown.test.ts":"7821","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/comboFlowModel.test.ts":"7822","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/comboLiveStudio.test.tsx":"7823","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/combos-error-boundary.test.tsx":"7824","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/combos-page-smoke.test.tsx":"7825","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compareView.test.tsx":"7826","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compatible-provider-apikey-setup.test.tsx":"7827","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compliance-tab-actor-filter.test.tsx":"7828","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-combos-routing-mode-6760.test.tsx":"7829","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-exclusions-page.test.tsx":"7830","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-guidance-7530.test.tsx":"7831","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-log-namespace.test.tsx":"7832","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-pipeline-editor.test.tsx":"7833","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-replay-reducer.test.ts":"7834","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-replay-speed.test.tsx":"7835","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-settings-page.test.tsx":"7836","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-settings-tab-consolidation.test.tsx":"7837","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionAnnotation.test.tsx":"7838","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionCockpit.test.tsx":"7839","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionFlowModel.test.ts":"7840","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionHub-active-selector.test.tsx":"7841","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionHub-context-editing.test.tsx":"7842","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionHub.test.tsx":"7843","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionPanel.test.tsx":"7844","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionStylesPanel.test.tsx":"7845","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionStylesTile.test.tsx":"7846","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionUltraTier.test.tsx":"7847","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/confirm-delete-connection-7361.test.tsx":"7848","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/connection-row-proxy-name-7643.test.tsx":"7849","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/connection-row-token-badge-5836.test.tsx":"7850","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/connectionsSearchFilter.test.tsx":"7851","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/conversation-tab-separators.test.tsx":"7852","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/conversation-tab.test.tsx":"7853","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/costs-toplistcard-legacy-free-label-7272.test.tsx":"7854","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/dashboard-csrf-fetch.test.tsx":"7855","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/diffPane.test.tsx":"7856","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/edgeStyles.test.ts":"7857","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/edit-connection-modal-free-models.test.tsx":"7858","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/edit-memory-modal.test.tsx":"7859","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/embedding-source-selector.test.tsx":"7860","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/engine-pages.test.tsx":"7861","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/engine-tab.test.tsx":"7862","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/engineConfigForm.test.tsx":"7863","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/engineConfigPage.test.tsx":"7864","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/engineNode.test.tsx":"7865","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/evals-tab-smoke.test.tsx":"7866","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/fidelityGateToggle.test.tsx":"7867","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/fleetAggregation.test.ts":"7868","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/flowCanvas.test.tsx":"7869","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/free-budget-card.test.tsx":"7870","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/free-pool-tab.test.tsx":"7871","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/free-provider-rankings-page-authtype-6915.test.tsx":"7872","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/fuzzyDedupToggle.test.tsx":"7873","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/grok-device-oauth-modal.test.tsx":"7874","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/hermes-agent-config-loop.test.tsx":"7875","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/hermes-agent-opencode-free.test.tsx":"7876","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/highlightableProviderCard.test.tsx":"7877","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/historic-session-banner.test.tsx":"7878","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/home-page-client-dashboard-smoke-4615.test.tsx":"7879","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/home-provider-topology-section-4606.test.tsx":"7880","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/home-topology-hidden-4596.test.tsx":"7881","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/home-topology-last-used-node-color.test.tsx":"7882","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/home-update-error-render-5991.test.ts":"7883","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/home-update-step-warning-color-amber.test.ts":"7884","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/ionizerLane.test.tsx":"7885","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/issue-7845-log-detail-structured-error.test.tsx":"7886","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/kimiComboPresetCard.test.tsx":"7887","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/kimiSponsorBanner.test.tsx":"7888","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/live-compression-accumulate.test.ts":"7889","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/livePage.test.tsx":"7890","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/lobe-provider-icons-stepfun.test.tsx":"7891","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/logs-page-detail-modal-reopen-on-close.test.tsx":"7892","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/markdown-message.test.tsx":"7893","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/memories-tab.test.tsx":"7894","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/memory-page.test.tsx":"7895","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/mitm-proxy-error-boundary.test.tsx":"7896","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/mitm-proxy-moved-page.test.tsx":"7897","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-alias-edit.test.tsx":"7898","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-select-field-6540.test.tsx":"7899","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-select-modal-connection-filter.test.tsx":"7900","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-select-modal-deselect.test.tsx":"7901","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-select-modal-hidden-models-7156.test.tsx":"7902","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-select-modal-keep-open.test.tsx":"7903","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-select-modal-select-all.test.tsx":"7904","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-select-modal-zero-config.test.tsx":"7905","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-visibility-toolbar-free.test.tsx":"7906","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/namedCombos-active-badge.test.tsx":"7907","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/noauth-account-card.test.tsx":"7908","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/oauth-callback-postmessage-scope.test.tsx":"7909","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/omniglyphContextPage.test.tsx":"7910","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/onboarding-public-endpoint.test.tsx":"7911","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/open-sse-alias.test.tsx":"7912","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playView.test.tsx":"7913","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-api-tab.test.tsx":"7914","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-build-tab.test.tsx":"7915","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-chat-tab.test.tsx":"7916","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-compare-column.test.tsx":"7917","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-compare-tab.test.tsx":"7918","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-config-pane.test.tsx":"7919","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-export-modal.test.tsx":"7920","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-improve-prompt-button.test.tsx":"7921","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-model-search-4086.test.tsx":"7922","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-preset-picker.test.tsx":"7923","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-structured-output-editor.test.tsx":"7924","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-studio.test.tsx":"7925","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-tab.test.tsx":"7926","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-token-cost-counter.test.tsx":"7927","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-tools-builder.test.tsx":"7928","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/pool-card.test.tsx":"7929","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/previewToRunModel.test.tsx":"7930","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/provider-breaker-health-hook.test.tsx":"7931","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/provider-quota-widget-auto-refresh-label-4611.test.tsx":"7932","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/providerCardHandle.test.tsx":"7933","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/providerCardKimiPartnerAccent.test.tsx":"7934","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/providerCascadeNode.test.tsx":"7935","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/providerIconKimiLogomark.test.tsx":"7936","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/providerPageHeaderKimiPartnerLink.test.tsx":"7937","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/providerPageHighlightLogic.test.tsx":"7938","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/proxy-config-modal-saved-sort-default-7643.test.tsx":"7939","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/qdrant-config-card.test.tsx":"7940","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/quantumLockBadge.test.tsx":"7941","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/quick-start-api-keys-link-5695.test.ts":"7942","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/quota-cutoff-modal-draft-reset-7889.test.tsx":"7943","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/quota-share-delete-error.test.tsx":"7944","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/quota-share-page.test.tsx":"7945","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/request-logger-autorefresh-visibility-3972.test.tsx":"7946","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/rerank-config-card.test.tsx":"7947","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/riskGateBadge.test.tsx":"7948","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/rtkLearnDiscoverCard.test.tsx":"7949","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/rtkTomlImportCard.test.tsx":"7950","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/rtl-logical-classes.test.tsx":"7951","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/runtime-page-client.test.tsx":"7952","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/saliencyHeatmap.test.tsx":"7953","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/same-context-filter.test.tsx":"7954","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/search-tools-compare-tab.test.tsx":"7955","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/search-tools-concept-card.test.tsx":"7956","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/search-tools-provider-catalog.test.tsx":"7957","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/search-tools-scrape-result.test.tsx":"7958","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/search-tools-scrape-tab.test.tsx":"7959","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/search-tools-search-tab.test.tsx":"7960","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/search-tools-studio.test.tsx":"7961","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/session-recorder-bar.test.tsx":"7962","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/setup-wizard.test.tsx":"7963","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/sidebar-engine-items.test.ts":"7964","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/sidebar-proxy-expansion.test.tsx":"7965","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/stacked-allocation-bar.test.tsx":"7966","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/stats-tab.test.tsx":"7967","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/status-dot.test.tsx":"7968","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/studio-pages.test.tsx":"7969","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/studioTabs.test.tsx":"7970","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/system-storage-manual-vacuum.test.tsx":"7971","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/timeline-page-detail-deeplink.test.tsx":"7972","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/timing-i18n.test.tsx":"7973","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/toonEncoderTable.test.tsx":"7974","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/traffic-inspector-page.test.tsx":"7975","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-improve-prompt.test.tsx":"7976","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-local-storage-pool-migration.test.tsx":"7977","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-model-visibility-handlers-test-all.test.tsx":"7978","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-pools-usage-aggregate.test.tsx":"7979","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-presets.test.tsx":"7980","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-resizable-panels.test.tsx":"7981","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-session-recorder.test.tsx":"7982","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-stream-metrics.test.tsx":"7983","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-structured-output.test.tsx":"7984","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-system-proxy-exit-guard.test.tsx":"7985","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-tools-builder.test.tsx":"7986","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-traffic-stream.test.tsx":"7987","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-virtual-list.test.tsx":"7988","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/usePreviewCompression.test.tsx":"7989","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/useToolBatchStatuses.test.tsx":"7990","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/waterfallInspector.test.tsx":"7991","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/web-session-cookie-modal-size-6265.test.tsx":"7992","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui-value-drift-cosmetic.test.ts":"7993","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/universal-handoff.test.ts":"7994","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/unorouter-registry.test.ts":"7995","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/upstream-ca-test-route-3488.test.ts":"7996","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/upstream-error-passthrough.test.ts":"7997","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/upstream-headers-sanitize.test.ts":"7998","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/upstream-response-headers-strip.test.ts":"7999","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/upstream-retry-hints-toggle.test.ts":"8000","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/upstream-timeout-model-override.test.ts":"8001","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/url-sanitize.test.ts":"8002","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage/usageHistoryDedup.test.ts":"8003","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-account-analytics-route.test.ts":"8004","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-account-identity.test.ts":"8005","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-analytics-model-dedup-7535.test.ts":"8006","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-analytics-provider-display-name-7534.test.ts":"8007","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-analytics-route.test.ts":"8008","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-analytics.test.ts":"8009","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-antigravity-family-split.test.ts":"8010","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-bailian-split.test.ts":"8011","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-cache-health-route.test.ts":"8012","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-cache-health.test.ts":"8013","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-crof-split.test.ts":"8014","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-deepseek-split.test.ts":"8015","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-endpoint-dimension.test.ts":"8016","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-events.test.ts":"8017","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-extractor.test.ts":"8018","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-families-split.test.ts":"8019","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-github-split.test.ts":"8020","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-glm-family-split.test.ts":"8021","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-history-db.test.ts":"8022","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-history-reset.test.ts":"8023","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-migrations-legacy-archive-safety.test.ts":"8024","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-migrations.test.ts":"8025","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-minimax-family-split.test.ts":"8026","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-nanogpt-split.test.ts":"8027","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-opencode-split.test.ts":"8028","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-pending-sweep.test.ts":"8029","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-providers.test.ts":"8030","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-qoder-split.test.ts":"8031","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-quota-core-split.test.ts":"8032","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-quota-row-visibility.test.ts":"8033","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-scalars-split.test.ts":"8034","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-service-antigravity-credits.test.ts":"8035","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-service-deepseek.test.ts":"8036","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-service-hardening.test.ts":"8037","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-token-buffer.test.ts":"8038","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-utils.test.ts":"8039","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-vertex-split.test.ts":"8040","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-xai-split.test.ts":"8041","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-xiaomi-mimo-split.test.ts":"8042","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usagehistory-helpers-split.test.ts":"8043","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/useApiKey.test.ts":"8044","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v0-quota-fetcher.test.ts":"8045","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-chat-completions-content-type-6414.test.ts":"8046","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-combos-projection.test.ts":"8047","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-completions-model-header-match-6426.test.ts":"8048","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-models-aliases-included.test.ts":"8049","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-models-auth-leak-9320.test.ts":"8050","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-models-by-id-4674.test.ts":"8051","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-models-catalog-generation-race.test.ts":"8052","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-models-catalog-ttl.test.ts":"8053","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-models-concurrent-6408.test.ts":"8054","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-models-discovery-conformance.test.ts":"8055","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-ws-bridge.test.ts":"8056","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-ws-route.test.ts":"8057","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1beta-gemini-tool-calling-6222.test.ts":"8058","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1beta-models-route.test.ts":"8059","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v388-phase1-screen-fixes.test.ts":"8060","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v388-phase3-memory.test.ts":"8061","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v388-phase4-playground.test.ts":"8062","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v388-quota-share-usage-guard.test.ts":"8063","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validate-release-green.test.ts":"8064","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validate-response-quality.test.ts":"8065","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-audio-misc-split.test.ts":"8066","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-badge-unsupported-5442.test.ts":"8067","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-cloud-providers-split.test.ts":"8068","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-format-validators-split.test.ts":"8069","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-helpers-split.test.ts":"8070","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-kiro-split.test.ts":"8071","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-search-embedding-split.test.ts":"8072","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-specialty-inline-split.test.ts":"8073","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-web-cookie-split.test.ts":"8074","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-web-providers-split.test.ts":"8075","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/veoaifree-video-route.test.ts":"8076","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/veoaifree-web-executor.test.ts":"8077","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/verbosity-prompt-cache-key-provider-gate-7533.test.ts":"8078","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vercel-ai-gateway-media.test.ts":"8079","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vercel-deploy-relay-path-ssrf.test.ts":"8080","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vercel-deploy-sso-protection-check.test.ts":"8081","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vercel-gateway-models-fetch-4249.test.ts":"8082","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/verify-published.test.ts":"8083","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/verify-ratchet-bank.test.ts":"8084","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/version-compare-client-safe.test.ts":"8085","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/version-manager-request.test.ts":"8086","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/version-manager.test.ts":"8087","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/versionManager-orchestrator.test.ts":"8088","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vertex-express-apikey.test.ts":"8089","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vertex-functioncall-id-3440.test.ts":"8090","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vertex-media.test.ts":"8091","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vertex-oauth-scopes.test.ts":"8092","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vertex-spend-usage.test.ts":"8093","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vertex-tts.test.ts":"8094","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/video-deepinfra-6653.test.ts":"8095","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/video-generation-handler.test.ts":"8096","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/video-novita-6658.test.ts":"8097","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/video-xai-grok-imagine.test.ts":"8098","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/virtual-auto-combo.test.ts":"8099","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-bridge-cc-no-reroute.test.ts":"8100","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-bridge-env-override.test.ts":"8101","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-bridge-policy-reroute-6640.test.ts":"8102","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-bridge-preserve-on-failure-4012.test.ts":"8103","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-bridge-settings-schema.test.ts":"8104","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-compression-authoritative-capability-7237.test.ts":"8105","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-detection-consistency.test.ts":"8106","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-models-cc-fragments.test.ts":"8107","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/visionBridgeDefaults.test.ts":"8108","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vnc-session.test.ts":"8109","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vps-runner-variable-scope.test.ts":"8110","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-context-sanitizer.test.ts":"8111","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-responses-models.test.ts":"8112","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-shared-metadata.test.ts":"8113","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-token-in-url-warning.test.ts":"8114","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-token-routes-gpt56.test.ts":"8115","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-token-routes-responses-listing.test.ts":"8116","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-token-routes.test.ts":"8117","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-tokenized-request.test.ts":"8118","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/wafRateLimit.test.ts":"8119","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/waitForServer-tcp-fallback-6800.test.mjs":"8120","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-cookie-auth.test.ts":"8121","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-cookie-providers-new.test.ts":"8122","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-cookie-validation-fallback.test.ts":"8123","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-cookie-validation-false-positive-7857.test.ts":"8124","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-cookie-validation-proxy-7058.test.ts":"8125","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-fetch-dispatch.test.ts":"8126","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-fetch-handler.test.ts":"8127","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-fetch-interception.test.ts":"8128","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-fetch-quota-fallback.test.ts":"8129","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-runtime-env.test.ts":"8130","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-search-fallback-format.test.ts":"8131","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-search-tool-routing-4481.test.ts":"8132","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-session-credentials.test.ts":"8133","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-session-dedup-3368.test.ts":"8134","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-session-pool-health.test.ts":"8135","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-session-provider-link-6316.test.ts":"8136","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-tools-translation-2820.test.ts":"8137","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-tools-translation-3260.test.ts":"8138","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-tools-translation.test.ts":"8139","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webdav-server-3485.test.ts":"8140","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-abort-timer-cleanup.test.ts":"8141","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-deliveries-db.test.ts":"8142","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-discord-dispatcher.test.ts":"8143","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-dispatcher-routing.test.ts":"8144","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-edit-wizard-regression.test.ts":"8145","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-event-descriptions.test.ts":"8146","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-metadata-guard-3269.test.ts":"8147","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-private-optin-3269.test.ts":"8148","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-slack-dispatcher.test.ts":"8149","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-ssrf-guard.test.ts":"8150","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-telegram-dispatcher.test.ts":"8151","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webshare-sync.test.ts":"8152","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/wildcard-alias-settings-not-applied-7693.test.ts":"8153","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/wildcard-router.test.ts":"8154","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/windows-cert-identity-7275.test.ts":"8155","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/windows-hide-child-process-spawns-8131.test.ts":"8156","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/windows-process-stop-8045.test.ts":"8157","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/windsurf-devin-executors.test.ts":"8158","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/workflows-no-foreign-fork-publishers.test.ts":"8159","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-agent-tools-passthrough.test.ts":"8160","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-exact-cost-2453.test.ts":"8161","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-oauth-provider.test.ts":"8162","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-oauth-quota-fetcher.test.ts":"8163","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-oauth-test-supported.test.ts":"8164","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-oauth-usage.test.ts":"8165","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-translators.test.ts":"8166","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-usage.test.ts":"8167","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xiaomi-mimo-provider.test.ts":"8168","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xiaomi-mimo-selftrack-usage.test.ts":"8169","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xiaomi-providers-registry.test.ts":"8170","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zai-catalog-glm52.test.ts":"8171","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zai-execution-credentials-target-format-7364.test.ts":"8172","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zai-glm-max-tokens-clamp-7364.test.ts":"8173","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zai-glm-target-format-override.test.ts":"8174","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zai-validator.test.ts":"8175","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zai-web-chat-endpoint-8014-probe.test.ts":"8176","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zai-web-models-discovery-7678.test.ts":"8177","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zed-docker-detect.test.ts":"8178","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zed-hosted-think-close-marker.test.ts":"8179","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zed-import-utils.test.ts":"8180","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zed-oauth-provider.test.ts":"8181","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zed-provider.test.ts":"8182","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zenmux-free-provider.test.ts":"8183","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zenmux-models-fetch-4202.test.ts":"8184","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zenmux-provider.test.ts":"8185","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/vitest.config.ts":"8186","/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/vitest.mcp.config.ts":"8187"},{"size":235716,"mtime":1786084507588,"results":"8188","hashOfConfig":"8189"},{"size":2362,"mtime":1786084507589,"results":"8190","hashOfConfig":"8189"},{"size":10081,"mtime":1786084507589,"results":"8191","hashOfConfig":"8189"},{"size":5807,"mtime":1786084507589,"results":"8192","hashOfConfig":"8189"},{"size":2580,"mtime":1786084507589,"results":"8193","hashOfConfig":"8189"},{"size":4332,"mtime":1786084507590,"results":"8194","hashOfConfig":"8189"},{"size":26628,"mtime":1786084507590,"results":"8195","hashOfConfig":"8189"},{"size":63943,"mtime":1786084507591,"results":"8196","hashOfConfig":"8189"},{"size":2088,"mtime":1786084507591,"results":"8197","hashOfConfig":"8189"},{"size":3440,"mtime":1786084507591,"results":"8198","hashOfConfig":"8189"},{"size":41860,"mtime":1786084507592,"results":"8199","hashOfConfig":"8189"},{"size":12297,"mtime":1786084507592,"results":"8200","hashOfConfig":"8189"},{"size":11568,"mtime":1786084507592,"results":"8201","hashOfConfig":"8189"},{"size":16189,"mtime":1786084507592,"results":"8202","hashOfConfig":"8189"},{"size":8552,"mtime":1786084507592,"results":"8203","hashOfConfig":"8189"},{"size":14809,"mtime":1786084507593,"results":"8204","hashOfConfig":"8189"},{"size":5595,"mtime":1786084507593,"results":"8205","hashOfConfig":"8189"},{"size":3732,"mtime":1786084507593,"results":"8206","hashOfConfig":"8189"},{"size":6044,"mtime":1786084507593,"results":"8207","hashOfConfig":"8189"},{"size":11593,"mtime":1786084507593,"results":"8208","hashOfConfig":"8189"},{"size":2926,"mtime":1786084507593,"results":"8209","hashOfConfig":"8189"},{"size":3623,"mtime":1786084507593,"results":"8210","hashOfConfig":"8189"},{"size":552,"mtime":1786084507594,"results":"8211","hashOfConfig":"8189"},{"size":31889,"mtime":1786084507598,"results":"8212","hashOfConfig":"8189"},{"size":24874,"mtime":1786084507599,"results":"8213","hashOfConfig":"8189"},{"size":511,"mtime":1786084507599,"results":"8214","hashOfConfig":"8189"},{"size":7074,"mtime":1786084507907,"results":"8215","hashOfConfig":"8216"},{"size":5126,"mtime":1786084507907,"results":"8217","hashOfConfig":"8216"},{"size":4224,"mtime":1786084507908,"results":"8218","hashOfConfig":"8216"},{"size":4130,"mtime":1786084507908,"results":"8219","hashOfConfig":"8216"},{"size":2038,"mtime":1786084508924,"results":"8220","hashOfConfig":"8216"},{"size":2561,"mtime":1786084508924,"results":"8221","hashOfConfig":"8216"},{"size":7325,"mtime":1786084508925,"results":"8222","hashOfConfig":"8216"},{"size":2063,"mtime":1786084508925,"results":"8223","hashOfConfig":"8216"},{"size":664,"mtime":1786084508925,"results":"8224","hashOfConfig":"8216"},{"size":4448,"mtime":1786084508931,"results":"8225","hashOfConfig":"8216"},{"size":2678,"mtime":1786084508936,"results":"8226","hashOfConfig":"8216"},{"size":3039,"mtime":1786084508940,"results":"8227","hashOfConfig":"8216"},{"size":988,"mtime":1786084508943,"results":"8228","hashOfConfig":"8216"},{"size":26140,"mtime":1786084508994,"results":"8229","hashOfConfig":"8216"},{"size":4827,"mtime":1786084508997,"results":"8230","hashOfConfig":"8231"},{"size":6213,"mtime":1786084508998,"results":"8232","hashOfConfig":"8231"},{"size":8114,"mtime":1786084508999,"results":"8233","hashOfConfig":"8231"},{"size":1214,"mtime":1786084509000,"results":"8234","hashOfConfig":"8231"},{"size":22169,"mtime":1786084509003,"results":"8235","hashOfConfig":"8231"},{"size":2943,"mtime":1786084509006,"results":"8236","hashOfConfig":"8231"},{"size":7336,"mtime":1786084509007,"results":"8237","hashOfConfig":"8231"},{"size":914,"mtime":1786084509008,"results":"8238","hashOfConfig":"8231"},{"size":1391,"mtime":1786084509009,"results":"8239","hashOfConfig":"8231"},{"size":10109,"mtime":1786084509012,"results":"8240","hashOfConfig":"8231"},{"size":2021,"mtime":1786084509013,"results":"8241","hashOfConfig":"8231"},{"size":4377,"mtime":1786084509014,"results":"8242","hashOfConfig":"8231"},{"size":11987,"mtime":1786084509017,"results":"8243","hashOfConfig":"8231"},{"size":3183,"mtime":1786084509018,"results":"8244","hashOfConfig":"8231"},{"size":13827,"mtime":1786084509021,"results":"8245","hashOfConfig":"8231"},{"size":6705,"mtime":1786084509022,"results":"8246","hashOfConfig":"8231"},{"size":4065,"mtime":1786084509023,"results":"8247","hashOfConfig":"8231"},{"size":2356,"mtime":1786084509024,"results":"8248","hashOfConfig":"8231"},{"size":2472,"mtime":1786084509025,"results":"8249","hashOfConfig":"8231"},{"size":19955,"mtime":1786084509026,"results":"8250","hashOfConfig":"8231"},{"size":8416,"mtime":1786084509027,"results":"8251","hashOfConfig":"8231"},{"size":105734,"mtime":1786084509031,"results":"8252","hashOfConfig":"8231"},{"size":5254,"mtime":1786084509032,"results":"8253","hashOfConfig":"8231"},{"size":3346,"mtime":1786084509032,"results":"8254","hashOfConfig":"8231"},{"size":14748,"mtime":1786084509033,"results":"8255","hashOfConfig":"8231"},{"size":4519,"mtime":1786084509034,"results":"8256","hashOfConfig":"8231"},{"size":34636,"mtime":1786084509038,"results":"8257","hashOfConfig":"8231"},{"size":728,"mtime":1786084509040,"results":"8258","hashOfConfig":"8231"},{"size":2958,"mtime":1786084509042,"results":"8259","hashOfConfig":"8231"},{"size":2411,"mtime":1786084509044,"results":"8260","hashOfConfig":"8231"},{"size":2958,"mtime":1786084509048,"results":"8261","hashOfConfig":"8231"},{"size":1371,"mtime":1786084509049,"results":"8262","hashOfConfig":"8231"},{"size":2064,"mtime":1786084509050,"results":"8263","hashOfConfig":"8231"},{"size":602,"mtime":1786084509050,"results":"8264","hashOfConfig":"8231"},{"size":11444,"mtime":1786084509052,"results":"8265","hashOfConfig":"8231"},{"size":2791,"mtime":1786084509054,"results":"8266","hashOfConfig":"8231"},{"size":6003,"mtime":1786084509056,"results":"8267","hashOfConfig":"8231"},{"size":11733,"mtime":1786084509059,"results":"8268","hashOfConfig":"8231"},{"size":6299,"mtime":1786084509063,"results":"8269","hashOfConfig":"8231"},{"size":1027,"mtime":1786084509065,"results":"8270","hashOfConfig":"8231"},{"size":1035,"mtime":1786084509066,"results":"8271","hashOfConfig":"8231"},{"size":10438,"mtime":1786084509085,"results":"8272","hashOfConfig":"8231"},{"size":1275,"mtime":1786084509087,"results":"8273","hashOfConfig":"8231"},{"size":21965,"mtime":1786084509089,"results":"8274","hashOfConfig":"8231"},{"size":877,"mtime":1786084509091,"results":"8275","hashOfConfig":"8231"},{"size":1416,"mtime":1786084509092,"results":"8276","hashOfConfig":"8231"},{"size":725,"mtime":1786084509093,"results":"8277","hashOfConfig":"8231"},{"size":828,"mtime":1786084509094,"results":"8278","hashOfConfig":"8231"},{"size":388,"mtime":1786084509094,"results":"8279","hashOfConfig":"8231"},{"size":2950,"mtime":1786084509095,"results":"8280","hashOfConfig":"8231"},{"size":858,"mtime":1786084509096,"results":"8281","hashOfConfig":"8231"},{"size":1529,"mtime":1786084509097,"results":"8282","hashOfConfig":"8231"},{"size":1022,"mtime":1786084509097,"results":"8283","hashOfConfig":"8231"},{"size":519,"mtime":1786084509098,"results":"8284","hashOfConfig":"8231"},{"size":1211,"mtime":1786084509099,"results":"8285","hashOfConfig":"8231"},{"size":988,"mtime":1786084509099,"results":"8286","hashOfConfig":"8231"},{"size":2067,"mtime":1786084509101,"results":"8287","hashOfConfig":"8231"},{"size":859,"mtime":1786084509102,"results":"8288","hashOfConfig":"8231"},{"size":391,"mtime":1786084509102,"results":"8289","hashOfConfig":"8231"},{"size":1471,"mtime":1786084509103,"results":"8290","hashOfConfig":"8231"},{"size":3433,"mtime":1786084509103,"results":"8291","hashOfConfig":"8231"},{"size":355,"mtime":1786084509104,"results":"8292","hashOfConfig":"8231"},{"size":856,"mtime":1786084509104,"results":"8293","hashOfConfig":"8231"},{"size":1694,"mtime":1786084509104,"results":"8294","hashOfConfig":"8231"},{"size":1706,"mtime":1786084509105,"results":"8295","hashOfConfig":"8231"},{"size":401,"mtime":1786084509106,"results":"8296","hashOfConfig":"8231"},{"size":2185,"mtime":1786084509106,"results":"8297","hashOfConfig":"8231"},{"size":1238,"mtime":1786084509107,"results":"8298","hashOfConfig":"8231"},{"size":912,"mtime":1786084509107,"results":"8299","hashOfConfig":"8231"},{"size":723,"mtime":1786084509108,"results":"8300","hashOfConfig":"8231"},{"size":1676,"mtime":1786084509108,"results":"8301","hashOfConfig":"8231"},{"size":810,"mtime":1786084509109,"results":"8302","hashOfConfig":"8231"},{"size":748,"mtime":1786084509109,"results":"8303","hashOfConfig":"8231"},{"size":452,"mtime":1786084509110,"results":"8304","hashOfConfig":"8231"},{"size":440,"mtime":1786084509110,"results":"8305","hashOfConfig":"8231"},{"size":994,"mtime":1786084509111,"results":"8306","hashOfConfig":"8231"},{"size":1680,"mtime":1786084509111,"results":"8307","hashOfConfig":"8231"},{"size":6854,"mtime":1786084509112,"results":"8308","hashOfConfig":"8231"},{"size":400,"mtime":1786084509112,"results":"8309","hashOfConfig":"8231"},{"size":411,"mtime":1786084509113,"results":"8310","hashOfConfig":"8231"},{"size":350,"mtime":1786084509113,"results":"8311","hashOfConfig":"8231"},{"size":3276,"mtime":1786084509114,"results":"8312","hashOfConfig":"8231"},{"size":1137,"mtime":1786084509114,"results":"8313","hashOfConfig":"8231"},{"size":4263,"mtime":1786084509114,"results":"8314","hashOfConfig":"8231"},{"size":4351,"mtime":1786084509115,"results":"8315","hashOfConfig":"8231"},{"size":1463,"mtime":1786084509115,"results":"8316","hashOfConfig":"8231"},{"size":546,"mtime":1786084509115,"results":"8317","hashOfConfig":"8231"},{"size":3894,"mtime":1786084509116,"results":"8318","hashOfConfig":"8231"},{"size":409,"mtime":1786084509116,"results":"8319","hashOfConfig":"8231"},{"size":5881,"mtime":1786084509116,"results":"8320","hashOfConfig":"8231"},{"size":1384,"mtime":1786084509117,"results":"8321","hashOfConfig":"8231"},{"size":3965,"mtime":1786084509117,"results":"8322","hashOfConfig":"8231"},{"size":788,"mtime":1786084509117,"results":"8323","hashOfConfig":"8231"},{"size":558,"mtime":1786084509118,"results":"8324","hashOfConfig":"8231"},{"size":355,"mtime":1786084509118,"results":"8325","hashOfConfig":"8231"},{"size":1850,"mtime":1786084509118,"results":"8326","hashOfConfig":"8231"},{"size":9041,"mtime":1786084509119,"results":"8327","hashOfConfig":"8231"},{"size":895,"mtime":1786084509119,"results":"8328","hashOfConfig":"8231"},{"size":433,"mtime":1786084509119,"results":"8329","hashOfConfig":"8231"},{"size":413,"mtime":1786084509120,"results":"8330","hashOfConfig":"8231"},{"size":471,"mtime":1786084509120,"results":"8331","hashOfConfig":"8231"},{"size":1842,"mtime":1786084509121,"results":"8332","hashOfConfig":"8231"},{"size":5914,"mtime":1786084509122,"results":"8333","hashOfConfig":"8231"},{"size":418,"mtime":1786084509121,"results":"8334","hashOfConfig":"8231"},{"size":682,"mtime":1786084509121,"results":"8335","hashOfConfig":"8231"},{"size":457,"mtime":1786084509123,"results":"8336","hashOfConfig":"8231"},{"size":319,"mtime":1786084509123,"results":"8337","hashOfConfig":"8231"},{"size":421,"mtime":1786084509123,"results":"8338","hashOfConfig":"8231"},{"size":1408,"mtime":1786084509124,"results":"8339","hashOfConfig":"8231"},{"size":1317,"mtime":1786084509124,"results":"8340","hashOfConfig":"8231"},{"size":435,"mtime":1786084509124,"results":"8341","hashOfConfig":"8231"},{"size":857,"mtime":1786084509125,"results":"8342","hashOfConfig":"8231"},{"size":416,"mtime":1786084509125,"results":"8343","hashOfConfig":"8231"},{"size":1846,"mtime":1786084509126,"results":"8344","hashOfConfig":"8231"},{"size":419,"mtime":1786084509126,"results":"8345","hashOfConfig":"8231"},{"size":427,"mtime":1786084509127,"results":"8346","hashOfConfig":"8231"},{"size":647,"mtime":1786084509127,"results":"8347","hashOfConfig":"8231"},{"size":1169,"mtime":1786084509127,"results":"8348","hashOfConfig":"8231"},{"size":1133,"mtime":1786084509128,"results":"8349","hashOfConfig":"8231"},{"size":629,"mtime":1786084509128,"results":"8350","hashOfConfig":"8231"},{"size":1194,"mtime":1786084509129,"results":"8351","hashOfConfig":"8231"},{"size":835,"mtime":1786084509129,"results":"8352","hashOfConfig":"8231"},{"size":657,"mtime":1786084509130,"results":"8353","hashOfConfig":"8231"},{"size":802,"mtime":1786084509131,"results":"8354","hashOfConfig":"8231"},{"size":800,"mtime":1786084509131,"results":"8355","hashOfConfig":"8231"},{"size":918,"mtime":1786084509131,"results":"8356","hashOfConfig":"8231"},{"size":731,"mtime":1786084509131,"results":"8357","hashOfConfig":"8231"},{"size":781,"mtime":1786084509132,"results":"8358","hashOfConfig":"8231"},{"size":405,"mtime":1786084509132,"results":"8359","hashOfConfig":"8231"},{"size":1574,"mtime":1786084509132,"results":"8360","hashOfConfig":"8231"},{"size":1780,"mtime":1786084509133,"results":"8361","hashOfConfig":"8231"},{"size":542,"mtime":1786084509133,"results":"8362","hashOfConfig":"8231"},{"size":4860,"mtime":1786084509133,"results":"8363","hashOfConfig":"8231"},{"size":400,"mtime":1786084509133,"results":"8364","hashOfConfig":"8231"},{"size":6044,"mtime":1786084509134,"results":"8365","hashOfConfig":"8231"},{"size":4840,"mtime":1786084509134,"results":"8366","hashOfConfig":"8231"},{"size":502,"mtime":1786084509134,"results":"8367","hashOfConfig":"8231"},{"size":1278,"mtime":1786084509135,"results":"8368","hashOfConfig":"8231"},{"size":609,"mtime":1786084509135,"results":"8369","hashOfConfig":"8231"},{"size":562,"mtime":1786084509135,"results":"8370","hashOfConfig":"8231"},{"size":559,"mtime":1786084509136,"results":"8371","hashOfConfig":"8231"},{"size":510,"mtime":1786084509136,"results":"8372","hashOfConfig":"8231"},{"size":523,"mtime":1786084509136,"results":"8373","hashOfConfig":"8231"},{"size":1491,"mtime":1786084509137,"results":"8374","hashOfConfig":"8231"},{"size":619,"mtime":1786084509137,"results":"8375","hashOfConfig":"8231"},{"size":902,"mtime":1786084509138,"results":"8376","hashOfConfig":"8231"},{"size":638,"mtime":1786084509138,"results":"8377","hashOfConfig":"8231"},{"size":373,"mtime":1786084509138,"results":"8378","hashOfConfig":"8231"},{"size":391,"mtime":1786084509139,"results":"8379","hashOfConfig":"8231"},{"size":400,"mtime":1786084509139,"results":"8380","hashOfConfig":"8231"},{"size":3795,"mtime":1786084509141,"results":"8381","hashOfConfig":"8231"},{"size":756,"mtime":1786084509145,"results":"8382","hashOfConfig":"8231"},{"size":1021,"mtime":1786084509149,"results":"8383","hashOfConfig":"8231"},{"size":830,"mtime":1786084509152,"results":"8384","hashOfConfig":"8231"},{"size":369,"mtime":1786084509155,"results":"8385","hashOfConfig":"8231"},{"size":1171,"mtime":1786084509158,"results":"8386","hashOfConfig":"8231"},{"size":438,"mtime":1786084509160,"results":"8387","hashOfConfig":"8231"},{"size":416,"mtime":1786084509162,"results":"8388","hashOfConfig":"8231"},{"size":1784,"mtime":1786084509166,"results":"8389","hashOfConfig":"8231"},{"size":671,"mtime":1786084509169,"results":"8390","hashOfConfig":"8231"},{"size":366,"mtime":1786084509171,"results":"8391","hashOfConfig":"8231"},{"size":3400,"mtime":1786084509173,"results":"8392","hashOfConfig":"8231"},{"size":1046,"mtime":1786084509174,"results":"8393","hashOfConfig":"8231"},{"size":2996,"mtime":1786084509175,"results":"8394","hashOfConfig":"8231"},{"size":828,"mtime":1786084509176,"results":"8395","hashOfConfig":"8231"},{"size":2004,"mtime":1786084509179,"results":"8396","hashOfConfig":"8231"},{"size":1759,"mtime":1786084509187,"results":"8397","hashOfConfig":"8231"},{"size":2784,"mtime":1786084509189,"results":"8398","hashOfConfig":"8231"},{"size":269,"mtime":1786084509183,"results":"8399","hashOfConfig":"8231"},{"size":523,"mtime":1786084509191,"results":"8400","hashOfConfig":"8231"},{"size":1013,"mtime":1786084509194,"results":"8401","hashOfConfig":"8231"},{"size":2316,"mtime":1786084509196,"results":"8402","hashOfConfig":"8231"},{"size":2424,"mtime":1786084509200,"results":"8403","hashOfConfig":"8231"},{"size":402,"mtime":1786084509202,"results":"8404","hashOfConfig":"8231"},{"size":373,"mtime":1786084509205,"results":"8405","hashOfConfig":"8231"},{"size":782,"mtime":1786084509208,"results":"8406","hashOfConfig":"8231"},{"size":401,"mtime":1786084509212,"results":"8407","hashOfConfig":"8231"},{"size":466,"mtime":1786084509215,"results":"8408","hashOfConfig":"8231"},{"size":793,"mtime":1786084509217,"results":"8409","hashOfConfig":"8231"},{"size":411,"mtime":1786084509220,"results":"8410","hashOfConfig":"8231"},{"size":20220,"mtime":1786084509227,"results":"8411","hashOfConfig":"8231"},{"size":568,"mtime":1786084509229,"results":"8412","hashOfConfig":"8231"},{"size":874,"mtime":1786084509231,"results":"8413","hashOfConfig":"8231"},{"size":404,"mtime":1786084509233,"results":"8414","hashOfConfig":"8231"},{"size":410,"mtime":1786084509236,"results":"8415","hashOfConfig":"8231"},{"size":589,"mtime":1786084509237,"results":"8416","hashOfConfig":"8231"},{"size":1099,"mtime":1786084509239,"results":"8417","hashOfConfig":"8231"},{"size":1002,"mtime":1786084509241,"results":"8418","hashOfConfig":"8231"},{"size":953,"mtime":1786084509244,"results":"8419","hashOfConfig":"8231"},{"size":592,"mtime":1786084509247,"results":"8420","hashOfConfig":"8231"},{"size":354,"mtime":1786084509251,"results":"8421","hashOfConfig":"8231"},{"size":1261,"mtime":1786084509254,"results":"8422","hashOfConfig":"8231"},{"size":654,"mtime":1786084509258,"results":"8423","hashOfConfig":"8231"},{"size":2264,"mtime":1786084509261,"results":"8424","hashOfConfig":"8231"},{"size":389,"mtime":1786084509263,"results":"8425","hashOfConfig":"8231"},{"size":615,"mtime":1786084509265,"results":"8426","hashOfConfig":"8231"},{"size":448,"mtime":1786084509268,"results":"8427","hashOfConfig":"8231"},{"size":851,"mtime":1786084509271,"results":"8428","hashOfConfig":"8231"},{"size":1717,"mtime":1786084509274,"results":"8429","hashOfConfig":"8231"},{"size":405,"mtime":1786084509276,"results":"8430","hashOfConfig":"8231"},{"size":694,"mtime":1786084509277,"results":"8431","hashOfConfig":"8231"},{"size":962,"mtime":1786084509279,"results":"8432","hashOfConfig":"8231"},{"size":463,"mtime":1786084509280,"results":"8433","hashOfConfig":"8231"},{"size":5964,"mtime":1786084509282,"results":"8434","hashOfConfig":"8231"},{"size":401,"mtime":1786084509283,"results":"8435","hashOfConfig":"8231"},{"size":631,"mtime":1786084509285,"results":"8436","hashOfConfig":"8231"},{"size":6608,"mtime":1786084509286,"results":"8437","hashOfConfig":"8231"},{"size":1445,"mtime":1786084509287,"results":"8438","hashOfConfig":"8231"},{"size":1129,"mtime":1786084509288,"results":"8439","hashOfConfig":"8231"},{"size":2292,"mtime":1786084509291,"results":"8440","hashOfConfig":"8231"},{"size":6477,"mtime":1786084509295,"results":"8441","hashOfConfig":"8231"},{"size":1627,"mtime":1786084509297,"results":"8442","hashOfConfig":"8231"},{"size":5360,"mtime":1786084509300,"results":"8443","hashOfConfig":"8231"},{"size":495,"mtime":1786084509301,"results":"8444","hashOfConfig":"8231"},{"size":1623,"mtime":1786084509303,"results":"8445","hashOfConfig":"8231"},{"size":2478,"mtime":1786084509305,"results":"8446","hashOfConfig":"8231"},{"size":964,"mtime":1786084509306,"results":"8447","hashOfConfig":"8231"},{"size":658,"mtime":1786084509309,"results":"8448","hashOfConfig":"8231"},{"size":1273,"mtime":1786084509313,"results":"8449","hashOfConfig":"8231"},{"size":1804,"mtime":1786084509316,"results":"8450","hashOfConfig":"8231"},{"size":445,"mtime":1786084509319,"results":"8451","hashOfConfig":"8231"},{"size":3809,"mtime":1786084509321,"results":"8452","hashOfConfig":"8231"},{"size":3083,"mtime":1786084509322,"results":"8453","hashOfConfig":"8231"},{"size":414,"mtime":1786084509326,"results":"8454","hashOfConfig":"8231"},{"size":736,"mtime":1786084509329,"results":"8455","hashOfConfig":"8231"},{"size":400,"mtime":1786084509332,"results":"8456","hashOfConfig":"8231"},{"size":3592,"mtime":1786084509334,"results":"8457","hashOfConfig":"8231"},{"size":587,"mtime":1786084509336,"results":"8458","hashOfConfig":"8231"},{"size":405,"mtime":1786084509337,"results":"8459","hashOfConfig":"8231"},{"size":1945,"mtime":1786084509338,"results":"8460","hashOfConfig":"8231"},{"size":1693,"mtime":1786084509348,"results":"8461","hashOfConfig":"8231"},{"size":1255,"mtime":1786084509345,"results":"8462","hashOfConfig":"8231"},{"size":1587,"mtime":1786084509341,"results":"8463","hashOfConfig":"8231"},{"size":1179,"mtime":1786084509350,"results":"8464","hashOfConfig":"8231"},{"size":405,"mtime":1786084509353,"results":"8465","hashOfConfig":"8231"},{"size":611,"mtime":1786084509354,"results":"8466","hashOfConfig":"8231"},{"size":407,"mtime":1786084509356,"results":"8467","hashOfConfig":"8231"},{"size":1713,"mtime":1786084509357,"results":"8468","hashOfConfig":"8231"},{"size":401,"mtime":1786084509358,"results":"8469","hashOfConfig":"8231"},{"size":441,"mtime":1786084509361,"results":"8470","hashOfConfig":"8231"},{"size":837,"mtime":1786084509364,"results":"8471","hashOfConfig":"8231"},{"size":1117,"mtime":1786084509366,"results":"8472","hashOfConfig":"8231"},{"size":1332,"mtime":1786084509369,"results":"8473","hashOfConfig":"8231"},{"size":811,"mtime":1786084509369,"results":"8474","hashOfConfig":"8231"},{"size":1237,"mtime":1786084509371,"results":"8475","hashOfConfig":"8231"},{"size":4790,"mtime":1786084509372,"results":"8476","hashOfConfig":"8231"},{"size":408,"mtime":1786084509373,"results":"8477","hashOfConfig":"8231"},{"size":1078,"mtime":1786084509374,"results":"8478","hashOfConfig":"8231"},{"size":2876,"mtime":1786084509375,"results":"8479","hashOfConfig":"8231"},{"size":838,"mtime":1786084509376,"results":"8480","hashOfConfig":"8231"},{"size":411,"mtime":1786084509377,"results":"8481","hashOfConfig":"8231"},{"size":543,"mtime":1786084509380,"results":"8482","hashOfConfig":"8231"},{"size":2200,"mtime":1786084509382,"results":"8483","hashOfConfig":"8231"},{"size":2295,"mtime":1786084509384,"results":"8484","hashOfConfig":"8231"},{"size":1215,"mtime":1786084509385,"results":"8485","hashOfConfig":"8231"},{"size":3355,"mtime":1786084509387,"results":"8486","hashOfConfig":"8231"},{"size":922,"mtime":1786084509388,"results":"8487","hashOfConfig":"8231"},{"size":1791,"mtime":1786084509389,"results":"8488","hashOfConfig":"8231"},{"size":841,"mtime":1786084509390,"results":"8489","hashOfConfig":"8231"},{"size":440,"mtime":1786084509391,"results":"8490","hashOfConfig":"8231"},{"size":335,"mtime":1786084509391,"results":"8491","hashOfConfig":"8231"},{"size":556,"mtime":1786084509392,"results":"8492","hashOfConfig":"8231"},{"size":415,"mtime":1786084509393,"results":"8493","hashOfConfig":"8231"},{"size":395,"mtime":1786084509395,"results":"8494","hashOfConfig":"8231"},{"size":395,"mtime":1786084509397,"results":"8495","hashOfConfig":"8231"},{"size":394,"mtime":1786084509398,"results":"8496","hashOfConfig":"8231"},{"size":442,"mtime":1786084509399,"results":"8497","hashOfConfig":"8231"},{"size":430,"mtime":1786084509401,"results":"8498","hashOfConfig":"8231"},{"size":1774,"mtime":1786084509402,"results":"8499","hashOfConfig":"8231"},{"size":854,"mtime":1786084509404,"results":"8500","hashOfConfig":"8231"},{"size":422,"mtime":1786084509408,"results":"8501","hashOfConfig":"8231"},{"size":598,"mtime":1786084509410,"results":"8502","hashOfConfig":"8231"},{"size":395,"mtime":1786084509412,"results":"8503","hashOfConfig":"8231"},{"size":8864,"mtime":1786084509414,"results":"8504","hashOfConfig":"8231"},{"size":442,"mtime":1786084509415,"results":"8505","hashOfConfig":"8231"},{"size":403,"mtime":1786084509418,"results":"8506","hashOfConfig":"8231"},{"size":1112,"mtime":1786084509423,"results":"8507","hashOfConfig":"8231"},{"size":739,"mtime":1786084509421,"results":"8508","hashOfConfig":"8231"},{"size":851,"mtime":1786084509426,"results":"8509","hashOfConfig":"8231"},{"size":1037,"mtime":1786084509425,"results":"8510","hashOfConfig":"8231"},{"size":329,"mtime":1786084509428,"results":"8511","hashOfConfig":"8231"},{"size":1136,"mtime":1786084509430,"results":"8512","hashOfConfig":"8231"},{"size":1198,"mtime":1786084509433,"results":"8513","hashOfConfig":"8231"},{"size":665,"mtime":1786084509431,"results":"8514","hashOfConfig":"8231"},{"size":1384,"mtime":1786084509434,"results":"8515","hashOfConfig":"8231"},{"size":2223,"mtime":1786084509436,"results":"8516","hashOfConfig":"8231"},{"size":1729,"mtime":1786084509435,"results":"8517","hashOfConfig":"8231"},{"size":25954,"mtime":1786084509437,"results":"8518","hashOfConfig":"8231"},{"size":4426,"mtime":1786084509438,"results":"8519","hashOfConfig":"8231"},{"size":7539,"mtime":1786084509439,"results":"8520","hashOfConfig":"8231"},{"size":1312,"mtime":1786084509439,"results":"8521","hashOfConfig":"8231"},{"size":1865,"mtime":1786084509441,"results":"8522","hashOfConfig":"8231"},{"size":9071,"mtime":1786084509443,"results":"8523","hashOfConfig":"8231"},{"size":2463,"mtime":1786084509445,"results":"8524","hashOfConfig":"8231"},{"size":8152,"mtime":1786084509446,"results":"8525","hashOfConfig":"8231"},{"size":13148,"mtime":1786084509447,"results":"8526","hashOfConfig":"8231"},{"size":1323,"mtime":1786084509448,"results":"8527","hashOfConfig":"8231"},{"size":18199,"mtime":1786084509451,"results":"8528","hashOfConfig":"8231"},{"size":1387,"mtime":1786084509451,"results":"8529","hashOfConfig":"8231"},{"size":24007,"mtime":1786084509460,"results":"8530","hashOfConfig":"8231"},{"size":3877,"mtime":1786084509460,"results":"8531","hashOfConfig":"8231"},{"size":6678,"mtime":1786084509461,"results":"8532","hashOfConfig":"8231"},{"size":6554,"mtime":1786084509463,"results":"8533","hashOfConfig":"8231"},{"size":58757,"mtime":1786084509458,"results":"8534","hashOfConfig":"8231"},{"size":941,"mtime":1786084509466,"results":"8535","hashOfConfig":"8231"},{"size":26114,"mtime":1786084509471,"results":"8536","hashOfConfig":"8231"},{"size":5287,"mtime":1786084509473,"results":"8537","hashOfConfig":"8231"},{"size":3072,"mtime":1786084509475,"results":"8538","hashOfConfig":"8231"},{"size":3389,"mtime":1786084509484,"results":"8539","hashOfConfig":"8231"},{"size":13872,"mtime":1786084509486,"results":"8540","hashOfConfig":"8231"},{"size":72444,"mtime":1786084509483,"results":"8541","hashOfConfig":"8231"},{"size":22657,"mtime":1786084509487,"results":"8542","hashOfConfig":"8231"},{"size":23016,"mtime":1786084509489,"results":"8543","hashOfConfig":"8231"},{"size":14021,"mtime":1786084509495,"results":"8544","hashOfConfig":"8231"},{"size":4308,"mtime":1786084509496,"results":"8545","hashOfConfig":"8231"},{"size":4782,"mtime":1786084509496,"results":"8546","hashOfConfig":"8231"},{"size":120733,"mtime":1786084509495,"results":"8547","hashOfConfig":"8231"},{"size":1275,"mtime":1786084509497,"results":"8548","hashOfConfig":"8231"},{"size":4520,"mtime":1786084509497,"results":"8549","hashOfConfig":"8231"},{"size":3108,"mtime":1786084509498,"results":"8550","hashOfConfig":"8231"},{"size":13051,"mtime":1786084509498,"results":"8551","hashOfConfig":"8231"},{"size":15825,"mtime":1786084509500,"results":"8552","hashOfConfig":"8231"},{"size":11652,"mtime":1786084509500,"results":"8553","hashOfConfig":"8231"},{"size":16003,"mtime":1786084509501,"results":"8554","hashOfConfig":"8231"},{"size":24313,"mtime":1786084509502,"results":"8555","hashOfConfig":"8231"},{"size":3157,"mtime":1786084509502,"results":"8556","hashOfConfig":"8231"},{"size":17079,"mtime":1786084509499,"results":"8557","hashOfConfig":"8231"},{"size":17409,"mtime":1786084509503,"results":"8558","hashOfConfig":"8231"},{"size":18751,"mtime":1786084509504,"results":"8559","hashOfConfig":"8231"},{"size":4167,"mtime":1786084509505,"results":"8560","hashOfConfig":"8231"},{"size":2139,"mtime":1786084509505,"results":"8561","hashOfConfig":"8231"},{"size":3321,"mtime":1786084509508,"results":"8562","hashOfConfig":"8231"},{"size":4491,"mtime":1786084509508,"results":"8563","hashOfConfig":"8231"},{"size":1364,"mtime":1786084509508,"results":"8564","hashOfConfig":"8231"},{"size":7065,"mtime":1786084509509,"results":"8565","hashOfConfig":"8231"},{"size":61267,"mtime":1786084509507,"results":"8566","hashOfConfig":"8231"},{"size":25680,"mtime":1786084509511,"results":"8567","hashOfConfig":"8231"},{"size":10780,"mtime":1786084509514,"results":"8568","hashOfConfig":"8231"},{"size":14695,"mtime":1786084509517,"results":"8569","hashOfConfig":"8231"},{"size":13634,"mtime":1786084509520,"results":"8570","hashOfConfig":"8231"},{"size":26658,"mtime":1786084509523,"results":"8571","hashOfConfig":"8231"},{"size":14535,"mtime":1786084509531,"results":"8572","hashOfConfig":"8231"},{"size":2465,"mtime":1786084509532,"results":"8573","hashOfConfig":"8231"},{"size":2937,"mtime":1786084509532,"results":"8574","hashOfConfig":"8231"},{"size":59476,"mtime":1786084509530,"results":"8575","hashOfConfig":"8231"},{"size":10939,"mtime":1786084509533,"results":"8576","hashOfConfig":"8231"},{"size":1383,"mtime":1786084509545,"results":"8577","hashOfConfig":"8231"},{"size":2297,"mtime":1786084509533,"results":"8578","hashOfConfig":"8231"},{"size":5995,"mtime":1786084509535,"results":"8579","hashOfConfig":"8231"},{"size":42051,"mtime":1786084509542,"results":"8580","hashOfConfig":"8231"},{"size":1945,"mtime":1786084509555,"results":"8581","hashOfConfig":"8231"},{"size":2412,"mtime":1786084509555,"results":"8582","hashOfConfig":"8231"},{"size":1119,"mtime":1786084509556,"results":"8583","hashOfConfig":"8231"},{"size":45636,"mtime":1786084509552,"results":"8584","hashOfConfig":"8231"},{"size":3021,"mtime":1786084509557,"results":"8585","hashOfConfig":"8231"},{"size":7559,"mtime":1786084509558,"results":"8586","hashOfConfig":"8231"},{"size":4141,"mtime":1786084509559,"results":"8587","hashOfConfig":"8231"},{"size":1189,"mtime":1786084509560,"results":"8588","hashOfConfig":"8231"},{"size":19031,"mtime":1786084509561,"results":"8589","hashOfConfig":"8231"},{"size":20515,"mtime":1786084509562,"results":"8590","hashOfConfig":"8231"},{"size":20756,"mtime":1786084509564,"results":"8591","hashOfConfig":"8231"},{"size":13743,"mtime":1786084509568,"results":"8592","hashOfConfig":"8231"},{"size":32042,"mtime":1786084509567,"results":"8593","hashOfConfig":"8231"},{"size":13160,"mtime":1786084509569,"results":"8594","hashOfConfig":"8231"},{"size":13066,"mtime":1786084509570,"results":"8595","hashOfConfig":"8231"},{"size":6504,"mtime":1786084509570,"results":"8596","hashOfConfig":"8231"},{"size":2244,"mtime":1786084509570,"results":"8597","hashOfConfig":"8231"},{"size":15859,"mtime":1786084509571,"results":"8598","hashOfConfig":"8231"},{"size":24622,"mtime":1786084509572,"results":"8599","hashOfConfig":"8231"},{"size":10689,"mtime":1786084509572,"results":"8600","hashOfConfig":"8231"},{"size":20281,"mtime":1786084509573,"results":"8601","hashOfConfig":"8231"},{"size":26645,"mtime":1786084509574,"results":"8602","hashOfConfig":"8231"},{"size":4588,"mtime":1786084509574,"results":"8603","hashOfConfig":"8231"},{"size":18904,"mtime":1786084509575,"results":"8604","hashOfConfig":"8231"},{"size":10861,"mtime":1786084509575,"results":"8605","hashOfConfig":"8231"},{"size":7309,"mtime":1786084509578,"results":"8606","hashOfConfig":"8231"},{"size":4477,"mtime":1786084509578,"results":"8607","hashOfConfig":"8231"},{"size":25817,"mtime":1786084509578,"results":"8608","hashOfConfig":"8231"},{"size":1503,"mtime":1786084509579,"results":"8609","hashOfConfig":"8231"},{"size":34318,"mtime":1786084509577,"results":"8610","hashOfConfig":"8231"},{"size":7721,"mtime":1786084509579,"results":"8611","hashOfConfig":"8231"},{"size":18661,"mtime":1786084509579,"results":"8612","hashOfConfig":"8231"},{"size":5610,"mtime":1786084509580,"results":"8613","hashOfConfig":"8231"},{"size":19964,"mtime":1786084509580,"results":"8614","hashOfConfig":"8231"},{"size":35098,"mtime":1786084509581,"results":"8615","hashOfConfig":"8231"},{"size":14325,"mtime":1786084509582,"results":"8616","hashOfConfig":"8231"},{"size":28121,"mtime":1786084509582,"results":"8617","hashOfConfig":"8231"},{"size":3850,"mtime":1786084509583,"results":"8618","hashOfConfig":"8231"},{"size":2780,"mtime":1786084509583,"results":"8619","hashOfConfig":"8231"},{"size":20958,"mtime":1786084509583,"results":"8620","hashOfConfig":"8231"},{"size":13665,"mtime":1786084509584,"results":"8621","hashOfConfig":"8231"},{"size":1856,"mtime":1786084509584,"results":"8622","hashOfConfig":"8231"},{"size":6251,"mtime":1786084509587,"results":"8623","hashOfConfig":"8231"},{"size":42596,"mtime":1786084509586,"results":"8624","hashOfConfig":"8231"},{"size":4468,"mtime":1786084509587,"results":"8625","hashOfConfig":"8231"},{"size":3303,"mtime":1786084509587,"results":"8626","hashOfConfig":"8231"},{"size":3688,"mtime":1786084509588,"results":"8627","hashOfConfig":"8231"},{"size":11084,"mtime":1786084509588,"results":"8628","hashOfConfig":"8231"},{"size":9173,"mtime":1786084509589,"results":"8629","hashOfConfig":"8231"},{"size":4091,"mtime":1786084509589,"results":"8630","hashOfConfig":"8231"},{"size":7149,"mtime":1786084509588,"results":"8631","hashOfConfig":"8231"},{"size":2494,"mtime":1786084509589,"results":"8632","hashOfConfig":"8231"},{"size":24022,"mtime":1786084509590,"results":"8633","hashOfConfig":"8231"},{"size":4304,"mtime":1786084509590,"results":"8634","hashOfConfig":"8231"},{"size":9855,"mtime":1786084509592,"results":"8635","hashOfConfig":"8231"},{"size":49903,"mtime":1786084509592,"results":"8636","hashOfConfig":"8231"},{"size":7607,"mtime":1786084509592,"results":"8637","hashOfConfig":"8231"},{"size":14710,"mtime":1786084509593,"results":"8638","hashOfConfig":"8231"},{"size":27716,"mtime":1786084509594,"results":"8639","hashOfConfig":"8231"},{"size":14193,"mtime":1786084509594,"results":"8640","hashOfConfig":"8231"},{"size":28194,"mtime":1786084509596,"results":"8641","hashOfConfig":"8231"},{"size":21742,"mtime":1786084509596,"results":"8642","hashOfConfig":"8231"},{"size":4997,"mtime":1786084509597,"results":"8643","hashOfConfig":"8231"},{"size":4053,"mtime":1786084509598,"results":"8644","hashOfConfig":"8231"},{"size":1937,"mtime":1786084509599,"results":"8645","hashOfConfig":"8231"},{"size":3533,"mtime":1786084509599,"results":"8646","hashOfConfig":"8231"},{"size":13702,"mtime":1786084509599,"results":"8647","hashOfConfig":"8231"},{"size":23487,"mtime":1786084509599,"results":"8648","hashOfConfig":"8231"},{"size":2054,"mtime":1786084509600,"results":"8649","hashOfConfig":"8231"},{"size":13167,"mtime":1786084509600,"results":"8650","hashOfConfig":"8231"},{"size":17922,"mtime":1786084509600,"results":"8651","hashOfConfig":"8231"},{"size":7186,"mtime":1786084509600,"results":"8652","hashOfConfig":"8231"},{"size":20777,"mtime":1786084509601,"results":"8653","hashOfConfig":"8231"},{"size":3400,"mtime":1786084509601,"results":"8654","hashOfConfig":"8231"},{"size":15345,"mtime":1786084509601,"results":"8655","hashOfConfig":"8231"},{"size":4136,"mtime":1786084509601,"results":"8656","hashOfConfig":"8231"},{"size":17947,"mtime":1786084509602,"results":"8657","hashOfConfig":"8231"},{"size":5891,"mtime":1786084509602,"results":"8658","hashOfConfig":"8231"},{"size":5361,"mtime":1786084509602,"results":"8659","hashOfConfig":"8231"},{"size":23126,"mtime":1786084509603,"results":"8660","hashOfConfig":"8231"},{"size":7884,"mtime":1786084509603,"results":"8661","hashOfConfig":"8231"},{"size":13486,"mtime":1786084509603,"results":"8662","hashOfConfig":"8231"},{"size":28296,"mtime":1786084509604,"results":"8663","hashOfConfig":"8231"},{"size":6091,"mtime":1786084509604,"results":"8664","hashOfConfig":"8231"},{"size":18661,"mtime":1786084509605,"results":"8665","hashOfConfig":"8231"},{"size":13865,"mtime":1786084509606,"results":"8666","hashOfConfig":"8231"},{"size":15467,"mtime":1786084509606,"results":"8667","hashOfConfig":"8231"},{"size":9884,"mtime":1786084509606,"results":"8668","hashOfConfig":"8231"},{"size":27761,"mtime":1786084509607,"results":"8669","hashOfConfig":"8231"},{"size":26251,"mtime":1786084509608,"results":"8670","hashOfConfig":"8231"},{"size":4344,"mtime":1786084509608,"results":"8671","hashOfConfig":"8231"},{"size":6194,"mtime":1786084509608,"results":"8672","hashOfConfig":"8231"},{"size":1295,"mtime":1786084509613,"results":"8673","hashOfConfig":"8231"},{"size":10361,"mtime":1786084509614,"results":"8674","hashOfConfig":"8231"},{"size":1884,"mtime":1786084509614,"results":"8675","hashOfConfig":"8231"},{"size":2421,"mtime":1786084509614,"results":"8676","hashOfConfig":"8231"},{"size":1818,"mtime":1786084509614,"results":"8677","hashOfConfig":"8231"},{"size":3567,"mtime":1786084509614,"results":"8678","hashOfConfig":"8231"},{"size":3990,"mtime":1786084509615,"results":"8679","hashOfConfig":"8231"},{"size":2888,"mtime":1786084509615,"results":"8680","hashOfConfig":"8231"},{"size":523,"mtime":1786084509615,"results":"8681","hashOfConfig":"8231"},{"size":2417,"mtime":1786084509615,"results":"8682","hashOfConfig":"8231"},{"size":1395,"mtime":1786084509615,"results":"8683","hashOfConfig":"8231"},{"size":5869,"mtime":1786084509615,"results":"8684","hashOfConfig":"8231"},{"size":5229,"mtime":1786084509615,"results":"8685","hashOfConfig":"8231"},{"size":731,"mtime":1786084509615,"results":"8686","hashOfConfig":"8231"},{"size":2534,"mtime":1786084509616,"results":"8687","hashOfConfig":"8231"},{"size":3066,"mtime":1786084509616,"results":"8688","hashOfConfig":"8231"},{"size":1635,"mtime":1786084509616,"results":"8689","hashOfConfig":"8231"},{"size":3326,"mtime":1786084509616,"results":"8690","hashOfConfig":"8231"},{"size":2922,"mtime":1786084509616,"results":"8691","hashOfConfig":"8231"},{"size":6310,"mtime":1786084509616,"results":"8692","hashOfConfig":"8231"},{"size":2311,"mtime":1786084509616,"results":"8693","hashOfConfig":"8231"},{"size":1587,"mtime":1786084509617,"results":"8694","hashOfConfig":"8231"},{"size":1322,"mtime":1786084509617,"results":"8695","hashOfConfig":"8231"},{"size":1173,"mtime":1786084509617,"results":"8696","hashOfConfig":"8231"},{"size":1707,"mtime":1786084509617,"results":"8697","hashOfConfig":"8231"},{"size":1097,"mtime":1786084509617,"results":"8698","hashOfConfig":"8231"},{"size":1126,"mtime":1786084509617,"results":"8699","hashOfConfig":"8231"},{"size":6556,"mtime":1786084509617,"results":"8700","hashOfConfig":"8231"},{"size":1365,"mtime":1786084509617,"results":"8701","hashOfConfig":"8231"},{"size":5280,"mtime":1786084509618,"results":"8702","hashOfConfig":"8231"},{"size":8113,"mtime":1786084509618,"results":"8703","hashOfConfig":"8231"},{"size":1684,"mtime":1786084509618,"results":"8704","hashOfConfig":"8231"},{"size":1059,"mtime":1786084509618,"results":"8705","hashOfConfig":"8231"},{"size":2777,"mtime":1786084509618,"results":"8706","hashOfConfig":"8231"},{"size":4214,"mtime":1786084509618,"results":"8707","hashOfConfig":"8231"},{"size":6102,"mtime":1786084509619,"results":"8708","hashOfConfig":"8231"},{"size":4819,"mtime":1786084509619,"results":"8709","hashOfConfig":"8231"},{"size":4008,"mtime":1786084509619,"results":"8710","hashOfConfig":"8231"},{"size":4711,"mtime":1786084509619,"results":"8711","hashOfConfig":"8231"},{"size":5582,"mtime":1786084509619,"results":"8712","hashOfConfig":"8231"},{"size":451,"mtime":1786084509619,"results":"8713","hashOfConfig":"8231"},{"size":5877,"mtime":1786084509620,"results":"8714","hashOfConfig":"8231"},{"size":1981,"mtime":1786084509620,"results":"8715","hashOfConfig":"8231"},{"size":5014,"mtime":1786084509620,"results":"8716","hashOfConfig":"8231"},{"size":7217,"mtime":1786084509620,"results":"8717","hashOfConfig":"8231"},{"size":3632,"mtime":1786084509620,"results":"8718","hashOfConfig":"8231"},{"size":2104,"mtime":1786084509620,"results":"8719","hashOfConfig":"8231"},{"size":5941,"mtime":1786084509621,"results":"8720","hashOfConfig":"8231"},{"size":9235,"mtime":1786084509621,"results":"8721","hashOfConfig":"8231"},{"size":3456,"mtime":1786084509621,"results":"8722","hashOfConfig":"8231"},{"size":2315,"mtime":1786084509621,"results":"8723","hashOfConfig":"8231"},{"size":1566,"mtime":1786084509622,"results":"8724","hashOfConfig":"8231"},{"size":1811,"mtime":1786084509622,"results":"8725","hashOfConfig":"8231"},{"size":1486,"mtime":1786084509622,"results":"8726","hashOfConfig":"8231"},{"size":4586,"mtime":1786084509622,"results":"8727","hashOfConfig":"8231"},{"size":2367,"mtime":1786084509622,"results":"8728","hashOfConfig":"8231"},{"size":8894,"mtime":1786084509622,"results":"8729","hashOfConfig":"8231"},{"size":2068,"mtime":1786084509623,"results":"8730","hashOfConfig":"8231"},{"size":3596,"mtime":1786084509623,"results":"8731","hashOfConfig":"8231"},{"size":2617,"mtime":1786084509623,"results":"8732","hashOfConfig":"8231"},{"size":2877,"mtime":1786084509623,"results":"8733","hashOfConfig":"8231"},{"size":929,"mtime":1786084509623,"results":"8734","hashOfConfig":"8231"},{"size":1102,"mtime":1786084509624,"results":"8735","hashOfConfig":"8231"},{"size":1788,"mtime":1786084509624,"results":"8736","hashOfConfig":"8231"},{"size":1230,"mtime":1786084509624,"results":"8737","hashOfConfig":"8231"},{"size":1438,"mtime":1786084509624,"results":"8738","hashOfConfig":"8231"},{"size":5192,"mtime":1786084509624,"results":"8739","hashOfConfig":"8231"},{"size":2047,"mtime":1786084509624,"results":"8740","hashOfConfig":"8231"},{"size":1663,"mtime":1786084509625,"results":"8741","hashOfConfig":"8231"},{"size":3399,"mtime":1786084509625,"results":"8742","hashOfConfig":"8231"},{"size":3121,"mtime":1786084509625,"results":"8743","hashOfConfig":"8231"},{"size":2492,"mtime":1786084509625,"results":"8744","hashOfConfig":"8231"},{"size":3016,"mtime":1786084509625,"results":"8745","hashOfConfig":"8231"},{"size":2678,"mtime":1786084509626,"results":"8746","hashOfConfig":"8231"},{"size":1427,"mtime":1786084509626,"results":"8747","hashOfConfig":"8231"},{"size":2285,"mtime":1786084509626,"results":"8748","hashOfConfig":"8231"},{"size":5728,"mtime":1786084509626,"results":"8749","hashOfConfig":"8231"},{"size":3584,"mtime":1786084509626,"results":"8750","hashOfConfig":"8231"},{"size":6648,"mtime":1786084509626,"results":"8751","hashOfConfig":"8231"},{"size":215136,"mtime":1786084509613,"results":"8752","hashOfConfig":"8231"},{"size":6618,"mtime":1786084509627,"results":"8753","hashOfConfig":"8231"},{"size":17607,"mtime":1786084509627,"results":"8754","hashOfConfig":"8231"},{"size":2924,"mtime":1786084509629,"results":"8755","hashOfConfig":"8231"},{"size":5806,"mtime":1786084509630,"results":"8756","hashOfConfig":"8231"},{"size":5793,"mtime":1786084509630,"results":"8757","hashOfConfig":"8231"},{"size":6197,"mtime":1786084509630,"results":"8758","hashOfConfig":"8231"},{"size":3552,"mtime":1786084509630,"results":"8759","hashOfConfig":"8231"},{"size":10435,"mtime":1786084509630,"results":"8760","hashOfConfig":"8231"},{"size":8604,"mtime":1786084509631,"results":"8761","hashOfConfig":"8231"},{"size":5028,"mtime":1786084509631,"results":"8762","hashOfConfig":"8231"},{"size":4042,"mtime":1786084509631,"results":"8763","hashOfConfig":"8231"},{"size":2693,"mtime":1786084509631,"results":"8764","hashOfConfig":"8231"},{"size":2891,"mtime":1786084509631,"results":"8765","hashOfConfig":"8231"},{"size":3091,"mtime":1786084509631,"results":"8766","hashOfConfig":"8231"},{"size":3870,"mtime":1786084509632,"results":"8767","hashOfConfig":"8231"},{"size":4626,"mtime":1786084509632,"results":"8768","hashOfConfig":"8231"},{"size":6195,"mtime":1786084509632,"results":"8769","hashOfConfig":"8231"},{"size":10501,"mtime":1786084509632,"results":"8770","hashOfConfig":"8231"},{"size":2923,"mtime":1786084509632,"results":"8771","hashOfConfig":"8231"},{"size":2584,"mtime":1786084509632,"results":"8772","hashOfConfig":"8231"},{"size":93442,"mtime":1786084509629,"results":"8773","hashOfConfig":"8231"},{"size":5363,"mtime":1786084509633,"results":"8774","hashOfConfig":"8231"},{"size":13149,"mtime":1786084509633,"results":"8775","hashOfConfig":"8231"},{"size":10863,"mtime":1786084509633,"results":"8776","hashOfConfig":"8231"},{"size":9088,"mtime":1786084509633,"results":"8777","hashOfConfig":"8231"},{"size":3396,"mtime":1786084509632,"results":"8778","hashOfConfig":"8231"},{"size":2483,"mtime":1786084509634,"results":"8779","hashOfConfig":"8231"},{"size":19797,"mtime":1786084509634,"results":"8780","hashOfConfig":"8231"},{"size":2362,"mtime":1786084509634,"results":"8781","hashOfConfig":"8231"},{"size":4017,"mtime":1786084509634,"results":"8782","hashOfConfig":"8231"},{"size":11796,"mtime":1786084509635,"results":"8783","hashOfConfig":"8231"},{"size":5498,"mtime":1786084509636,"results":"8784","hashOfConfig":"8231"},{"size":37888,"mtime":1786084509635,"results":"8785","hashOfConfig":"8231"},{"size":31375,"mtime":1786084509636,"results":"8786","hashOfConfig":"8231"},{"size":3673,"mtime":1786084509636,"results":"8787","hashOfConfig":"8231"},{"size":4684,"mtime":1786084509637,"results":"8788","hashOfConfig":"8231"},{"size":3444,"mtime":1786084509637,"results":"8789","hashOfConfig":"8231"},{"size":46690,"mtime":1786084509637,"results":"8790","hashOfConfig":"8231"},{"size":7246,"mtime":1786084509638,"results":"8791","hashOfConfig":"8231"},{"size":27986,"mtime":1786084509638,"results":"8792","hashOfConfig":"8231"},{"size":4640,"mtime":1786084509638,"results":"8793","hashOfConfig":"8231"},{"size":5153,"mtime":1786084509639,"results":"8794","hashOfConfig":"8231"},{"size":18714,"mtime":1786084509639,"results":"8795","hashOfConfig":"8231"},{"size":6224,"mtime":1786084509639,"results":"8796","hashOfConfig":"8231"},{"size":8819,"mtime":1786084509639,"results":"8797","hashOfConfig":"8231"},{"size":5057,"mtime":1786084509639,"results":"8798","hashOfConfig":"8231"},{"size":3604,"mtime":1786084509640,"results":"8799","hashOfConfig":"8231"},{"size":5118,"mtime":1786084509640,"results":"8800","hashOfConfig":"8231"},{"size":5318,"mtime":1786084509640,"results":"8801","hashOfConfig":"8231"},{"size":1899,"mtime":1786084509640,"results":"8802","hashOfConfig":"8231"},{"size":7259,"mtime":1786084509640,"results":"8803","hashOfConfig":"8231"},{"size":32051,"mtime":1786084509639,"results":"8804","hashOfConfig":"8231"},{"size":3687,"mtime":1786084509640,"results":"8805","hashOfConfig":"8231"},{"size":3945,"mtime":1786084509641,"results":"8806","hashOfConfig":"8231"},{"size":5417,"mtime":1786084509641,"results":"8807","hashOfConfig":"8808"},{"size":5865,"mtime":1786084509641,"results":"8809","hashOfConfig":"8231"},{"size":2768,"mtime":1786084509642,"results":"8810","hashOfConfig":"8231"},{"size":5633,"mtime":1786084509642,"results":"8811","hashOfConfig":"8231"},{"size":5246,"mtime":1786084509643,"results":"8812","hashOfConfig":"8231"},{"size":2208,"mtime":1786084509643,"results":"8813","hashOfConfig":"8231"},{"size":6475,"mtime":1786084509643,"results":"8814","hashOfConfig":"8231"},{"size":2732,"mtime":1786084509643,"results":"8815","hashOfConfig":"8231"},{"size":9676,"mtime":1786084509643,"results":"8816","hashOfConfig":"8231"},{"size":7513,"mtime":1786084509643,"results":"8817","hashOfConfig":"8231"},{"size":6080,"mtime":1786084509643,"results":"8818","hashOfConfig":"8231"},{"size":1913,"mtime":1786084509643,"results":"8819","hashOfConfig":"8231"},{"size":1930,"mtime":1786084509644,"results":"8820","hashOfConfig":"8231"},{"size":1002,"mtime":1786084509644,"results":"8821","hashOfConfig":"8231"},{"size":1100,"mtime":1786084509644,"results":"8822","hashOfConfig":"8231"},{"size":1042,"mtime":1786084509644,"results":"8823","hashOfConfig":"8231"},{"size":1490,"mtime":1786084509644,"results":"8824","hashOfConfig":"8231"},{"size":15032,"mtime":1786084509644,"results":"8825","hashOfConfig":"8231"},{"size":9508,"mtime":1786084509644,"results":"8826","hashOfConfig":"8231"},{"size":8631,"mtime":1786084509645,"results":"8827","hashOfConfig":"8231"},{"size":3195,"mtime":1786084509645,"results":"8828","hashOfConfig":"8231"},{"size":11018,"mtime":1786084509645,"results":"8829","hashOfConfig":"8231"},{"size":517,"mtime":1786084509645,"results":"8830","hashOfConfig":"8231"},{"size":4223,"mtime":1786084509645,"results":"8831","hashOfConfig":"8231"},{"size":4708,"mtime":1786084509645,"results":"8832","hashOfConfig":"8231"},{"size":5629,"mtime":1786084509645,"results":"8833","hashOfConfig":"8231"},{"size":3723,"mtime":1786084509646,"results":"8834","hashOfConfig":"8231"},{"size":6676,"mtime":1786084509646,"results":"8835","hashOfConfig":"8231"},{"size":2812,"mtime":1786084509646,"results":"8836","hashOfConfig":"8231"},{"size":3152,"mtime":1786084509646,"results":"8837","hashOfConfig":"8231"},{"size":1082,"mtime":1786084509646,"results":"8838","hashOfConfig":"8231"},{"size":1156,"mtime":1786084509646,"results":"8839","hashOfConfig":"8231"},{"size":47899,"mtime":1786084509647,"results":"8840","hashOfConfig":"8231"},{"size":3636,"mtime":1786084509647,"results":"8841","hashOfConfig":"8231"},{"size":51370,"mtime":1786084509648,"results":"8842","hashOfConfig":"8231"},{"size":9272,"mtime":1786084509648,"results":"8843","hashOfConfig":"8231"},{"size":1526,"mtime":1786084509648,"results":"8844","hashOfConfig":"8231"},{"size":3257,"mtime":1786084509648,"results":"8845","hashOfConfig":"8231"},{"size":629,"mtime":1786084509648,"results":"8846","hashOfConfig":"8231"},{"size":262,"mtime":1786084509648,"results":"8847","hashOfConfig":"8231"},{"size":1238,"mtime":1786084509648,"results":"8848","hashOfConfig":"8231"},{"size":2466,"mtime":1786084509649,"results":"8849","hashOfConfig":"8231"},{"size":3254,"mtime":1786084509649,"results":"8850","hashOfConfig":"8231"},{"size":39656,"mtime":1786084509650,"results":"8851","hashOfConfig":"8231"},{"size":3272,"mtime":1786084509650,"results":"8852","hashOfConfig":"8231"},{"size":23303,"mtime":1786084509650,"results":"8853","hashOfConfig":"8231"},{"size":5044,"mtime":1786084509651,"results":"8854","hashOfConfig":"8231"},{"size":5124,"mtime":1786084509651,"results":"8855","hashOfConfig":"8231"},{"size":2263,"mtime":1786084509651,"results":"8856","hashOfConfig":"8231"},{"size":4261,"mtime":1786084509651,"results":"8857","hashOfConfig":"8231"},{"size":4428,"mtime":1786084509652,"results":"8858","hashOfConfig":"8231"},{"size":15052,"mtime":1786084509652,"results":"8859","hashOfConfig":"8231"},{"size":12131,"mtime":1786084509652,"results":"8860","hashOfConfig":"8231"},{"size":7273,"mtime":1786084509652,"results":"8861","hashOfConfig":"8231"},{"size":7422,"mtime":1786084509653,"results":"8862","hashOfConfig":"8231"},{"size":3689,"mtime":1786084509653,"results":"8863","hashOfConfig":"8231"},{"size":4967,"mtime":1786084509654,"results":"8864","hashOfConfig":"8231"},{"size":3523,"mtime":1786084509654,"results":"8865","hashOfConfig":"8231"},{"size":10095,"mtime":1786084509654,"results":"8866","hashOfConfig":"8231"},{"size":1242,"mtime":1786084509654,"results":"8867","hashOfConfig":"8231"},{"size":3098,"mtime":1786084509654,"results":"8868","hashOfConfig":"8231"},{"size":4635,"mtime":1786084509654,"results":"8869","hashOfConfig":"8231"},{"size":8836,"mtime":1786084509655,"results":"8870","hashOfConfig":"8231"},{"size":11489,"mtime":1786084509655,"results":"8871","hashOfConfig":"8231"},{"size":4577,"mtime":1786084509655,"results":"8872","hashOfConfig":"8231"},{"size":1230,"mtime":1786084509656,"results":"8873","hashOfConfig":"8231"},{"size":5728,"mtime":1786084509656,"results":"8874","hashOfConfig":"8231"},{"size":2321,"mtime":1786084509657,"results":"8875","hashOfConfig":"8231"},{"size":3677,"mtime":1786084509657,"results":"8876","hashOfConfig":"8231"},{"size":77415,"mtime":1786084509656,"results":"8877","hashOfConfig":"8231"},{"size":2338,"mtime":1786084509657,"results":"8878","hashOfConfig":"8231"},{"size":10430,"mtime":1786086911035,"results":"8879","hashOfConfig":"8231"},{"size":5640,"mtime":1786084509657,"results":"8880","hashOfConfig":"8231"},{"size":5258,"mtime":1786084509657,"results":"8881","hashOfConfig":"8231"},{"size":20940,"mtime":1786084509658,"results":"8882","hashOfConfig":"8231"},{"size":3506,"mtime":1786084509658,"results":"8883","hashOfConfig":"8231"},{"size":926,"mtime":1786084509658,"results":"8884","hashOfConfig":"8231"},{"size":5860,"mtime":1786084509658,"results":"8885","hashOfConfig":"8231"},{"size":5794,"mtime":1786084509658,"results":"8886","hashOfConfig":"8231"},{"size":19423,"mtime":1786084509658,"results":"8887","hashOfConfig":"8231"},{"size":4798,"mtime":1786084509658,"results":"8888","hashOfConfig":"8231"},{"size":16686,"mtime":1786084509658,"results":"8889","hashOfConfig":"8231"},{"size":85140,"mtime":1786084509660,"results":"8890","hashOfConfig":"8231"},{"size":9422,"mtime":1786084509660,"results":"8891","hashOfConfig":"8231"},{"size":15071,"mtime":1786084509660,"results":"8892","hashOfConfig":"8231"},{"size":6340,"mtime":1786084509660,"results":"8893","hashOfConfig":"8231"},{"size":5543,"mtime":1786084509660,"results":"8894","hashOfConfig":"8231"},{"size":3038,"mtime":1786084509661,"results":"8895","hashOfConfig":"8231"},{"size":2375,"mtime":1786084509661,"results":"8896","hashOfConfig":"8231"},{"size":2361,"mtime":1786084509661,"results":"8897","hashOfConfig":"8231"},{"size":2715,"mtime":1786084509661,"results":"8898","hashOfConfig":"8231"},{"size":2670,"mtime":1786084509661,"results":"8899","hashOfConfig":"8231"},{"size":10031,"mtime":1786084509661,"results":"8900","hashOfConfig":"8231"},{"size":3310,"mtime":1786085706846,"results":"8901","hashOfConfig":"8231"},{"size":1904,"mtime":1786084509661,"results":"8902","hashOfConfig":"8231"},{"size":5409,"mtime":1786084509662,"results":"8903","hashOfConfig":"8231"},{"size":13120,"mtime":1786084509662,"results":"8904","hashOfConfig":"8231"},{"size":22984,"mtime":1786084509663,"results":"8905","hashOfConfig":"8231"},{"size":7051,"mtime":1786084509663,"results":"8906","hashOfConfig":"8231"},{"size":2088,"mtime":1786084509663,"results":"8907","hashOfConfig":"8231"},{"size":3855,"mtime":1786084509663,"results":"8908","hashOfConfig":"8231"},{"size":8010,"mtime":1786084509663,"results":"8909","hashOfConfig":"8231"},{"size":2629,"mtime":1786084509663,"results":"8910","hashOfConfig":"8231"},{"size":1998,"mtime":1786084509663,"results":"8911","hashOfConfig":"8231"},{"size":5870,"mtime":1786084509663,"results":"8912","hashOfConfig":"8231"},{"size":1705,"mtime":1786084509663,"results":"8913","hashOfConfig":"8231"},{"size":17872,"mtime":1786084509664,"results":"8914","hashOfConfig":"8231"},{"size":4748,"mtime":1786084509664,"results":"8915","hashOfConfig":"8231"},{"size":12052,"mtime":1786084509664,"results":"8916","hashOfConfig":"8231"},{"size":695,"mtime":1786084509664,"results":"8917","hashOfConfig":"8231"},{"size":3563,"mtime":1786084509664,"results":"8918","hashOfConfig":"8231"},{"size":3942,"mtime":1786084509665,"results":"8919","hashOfConfig":"8231"},{"size":1814,"mtime":1786084509665,"results":"8920","hashOfConfig":"8231"},{"size":3176,"mtime":1786084509665,"results":"8921","hashOfConfig":"8231"},{"size":16330,"mtime":1786084509665,"results":"8922","hashOfConfig":"8231"},{"size":4982,"mtime":1786084509665,"results":"8923","hashOfConfig":"8231"},{"size":296,"mtime":1786084509665,"results":"8924","hashOfConfig":"8231"},{"size":5460,"mtime":1786084509665,"results":"8925","hashOfConfig":"8231"},{"size":3418,"mtime":1786084509665,"results":"8926","hashOfConfig":"8231"},{"size":14366,"mtime":1786084509666,"results":"8927","hashOfConfig":"8231"},{"size":10385,"mtime":1786084509666,"results":"8928","hashOfConfig":"8231"},{"size":4795,"mtime":1786084509666,"results":"8929","hashOfConfig":"8231"},{"size":13121,"mtime":1786084509666,"results":"8930","hashOfConfig":"8231"},{"size":5118,"mtime":1786084509666,"results":"8931","hashOfConfig":"8231"},{"size":14543,"mtime":1786084509666,"results":"8932","hashOfConfig":"8231"},{"size":28553,"mtime":1786084509667,"results":"8933","hashOfConfig":"8231"},{"size":6545,"mtime":1786084509667,"results":"8934","hashOfConfig":"8231"},{"size":8930,"mtime":1786084509667,"results":"8935","hashOfConfig":"8231"},{"size":11850,"mtime":1786084509667,"results":"8936","hashOfConfig":"8231"},{"size":28085,"mtime":1786084509668,"results":"8937","hashOfConfig":"8231"},{"size":4773,"mtime":1786084509668,"results":"8938","hashOfConfig":"8231"},{"size":27174,"mtime":1786084509668,"results":"8939","hashOfConfig":"8231"},{"size":15884,"mtime":1786084509668,"results":"8940","hashOfConfig":"8231"},{"size":22412,"mtime":1786084509669,"results":"8941","hashOfConfig":"8231"},{"size":3704,"mtime":1786084509669,"results":"8942","hashOfConfig":"8231"},{"size":1211,"mtime":1786084509669,"results":"8943","hashOfConfig":"8231"},{"size":4900,"mtime":1786084509669,"results":"8944","hashOfConfig":"8231"},{"size":23044,"mtime":1786084509669,"results":"8945","hashOfConfig":"8231"},{"size":3970,"mtime":1786084509669,"results":"8946","hashOfConfig":"8231"},{"size":1531,"mtime":1786084509670,"results":"8947","hashOfConfig":"8231"},{"size":38600,"mtime":1786084509670,"results":"8948","hashOfConfig":"8231"},{"size":710,"mtime":1786084509670,"results":"8949","hashOfConfig":"8231"},{"size":978,"mtime":1786084509671,"results":"8950","hashOfConfig":"8231"},{"size":5093,"mtime":1786084509671,"results":"8951","hashOfConfig":"8231"},{"size":684,"mtime":1786084509671,"results":"8952","hashOfConfig":"8231"},{"size":1483,"mtime":1786084509671,"results":"8953","hashOfConfig":"8231"},{"size":4196,"mtime":1786084509671,"results":"8954","hashOfConfig":"8231"},{"size":14510,"mtime":1786084509671,"results":"8955","hashOfConfig":"8231"},{"size":3694,"mtime":1786084509672,"results":"8956","hashOfConfig":"8231"},{"size":23271,"mtime":1786084509672,"results":"8957","hashOfConfig":"8231"},{"size":5521,"mtime":1786084509672,"results":"8958","hashOfConfig":"8231"},{"size":1891,"mtime":1786084509672,"results":"8959","hashOfConfig":"8231"},{"size":6119,"mtime":1786084509672,"results":"8960","hashOfConfig":"8231"},{"size":5110,"mtime":1786084509672,"results":"8961","hashOfConfig":"8231"},{"size":1072,"mtime":1786084509672,"results":"8962","hashOfConfig":"8231"},{"size":2187,"mtime":1786084509672,"results":"8963","hashOfConfig":"8231"},{"size":2753,"mtime":1786084509673,"results":"8964","hashOfConfig":"8231"},{"size":20018,"mtime":1786084509673,"results":"8965","hashOfConfig":"8231"},{"size":13873,"mtime":1786084509673,"results":"8966","hashOfConfig":"8231"},{"size":2208,"mtime":1786084509673,"results":"8967","hashOfConfig":"8231"},{"size":10281,"mtime":1786084509675,"results":"8968","hashOfConfig":"8231"},{"size":3149,"mtime":1786084509675,"results":"8969","hashOfConfig":"8231"},{"size":21313,"mtime":1786084509675,"results":"8970","hashOfConfig":"8231"},{"size":3232,"mtime":1786084509675,"results":"8971","hashOfConfig":"8231"},{"size":9989,"mtime":1786084509675,"results":"8972","hashOfConfig":"8231"},{"size":948,"mtime":1786084509675,"results":"8973","hashOfConfig":"8231"},{"size":21180,"mtime":1786084509676,"results":"8974","hashOfConfig":"8231"},{"size":5639,"mtime":1786084509676,"results":"8975","hashOfConfig":"8231"},{"size":32164,"mtime":1786087572594,"results":"8976","hashOfConfig":"8231"},{"size":891,"mtime":1786084509676,"results":"8977","hashOfConfig":"8231"},{"size":3349,"mtime":1786084509676,"results":"8978","hashOfConfig":"8231"},{"size":2032,"mtime":1786084509676,"results":"8979","hashOfConfig":"8231"},{"size":4254,"mtime":1786084509676,"results":"8980","hashOfConfig":"8231"},{"size":5691,"mtime":1786084509677,"results":"8981","hashOfConfig":"8231"},{"size":24819,"mtime":1786084509677,"results":"8982","hashOfConfig":"8231"},{"size":6238,"mtime":1786084509677,"results":"8983","hashOfConfig":"8231"},{"size":5532,"mtime":1786084509677,"results":"8984","hashOfConfig":"8231"},{"size":3123,"mtime":1786087599987,"results":"8985","hashOfConfig":"8231"},{"size":3594,"mtime":1786084509677,"results":"8986","hashOfConfig":"8231"},{"size":4000,"mtime":1786084509678,"results":"8987","hashOfConfig":"8231"},{"size":4691,"mtime":1786084509678,"results":"8988","hashOfConfig":"8231"},{"size":10860,"mtime":1786084509678,"results":"8989","hashOfConfig":"8231"},{"size":8174,"mtime":1786084509678,"results":"8990","hashOfConfig":"8231"},{"size":5824,"mtime":1786084509678,"results":"8991","hashOfConfig":"8231"},{"size":12074,"mtime":1786084509679,"results":"8992","hashOfConfig":"8231"},{"size":3264,"mtime":1786084509679,"results":"8993","hashOfConfig":"8231"},{"size":5288,"mtime":1786084509679,"results":"8994","hashOfConfig":"8231"},{"size":14323,"mtime":1786084509679,"results":"8995","hashOfConfig":"8231"},{"size":23802,"mtime":1786085206209,"results":"8996","hashOfConfig":"8231"},{"size":17245,"mtime":1786084509680,"results":"8997","hashOfConfig":"8231"},{"size":6803,"mtime":1786084509680,"results":"8998","hashOfConfig":"8231"},{"size":4305,"mtime":1786084509680,"results":"8999","hashOfConfig":"8231"},{"size":2872,"mtime":1786084509680,"results":"9000","hashOfConfig":"8231"},{"size":9985,"mtime":1786084509680,"results":"9001","hashOfConfig":"8231"},{"size":21140,"mtime":1786084509681,"results":"9002","hashOfConfig":"8231"},{"size":6465,"mtime":1786084509681,"results":"9003","hashOfConfig":"8231"},{"size":2887,"mtime":1786084509681,"results":"9004","hashOfConfig":"8231"},{"size":10701,"mtime":1786084509681,"results":"9005","hashOfConfig":"8231"},{"size":29791,"mtime":1786084509681,"results":"9006","hashOfConfig":"8231"},{"size":6366,"mtime":1786084509682,"results":"9007","hashOfConfig":"8231"},{"size":4212,"mtime":1786084509682,"results":"9008","hashOfConfig":"8231"},{"size":6843,"mtime":1786084509682,"results":"9009","hashOfConfig":"8231"},{"size":1789,"mtime":1786084509682,"results":"9010","hashOfConfig":"8231"},{"size":32462,"mtime":1786084509682,"results":"9011","hashOfConfig":"8231"},{"size":128674,"mtime":1786084509674,"results":"9012","hashOfConfig":"8231"},{"size":9548,"mtime":1786084509682,"results":"9013","hashOfConfig":"8231"},{"size":13550,"mtime":1786084509682,"results":"9014","hashOfConfig":"8231"},{"size":343,"mtime":1786084509683,"results":"9015","hashOfConfig":"8231"},{"size":14361,"mtime":1786084509683,"results":"9016","hashOfConfig":"8231"},{"size":1363,"mtime":1786084509683,"results":"9017","hashOfConfig":"8231"},{"size":4588,"mtime":1786084509683,"results":"9018","hashOfConfig":"8231"},{"size":4250,"mtime":1786084509683,"results":"9019","hashOfConfig":"8231"},{"size":2356,"mtime":1786084509684,"results":"9020","hashOfConfig":"8231"},{"size":7232,"mtime":1786084509684,"results":"9021","hashOfConfig":"8231"},{"size":21480,"mtime":1786084509684,"results":"9022","hashOfConfig":"8231"},{"size":2754,"mtime":1786084509684,"results":"9023","hashOfConfig":"8231"},{"size":4591,"mtime":1786084509684,"results":"9024","hashOfConfig":"8231"},{"size":19186,"mtime":1786084509684,"results":"9025","hashOfConfig":"8231"},{"size":13588,"mtime":1786084509685,"results":"9026","hashOfConfig":"8231"},{"size":2006,"mtime":1786084509685,"results":"9027","hashOfConfig":"8231"},{"size":6626,"mtime":1786084509685,"results":"9028","hashOfConfig":"8231"},{"size":3052,"mtime":1786084509685,"results":"9029","hashOfConfig":"8231"},{"size":7398,"mtime":1786084509685,"results":"9030","hashOfConfig":"8231"},{"size":13922,"mtime":1786084509685,"results":"9031","hashOfConfig":"8231"},{"size":3622,"mtime":1786084509685,"results":"9032","hashOfConfig":"8231"},{"size":37044,"mtime":1786087989002,"results":"9033","hashOfConfig":"8231"},{"size":4242,"mtime":1786084509686,"results":"9034","hashOfConfig":"8231"},{"size":11344,"mtime":1786084509686,"results":"9035","hashOfConfig":"8231"},{"size":2400,"mtime":1786084509687,"results":"9036","hashOfConfig":"8231"},{"size":28807,"mtime":1786084509687,"results":"9037","hashOfConfig":"8231"},{"size":21162,"mtime":1786084509687,"results":"9038","hashOfConfig":"8231"},{"size":419,"mtime":1786084509687,"results":"9039","hashOfConfig":"8231"},{"size":9599,"mtime":1786084509687,"results":"9040","hashOfConfig":"8231"},{"size":10208,"mtime":1786084509688,"results":"9041","hashOfConfig":"8231"},{"size":9008,"mtime":1786084509688,"results":"9042","hashOfConfig":"8231"},{"size":8502,"mtime":1786084509688,"results":"9043","hashOfConfig":"8231"},{"size":1517,"mtime":1786084509688,"results":"9044","hashOfConfig":"8231"},{"size":2171,"mtime":1786084509688,"results":"9045","hashOfConfig":"8231"},{"size":3957,"mtime":1786084509689,"results":"9046","hashOfConfig":"8231"},{"size":6910,"mtime":1786084509689,"results":"9047","hashOfConfig":"8231"},{"size":12821,"mtime":1786084509689,"results":"9048","hashOfConfig":"8231"},{"size":1766,"mtime":1786084509689,"results":"9049","hashOfConfig":"8231"},{"size":17998,"mtime":1786084509690,"results":"9050","hashOfConfig":"8231"},{"size":2510,"mtime":1786084509690,"results":"9051","hashOfConfig":"8231"},{"size":4736,"mtime":1786084509690,"results":"9052","hashOfConfig":"8231"},{"size":4588,"mtime":1786084509690,"results":"9053","hashOfConfig":"8231"},{"size":13206,"mtime":1786084509690,"results":"9054","hashOfConfig":"8231"},{"size":3615,"mtime":1786084509690,"results":"9055","hashOfConfig":"8231"},{"size":2689,"mtime":1786084509691,"results":"9056","hashOfConfig":"8231"},{"size":2415,"mtime":1786084509691,"results":"9057","hashOfConfig":"8231"},{"size":4875,"mtime":1786084509691,"results":"9058","hashOfConfig":"8231"},{"size":1051,"mtime":1786084509691,"results":"9059","hashOfConfig":"8231"},{"size":10697,"mtime":1786084509691,"results":"9060","hashOfConfig":"8231"},{"size":2529,"mtime":1786084509691,"results":"9061","hashOfConfig":"8231"},{"size":2057,"mtime":1786084509691,"results":"9062","hashOfConfig":"8231"},{"size":7174,"mtime":1786084509692,"results":"9063","hashOfConfig":"8231"},{"size":2060,"mtime":1786084509692,"results":"9064","hashOfConfig":"8231"},{"size":7348,"mtime":1786084509692,"results":"9065","hashOfConfig":"8231"},{"size":13045,"mtime":1786084509692,"results":"9066","hashOfConfig":"8231"},{"size":3437,"mtime":1786084509692,"results":"9067","hashOfConfig":"8231"},{"size":944,"mtime":1786084509692,"results":"9068","hashOfConfig":"8231"},{"size":6344,"mtime":1786084509692,"results":"9069","hashOfConfig":"8231"},{"size":11031,"mtime":1786084509693,"results":"9070","hashOfConfig":"8231"},{"size":7423,"mtime":1786084509693,"results":"9071","hashOfConfig":"8231"},{"size":3374,"mtime":1786084509697,"results":"9072","hashOfConfig":"8231"},{"size":27046,"mtime":1786084509698,"results":"9073","hashOfConfig":"8231"},{"size":10716,"mtime":1786084509698,"results":"9074","hashOfConfig":"8231"},{"size":7635,"mtime":1786084509698,"results":"9075","hashOfConfig":"8231"},{"size":7561,"mtime":1786084509698,"results":"9076","hashOfConfig":"8231"},{"size":1241,"mtime":1786084509698,"results":"9077","hashOfConfig":"8231"},{"size":2038,"mtime":1786084509699,"results":"9078","hashOfConfig":"8231"},{"size":3170,"mtime":1786084509699,"results":"9079","hashOfConfig":"8231"},{"size":1450,"mtime":1786084509699,"results":"9080","hashOfConfig":"8231"},{"size":2826,"mtime":1786084509699,"results":"9081","hashOfConfig":"8231"},{"size":501,"mtime":1786084509699,"results":"9082","hashOfConfig":"8231"},{"size":2429,"mtime":1786084509699,"results":"9083","hashOfConfig":"8231"},{"size":3069,"mtime":1786084509699,"results":"9084","hashOfConfig":"8231"},{"size":10467,"mtime":1786084509699,"results":"9085","hashOfConfig":"8231"},{"size":3137,"mtime":1786084509699,"results":"9086","hashOfConfig":"8231"},{"size":5240,"mtime":1786084509700,"results":"9087","hashOfConfig":"8231"},{"size":17336,"mtime":1786084509700,"results":"9088","hashOfConfig":"8231"},{"size":2880,"mtime":1786084509700,"results":"9089","hashOfConfig":"8231"},{"size":1406,"mtime":1786084509700,"results":"9090","hashOfConfig":"8231"},{"size":2234,"mtime":1786084509700,"results":"9091","hashOfConfig":"8231"},{"size":1863,"mtime":1786084509700,"results":"9092","hashOfConfig":"8231"},{"size":909,"mtime":1786084509700,"results":"9093","hashOfConfig":"8231"},{"size":2018,"mtime":1786084509700,"results":"9094","hashOfConfig":"8231"},{"size":1923,"mtime":1786084509700,"results":"9095","hashOfConfig":"8231"},{"size":1266,"mtime":1786084509700,"results":"9096","hashOfConfig":"8231"},{"size":3217,"mtime":1786084509701,"results":"9097","hashOfConfig":"8231"},{"size":1915,"mtime":1786084509701,"results":"9098","hashOfConfig":"8231"},{"size":5631,"mtime":1786084509701,"results":"9099","hashOfConfig":"8231"},{"size":1294,"mtime":1786084509701,"results":"9100","hashOfConfig":"8231"},{"size":2593,"mtime":1786084509701,"results":"9101","hashOfConfig":"8231"},{"size":2147,"mtime":1786084509701,"results":"9102","hashOfConfig":"8231"},{"size":2886,"mtime":1786084509701,"results":"9103","hashOfConfig":"8231"},{"size":3904,"mtime":1786084509701,"results":"9104","hashOfConfig":"8231"},{"size":1886,"mtime":1786084509701,"results":"9105","hashOfConfig":"8231"},{"size":7079,"mtime":1786084509702,"results":"9106","hashOfConfig":"8231"},{"size":12965,"mtime":1786084509702,"results":"9107","hashOfConfig":"8231"},{"size":2058,"mtime":1786084509702,"results":"9108","hashOfConfig":"8231"},{"size":1198,"mtime":1786084509702,"results":"9109","hashOfConfig":"8231"},{"size":3255,"mtime":1786084509703,"results":"9110","hashOfConfig":"8231"},{"size":2837,"mtime":1786084509703,"results":"9111","hashOfConfig":"8231"},{"size":1803,"mtime":1786084509703,"results":"9112","hashOfConfig":"8231"},{"size":4695,"mtime":1786084509703,"results":"9113","hashOfConfig":"8231"},{"size":2494,"mtime":1786084509703,"results":"9114","hashOfConfig":"8231"},{"size":8890,"mtime":1786084509703,"results":"9115","hashOfConfig":"8231"},{"size":12014,"mtime":1786084509704,"results":"9116","hashOfConfig":"8231"},{"size":2751,"mtime":1786084509704,"results":"9117","hashOfConfig":"8231"},{"size":8945,"mtime":1786084509704,"results":"9118","hashOfConfig":"8231"},{"size":5081,"mtime":1786084509704,"results":"9119","hashOfConfig":"8231"},{"size":983,"mtime":1786084509704,"results":"9120","hashOfConfig":"8231"},{"size":14190,"mtime":1786084509705,"results":"9121","hashOfConfig":"8231"},{"size":1658,"mtime":1786084509705,"results":"9122","hashOfConfig":"8231"},{"size":5131,"mtime":1786084509705,"results":"9123","hashOfConfig":"8231"},{"size":4548,"mtime":1786084509705,"results":"9124","hashOfConfig":"8231"},{"size":6239,"mtime":1786084509705,"results":"9125","hashOfConfig":"8231"},{"size":5043,"mtime":1786084509705,"results":"9126","hashOfConfig":"8231"},{"size":7682,"mtime":1786084509705,"results":"9127","hashOfConfig":"8231"},{"size":2864,"mtime":1786084509705,"results":"9128","hashOfConfig":"8231"},{"size":5342,"mtime":1786084509705,"results":"9129","hashOfConfig":"8231"},{"size":428,"mtime":1786084509706,"results":"9130","hashOfConfig":"8231"},{"size":2144,"mtime":1786084509706,"results":"9131","hashOfConfig":"8231"},{"size":2897,"mtime":1786084509706,"results":"9132","hashOfConfig":"8231"},{"size":2896,"mtime":1786084509706,"results":"9133","hashOfConfig":"8231"},{"size":2854,"mtime":1786084509706,"results":"9134","hashOfConfig":"8231"},{"size":1041,"mtime":1786084509706,"results":"9135","hashOfConfig":"8231"},{"size":4888,"mtime":1786084509706,"results":"9136","hashOfConfig":"8231"},{"size":251,"mtime":1786084509706,"results":"9137","hashOfConfig":"8231"},{"size":4938,"mtime":1786084509707,"results":"9138","hashOfConfig":"8231"},{"size":3815,"mtime":1786084509707,"results":"9139","hashOfConfig":"8231"},{"size":1951,"mtime":1786084509707,"results":"9140","hashOfConfig":"8231"},{"size":1646,"mtime":1786084509707,"results":"9141","hashOfConfig":"8231"},{"size":9209,"mtime":1786084509707,"results":"9142","hashOfConfig":"8231"},{"size":5084,"mtime":1786084509713,"results":"9143","hashOfConfig":"8231"},{"size":7408,"mtime":1786084509713,"results":"9144","hashOfConfig":"8231"},{"size":1097,"mtime":1786084509713,"results":"9145","hashOfConfig":"8231"},{"size":40624,"mtime":1786084509714,"results":"9146","hashOfConfig":"8231"},{"size":6690,"mtime":1786084509714,"results":"9147","hashOfConfig":"8231"},{"size":8830,"mtime":1786084509714,"results":"9148","hashOfConfig":"8231"},{"size":20687,"mtime":1786084509714,"results":"9149","hashOfConfig":"8231"},{"size":11986,"mtime":1786084509715,"results":"9150","hashOfConfig":"8231"},{"size":2960,"mtime":1786084509715,"results":"9151","hashOfConfig":"8231"},{"size":12102,"mtime":1786084509715,"results":"9152","hashOfConfig":"8231"},{"size":26030,"mtime":1786084509715,"results":"9153","hashOfConfig":"8231"},{"size":34190,"mtime":1786084509716,"results":"9154","hashOfConfig":"8231"},{"size":2483,"mtime":1786084509716,"results":"9155","hashOfConfig":"8231"},{"size":6353,"mtime":1786084509716,"results":"9156","hashOfConfig":"8231"},{"size":7362,"mtime":1786084509716,"results":"9157","hashOfConfig":"8231"},{"size":8132,"mtime":1786084509716,"results":"9158","hashOfConfig":"8231"},{"size":2284,"mtime":1786084509716,"results":"9159","hashOfConfig":"8231"},{"size":10144,"mtime":1786084509716,"results":"9160","hashOfConfig":"8231"},{"size":4957,"mtime":1786084509717,"results":"9161","hashOfConfig":"8231"},{"size":12053,"mtime":1786084509717,"results":"9162","hashOfConfig":"8231"},{"size":8510,"mtime":1786084509717,"results":"9163","hashOfConfig":"8231"},{"size":6154,"mtime":1786087910327,"results":"9164","hashOfConfig":"8231"},{"size":6457,"mtime":1786084509717,"results":"9165","hashOfConfig":"8231"},{"size":6334,"mtime":1786084509717,"results":"9166","hashOfConfig":"8231"},{"size":19193,"mtime":1786084509718,"results":"9167","hashOfConfig":"8231"},{"size":9521,"mtime":1786084509718,"results":"9168","hashOfConfig":"8231"},{"size":9530,"mtime":1786084509718,"results":"9169","hashOfConfig":"8231"},{"size":7867,"mtime":1786084509718,"results":"9170","hashOfConfig":"8231"},{"size":3369,"mtime":1786084509718,"results":"9171","hashOfConfig":"8231"},{"size":8832,"mtime":1786084509719,"results":"9172","hashOfConfig":"8231"},{"size":6605,"mtime":1786084509719,"results":"9173","hashOfConfig":"8231"},{"size":3260,"mtime":1786084509719,"results":"9174","hashOfConfig":"8231"},{"size":6938,"mtime":1786084509719,"results":"9175","hashOfConfig":"8231"},{"size":11167,"mtime":1786084509719,"results":"9176","hashOfConfig":"8231"},{"size":17420,"mtime":1786084509719,"results":"9177","hashOfConfig":"8231"},{"size":21268,"mtime":1786084509720,"results":"9178","hashOfConfig":"8231"},{"size":2269,"mtime":1786084509720,"results":"9179","hashOfConfig":"8231"},{"size":1174,"mtime":1786084509720,"results":"9180","hashOfConfig":"8231"},{"size":5863,"mtime":1786084509720,"results":"9181","hashOfConfig":"8231"},{"size":9519,"mtime":1786084509720,"results":"9182","hashOfConfig":"8231"},{"size":11784,"mtime":1786084509720,"results":"9183","hashOfConfig":"8231"},{"size":10257,"mtime":1786084509721,"results":"9184","hashOfConfig":"8231"},{"size":2668,"mtime":1786084509721,"results":"9185","hashOfConfig":"8231"},{"size":7333,"mtime":1786084509721,"results":"9186","hashOfConfig":"8231"},{"size":13959,"mtime":1786084509721,"results":"9187","hashOfConfig":"8231"},{"size":9332,"mtime":1786084509721,"results":"9188","hashOfConfig":"8231"},{"size":4921,"mtime":1786084509721,"results":"9189","hashOfConfig":"8231"},{"size":20597,"mtime":1786084509722,"results":"9190","hashOfConfig":"8231"},{"size":4265,"mtime":1786084509722,"results":"9191","hashOfConfig":"8231"},{"size":2899,"mtime":1786084509722,"results":"9192","hashOfConfig":"8231"},{"size":34592,"mtime":1786084509722,"results":"9193","hashOfConfig":"8231"},{"size":130,"mtime":1786084509722,"results":"9194","hashOfConfig":"8231"},{"size":6000,"mtime":1786084509723,"results":"9195","hashOfConfig":"8231"},{"size":10198,"mtime":1786084509723,"results":"9196","hashOfConfig":"8231"},{"size":1905,"mtime":1786084509723,"results":"9197","hashOfConfig":"8231"},{"size":3326,"mtime":1786084509723,"results":"9198","hashOfConfig":"8231"},{"size":7253,"mtime":1786084509723,"results":"9199","hashOfConfig":"8231"},{"size":11033,"mtime":1786084509723,"results":"9200","hashOfConfig":"8231"},{"size":19058,"mtime":1786084509724,"results":"9201","hashOfConfig":"8231"},{"size":21503,"mtime":1786084509724,"results":"9202","hashOfConfig":"8231"},{"size":6870,"mtime":1786084509724,"results":"9203","hashOfConfig":"8231"},{"size":4088,"mtime":1786084509724,"results":"9204","hashOfConfig":"8231"},{"size":27493,"mtime":1786084509724,"results":"9205","hashOfConfig":"8231"},{"size":21416,"mtime":1786084509725,"results":"9206","hashOfConfig":"8231"},{"size":13667,"mtime":1786084509725,"results":"9207","hashOfConfig":"8231"},{"size":1933,"mtime":1786084509725,"results":"9208","hashOfConfig":"8231"},{"size":8913,"mtime":1786084509725,"results":"9209","hashOfConfig":"8231"},{"size":12999,"mtime":1786084509725,"results":"9210","hashOfConfig":"8231"},{"size":14979,"mtime":1786084509726,"results":"9211","hashOfConfig":"8231"},{"size":21487,"mtime":1786084509726,"results":"9212","hashOfConfig":"8231"},{"size":10736,"mtime":1786084509726,"results":"9213","hashOfConfig":"8231"},{"size":6506,"mtime":1786084509726,"results":"9214","hashOfConfig":"8231"},{"size":6049,"mtime":1786084509726,"results":"9215","hashOfConfig":"8231"},{"size":17665,"mtime":1786084509727,"results":"9216","hashOfConfig":"8231"},{"size":6356,"mtime":1786084509727,"results":"9217","hashOfConfig":"8231"},{"size":2561,"mtime":1786084509727,"results":"9218","hashOfConfig":"8231"},{"size":6339,"mtime":1786084509727,"results":"9219","hashOfConfig":"8231"},{"size":2705,"mtime":1786084509727,"results":"9220","hashOfConfig":"8231"},{"size":2037,"mtime":1786084509727,"results":"9221","hashOfConfig":"8231"},{"size":33010,"mtime":1786084509728,"results":"9222","hashOfConfig":"8231"},{"size":4819,"mtime":1786084509728,"results":"9223","hashOfConfig":"8231"},{"size":4258,"mtime":1786084509728,"results":"9224","hashOfConfig":"8231"},{"size":12912,"mtime":1786084509728,"results":"9225","hashOfConfig":"8231"},{"size":13597,"mtime":1786084509728,"results":"9226","hashOfConfig":"8231"},{"size":2136,"mtime":1786084509729,"results":"9227","hashOfConfig":"8231"},{"size":6537,"mtime":1786084509729,"results":"9228","hashOfConfig":"8231"},{"size":1361,"mtime":1786084509729,"results":"9229","hashOfConfig":"8231"},{"size":1133,"mtime":1786084509729,"results":"9230","hashOfConfig":"8231"},{"size":2167,"mtime":1786084509730,"results":"9231","hashOfConfig":"8231"},{"size":2872,"mtime":1786084509730,"results":"9232","hashOfConfig":"8231"},{"size":42134,"mtime":1786084509730,"results":"9233","hashOfConfig":"8231"},{"size":7065,"mtime":1786084509731,"results":"9234","hashOfConfig":"8231"},{"size":8530,"mtime":1786084509731,"results":"9235","hashOfConfig":"8231"},{"size":14564,"mtime":1786084509731,"results":"9236","hashOfConfig":"8231"},{"size":2320,"mtime":1786084509731,"results":"9237","hashOfConfig":"8231"},{"size":5749,"mtime":1786084509731,"results":"9238","hashOfConfig":"8231"},{"size":3716,"mtime":1786084509732,"results":"9239","hashOfConfig":"8231"},{"size":4342,"mtime":1786084509732,"results":"9240","hashOfConfig":"8231"},{"size":6149,"mtime":1786084509732,"results":"9241","hashOfConfig":"8231"},{"size":3629,"mtime":1786084509732,"results":"9242","hashOfConfig":"8231"},{"size":10801,"mtime":1786084509732,"results":"9243","hashOfConfig":"8231"},{"size":8226,"mtime":1786084509732,"results":"9244","hashOfConfig":"8231"},{"size":16365,"mtime":1786084509732,"results":"9245","hashOfConfig":"8231"},{"size":3956,"mtime":1786084509733,"results":"9246","hashOfConfig":"8231"},{"size":12376,"mtime":1786084509733,"results":"9247","hashOfConfig":"8231"},{"size":4423,"mtime":1786084509733,"results":"9248","hashOfConfig":"8231"},{"size":877,"mtime":1786084509733,"results":"9249","hashOfConfig":"8231"},{"size":2763,"mtime":1786084509733,"results":"9250","hashOfConfig":"8231"},{"size":3476,"mtime":1786084509733,"results":"9251","hashOfConfig":"8231"},{"size":1806,"mtime":1786084509733,"results":"9252","hashOfConfig":"8231"},{"size":10475,"mtime":1786084509733,"results":"9253","hashOfConfig":"8231"},{"size":3017,"mtime":1786084509734,"results":"9254","hashOfConfig":"8231"},{"size":3730,"mtime":1786084509734,"results":"9255","hashOfConfig":"8231"},{"size":5821,"mtime":1786084509734,"results":"9256","hashOfConfig":"8231"},{"size":5023,"mtime":1786084509734,"results":"9257","hashOfConfig":"8231"},{"size":2770,"mtime":1786084509734,"results":"9258","hashOfConfig":"8231"},{"size":8208,"mtime":1786084509734,"results":"9259","hashOfConfig":"8231"},{"size":1031,"mtime":1786084509734,"results":"9260","hashOfConfig":"8231"},{"size":21232,"mtime":1786084509734,"results":"9261","hashOfConfig":"8231"},{"size":6311,"mtime":1786084509735,"results":"9262","hashOfConfig":"8231"},{"size":22791,"mtime":1786084509735,"results":"9263","hashOfConfig":"8231"},{"size":3086,"mtime":1786084509735,"results":"9264","hashOfConfig":"8231"},{"size":13060,"mtime":1786084509735,"results":"9265","hashOfConfig":"8231"},{"size":20260,"mtime":1786084509736,"results":"9266","hashOfConfig":"8231"},{"size":13276,"mtime":1786084509736,"results":"9267","hashOfConfig":"8231"},{"size":4160,"mtime":1786084509736,"results":"9268","hashOfConfig":"8231"},{"size":4714,"mtime":1786084509736,"results":"9269","hashOfConfig":"8231"},{"size":825,"mtime":1786084509736,"results":"9270","hashOfConfig":"8231"},{"size":675,"mtime":1786084509736,"results":"9271","hashOfConfig":"8231"},{"size":1152,"mtime":1786084509736,"results":"9272","hashOfConfig":"8231"},{"size":16514,"mtime":1786084509737,"results":"9273","hashOfConfig":"8231"},{"size":12631,"mtime":1786084509737,"results":"9274","hashOfConfig":"8231"},{"size":3527,"mtime":1786084509738,"results":"9275","hashOfConfig":"8231"},{"size":5804,"mtime":1786084509738,"results":"9276","hashOfConfig":"8231"},{"size":2415,"mtime":1786084509738,"results":"9277","hashOfConfig":"8231"},{"size":2284,"mtime":1786084509739,"results":"9278","hashOfConfig":"8231"},{"size":2393,"mtime":1786084509739,"results":"9279","hashOfConfig":"8231"},{"size":4453,"mtime":1786084509739,"results":"9280","hashOfConfig":"8231"},{"size":1806,"mtime":1786084509739,"results":"9281","hashOfConfig":"8231"},{"size":1816,"mtime":1786084509739,"results":"9282","hashOfConfig":"8231"},{"size":3502,"mtime":1786084509740,"results":"9283","hashOfConfig":"8231"},{"size":2103,"mtime":1786084509740,"results":"9284","hashOfConfig":"8231"},{"size":4299,"mtime":1786084509740,"results":"9285","hashOfConfig":"8231"},{"size":10716,"mtime":1786084509740,"results":"9286","hashOfConfig":"8231"},{"size":2194,"mtime":1786084509740,"results":"9287","hashOfConfig":"8231"},{"size":4180,"mtime":1786084509740,"results":"9288","hashOfConfig":"8231"},{"size":3319,"mtime":1786084509740,"results":"9289","hashOfConfig":"8231"},{"size":5095,"mtime":1786084509740,"results":"9290","hashOfConfig":"8231"},{"size":31414,"mtime":1786084509738,"results":"9291","hashOfConfig":"8231"},{"size":2038,"mtime":1786084509740,"results":"9292","hashOfConfig":"8231"},{"size":2698,"mtime":1786084509741,"results":"9293","hashOfConfig":"8231"},{"size":6659,"mtime":1786084509741,"results":"9294","hashOfConfig":"8231"},{"size":4592,"mtime":1786084509741,"results":"9295","hashOfConfig":"8231"},{"size":28729,"mtime":1786084509741,"results":"9296","hashOfConfig":"8231"},{"size":7844,"mtime":1786084509742,"results":"9297","hashOfConfig":"8231"},{"size":1723,"mtime":1786084509742,"results":"9298","hashOfConfig":"8231"},{"size":7953,"mtime":1786084509742,"results":"9299","hashOfConfig":"8231"},{"size":7020,"mtime":1786084509742,"results":"9300","hashOfConfig":"8231"},{"size":2731,"mtime":1786084509742,"results":"9301","hashOfConfig":"8231"},{"size":4487,"mtime":1786084509742,"results":"9302","hashOfConfig":"8231"},{"size":6036,"mtime":1786084509742,"results":"9303","hashOfConfig":"8231"},{"size":2174,"mtime":1786084509743,"results":"9304","hashOfConfig":"8231"},{"size":2080,"mtime":1786084509743,"results":"9305","hashOfConfig":"8231"},{"size":9141,"mtime":1786084509743,"results":"9306","hashOfConfig":"8231"},{"size":7781,"mtime":1786084509743,"results":"9307","hashOfConfig":"8231"},{"size":7972,"mtime":1786084509743,"results":"9308","hashOfConfig":"8231"},{"size":5156,"mtime":1786084509743,"results":"9309","hashOfConfig":"8231"},{"size":7104,"mtime":1786084509743,"results":"9310","hashOfConfig":"8231"},{"size":16050,"mtime":1786084509744,"results":"9311","hashOfConfig":"8231"},{"size":12180,"mtime":1786084509744,"results":"9312","hashOfConfig":"8231"},{"size":3298,"mtime":1786084509744,"results":"9313","hashOfConfig":"8231"},{"size":2909,"mtime":1786084509744,"results":"9314","hashOfConfig":"8231"},{"size":3268,"mtime":1786084509744,"results":"9315","hashOfConfig":"8231"},{"size":9183,"mtime":1786084509744,"results":"9316","hashOfConfig":"8231"},{"size":5243,"mtime":1786084509744,"results":"9317","hashOfConfig":"8231"},{"size":2699,"mtime":1786084509745,"results":"9318","hashOfConfig":"8231"},{"size":2372,"mtime":1786084509745,"results":"9319","hashOfConfig":"8231"},{"size":2510,"mtime":1786084509745,"results":"9320","hashOfConfig":"8231"},{"size":2267,"mtime":1786084509745,"results":"9321","hashOfConfig":"8231"},{"size":2988,"mtime":1786084509745,"results":"9322","hashOfConfig":"8231"},{"size":2323,"mtime":1786084509745,"results":"9323","hashOfConfig":"8231"},{"size":9369,"mtime":1786084509741,"results":"9324","hashOfConfig":"8231"},{"size":8734,"mtime":1786084509745,"results":"9325","hashOfConfig":"8231"},{"size":7042,"mtime":1786084509745,"results":"9326","hashOfConfig":"8231"},{"size":2419,"mtime":1786084509745,"results":"9327","hashOfConfig":"8231"},{"size":6560,"mtime":1786084509746,"results":"9328","hashOfConfig":"8231"},{"size":9174,"mtime":1786084509746,"results":"9329","hashOfConfig":"8231"},{"size":3201,"mtime":1786084509746,"results":"9330","hashOfConfig":"8231"},{"size":9133,"mtime":1786084509746,"results":"9331","hashOfConfig":"8231"},{"size":3910,"mtime":1786084509746,"results":"9332","hashOfConfig":"8231"},{"size":8409,"mtime":1786084509746,"results":"9333","hashOfConfig":"8231"},{"size":4618,"mtime":1786084509746,"results":"9334","hashOfConfig":"8231"},{"size":18698,"mtime":1786084509747,"results":"9335","hashOfConfig":"8231"},{"size":28682,"mtime":1786084509747,"results":"9336","hashOfConfig":"8231"},{"size":1013,"mtime":1786084509747,"results":"9337","hashOfConfig":"8231"},{"size":20439,"mtime":1786084509748,"results":"9338","hashOfConfig":"8231"},{"size":272,"mtime":1786084509748,"results":"9339","hashOfConfig":"8231"},{"size":747,"mtime":1786084509748,"results":"9340","hashOfConfig":"8231"},{"size":818,"mtime":1786084509748,"results":"9341","hashOfConfig":"8231"},{"size":30234,"mtime":1786084509748,"results":"9342","hashOfConfig":"8231"},{"size":23389,"mtime":1786084509749,"results":"9343","hashOfConfig":"8231"},{"size":8321,"mtime":1786084509749,"results":"9344","hashOfConfig":"8231"},{"size":721,"mtime":1786084509749,"results":"9345","hashOfConfig":"8231"},{"size":736,"mtime":1786084509749,"results":"9346","hashOfConfig":"8231"},{"size":10303,"mtime":1786084509749,"results":"9347","hashOfConfig":"8231"},{"size":769,"mtime":1786084509749,"results":"9348","hashOfConfig":"8231"},{"size":20259,"mtime":1786084509749,"results":"9349","hashOfConfig":"8231"},{"size":2750,"mtime":1786084509750,"results":"9350","hashOfConfig":"8231"},{"size":13145,"mtime":1786084509750,"results":"9351","hashOfConfig":"8231"},{"size":4528,"mtime":1786084509750,"results":"9352","hashOfConfig":"8231"},{"size":644,"mtime":1786084509750,"results":"9353","hashOfConfig":"8231"},{"size":29179,"mtime":1786084509751,"results":"9354","hashOfConfig":"8231"},{"size":9780,"mtime":1786084509751,"results":"9355","hashOfConfig":"8231"},{"size":999,"mtime":1786084509751,"results":"9356","hashOfConfig":"8231"},{"size":13207,"mtime":1786084509751,"results":"9357","hashOfConfig":"8231"},{"size":13792,"mtime":1786084509751,"results":"9358","hashOfConfig":"8231"},{"size":19536,"mtime":1786084509752,"results":"9359","hashOfConfig":"8231"},{"size":7215,"mtime":1786084509752,"results":"9360","hashOfConfig":"8231"},{"size":5059,"mtime":1786084509753,"results":"9361","hashOfConfig":"8231"},{"size":3797,"mtime":1786084509753,"results":"9362","hashOfConfig":"8231"},{"size":2113,"mtime":1786084509753,"results":"9363","hashOfConfig":"8231"},{"size":16866,"mtime":1786084509753,"results":"9364","hashOfConfig":"8231"},{"size":35418,"mtime":1786084509752,"results":"9365","hashOfConfig":"8231"},{"size":851,"mtime":1786084509753,"results":"9366","hashOfConfig":"8231"},{"size":3668,"mtime":1786084509754,"results":"9367","hashOfConfig":"8231"},{"size":4092,"mtime":1786084509754,"results":"9368","hashOfConfig":"8231"},{"size":33662,"mtime":1786084509753,"results":"9369","hashOfConfig":"8231"},{"size":8158,"mtime":1786084509754,"results":"9370","hashOfConfig":"8231"},{"size":5277,"mtime":1786084509754,"results":"9371","hashOfConfig":"8231"},{"size":35872,"mtime":1786084509754,"results":"9372","hashOfConfig":"8231"},{"size":2412,"mtime":1786084509755,"results":"9373","hashOfConfig":"8231"},{"size":3411,"mtime":1786084509755,"results":"9374","hashOfConfig":"8231"},{"size":37806,"mtime":1786084509755,"results":"9375","hashOfConfig":"8231"},{"size":13867,"mtime":1786084509755,"results":"9376","hashOfConfig":"8231"},{"size":951,"mtime":1786084509755,"results":"9377","hashOfConfig":"8231"},{"size":9822,"mtime":1786084509756,"results":"9378","hashOfConfig":"8231"},{"size":29796,"mtime":1786084509756,"results":"9379","hashOfConfig":"8231"},{"size":6329,"mtime":1786084509756,"results":"9380","hashOfConfig":"8231"},{"size":692,"mtime":1786084509757,"results":"9381","hashOfConfig":"8231"},{"size":8225,"mtime":1786084509757,"results":"9382","hashOfConfig":"8231"},{"size":902,"mtime":1786084509757,"results":"9383","hashOfConfig":"8231"},{"size":7930,"mtime":1786084509757,"results":"9384","hashOfConfig":"8231"},{"size":1295,"mtime":1786084509757,"results":"9385","hashOfConfig":"8231"},{"size":42220,"mtime":1786084509757,"results":"9386","hashOfConfig":"8231"},{"size":4243,"mtime":1786084509757,"results":"9387","hashOfConfig":"8231"},{"size":18419,"mtime":1786084509758,"results":"9388","hashOfConfig":"8231"},{"size":13484,"mtime":1786084509758,"results":"9389","hashOfConfig":"8231"},{"size":899,"mtime":1786084509758,"results":"9390","hashOfConfig":"8231"},{"size":1034,"mtime":1786084509758,"results":"9391","hashOfConfig":"8231"},{"size":17130,"mtime":1786084509758,"results":"9392","hashOfConfig":"8231"},{"size":5233,"mtime":1786084509759,"results":"9393","hashOfConfig":"8231"},{"size":3911,"mtime":1786084509759,"results":"9394","hashOfConfig":"8231"},{"size":8213,"mtime":1786084509759,"results":"9395","hashOfConfig":"8231"},{"size":1002,"mtime":1786084509759,"results":"9396","hashOfConfig":"8231"},{"size":1986,"mtime":1786084509759,"results":"9397","hashOfConfig":"8231"},{"size":3861,"mtime":1786084509759,"results":"9398","hashOfConfig":"8231"},{"size":3004,"mtime":1786084509759,"results":"9399","hashOfConfig":"8231"},{"size":7521,"mtime":1786084509760,"results":"9400","hashOfConfig":"8231"},{"size":14336,"mtime":1786084509760,"results":"9401","hashOfConfig":"8231"},{"size":4279,"mtime":1786084509760,"results":"9402","hashOfConfig":"8231"},{"size":3106,"mtime":1786084509760,"results":"9403","hashOfConfig":"8231"},{"size":7117,"mtime":1786084509760,"results":"9404","hashOfConfig":"8231"},{"size":2095,"mtime":1786084509760,"results":"9405","hashOfConfig":"8231"},{"size":4423,"mtime":1786084509760,"results":"9406","hashOfConfig":"8231"},{"size":11427,"mtime":1786084509760,"results":"9407","hashOfConfig":"8231"},{"size":591,"mtime":1786084509761,"results":"9408","hashOfConfig":"8231"},{"size":3899,"mtime":1786084509761,"results":"9409","hashOfConfig":"8231"},{"size":4029,"mtime":1786084509761,"results":"9410","hashOfConfig":"8231"},{"size":5614,"mtime":1786084509762,"results":"9411","hashOfConfig":"8231"},{"size":56993,"mtime":1786084509761,"results":"9412","hashOfConfig":"8231"},{"size":4367,"mtime":1786084509762,"results":"9413","hashOfConfig":"8231"},{"size":13848,"mtime":1786084509762,"results":"9414","hashOfConfig":"8231"},{"size":2451,"mtime":1786084509762,"results":"9415","hashOfConfig":"8231"},{"size":12109,"mtime":1786084509762,"results":"9416","hashOfConfig":"8231"},{"size":16940,"mtime":1786084509762,"results":"9417","hashOfConfig":"8231"},{"size":28258,"mtime":1786084509763,"results":"9418","hashOfConfig":"8231"},{"size":3578,"mtime":1786084509763,"results":"9419","hashOfConfig":"8231"},{"size":3186,"mtime":1786084509763,"results":"9420","hashOfConfig":"8231"},{"size":3757,"mtime":1786084509763,"results":"9421","hashOfConfig":"8231"},{"size":4182,"mtime":1786084509763,"results":"9422","hashOfConfig":"8231"},{"size":2086,"mtime":1786084509763,"results":"9423","hashOfConfig":"8231"},{"size":3415,"mtime":1786084509763,"results":"9424","hashOfConfig":"8231"},{"size":4965,"mtime":1786084509763,"results":"9425","hashOfConfig":"8231"},{"size":4802,"mtime":1786084509764,"results":"9426","hashOfConfig":"8231"},{"size":2363,"mtime":1786084509764,"results":"9427","hashOfConfig":"8231"},{"size":3758,"mtime":1786084509764,"results":"9428","hashOfConfig":"8231"},{"size":961,"mtime":1786084509764,"results":"9429","hashOfConfig":"8231"},{"size":4002,"mtime":1786084509764,"results":"9430","hashOfConfig":"8231"},{"size":6386,"mtime":1786084509764,"results":"9431","hashOfConfig":"8231"},{"size":2011,"mtime":1786084509764,"results":"9432","hashOfConfig":"8231"},{"size":2790,"mtime":1786084509764,"results":"9433","hashOfConfig":"8231"},{"size":7118,"mtime":1786084509764,"results":"9434","hashOfConfig":"8231"},{"size":134,"mtime":1786084509764,"results":"9435","hashOfConfig":"8231"},{"size":5224,"mtime":1786084509765,"results":"9436","hashOfConfig":"8231"},{"size":1168,"mtime":1786084509765,"results":"9437","hashOfConfig":"8231"},{"size":4611,"mtime":1786084509765,"results":"9438","hashOfConfig":"8231"},{"size":10695,"mtime":1786084509765,"results":"9439","hashOfConfig":"8231"},{"size":3140,"mtime":1786084509765,"results":"9440","hashOfConfig":"8231"},{"size":8078,"mtime":1786084509765,"results":"9441","hashOfConfig":"8231"},{"size":23055,"mtime":1786084509765,"results":"9442","hashOfConfig":"8231"},{"size":5215,"mtime":1786084509766,"results":"9443","hashOfConfig":"8231"},{"size":14417,"mtime":1786084509766,"results":"9444","hashOfConfig":"8231"},{"size":847,"mtime":1786084509766,"results":"9445","hashOfConfig":"8231"},{"size":3380,"mtime":1786084509766,"results":"9446","hashOfConfig":"8231"},{"size":41627,"mtime":1786084509767,"results":"9447","hashOfConfig":"8231"},{"size":10643,"mtime":1786084509767,"results":"9448","hashOfConfig":"8231"},{"size":3794,"mtime":1786084509767,"results":"9449","hashOfConfig":"8231"},{"size":2751,"mtime":1786084509767,"results":"9450","hashOfConfig":"8231"},{"size":1431,"mtime":1786084509767,"results":"9451","hashOfConfig":"8231"},{"size":1209,"mtime":1786084509768,"results":"9452","hashOfConfig":"8231"},{"size":14610,"mtime":1786084509768,"results":"9453","hashOfConfig":"8231"},{"size":7651,"mtime":1786084509768,"results":"9454","hashOfConfig":"8231"},{"size":11386,"mtime":1786084509768,"results":"9455","hashOfConfig":"8231"},{"size":8762,"mtime":1786084509768,"results":"9456","hashOfConfig":"8231"},{"size":4173,"mtime":1786084509768,"results":"9457","hashOfConfig":"8231"},{"size":297,"mtime":1786084509768,"results":"9458","hashOfConfig":"8231"},{"size":5457,"mtime":1786084509769,"results":"9459","hashOfConfig":"8231"},{"size":2721,"mtime":1786084509769,"results":"9460","hashOfConfig":"8231"},{"size":6751,"mtime":1786084509769,"results":"9461","hashOfConfig":"8231"},{"size":4037,"mtime":1786084509769,"results":"9462","hashOfConfig":"8231"},{"size":1097,"mtime":1786084509769,"results":"9463","hashOfConfig":"8231"},{"size":5628,"mtime":1786084509769,"results":"9464","hashOfConfig":"8231"},{"size":309,"mtime":1786084509769,"results":"9465","hashOfConfig":"8231"},{"size":3503,"mtime":1786084509769,"results":"9466","hashOfConfig":"8231"},{"size":4517,"mtime":1786084509770,"results":"9467","hashOfConfig":"8231"},{"size":119848,"mtime":1786084509771,"results":"9468","hashOfConfig":"8231"},{"size":3859,"mtime":1786084509771,"results":"9469","hashOfConfig":"8231"},{"size":4891,"mtime":1786084509771,"results":"9470","hashOfConfig":"8231"},{"size":25899,"mtime":1786084509771,"results":"9471","hashOfConfig":"8231"},{"size":19514,"mtime":1786084509771,"results":"9472","hashOfConfig":"8231"},{"size":22419,"mtime":1786084509772,"results":"9473","hashOfConfig":"8231"},{"size":16569,"mtime":1786084509772,"results":"9474","hashOfConfig":"8231"},{"size":6639,"mtime":1786084509772,"results":"9475","hashOfConfig":"8231"},{"size":5083,"mtime":1786084509772,"results":"9476","hashOfConfig":"8231"},{"size":3716,"mtime":1786084509772,"results":"9477","hashOfConfig":"8231"},{"size":4192,"mtime":1786084509773,"results":"9478","hashOfConfig":"8231"},{"size":9132,"mtime":1786084509773,"results":"9479","hashOfConfig":"8231"},{"size":7259,"mtime":1786084509773,"results":"9480","hashOfConfig":"8231"},{"size":2472,"mtime":1786084509773,"results":"9481","hashOfConfig":"8231"},{"size":2766,"mtime":1786084509773,"results":"9482","hashOfConfig":"8231"},{"size":1749,"mtime":1786084509773,"results":"9483","hashOfConfig":"8231"},{"size":1640,"mtime":1786084509773,"results":"9484","hashOfConfig":"8231"},{"size":905,"mtime":1786084509773,"results":"9485","hashOfConfig":"8231"},{"size":22639,"mtime":1786084509774,"results":"9486","hashOfConfig":"8231"},{"size":2507,"mtime":1786084509783,"results":"9487","hashOfConfig":"8189"},{"size":108,"mtime":1786084509783,"results":"9488","hashOfConfig":"8216"},{"size":154,"mtime":1786084509783,"results":"9489","hashOfConfig":"8216"},{"size":5495,"mtime":1786084509820,"results":"9490","hashOfConfig":"8216"},{"size":410,"mtime":1786084509868,"results":"9491","hashOfConfig":"8189"},{"size":2255,"mtime":1786084509868,"results":"9492","hashOfConfig":"9493"},{"size":54186,"mtime":1786084509869,"results":"9494","hashOfConfig":"9493"},{"size":2510,"mtime":1786084509869,"results":"9495","hashOfConfig":"9493"},{"size":4467,"mtime":1786084509869,"results":"9496","hashOfConfig":"9493"},{"size":4384,"mtime":1786084509869,"results":"9497","hashOfConfig":"9493"},{"size":7432,"mtime":1786084509869,"results":"9498","hashOfConfig":"9493"},{"size":14708,"mtime":1786084509870,"results":"9499","hashOfConfig":"9493"},{"size":4184,"mtime":1786084509870,"results":"9500","hashOfConfig":"9493"},{"size":1751,"mtime":1786084509870,"results":"9501","hashOfConfig":"9493"},{"size":2039,"mtime":1786084509871,"results":"9502","hashOfConfig":"9493"},{"size":953,"mtime":1786084509871,"results":"9503","hashOfConfig":"9493"},{"size":2104,"mtime":1786084509871,"results":"9504","hashOfConfig":"9493"},{"size":173,"mtime":1786084509871,"results":"9505","hashOfConfig":"9493"},{"size":12308,"mtime":1786084509871,"results":"9506","hashOfConfig":"9493"},{"size":2768,"mtime":1786084509871,"results":"9507","hashOfConfig":"9493"},{"size":3058,"mtime":1786084509871,"results":"9508","hashOfConfig":"9493"},{"size":3587,"mtime":1786084509872,"results":"9509","hashOfConfig":"9493"},{"size":4905,"mtime":1786084509872,"results":"9510","hashOfConfig":"9493"},{"size":137,"mtime":1786084509872,"results":"9511","hashOfConfig":"9493"},{"size":6283,"mtime":1786084509872,"results":"9512","hashOfConfig":"9493"},{"size":10514,"mtime":1786084509872,"results":"9513","hashOfConfig":"9493"},{"size":40509,"mtime":1786084509873,"results":"9514","hashOfConfig":"9493"},{"size":14494,"mtime":1786084509873,"results":"9515","hashOfConfig":"9493"},{"size":14825,"mtime":1786084509873,"results":"9516","hashOfConfig":"9493"},{"size":29329,"mtime":1786084509873,"results":"9517","hashOfConfig":"9493"},{"size":5908,"mtime":1786084509874,"results":"9518","hashOfConfig":"9493"},{"size":148,"mtime":1786084509874,"results":"9519","hashOfConfig":"9493"},{"size":6256,"mtime":1786084509874,"results":"9520","hashOfConfig":"9493"},{"size":2986,"mtime":1786084509874,"results":"9521","hashOfConfig":"9493"},{"size":175,"mtime":1786084509874,"results":"9522","hashOfConfig":"9493"},{"size":144,"mtime":1786084509875,"results":"9523","hashOfConfig":"9493"},{"size":519,"mtime":1786084509875,"results":"9524","hashOfConfig":"9493"},{"size":5164,"mtime":1786084509875,"results":"9525","hashOfConfig":"9493"},{"size":155,"mtime":1786084509875,"results":"9526","hashOfConfig":"9493"},{"size":172,"mtime":1786084509875,"results":"9527","hashOfConfig":"9493"},{"size":152,"mtime":1786084509875,"results":"9528","hashOfConfig":"9493"},{"size":132538,"mtime":1786084509876,"results":"9529","hashOfConfig":"9493"},{"size":1039,"mtime":1786084509877,"results":"9530","hashOfConfig":"9493"},{"size":3950,"mtime":1786084509877,"results":"9531","hashOfConfig":"9493"},{"size":1911,"mtime":1786084509877,"results":"9532","hashOfConfig":"9493"},{"size":5767,"mtime":1786084509877,"results":"9533","hashOfConfig":"9493"},{"size":989,"mtime":1786084509877,"results":"9534","hashOfConfig":"9493"},{"size":1551,"mtime":1786084509877,"results":"9535","hashOfConfig":"9493"},{"size":1691,"mtime":1786084509877,"results":"9536","hashOfConfig":"9493"},{"size":2578,"mtime":1786084509877,"results":"9537","hashOfConfig":"9493"},{"size":140,"mtime":1786084509878,"results":"9538","hashOfConfig":"9493"},{"size":9047,"mtime":1786084509878,"results":"9539","hashOfConfig":"9493"},{"size":16294,"mtime":1786084509878,"results":"9540","hashOfConfig":"9493"},{"size":10765,"mtime":1786084509878,"results":"9541","hashOfConfig":"9493"},{"size":127,"mtime":1786084509878,"results":"9542","hashOfConfig":"9493"},{"size":127,"mtime":1786084509879,"results":"9543","hashOfConfig":"9493"},{"size":129,"mtime":1786084509879,"results":"9544","hashOfConfig":"9493"},{"size":149,"mtime":1786084509879,"results":"9545","hashOfConfig":"9493"},{"size":21288,"mtime":1786084509879,"results":"9546","hashOfConfig":"9493"},{"size":24829,"mtime":1786084509880,"results":"9547","hashOfConfig":"9493"},{"size":11619,"mtime":1786084509880,"results":"9548","hashOfConfig":"9493"},{"size":15521,"mtime":1786084509880,"results":"9549","hashOfConfig":"9493"},{"size":1144,"mtime":1786084509880,"results":"9550","hashOfConfig":"9493"},{"size":3558,"mtime":1786084509880,"results":"9551","hashOfConfig":"9493"},{"size":2737,"mtime":1786084509881,"results":"9552","hashOfConfig":"9493"},{"size":4513,"mtime":1786084509881,"results":"9553","hashOfConfig":"9493"},{"size":14767,"mtime":1786084509881,"results":"9554","hashOfConfig":"9493"},{"size":1168,"mtime":1786084509881,"results":"9555","hashOfConfig":"9493"},{"size":8894,"mtime":1786084509881,"results":"9556","hashOfConfig":"9493"},{"size":7098,"mtime":1786084509881,"results":"9557","hashOfConfig":"9493"},{"size":5960,"mtime":1786084509881,"results":"9558","hashOfConfig":"9493"},{"size":6934,"mtime":1786084509882,"results":"9559","hashOfConfig":"9493"},{"size":5039,"mtime":1786084509882,"results":"9560","hashOfConfig":"9493"},{"size":7847,"mtime":1786084509882,"results":"9561","hashOfConfig":"9493"},{"size":5747,"mtime":1786084509882,"results":"9562","hashOfConfig":"9493"},{"size":2418,"mtime":1786084509882,"results":"9563","hashOfConfig":"9493"},{"size":12128,"mtime":1786084509882,"results":"9564","hashOfConfig":"9493"},{"size":7262,"mtime":1786084509883,"results":"9565","hashOfConfig":"9493"},{"size":3602,"mtime":1786084509883,"results":"9566","hashOfConfig":"9493"},{"size":3698,"mtime":1786084509883,"results":"9567","hashOfConfig":"9493"},{"size":3529,"mtime":1786084509883,"results":"9568","hashOfConfig":"9493"},{"size":3333,"mtime":1786084509883,"results":"9569","hashOfConfig":"9493"},{"size":6408,"mtime":1786084509883,"results":"9570","hashOfConfig":"9493"},{"size":6246,"mtime":1786084509883,"results":"9571","hashOfConfig":"9493"},{"size":4864,"mtime":1786084509883,"results":"9572","hashOfConfig":"9493"},{"size":3785,"mtime":1786084509884,"results":"9573","hashOfConfig":"9493"},{"size":4057,"mtime":1786084509884,"results":"9574","hashOfConfig":"9493"},{"size":18590,"mtime":1786084509884,"results":"9575","hashOfConfig":"9493"},{"size":42471,"mtime":1786084509884,"results":"9576","hashOfConfig":"9493"},{"size":1192,"mtime":1786084509885,"results":"9577","hashOfConfig":"9493"},{"size":120,"mtime":1786084509885,"results":"9578","hashOfConfig":"9493"},{"size":31392,"mtime":1786084509885,"results":"9579","hashOfConfig":"9493"},{"size":4554,"mtime":1786084509885,"results":"9580","hashOfConfig":"9493"},{"size":2939,"mtime":1786084509885,"results":"9581","hashOfConfig":"9493"},{"size":1074,"mtime":1786084509885,"results":"9582","hashOfConfig":"9493"},{"size":3313,"mtime":1786084509886,"results":"9583","hashOfConfig":"9493"},{"size":703,"mtime":1786084509886,"results":"9584","hashOfConfig":"9493"},{"size":4083,"mtime":1786084509886,"results":"9585","hashOfConfig":"9493"},{"size":2455,"mtime":1786084509886,"results":"9586","hashOfConfig":"9493"},{"size":2073,"mtime":1786084509886,"results":"9587","hashOfConfig":"9493"},{"size":4961,"mtime":1786084509886,"results":"9588","hashOfConfig":"9493"},{"size":751,"mtime":1786084509886,"results":"9589","hashOfConfig":"9493"},{"size":2188,"mtime":1786084509886,"results":"9590","hashOfConfig":"9493"},{"size":266,"mtime":1786084509886,"results":"9591","hashOfConfig":"9493"},{"size":3267,"mtime":1786084509887,"results":"9592","hashOfConfig":"9493"},{"size":2194,"mtime":1786084509887,"results":"9593","hashOfConfig":"9493"},{"size":2118,"mtime":1786084509887,"results":"9594","hashOfConfig":"9493"},{"size":1692,"mtime":1786084509887,"results":"9595","hashOfConfig":"9493"},{"size":5898,"mtime":1786084509887,"results":"9596","hashOfConfig":"9493"},{"size":461,"mtime":1786084509887,"results":"9597","hashOfConfig":"9493"},{"size":261,"mtime":1786084509887,"results":"9598","hashOfConfig":"9493"},{"size":10077,"mtime":1786084509888,"results":"9599","hashOfConfig":"9493"},{"size":445,"mtime":1786084509888,"results":"9600","hashOfConfig":"9493"},{"size":20162,"mtime":1786084509888,"results":"9601","hashOfConfig":"9493"},{"size":1765,"mtime":1786084509888,"results":"9602","hashOfConfig":"9493"},{"size":3848,"mtime":1786084509888,"results":"9603","hashOfConfig":"9493"},{"size":2379,"mtime":1786084509889,"results":"9604","hashOfConfig":"9493"},{"size":25076,"mtime":1786084509889,"results":"9605","hashOfConfig":"9493"},{"size":3598,"mtime":1786084509889,"results":"9606","hashOfConfig":"9493"},{"size":3380,"mtime":1786084509889,"results":"9607","hashOfConfig":"9493"},{"size":19075,"mtime":1786084509890,"results":"9608","hashOfConfig":"9493"},{"size":9607,"mtime":1786084509890,"results":"9609","hashOfConfig":"9493"},{"size":36569,"mtime":1786084509890,"results":"9610","hashOfConfig":"9493"},{"size":17994,"mtime":1786084509890,"results":"9611","hashOfConfig":"9493"},{"size":15970,"mtime":1786084509891,"results":"9612","hashOfConfig":"9493"},{"size":28421,"mtime":1786084509891,"results":"9613","hashOfConfig":"9493"},{"size":24877,"mtime":1786084509891,"results":"9614","hashOfConfig":"9493"},{"size":23146,"mtime":1786084509892,"results":"9615","hashOfConfig":"9493"},{"size":18876,"mtime":1786084509892,"results":"9616","hashOfConfig":"9493"},{"size":22316,"mtime":1786084509892,"results":"9617","hashOfConfig":"9493"},{"size":11164,"mtime":1786084509892,"results":"9618","hashOfConfig":"9493"},{"size":2236,"mtime":1786084509892,"results":"9619","hashOfConfig":"9493"},{"size":183,"mtime":1786084509892,"results":"9620","hashOfConfig":"9493"},{"size":3666,"mtime":1786084509892,"results":"9621","hashOfConfig":"9493"},{"size":698,"mtime":1786084509892,"results":"9622","hashOfConfig":"9493"},{"size":253,"mtime":1786084509892,"results":"9623","hashOfConfig":"9493"},{"size":39682,"mtime":1786084509893,"results":"9624","hashOfConfig":"9493"},{"size":3555,"mtime":1786084509893,"results":"9625","hashOfConfig":"9493"},{"size":16019,"mtime":1786084509893,"results":"9626","hashOfConfig":"9493"},{"size":22469,"mtime":1786084509893,"results":"9627","hashOfConfig":"9493"},{"size":715,"mtime":1786084509893,"results":"9628","hashOfConfig":"9493"},{"size":12959,"mtime":1786084509894,"results":"9629","hashOfConfig":"9493"},{"size":1955,"mtime":1786084509894,"results":"9630","hashOfConfig":"9493"},{"size":1784,"mtime":1786084509894,"results":"9631","hashOfConfig":"9493"},{"size":7333,"mtime":1786084509894,"results":"9632","hashOfConfig":"9493"},{"size":2881,"mtime":1786084509894,"results":"9633","hashOfConfig":"9493"},{"size":264,"mtime":1786084509894,"results":"9634","hashOfConfig":"9493"},{"size":1209,"mtime":1786084509894,"results":"9635","hashOfConfig":"9493"},{"size":1837,"mtime":1786084509894,"results":"9636","hashOfConfig":"9493"},{"size":14778,"mtime":1786084509895,"results":"9637","hashOfConfig":"9493"},{"size":17820,"mtime":1786084509895,"results":"9638","hashOfConfig":"9493"},{"size":3003,"mtime":1786084509895,"results":"9639","hashOfConfig":"9493"},{"size":8529,"mtime":1786084509895,"results":"9640","hashOfConfig":"9493"},{"size":1638,"mtime":1786084509896,"results":"9641","hashOfConfig":"9493"},{"size":3065,"mtime":1786084509896,"results":"9642","hashOfConfig":"9493"},{"size":2902,"mtime":1786084509896,"results":"9643","hashOfConfig":"9493"},{"size":1307,"mtime":1786084509896,"results":"9644","hashOfConfig":"9493"},{"size":433,"mtime":1786084509896,"results":"9645","hashOfConfig":"9493"},{"size":195393,"mtime":1786084509898,"results":"9646","hashOfConfig":"9493"},{"size":131,"mtime":1786084509898,"results":"9647","hashOfConfig":"9493"},{"size":12872,"mtime":1786084509899,"results":"9648","hashOfConfig":"9493"},{"size":325,"mtime":1786084509899,"results":"9649","hashOfConfig":"9493"},{"size":1372,"mtime":1786084509899,"results":"9650","hashOfConfig":"9493"},{"size":3189,"mtime":1786084509899,"results":"9651","hashOfConfig":"9493"},{"size":3510,"mtime":1786084509899,"results":"9652","hashOfConfig":"9493"},{"size":220,"mtime":1786084509899,"results":"9653","hashOfConfig":"9493"},{"size":372,"mtime":1786084509899,"results":"9654","hashOfConfig":"9493"},{"size":277,"mtime":1786084509900,"results":"9655","hashOfConfig":"9493"},{"size":7207,"mtime":1786084509900,"results":"9656","hashOfConfig":"9493"},{"size":1214,"mtime":1786084509900,"results":"9657","hashOfConfig":"9493"},{"size":11040,"mtime":1786084509900,"results":"9658","hashOfConfig":"9493"},{"size":1585,"mtime":1786084509900,"results":"9659","hashOfConfig":"9493"},{"size":2104,"mtime":1786084509900,"results":"9660","hashOfConfig":"9493"},{"size":5584,"mtime":1786084509900,"results":"9661","hashOfConfig":"9493"},{"size":3850,"mtime":1786084509901,"results":"9662","hashOfConfig":"9493"},{"size":678,"mtime":1786084509901,"results":"9663","hashOfConfig":"9493"},{"size":592,"mtime":1786084509901,"results":"9664","hashOfConfig":"9493"},{"size":1473,"mtime":1786084509901,"results":"9665","hashOfConfig":"9493"},{"size":6679,"mtime":1786084509901,"results":"9666","hashOfConfig":"9493"},{"size":11408,"mtime":1786084509901,"results":"9667","hashOfConfig":"9493"},{"size":5554,"mtime":1786084509901,"results":"9668","hashOfConfig":"9493"},{"size":2165,"mtime":1786084509901,"results":"9669","hashOfConfig":"9493"},{"size":1027,"mtime":1786084509902,"results":"9670","hashOfConfig":"9493"},{"size":6760,"mtime":1786084509902,"results":"9671","hashOfConfig":"9493"},{"size":1969,"mtime":1786084509902,"results":"9672","hashOfConfig":"9493"},{"size":199,"mtime":1786084509902,"results":"9673","hashOfConfig":"9493"},{"size":10654,"mtime":1786084509902,"results":"9674","hashOfConfig":"9493"},{"size":156,"mtime":1786084509902,"results":"9675","hashOfConfig":"9493"},{"size":185,"mtime":1786084509903,"results":"9676","hashOfConfig":"9493"},{"size":13997,"mtime":1786084509903,"results":"9677","hashOfConfig":"9493"},{"size":10474,"mtime":1786084509903,"results":"9678","hashOfConfig":"9493"},{"size":168,"mtime":1786084509903,"results":"9679","hashOfConfig":"9493"},{"size":195,"mtime":1786084509903,"results":"9680","hashOfConfig":"9493"},{"size":187,"mtime":1786084509904,"results":"9681","hashOfConfig":"9493"},{"size":197,"mtime":1786084509904,"results":"9682","hashOfConfig":"9493"},{"size":9004,"mtime":1786084509904,"results":"9683","hashOfConfig":"9493"},{"size":164,"mtime":1786084509904,"results":"9684","hashOfConfig":"9493"},{"size":7787,"mtime":1786084509904,"results":"9685","hashOfConfig":"9493"},{"size":1466,"mtime":1786084509904,"results":"9686","hashOfConfig":"9493"},{"size":14668,"mtime":1786084509905,"results":"9687","hashOfConfig":"9493"},{"size":6537,"mtime":1786084509905,"results":"9688","hashOfConfig":"9493"},{"size":8327,"mtime":1786084509905,"results":"9689","hashOfConfig":"9493"},{"size":140,"mtime":1786084509905,"results":"9690","hashOfConfig":"9493"},{"size":204,"mtime":1786084509905,"results":"9691","hashOfConfig":"9493"},{"size":22084,"mtime":1786084509905,"results":"9692","hashOfConfig":"9493"},{"size":2571,"mtime":1786084509905,"results":"9693","hashOfConfig":"9493"},{"size":1753,"mtime":1786084509906,"results":"9694","hashOfConfig":"9493"},{"size":398,"mtime":1786084509906,"results":"9695","hashOfConfig":"9493"},{"size":189,"mtime":1786084509906,"results":"9696","hashOfConfig":"9493"},{"size":45332,"mtime":1786084509906,"results":"9697","hashOfConfig":"9493"},{"size":144,"mtime":1786084509906,"results":"9698","hashOfConfig":"9493"},{"size":7618,"mtime":1786084509907,"results":"9699","hashOfConfig":"9493"},{"size":6576,"mtime":1786084509907,"results":"9700","hashOfConfig":"9493"},{"size":584,"mtime":1786084509907,"results":"9701","hashOfConfig":"9493"},{"size":2321,"mtime":1786084509907,"results":"9702","hashOfConfig":"9493"},{"size":1354,"mtime":1786084509907,"results":"9703","hashOfConfig":"9493"},{"size":5294,"mtime":1786084509907,"results":"9704","hashOfConfig":"9493"},{"size":135,"mtime":1786084509907,"results":"9705","hashOfConfig":"9493"},{"size":151,"mtime":1786084509907,"results":"9706","hashOfConfig":"9493"},{"size":29067,"mtime":1786084509908,"results":"9707","hashOfConfig":"9493"},{"size":6287,"mtime":1786084509908,"results":"9708","hashOfConfig":"9493"},{"size":5104,"mtime":1786084509908,"results":"9709","hashOfConfig":"9493"},{"size":402,"mtime":1786084509908,"results":"9710","hashOfConfig":"9493"},{"size":3066,"mtime":1786084509908,"results":"9711","hashOfConfig":"9493"},{"size":6228,"mtime":1786084509908,"results":"9712","hashOfConfig":"9493"},{"size":2087,"mtime":1786084509908,"results":"9713","hashOfConfig":"9493"},{"size":6884,"mtime":1786084509909,"results":"9714","hashOfConfig":"9493"},{"size":44308,"mtime":1786084509909,"results":"9715","hashOfConfig":"9493"},{"size":2673,"mtime":1786084509909,"results":"9716","hashOfConfig":"9493"},{"size":19154,"mtime":1786084509909,"results":"9717","hashOfConfig":"9493"},{"size":3669,"mtime":1786084509909,"results":"9718","hashOfConfig":"9493"},{"size":3806,"mtime":1786084509910,"results":"9719","hashOfConfig":"9493"},{"size":2818,"mtime":1786084509910,"results":"9720","hashOfConfig":"9493"},{"size":1814,"mtime":1786084509910,"results":"9721","hashOfConfig":"9493"},{"size":1559,"mtime":1786084509910,"results":"9722","hashOfConfig":"9493"},{"size":2276,"mtime":1786084509910,"results":"9723","hashOfConfig":"9493"},{"size":181,"mtime":1786084509910,"results":"9724","hashOfConfig":"9493"},{"size":1485,"mtime":1786084509910,"results":"9725","hashOfConfig":"9493"},{"size":9399,"mtime":1786084509910,"results":"9726","hashOfConfig":"9493"},{"size":2162,"mtime":1786084509911,"results":"9727","hashOfConfig":"9493"},{"size":140,"mtime":1786084509911,"results":"9728","hashOfConfig":"9493"},{"size":33386,"mtime":1786084509911,"results":"9729","hashOfConfig":"9493"},{"size":97670,"mtime":1786084509912,"results":"9730","hashOfConfig":"9493"},{"size":6550,"mtime":1786084509912,"results":"9731","hashOfConfig":"9493"},{"size":7688,"mtime":1786084509913,"results":"9732","hashOfConfig":"9493"},{"size":13733,"mtime":1786084509913,"results":"9733","hashOfConfig":"9493"},{"size":20689,"mtime":1786084509913,"results":"9734","hashOfConfig":"9493"},{"size":22356,"mtime":1786084509913,"results":"9735","hashOfConfig":"9493"},{"size":6199,"mtime":1786084509914,"results":"9736","hashOfConfig":"9493"},{"size":18044,"mtime":1786084509915,"results":"9737","hashOfConfig":"9493"},{"size":145,"mtime":1786084509915,"results":"9738","hashOfConfig":"9493"},{"size":13817,"mtime":1786084509915,"results":"9739","hashOfConfig":"9493"},{"size":244,"mtime":1786084509916,"results":"9740","hashOfConfig":"9493"},{"size":2850,"mtime":1786084509916,"results":"9741","hashOfConfig":"9493"},{"size":15068,"mtime":1786084509916,"results":"9742","hashOfConfig":"9493"},{"size":20744,"mtime":1786084509916,"results":"9743","hashOfConfig":"9493"},{"size":10844,"mtime":1786084509917,"results":"9744","hashOfConfig":"9493"},{"size":51064,"mtime":1786084509917,"results":"9745","hashOfConfig":"9493"},{"size":967,"mtime":1786084509917,"results":"9746","hashOfConfig":"9493"},{"size":1796,"mtime":1786084509917,"results":"9747","hashOfConfig":"9493"},{"size":7353,"mtime":1786084509918,"results":"9748","hashOfConfig":"9493"},{"size":122,"mtime":1786084509918,"results":"9749","hashOfConfig":"9493"},{"size":4520,"mtime":1786084509918,"results":"9750","hashOfConfig":"9493"},{"size":149,"mtime":1786084509918,"results":"9751","hashOfConfig":"9493"},{"size":162,"mtime":1786084509919,"results":"9752","hashOfConfig":"9493"},{"size":9738,"mtime":1786084509919,"results":"9753","hashOfConfig":"9493"},{"size":145,"mtime":1786084509919,"results":"9754","hashOfConfig":"9493"},{"size":707,"mtime":1786084509919,"results":"9755","hashOfConfig":"9493"},{"size":11530,"mtime":1786084509919,"results":"9756","hashOfConfig":"9493"},{"size":7384,"mtime":1786084509920,"results":"9757","hashOfConfig":"9493"},{"size":2194,"mtime":1786084509920,"results":"9758","hashOfConfig":"9493"},{"size":3992,"mtime":1786084509920,"results":"9759","hashOfConfig":"9493"},{"size":4027,"mtime":1786084509920,"results":"9760","hashOfConfig":"9493"},{"size":8791,"mtime":1786084509920,"results":"9761","hashOfConfig":"9493"},{"size":20684,"mtime":1786084509921,"results":"9762","hashOfConfig":"9493"},{"size":2355,"mtime":1786084509921,"results":"9763","hashOfConfig":"9493"},{"size":1173,"mtime":1786084509921,"results":"9764","hashOfConfig":"9493"},{"size":5775,"mtime":1786084509921,"results":"9765","hashOfConfig":"9493"},{"size":4127,"mtime":1786084509921,"results":"9766","hashOfConfig":"9493"},{"size":5237,"mtime":1786084509921,"results":"9767","hashOfConfig":"9493"},{"size":1962,"mtime":1786084509921,"results":"9768","hashOfConfig":"9493"},{"size":6706,"mtime":1786084509921,"results":"9769","hashOfConfig":"9493"},{"size":6741,"mtime":1786084509921,"results":"9770","hashOfConfig":"9493"},{"size":4899,"mtime":1786084509922,"results":"9771","hashOfConfig":"9493"},{"size":4805,"mtime":1786084509922,"results":"9772","hashOfConfig":"9493"},{"size":5214,"mtime":1786084509922,"results":"9773","hashOfConfig":"9493"},{"size":323,"mtime":1786084509922,"results":"9774","hashOfConfig":"9493"},{"size":232,"mtime":1786084509922,"results":"9775","hashOfConfig":"9493"},{"size":5031,"mtime":1786084509922,"results":"9776","hashOfConfig":"9493"},{"size":6712,"mtime":1786084509922,"results":"9777","hashOfConfig":"9493"},{"size":1694,"mtime":1786084509922,"results":"9778","hashOfConfig":"9493"},{"size":4621,"mtime":1786084509923,"results":"9779","hashOfConfig":"9493"},{"size":16447,"mtime":1786084509923,"results":"9780","hashOfConfig":"9493"},{"size":4270,"mtime":1786084509923,"results":"9781","hashOfConfig":"9493"},{"size":3902,"mtime":1786084509923,"results":"9782","hashOfConfig":"9493"},{"size":5014,"mtime":1786084509923,"results":"9783","hashOfConfig":"9493"},{"size":23310,"mtime":1786084509923,"results":"9784","hashOfConfig":"9493"},{"size":4969,"mtime":1786084509923,"results":"9785","hashOfConfig":"9493"},{"size":1759,"mtime":1786084509924,"results":"9786","hashOfConfig":"9493"},{"size":2028,"mtime":1786084509924,"results":"9787","hashOfConfig":"9493"},{"size":3203,"mtime":1786084509924,"results":"9788","hashOfConfig":"9493"},{"size":14537,"mtime":1786084509924,"results":"9789","hashOfConfig":"9493"},{"size":3547,"mtime":1786084509924,"results":"9790","hashOfConfig":"9493"},{"size":8910,"mtime":1786084509924,"results":"9791","hashOfConfig":"9493"},{"size":1807,"mtime":1786084509925,"results":"9792","hashOfConfig":"9493"},{"size":3255,"mtime":1786084509925,"results":"9793","hashOfConfig":"9493"},{"size":5465,"mtime":1786084509925,"results":"9794","hashOfConfig":"9493"},{"size":11062,"mtime":1786084509925,"results":"9795","hashOfConfig":"9493"},{"size":134,"mtime":1786084509925,"results":"9796","hashOfConfig":"9493"},{"size":870,"mtime":1786084509925,"results":"9797","hashOfConfig":"9493"},{"size":21773,"mtime":1786084509925,"results":"9798","hashOfConfig":"9493"},{"size":2147,"mtime":1786084509926,"results":"9799","hashOfConfig":"9493"},{"size":151,"mtime":1786084509926,"results":"9800","hashOfConfig":"9493"},{"size":3987,"mtime":1786084509926,"results":"9801","hashOfConfig":"9493"},{"size":4040,"mtime":1786084509926,"results":"9802","hashOfConfig":"9493"},{"size":6167,"mtime":1786084509926,"results":"9803","hashOfConfig":"9493"},{"size":4646,"mtime":1786084509926,"results":"9804","hashOfConfig":"9493"},{"size":4656,"mtime":1786084509926,"results":"9805","hashOfConfig":"9493"},{"size":5457,"mtime":1786084509927,"results":"9806","hashOfConfig":"9493"},{"size":7280,"mtime":1786084509927,"results":"9807","hashOfConfig":"9493"},{"size":1727,"mtime":1786084509927,"results":"9808","hashOfConfig":"9493"},{"size":2968,"mtime":1786084509927,"results":"9809","hashOfConfig":"9493"},{"size":4969,"mtime":1786084509927,"results":"9810","hashOfConfig":"9493"},{"size":12758,"mtime":1786084509927,"results":"9811","hashOfConfig":"9493"},{"size":4418,"mtime":1786084509927,"results":"9812","hashOfConfig":"9493"},{"size":834,"mtime":1786084509928,"results":"9813","hashOfConfig":"9493"},{"size":9706,"mtime":1786084509928,"results":"9814","hashOfConfig":"9493"},{"size":2726,"mtime":1786084509928,"results":"9815","hashOfConfig":"9493"},{"size":3329,"mtime":1786084509928,"results":"9816","hashOfConfig":"9493"},{"size":31406,"mtime":1786084509928,"results":"9817","hashOfConfig":"9493"},{"size":10640,"mtime":1786084509929,"results":"9818","hashOfConfig":"9493"},{"size":15438,"mtime":1786084509929,"results":"9819","hashOfConfig":"9493"},{"size":14999,"mtime":1786084509929,"results":"9820","hashOfConfig":"9493"},{"size":10260,"mtime":1786084509930,"results":"9821","hashOfConfig":"9493"},{"size":1926,"mtime":1786084509930,"results":"9822","hashOfConfig":"9493"},{"size":4554,"mtime":1786084509930,"results":"9823","hashOfConfig":"9493"},{"size":3709,"mtime":1786084509930,"results":"9824","hashOfConfig":"9493"},{"size":4084,"mtime":1786084509930,"results":"9825","hashOfConfig":"9493"},{"size":3556,"mtime":1786084509930,"results":"9826","hashOfConfig":"9493"},{"size":398,"mtime":1786084509930,"results":"9827","hashOfConfig":"9493"},{"size":4796,"mtime":1786084509930,"results":"9828","hashOfConfig":"9493"},{"size":4727,"mtime":1786084509931,"results":"9829","hashOfConfig":"9493"},{"size":13693,"mtime":1786084509931,"results":"9830","hashOfConfig":"9493"},{"size":22985,"mtime":1786084509931,"results":"9831","hashOfConfig":"9493"},{"size":33937,"mtime":1786084509935,"results":"9832","hashOfConfig":"9493"},{"size":4434,"mtime":1786084509935,"results":"9833","hashOfConfig":"9493"},{"size":3480,"mtime":1786084509935,"results":"9834","hashOfConfig":"9493"},{"size":2731,"mtime":1786084509935,"results":"9835","hashOfConfig":"9493"},{"size":2741,"mtime":1786084509936,"results":"9836","hashOfConfig":"9493"},{"size":3050,"mtime":1786084509936,"results":"9837","hashOfConfig":"9493"},{"size":13191,"mtime":1786084509936,"results":"9838","hashOfConfig":"9493"},{"size":11932,"mtime":1786084509936,"results":"9839","hashOfConfig":"9493"},{"size":7999,"mtime":1786084509936,"results":"9840","hashOfConfig":"9493"},{"size":4464,"mtime":1786084509936,"results":"9841","hashOfConfig":"9493"},{"size":7693,"mtime":1786084509937,"results":"9842","hashOfConfig":"9493"},{"size":3156,"mtime":1786084509937,"results":"9843","hashOfConfig":"9493"},{"size":894,"mtime":1786084509937,"results":"9844","hashOfConfig":"9493"},{"size":4952,"mtime":1786084509937,"results":"9845","hashOfConfig":"9493"},{"size":4973,"mtime":1786084509937,"results":"9846","hashOfConfig":"9493"},{"size":17242,"mtime":1786084509937,"results":"9847","hashOfConfig":"9493"},{"size":4290,"mtime":1786084509938,"results":"9848","hashOfConfig":"9493"},{"size":38704,"mtime":1786084509938,"results":"9849","hashOfConfig":"9493"},{"size":14769,"mtime":1786084509938,"results":"9850","hashOfConfig":"9493"},{"size":29207,"mtime":1786084509939,"results":"9851","hashOfConfig":"9493"},{"size":3736,"mtime":1786084509939,"results":"9852","hashOfConfig":"9493"},{"size":33877,"mtime":1786084509939,"results":"9853","hashOfConfig":"9493"},{"size":4365,"mtime":1786084509941,"results":"9854","hashOfConfig":"9493"},{"size":2629,"mtime":1786084509941,"results":"9855","hashOfConfig":"9493"},{"size":5181,"mtime":1786084509941,"results":"9856","hashOfConfig":"9493"},{"size":1906,"mtime":1786084509942,"results":"9857","hashOfConfig":"9493"},{"size":20359,"mtime":1786084509943,"results":"9858","hashOfConfig":"9493"},{"size":17453,"mtime":1786084509943,"results":"9859","hashOfConfig":"9493"},{"size":6426,"mtime":1786084509943,"results":"9860","hashOfConfig":"9493"},{"size":1793,"mtime":1786084509943,"results":"9861","hashOfConfig":"9493"},{"size":10102,"mtime":1786084509943,"results":"9862","hashOfConfig":"9493"},{"size":16871,"mtime":1786084509944,"results":"9863","hashOfConfig":"9493"},{"size":11567,"mtime":1786084509944,"results":"9864","hashOfConfig":"9493"},{"size":1287,"mtime":1786084509944,"results":"9865","hashOfConfig":"9493"},{"size":5227,"mtime":1786084509944,"results":"9866","hashOfConfig":"9493"},{"size":16230,"mtime":1786084509945,"results":"9867","hashOfConfig":"9493"},{"size":18295,"mtime":1786084509945,"results":"9868","hashOfConfig":"9493"},{"size":4526,"mtime":1786084509945,"results":"9869","hashOfConfig":"9493"},{"size":11227,"mtime":1786084509945,"results":"9870","hashOfConfig":"9493"},{"size":4001,"mtime":1786084509945,"results":"9871","hashOfConfig":"9493"},{"size":1459,"mtime":1786084509945,"results":"9872","hashOfConfig":"9493"},{"size":1618,"mtime":1786084509945,"results":"9873","hashOfConfig":"9493"},{"size":1898,"mtime":1786084509946,"results":"9874","hashOfConfig":"9493"},{"size":1925,"mtime":1786084509946,"results":"9875","hashOfConfig":"9493"},{"size":5239,"mtime":1786084509946,"results":"9876","hashOfConfig":"9493"},{"size":6131,"mtime":1786084509946,"results":"9877","hashOfConfig":"9493"},{"size":6745,"mtime":1786084509946,"results":"9878","hashOfConfig":"9493"},{"size":3227,"mtime":1786084509946,"results":"9879","hashOfConfig":"9493"},{"size":38766,"mtime":1786084509947,"results":"9880","hashOfConfig":"9493"},{"size":1703,"mtime":1786084509947,"results":"9881","hashOfConfig":"9493"},{"size":5721,"mtime":1786084509947,"results":"9882","hashOfConfig":"9493"},{"size":1516,"mtime":1786084509947,"results":"9883","hashOfConfig":"9493"},{"size":12797,"mtime":1786084509947,"results":"9884","hashOfConfig":"9493"},{"size":54554,"mtime":1786084509948,"results":"9885","hashOfConfig":"9493"},{"size":1813,"mtime":1786084509948,"results":"9886","hashOfConfig":"9493"},{"size":27080,"mtime":1786084509949,"results":"9887","hashOfConfig":"9493"},{"size":28938,"mtime":1786084509949,"results":"9888","hashOfConfig":"9493"},{"size":7495,"mtime":1786084509949,"results":"9889","hashOfConfig":"9493"},{"size":1934,"mtime":1786084509949,"results":"9890","hashOfConfig":"9493"},{"size":2257,"mtime":1786084509949,"results":"9891","hashOfConfig":"9493"},{"size":3869,"mtime":1786084509949,"results":"9892","hashOfConfig":"9493"},{"size":2229,"mtime":1786084509949,"results":"9893","hashOfConfig":"9493"},{"size":12984,"mtime":1786084509949,"results":"9894","hashOfConfig":"9493"},{"size":1953,"mtime":1786084509950,"results":"9895","hashOfConfig":"9493"},{"size":1677,"mtime":1786084509950,"results":"9896","hashOfConfig":"9493"},{"size":549,"mtime":1786084509950,"results":"9897","hashOfConfig":"9493"},{"size":644,"mtime":1786084509950,"results":"9898","hashOfConfig":"9493"},{"size":7015,"mtime":1786084509950,"results":"9899","hashOfConfig":"9493"},{"size":896,"mtime":1786084509950,"results":"9900","hashOfConfig":"9493"},{"size":2233,"mtime":1786084509950,"results":"9901","hashOfConfig":"9493"},{"size":1941,"mtime":1786084509950,"results":"9902","hashOfConfig":"9493"},{"size":1894,"mtime":1786084509950,"results":"9903","hashOfConfig":"9493"},{"size":1523,"mtime":1786084509950,"results":"9904","hashOfConfig":"9493"},{"size":959,"mtime":1786084509951,"results":"9905","hashOfConfig":"9493"},{"size":6036,"mtime":1786084509951,"results":"9906","hashOfConfig":"9493"},{"size":7278,"mtime":1786084509951,"results":"9907","hashOfConfig":"9493"},{"size":9539,"mtime":1786084509951,"results":"9908","hashOfConfig":"9493"},{"size":1889,"mtime":1786084509951,"results":"9909","hashOfConfig":"9493"},{"size":2387,"mtime":1786084509951,"results":"9910","hashOfConfig":"9493"},{"size":1590,"mtime":1786084509951,"results":"9911","hashOfConfig":"9493"},{"size":3962,"mtime":1786084509951,"results":"9912","hashOfConfig":"9493"},{"size":3910,"mtime":1786084509951,"results":"9913","hashOfConfig":"9493"},{"size":14238,"mtime":1786084509952,"results":"9914","hashOfConfig":"9493"},{"size":16318,"mtime":1786084509952,"results":"9915","hashOfConfig":"9493"},{"size":38115,"mtime":1786084509952,"results":"9916","hashOfConfig":"9493"},{"size":4989,"mtime":1786084509953,"results":"9917","hashOfConfig":"9493"},{"size":1953,"mtime":1786084509953,"results":"9918","hashOfConfig":"9493"},{"size":1425,"mtime":1786084509953,"results":"9919","hashOfConfig":"9493"},{"size":10563,"mtime":1786084509953,"results":"9920","hashOfConfig":"9493"},{"size":3344,"mtime":1786084509953,"results":"9921","hashOfConfig":"9493"},{"size":403,"mtime":1786084509953,"results":"9922","hashOfConfig":"9493"},{"size":4667,"mtime":1786084509953,"results":"9923","hashOfConfig":"9493"},{"size":395,"mtime":1786084509953,"results":"9924","hashOfConfig":"9493"},{"size":939,"mtime":1786084509953,"results":"9925","hashOfConfig":"9493"},{"size":35931,"mtime":1786084509954,"results":"9926","hashOfConfig":"9493"},{"size":300,"mtime":1786084509954,"results":"9927","hashOfConfig":"9493"},{"size":14993,"mtime":1786084509954,"results":"9928","hashOfConfig":"9493"},{"size":581,"mtime":1786084509954,"results":"9929","hashOfConfig":"9493"},{"size":6051,"mtime":1786084509954,"results":"9930","hashOfConfig":"9493"},{"size":1415,"mtime":1786084509954,"results":"9931","hashOfConfig":"9493"},{"size":6485,"mtime":1786084509955,"results":"9932","hashOfConfig":"9493"},{"size":6379,"mtime":1786084509955,"results":"9933","hashOfConfig":"9493"},{"size":22557,"mtime":1786084509955,"results":"9934","hashOfConfig":"9493"},{"size":646,"mtime":1786084509955,"results":"9935","hashOfConfig":"9493"},{"size":3475,"mtime":1786084509955,"results":"9936","hashOfConfig":"9493"},{"size":10832,"mtime":1786084509955,"results":"9937","hashOfConfig":"9493"},{"size":2360,"mtime":1786084509956,"results":"9938","hashOfConfig":"9493"},{"size":3024,"mtime":1786084509956,"results":"9939","hashOfConfig":"9493"},{"size":35180,"mtime":1786084509956,"results":"9940","hashOfConfig":"9493"},{"size":8485,"mtime":1786084509956,"results":"9941","hashOfConfig":"9493"},{"size":3935,"mtime":1786084509957,"results":"9942","hashOfConfig":"9493"},{"size":1167,"mtime":1786084509957,"results":"9943","hashOfConfig":"9493"},{"size":5993,"mtime":1786084509957,"results":"9944","hashOfConfig":"9493"},{"size":2933,"mtime":1786084509957,"results":"9945","hashOfConfig":"9493"},{"size":1203,"mtime":1786084509957,"results":"9946","hashOfConfig":"9493"},{"size":1218,"mtime":1786084509957,"results":"9947","hashOfConfig":"9493"},{"size":5262,"mtime":1786084509957,"results":"9948","hashOfConfig":"9493"},{"size":1715,"mtime":1786084509957,"results":"9949","hashOfConfig":"9493"},{"size":3802,"mtime":1786084509958,"results":"9950","hashOfConfig":"9493"},{"size":3250,"mtime":1786084509958,"results":"9951","hashOfConfig":"9493"},{"size":2054,"mtime":1786084509958,"results":"9952","hashOfConfig":"9493"},{"size":1251,"mtime":1786084509958,"results":"9953","hashOfConfig":"9493"},{"size":459,"mtime":1786084509958,"results":"9954","hashOfConfig":"9493"},{"size":651,"mtime":1786084509958,"results":"9955","hashOfConfig":"9493"},{"size":83124,"mtime":1786084509959,"results":"9956","hashOfConfig":"9493"},{"size":4661,"mtime":1786084509959,"results":"9957","hashOfConfig":"9493"},{"size":934,"mtime":1786084509959,"results":"9958","hashOfConfig":"9493"},{"size":3011,"mtime":1786084509959,"results":"9959","hashOfConfig":"9493"},{"size":22264,"mtime":1786084509959,"results":"9960","hashOfConfig":"9493"},{"size":2451,"mtime":1786084509960,"results":"9961","hashOfConfig":"9493"},{"size":5155,"mtime":1786084509960,"results":"9962","hashOfConfig":"9493"},{"size":2226,"mtime":1786084509960,"results":"9963","hashOfConfig":"9493"},{"size":1452,"mtime":1786084509960,"results":"9964","hashOfConfig":"9493"},{"size":4745,"mtime":1786084509960,"results":"9965","hashOfConfig":"9493"},{"size":7691,"mtime":1786084509960,"results":"9966","hashOfConfig":"9493"},{"size":3085,"mtime":1786084509960,"results":"9967","hashOfConfig":"9493"},{"size":14685,"mtime":1786084509961,"results":"9968","hashOfConfig":"9493"},{"size":1916,"mtime":1786084509961,"results":"9969","hashOfConfig":"9493"},{"size":4492,"mtime":1786084509961,"results":"9970","hashOfConfig":"9493"},{"size":5788,"mtime":1786084509961,"results":"9971","hashOfConfig":"9493"},{"size":3385,"mtime":1786084509961,"results":"9972","hashOfConfig":"9493"},{"size":2965,"mtime":1786084509961,"results":"9973","hashOfConfig":"9493"},{"size":3533,"mtime":1786084509961,"results":"9974","hashOfConfig":"9493"},{"size":3272,"mtime":1786084509961,"results":"9975","hashOfConfig":"9493"},{"size":2601,"mtime":1786084509961,"results":"9976","hashOfConfig":"9493"},{"size":2193,"mtime":1786084509962,"results":"9977","hashOfConfig":"9493"},{"size":2561,"mtime":1786084509962,"results":"9978","hashOfConfig":"9493"},{"size":715,"mtime":1786084509962,"results":"9979","hashOfConfig":"9493"},{"size":1086,"mtime":1786084509962,"results":"9980","hashOfConfig":"9493"},{"size":808,"mtime":1786084509962,"results":"9981","hashOfConfig":"9493"},{"size":707,"mtime":1786084509962,"results":"9982","hashOfConfig":"9493"},{"size":1589,"mtime":1786084509962,"results":"9983","hashOfConfig":"9493"},{"size":2214,"mtime":1786084509962,"results":"9984","hashOfConfig":"9493"},{"size":1086,"mtime":1786084509962,"results":"9985","hashOfConfig":"9493"},{"size":16082,"mtime":1786084509963,"results":"9986","hashOfConfig":"9493"},{"size":10021,"mtime":1786084509963,"results":"9987","hashOfConfig":"9493"},{"size":9798,"mtime":1786084509963,"results":"9988","hashOfConfig":"9493"},{"size":324,"mtime":1786084509963,"results":"9989","hashOfConfig":"9493"},{"size":44639,"mtime":1786084509964,"results":"9990","hashOfConfig":"9493"},{"size":5345,"mtime":1786084509964,"results":"9991","hashOfConfig":"9493"},{"size":169,"mtime":1786084509964,"results":"9992","hashOfConfig":"9493"},{"size":4841,"mtime":1786084509964,"results":"9993","hashOfConfig":"9493"},{"size":7761,"mtime":1786084509965,"results":"9994","hashOfConfig":"9493"},{"size":5972,"mtime":1786084509965,"results":"9995","hashOfConfig":"9493"},{"size":5405,"mtime":1786084509965,"results":"9996","hashOfConfig":"9493"},{"size":7538,"mtime":1786084509965,"results":"9997","hashOfConfig":"9493"},{"size":6818,"mtime":1786084509965,"results":"9998","hashOfConfig":"9493"},{"size":3056,"mtime":1786084509965,"results":"9999","hashOfConfig":"9493"},{"size":14551,"mtime":1786084509965,"results":"10000","hashOfConfig":"9493"},{"size":2307,"mtime":1786084509966,"results":"10001","hashOfConfig":"9493"},{"size":7482,"mtime":1786084509966,"results":"10002","hashOfConfig":"9493"},{"size":3366,"mtime":1786084509966,"results":"10003","hashOfConfig":"9493"},{"size":17190,"mtime":1786084509966,"results":"10004","hashOfConfig":"9493"},{"size":5470,"mtime":1786084509967,"results":"10005","hashOfConfig":"9493"},{"size":6071,"mtime":1786084509967,"results":"10006","hashOfConfig":"9493"},{"size":2657,"mtime":1786084509967,"results":"10007","hashOfConfig":"9493"},{"size":132,"mtime":1786084509967,"results":"10008","hashOfConfig":"9493"},{"size":162,"mtime":1786084509967,"results":"10009","hashOfConfig":"9493"},{"size":588,"mtime":1786084509967,"results":"10010","hashOfConfig":"9493"},{"size":1352,"mtime":1786084509967,"results":"10011","hashOfConfig":"9493"},{"size":154,"mtime":1786084509968,"results":"10012","hashOfConfig":"9493"},{"size":158,"mtime":1786084509968,"results":"10013","hashOfConfig":"9493"},{"size":10398,"mtime":1786084509968,"results":"10014","hashOfConfig":"9493"},{"size":1310,"mtime":1786084509968,"results":"10015","hashOfConfig":"9493"},{"size":32624,"mtime":1786084509969,"results":"10016","hashOfConfig":"9493"},{"size":17843,"mtime":1786084509969,"results":"10017","hashOfConfig":"9493"},{"size":4606,"mtime":1786084509969,"results":"10018","hashOfConfig":"9493"},{"size":9538,"mtime":1786084509969,"results":"10019","hashOfConfig":"9493"},{"size":5235,"mtime":1786084509969,"results":"10020","hashOfConfig":"9493"},{"size":8320,"mtime":1786084509969,"results":"10021","hashOfConfig":"9493"},{"size":5596,"mtime":1786084509970,"results":"10022","hashOfConfig":"9493"},{"size":10810,"mtime":1786084509970,"results":"10023","hashOfConfig":"9493"},{"size":5241,"mtime":1786084509970,"results":"10024","hashOfConfig":"9493"},{"size":7529,"mtime":1786084509970,"results":"10025","hashOfConfig":"9493"},{"size":35792,"mtime":1786084509970,"results":"10026","hashOfConfig":"9493"},{"size":4236,"mtime":1786084509971,"results":"10027","hashOfConfig":"9493"},{"size":33543,"mtime":1786084509971,"results":"10028","hashOfConfig":"9493"},{"size":4457,"mtime":1786084509971,"results":"10029","hashOfConfig":"9493"},{"size":5579,"mtime":1786084509971,"results":"10030","hashOfConfig":"9493"},{"size":2001,"mtime":1786084509972,"results":"10031","hashOfConfig":"9493"},{"size":7035,"mtime":1786084509972,"results":"10032","hashOfConfig":"9493"},{"size":8831,"mtime":1786084509972,"results":"10033","hashOfConfig":"9493"},{"size":18025,"mtime":1786084509972,"results":"10034","hashOfConfig":"9493"},{"size":3519,"mtime":1786084509972,"results":"10035","hashOfConfig":"9493"},{"size":8734,"mtime":1786084509973,"results":"10036","hashOfConfig":"9493"},{"size":2177,"mtime":1786084509973,"results":"10037","hashOfConfig":"9493"},{"size":35854,"mtime":1786084509973,"results":"10038","hashOfConfig":"9493"},{"size":16319,"mtime":1786084509973,"results":"10039","hashOfConfig":"9493"},{"size":6875,"mtime":1786084509973,"results":"10040","hashOfConfig":"9493"},{"size":15320,"mtime":1786084509974,"results":"10041","hashOfConfig":"9493"},{"size":13829,"mtime":1786084509974,"results":"10042","hashOfConfig":"9493"},{"size":16783,"mtime":1786084509974,"results":"10043","hashOfConfig":"9493"},{"size":12900,"mtime":1786084509975,"results":"10044","hashOfConfig":"9493"},{"size":12742,"mtime":1786084509975,"results":"10045","hashOfConfig":"9493"},{"size":9482,"mtime":1786084509975,"results":"10046","hashOfConfig":"9493"},{"size":4934,"mtime":1786084509975,"results":"10047","hashOfConfig":"9493"},{"size":36504,"mtime":1786084509976,"results":"10048","hashOfConfig":"9493"},{"size":4944,"mtime":1786084509976,"results":"10049","hashOfConfig":"9493"},{"size":1757,"mtime":1786084509976,"results":"10050","hashOfConfig":"9493"},{"size":8632,"mtime":1786084509976,"results":"10051","hashOfConfig":"9493"},{"size":453,"mtime":1786084509976,"results":"10052","hashOfConfig":"9493"},{"size":1479,"mtime":1786084509976,"results":"10053","hashOfConfig":"9493"},{"size":54088,"mtime":1786084509977,"results":"10054","hashOfConfig":"9493"},{"size":636,"mtime":1786084509977,"results":"10055","hashOfConfig":"9493"},{"size":2967,"mtime":1786084509977,"results":"10056","hashOfConfig":"9493"},{"size":5424,"mtime":1786084509977,"results":"10057","hashOfConfig":"9493"},{"size":5525,"mtime":1786084509978,"results":"10058","hashOfConfig":"9493"},{"size":2220,"mtime":1786084509978,"results":"10059","hashOfConfig":"9493"},{"size":39136,"mtime":1786084509978,"results":"10060","hashOfConfig":"9493"},{"size":4033,"mtime":1786084509978,"results":"10061","hashOfConfig":"9493"},{"size":9992,"mtime":1786084509978,"results":"10062","hashOfConfig":"9493"},{"size":64142,"mtime":1786084509979,"results":"10063","hashOfConfig":"9493"},{"size":19325,"mtime":1786084509979,"results":"10064","hashOfConfig":"9493"},{"size":4775,"mtime":1786084509979,"results":"10065","hashOfConfig":"9493"},{"size":26501,"mtime":1786084509980,"results":"10066","hashOfConfig":"9493"},{"size":5530,"mtime":1786084509980,"results":"10067","hashOfConfig":"9493"},{"size":56751,"mtime":1786084509981,"results":"10068","hashOfConfig":"9493"},{"size":6013,"mtime":1786084509981,"results":"10069","hashOfConfig":"9493"},{"size":3580,"mtime":1786084509981,"results":"10070","hashOfConfig":"9493"},{"size":6844,"mtime":1786084509981,"results":"10071","hashOfConfig":"9493"},{"size":8192,"mtime":1786084509981,"results":"10072","hashOfConfig":"9493"},{"size":5959,"mtime":1786084509982,"results":"10073","hashOfConfig":"9493"},{"size":5502,"mtime":1786084509982,"results":"10074","hashOfConfig":"9493"},{"size":2363,"mtime":1786084509982,"results":"10075","hashOfConfig":"9493"},{"size":16212,"mtime":1786084509982,"results":"10076","hashOfConfig":"9493"},{"size":2438,"mtime":1786084509982,"results":"10077","hashOfConfig":"9493"},{"size":9780,"mtime":1786084509982,"results":"10078","hashOfConfig":"9493"},{"size":5548,"mtime":1786084509982,"results":"10079","hashOfConfig":"9493"},{"size":2157,"mtime":1786084509982,"results":"10080","hashOfConfig":"9493"},{"size":20339,"mtime":1786084509983,"results":"10081","hashOfConfig":"9493"},{"size":4631,"mtime":1786084509983,"results":"10082","hashOfConfig":"9493"},{"size":835,"mtime":1786084509983,"results":"10083","hashOfConfig":"9493"},{"size":857,"mtime":1786084509983,"results":"10084","hashOfConfig":"9493"},{"size":578,"mtime":1786084509983,"results":"10085","hashOfConfig":"9493"},{"size":4745,"mtime":1786084509983,"results":"10086","hashOfConfig":"9493"},{"size":4788,"mtime":1786084509984,"results":"10087","hashOfConfig":"9493"},{"size":2512,"mtime":1786084509984,"results":"10088","hashOfConfig":"9493"},{"size":1205,"mtime":1786084509984,"results":"10089","hashOfConfig":"9493"},{"size":157,"mtime":1786084509984,"results":"10090","hashOfConfig":"9493"},{"size":160,"mtime":1786084509984,"results":"10091","hashOfConfig":"9493"},{"size":527,"mtime":1786084509984,"results":"10092","hashOfConfig":"9493"},{"size":1130,"mtime":1786084509984,"results":"10093","hashOfConfig":"9493"},{"size":135,"mtime":1786084509985,"results":"10094","hashOfConfig":"9493"},{"size":422,"mtime":1786084509985,"results":"10095","hashOfConfig":"9493"},{"size":1080,"mtime":1786084509985,"results":"10096","hashOfConfig":"9493"},{"size":146,"mtime":1786084509985,"results":"10097","hashOfConfig":"9493"},{"size":142,"mtime":1786084509985,"results":"10098","hashOfConfig":"9493"},{"size":141,"mtime":1786084509985,"results":"10099","hashOfConfig":"9493"},{"size":1221,"mtime":1786084509986,"results":"10100","hashOfConfig":"9493"},{"size":1481,"mtime":1786084509986,"results":"10101","hashOfConfig":"9493"},{"size":159,"mtime":1786084509986,"results":"10102","hashOfConfig":"9493"},{"size":22540,"mtime":1786084509986,"results":"10103","hashOfConfig":"9493"},{"size":13277,"mtime":1786084509986,"results":"10104","hashOfConfig":"9493"},{"size":15274,"mtime":1786084509987,"results":"10105","hashOfConfig":"9493"},{"size":8412,"mtime":1786084509987,"results":"10106","hashOfConfig":"9493"},{"size":10351,"mtime":1786084509987,"results":"10107","hashOfConfig":"9493"},{"size":4905,"mtime":1786084509987,"results":"10108","hashOfConfig":"9493"},{"size":2493,"mtime":1786084509987,"results":"10109","hashOfConfig":"9493"},{"size":1406,"mtime":1786084509987,"results":"10110","hashOfConfig":"9493"},{"size":6266,"mtime":1786084509987,"results":"10111","hashOfConfig":"9493"},{"size":3817,"mtime":1786084509988,"results":"10112","hashOfConfig":"9493"},{"size":2587,"mtime":1786084509988,"results":"10113","hashOfConfig":"9493"},{"size":15381,"mtime":1786084509988,"results":"10114","hashOfConfig":"9493"},{"size":3020,"mtime":1786084509988,"results":"10115","hashOfConfig":"9493"},{"size":535,"mtime":1786084509988,"results":"10116","hashOfConfig":"9493"},{"size":633,"mtime":1786084509988,"results":"10117","hashOfConfig":"9493"},{"size":592,"mtime":1786084509988,"results":"10118","hashOfConfig":"9493"},{"size":2274,"mtime":1786084509989,"results":"10119","hashOfConfig":"9493"},{"size":4481,"mtime":1786084509989,"results":"10120","hashOfConfig":"9493"},{"size":3733,"mtime":1786084509989,"results":"10121","hashOfConfig":"9493"},{"size":2137,"mtime":1786084509989,"results":"10122","hashOfConfig":"9493"},{"size":6963,"mtime":1786084509989,"results":"10123","hashOfConfig":"9493"},{"size":6169,"mtime":1786084509989,"results":"10124","hashOfConfig":"9493"},{"size":4755,"mtime":1786084509989,"results":"10125","hashOfConfig":"9493"},{"size":4234,"mtime":1786084509990,"results":"10126","hashOfConfig":"9493"},{"size":3388,"mtime":1786084509990,"results":"10127","hashOfConfig":"9493"},{"size":3724,"mtime":1786084509990,"results":"10128","hashOfConfig":"9493"},{"size":3480,"mtime":1786084509990,"results":"10129","hashOfConfig":"9493"},{"size":7036,"mtime":1786084509990,"results":"10130","hashOfConfig":"9493"},{"size":1916,"mtime":1786084509990,"results":"10131","hashOfConfig":"9493"},{"size":1058,"mtime":1786084509990,"results":"10132","hashOfConfig":"9493"},{"size":1100,"mtime":1786084509990,"results":"10133","hashOfConfig":"9493"},{"size":1124,"mtime":1786084509991,"results":"10134","hashOfConfig":"9493"},{"size":1033,"mtime":1786084509991,"results":"10135","hashOfConfig":"9493"},{"size":3256,"mtime":1786084509991,"results":"10136","hashOfConfig":"9493"},{"size":2225,"mtime":1786084509991,"results":"10137","hashOfConfig":"9493"},{"size":1410,"mtime":1786084509991,"results":"10138","hashOfConfig":"9493"},{"size":1234,"mtime":1786084509991,"results":"10139","hashOfConfig":"9493"},{"size":710,"mtime":1786084509991,"results":"10140","hashOfConfig":"9493"},{"size":1866,"mtime":1786084509991,"results":"10141","hashOfConfig":"9493"},{"size":2946,"mtime":1786084509991,"results":"10142","hashOfConfig":"9493"},{"size":669,"mtime":1786084509992,"results":"10143","hashOfConfig":"9493"},{"size":858,"mtime":1786084509992,"results":"10144","hashOfConfig":"9493"},{"size":1842,"mtime":1786084509992,"results":"10145","hashOfConfig":"9493"},{"size":596,"mtime":1786084509992,"results":"10146","hashOfConfig":"9493"},{"size":2269,"mtime":1786084509992,"results":"10147","hashOfConfig":"9493"},{"size":786,"mtime":1786084509992,"results":"10148","hashOfConfig":"9493"},{"size":2074,"mtime":1786084509992,"results":"10149","hashOfConfig":"9493"},{"size":2011,"mtime":1786084509992,"results":"10150","hashOfConfig":"9493"},{"size":2552,"mtime":1786084509993,"results":"10151","hashOfConfig":"9493"},{"size":3541,"mtime":1786084509993,"results":"10152","hashOfConfig":"9493"},{"size":887,"mtime":1786084509993,"results":"10153","hashOfConfig":"9493"},{"size":1459,"mtime":1786084509993,"results":"10154","hashOfConfig":"9493"},{"size":1342,"mtime":1786084509993,"results":"10155","hashOfConfig":"9493"},{"size":890,"mtime":1786084509993,"results":"10156","hashOfConfig":"9493"},{"size":2687,"mtime":1786084509993,"results":"10157","hashOfConfig":"9493"},{"size":6621,"mtime":1786084509993,"results":"10158","hashOfConfig":"9493"},{"size":1847,"mtime":1786084509993,"results":"10159","hashOfConfig":"9493"},{"size":1727,"mtime":1786084509993,"results":"10160","hashOfConfig":"9493"},{"size":5164,"mtime":1786084509994,"results":"10161","hashOfConfig":"9493"},{"size":3295,"mtime":1786084509994,"results":"10162","hashOfConfig":"9493"},{"size":318,"mtime":1786084509994,"results":"10163","hashOfConfig":"9493"},{"size":11258,"mtime":1786084509994,"results":"10164","hashOfConfig":"9493"},{"size":14856,"mtime":1786084509994,"results":"10165","hashOfConfig":"9493"},{"size":6588,"mtime":1786084509994,"results":"10166","hashOfConfig":"9493"},{"size":8238,"mtime":1786084509994,"results":"10167","hashOfConfig":"9493"},{"size":4501,"mtime":1786084509995,"results":"10168","hashOfConfig":"9493"},{"size":4888,"mtime":1786084509995,"results":"10169","hashOfConfig":"9493"},{"size":2741,"mtime":1786084509995,"results":"10170","hashOfConfig":"9493"},{"size":2573,"mtime":1786084509995,"results":"10171","hashOfConfig":"9493"},{"size":11503,"mtime":1786084509995,"results":"10172","hashOfConfig":"9493"},{"size":10825,"mtime":1786084509996,"results":"10173","hashOfConfig":"9493"},{"size":28003,"mtime":1786084509996,"results":"10174","hashOfConfig":"9493"},{"size":20209,"mtime":1786084509996,"results":"10175","hashOfConfig":"9493"},{"size":18974,"mtime":1786084509996,"results":"10176","hashOfConfig":"9493"},{"size":12949,"mtime":1786084509997,"results":"10177","hashOfConfig":"9493"},{"size":3567,"mtime":1786084509997,"results":"10178","hashOfConfig":"9493"},{"size":3943,"mtime":1786084509997,"results":"10179","hashOfConfig":"9493"},{"size":2034,"mtime":1786084509997,"results":"10180","hashOfConfig":"9493"},{"size":7899,"mtime":1786084509998,"results":"10181","hashOfConfig":"9493"},{"size":369,"mtime":1786084509998,"results":"10182","hashOfConfig":"9493"},{"size":2669,"mtime":1786084509998,"results":"10183","hashOfConfig":"9493"},{"size":39164,"mtime":1786084509998,"results":"10184","hashOfConfig":"9493"},{"size":5272,"mtime":1786084509998,"results":"10185","hashOfConfig":"9493"},{"size":80463,"mtime":1786084509999,"results":"10186","hashOfConfig":"9493"},{"size":27348,"mtime":1786084510000,"results":"10187","hashOfConfig":"9493"},{"size":8138,"mtime":1786084510000,"results":"10188","hashOfConfig":"9493"},{"size":5827,"mtime":1786084510000,"results":"10189","hashOfConfig":"9493"},{"size":12488,"mtime":1786084510000,"results":"10190","hashOfConfig":"9493"},{"size":5494,"mtime":1786084510001,"results":"10191","hashOfConfig":"9493"},{"size":4356,"mtime":1786084510001,"results":"10192","hashOfConfig":"9493"},{"size":8015,"mtime":1786084510001,"results":"10193","hashOfConfig":"9493"},{"size":881,"mtime":1786084510001,"results":"10194","hashOfConfig":"9493"},{"size":3929,"mtime":1786084510001,"results":"10195","hashOfConfig":"9493"},{"size":5919,"mtime":1786084510002,"results":"10196","hashOfConfig":"9493"},{"size":1346,"mtime":1786084510002,"results":"10197","hashOfConfig":"9493"},{"size":295,"mtime":1786084510002,"results":"10198","hashOfConfig":"9493"},{"size":678,"mtime":1786084510002,"results":"10199","hashOfConfig":"9493"},{"size":42399,"mtime":1786084510002,"results":"10200","hashOfConfig":"9493"},{"size":4180,"mtime":1786084510003,"results":"10201","hashOfConfig":"9493"},{"size":17782,"mtime":1786084510003,"results":"10202","hashOfConfig":"9493"},{"size":5717,"mtime":1786084510003,"results":"10203","hashOfConfig":"9493"},{"size":1670,"mtime":1786084510003,"results":"10204","hashOfConfig":"9493"},{"size":4890,"mtime":1786084510003,"results":"10205","hashOfConfig":"9493"},{"size":9411,"mtime":1786084510004,"results":"10206","hashOfConfig":"9493"},{"size":7311,"mtime":1786084510004,"results":"10207","hashOfConfig":"9493"},{"size":2991,"mtime":1786084510004,"results":"10208","hashOfConfig":"9493"},{"size":1952,"mtime":1786084510004,"results":"10209","hashOfConfig":"9493"},{"size":25936,"mtime":1786084510005,"results":"10210","hashOfConfig":"9493"},{"size":3797,"mtime":1786084510005,"results":"10211","hashOfConfig":"9493"},{"size":4520,"mtime":1786084510005,"results":"10212","hashOfConfig":"9493"},{"size":124,"mtime":1786084510005,"results":"10213","hashOfConfig":"9493"},{"size":9424,"mtime":1786084510006,"results":"10214","hashOfConfig":"9493"},{"size":9829,"mtime":1786084510006,"results":"10215","hashOfConfig":"9493"},{"size":10750,"mtime":1786084510006,"results":"10216","hashOfConfig":"9493"},{"size":2027,"mtime":1786084510006,"results":"10217","hashOfConfig":"9493"},{"size":5591,"mtime":1786084510006,"results":"10218","hashOfConfig":"9493"},{"size":3034,"mtime":1786084510006,"results":"10219","hashOfConfig":"9493"},{"size":1325,"mtime":1786084510007,"results":"10220","hashOfConfig":"9493"},{"size":764,"mtime":1786084510007,"results":"10221","hashOfConfig":"9493"},{"size":1719,"mtime":1786084510007,"results":"10222","hashOfConfig":"9493"},{"size":2137,"mtime":1786084510007,"results":"10223","hashOfConfig":"9493"},{"size":2355,"mtime":1786084510007,"results":"10224","hashOfConfig":"9493"},{"size":543,"mtime":1786084510007,"results":"10225","hashOfConfig":"9493"},{"size":1272,"mtime":1786084510007,"results":"10226","hashOfConfig":"9493"},{"size":1661,"mtime":1786084510008,"results":"10227","hashOfConfig":"9493"},{"size":5260,"mtime":1786084510008,"results":"10228","hashOfConfig":"9493"},{"size":3778,"mtime":1786084510008,"results":"10229","hashOfConfig":"9493"},{"size":3165,"mtime":1786084510008,"results":"10230","hashOfConfig":"9493"},{"size":3146,"mtime":1786084510008,"results":"10231","hashOfConfig":"9493"},{"size":2278,"mtime":1786084510008,"results":"10232","hashOfConfig":"9493"},{"size":136,"mtime":1786084510008,"results":"10233","hashOfConfig":"9493"},{"size":10636,"mtime":1786084510009,"results":"10234","hashOfConfig":"9493"},{"size":12181,"mtime":1786084510009,"results":"10235","hashOfConfig":"9493"},{"size":795,"mtime":1786084510009,"results":"10236","hashOfConfig":"9493"},{"size":857,"mtime":1786084510009,"results":"10237","hashOfConfig":"9493"},{"size":869,"mtime":1786084510009,"results":"10238","hashOfConfig":"9493"},{"size":174,"mtime":1786084510009,"results":"10239","hashOfConfig":"9493"},{"size":4633,"mtime":1786084510010,"results":"10240","hashOfConfig":"9493"},{"size":104,"mtime":1786084510010,"results":"10241","hashOfConfig":"9493"},{"size":716,"mtime":1786084510010,"results":"10242","hashOfConfig":"9493"},{"size":104,"mtime":1786084510010,"results":"10243","hashOfConfig":"9493"},{"size":678,"mtime":1786084510011,"results":"10244","hashOfConfig":"9493"},{"size":104,"mtime":1786084510011,"results":"10245","hashOfConfig":"9493"},{"size":739,"mtime":1786084510011,"results":"10246","hashOfConfig":"9493"},{"size":104,"mtime":1786084510011,"results":"10247","hashOfConfig":"9493"},{"size":688,"mtime":1786084510011,"results":"10248","hashOfConfig":"9493"},{"size":104,"mtime":1786084510011,"results":"10249","hashOfConfig":"9493"},{"size":750,"mtime":1786084510012,"results":"10250","hashOfConfig":"9493"},{"size":104,"mtime":1786084510012,"results":"10251","hashOfConfig":"9493"},{"size":721,"mtime":1786084510012,"results":"10252","hashOfConfig":"9493"},{"size":104,"mtime":1786084510012,"results":"10253","hashOfConfig":"9493"},{"size":703,"mtime":1786084510012,"results":"10254","hashOfConfig":"9493"},{"size":104,"mtime":1786084510012,"results":"10255","hashOfConfig":"9493"},{"size":692,"mtime":1786084510013,"results":"10256","hashOfConfig":"9493"},{"size":9791,"mtime":1786084510013,"results":"10257","hashOfConfig":"9493"},{"size":1712,"mtime":1786084510013,"results":"10258","hashOfConfig":"9493"},{"size":1347,"mtime":1786084510014,"results":"10259","hashOfConfig":"9493"},{"size":624,"mtime":1786084510014,"results":"10260","hashOfConfig":"9493"},{"size":633,"mtime":1786084510014,"results":"10261","hashOfConfig":"9493"},{"size":1447,"mtime":1786084510015,"results":"10262","hashOfConfig":"9493"},{"size":5277,"mtime":1786084510015,"results":"10263","hashOfConfig":"9493"},{"size":1063,"mtime":1786084510015,"results":"10264","hashOfConfig":"9493"},{"size":2503,"mtime":1786084510016,"results":"10265","hashOfConfig":"9493"},{"size":1036,"mtime":1786084510016,"results":"10266","hashOfConfig":"9493"},{"size":714,"mtime":1786084510016,"results":"10267","hashOfConfig":"9493"},{"size":2189,"mtime":1786084510016,"results":"10268","hashOfConfig":"9493"},{"size":1468,"mtime":1786084510016,"results":"10269","hashOfConfig":"9493"},{"size":1306,"mtime":1786084510017,"results":"10270","hashOfConfig":"9493"},{"size":1085,"mtime":1786084510017,"results":"10271","hashOfConfig":"9493"},{"size":496,"mtime":1786084510017,"results":"10272","hashOfConfig":"9493"},{"size":5298,"mtime":1786084510017,"results":"10273","hashOfConfig":"9493"},{"size":500,"mtime":1786084510017,"results":"10274","hashOfConfig":"9493"},{"size":7769,"mtime":1786084510018,"results":"10275","hashOfConfig":"9493"},{"size":737,"mtime":1786084510018,"results":"10276","hashOfConfig":"9493"},{"size":8362,"mtime":1786084510018,"results":"10277","hashOfConfig":"9493"},{"size":3325,"mtime":1786084510018,"results":"10278","hashOfConfig":"9493"},{"size":705,"mtime":1786084510018,"results":"10279","hashOfConfig":"9493"},{"size":689,"mtime":1786084510019,"results":"10280","hashOfConfig":"9493"},{"size":684,"mtime":1786084510019,"results":"10281","hashOfConfig":"9493"},{"size":2164,"mtime":1786084510019,"results":"10282","hashOfConfig":"9493"},{"size":2555,"mtime":1786084510019,"results":"10283","hashOfConfig":"9493"},{"size":3388,"mtime":1786084510019,"results":"10284","hashOfConfig":"9493"},{"size":1055,"mtime":1786084510020,"results":"10285","hashOfConfig":"9493"},{"size":2693,"mtime":1786084510020,"results":"10286","hashOfConfig":"9493"},{"size":2810,"mtime":1786084510021,"results":"10287","hashOfConfig":"9493"},{"size":5466,"mtime":1786084510028,"results":"10288","hashOfConfig":"9493"},{"size":838,"mtime":1786084510029,"results":"10289","hashOfConfig":"9493"},{"size":2092,"mtime":1786084510029,"results":"10290","hashOfConfig":"9493"},{"size":1504,"mtime":1786084510029,"results":"10291","hashOfConfig":"9493"},{"size":1826,"mtime":1786084510021,"results":"10292","hashOfConfig":"9493"},{"size":7443,"mtime":1786084510021,"results":"10293","hashOfConfig":"9493"},{"size":2924,"mtime":1786084510022,"results":"10294","hashOfConfig":"9493"},{"size":5719,"mtime":1786084510022,"results":"10295","hashOfConfig":"9493"},{"size":2961,"mtime":1786084510022,"results":"10296","hashOfConfig":"9493"},{"size":4392,"mtime":1786084510022,"results":"10297","hashOfConfig":"9493"},{"size":7846,"mtime":1786084510023,"results":"10298","hashOfConfig":"9493"},{"size":8805,"mtime":1786084510023,"results":"10299","hashOfConfig":"9493"},{"size":7614,"mtime":1786084510023,"results":"10300","hashOfConfig":"9493"},{"size":8931,"mtime":1786084510023,"results":"10301","hashOfConfig":"9493"},{"size":13254,"mtime":1786084510023,"results":"10302","hashOfConfig":"9493"},{"size":2220,"mtime":1786084510024,"results":"10303","hashOfConfig":"9493"},{"size":8298,"mtime":1786084510024,"results":"10304","hashOfConfig":"9493"},{"size":6186,"mtime":1786084510024,"results":"10305","hashOfConfig":"9493"},{"size":959,"mtime":1786084510024,"results":"10306","hashOfConfig":"9493"},{"size":8385,"mtime":1786084510024,"results":"10307","hashOfConfig":"9493"},{"size":6176,"mtime":1786084510025,"results":"10308","hashOfConfig":"9493"},{"size":10617,"mtime":1786084510025,"results":"10309","hashOfConfig":"9493"},{"size":8807,"mtime":1786084510025,"results":"10310","hashOfConfig":"9493"},{"size":4309,"mtime":1786084510025,"results":"10311","hashOfConfig":"9493"},{"size":6944,"mtime":1786084510026,"results":"10312","hashOfConfig":"9493"},{"size":876,"mtime":1786084510026,"results":"10313","hashOfConfig":"9493"},{"size":8986,"mtime":1786084510026,"results":"10314","hashOfConfig":"9493"},{"size":12159,"mtime":1786084510026,"results":"10315","hashOfConfig":"9493"},{"size":5268,"mtime":1786084510026,"results":"10316","hashOfConfig":"9493"},{"size":5594,"mtime":1786084510027,"results":"10317","hashOfConfig":"9493"},{"size":2818,"mtime":1786084510027,"results":"10318","hashOfConfig":"9493"},{"size":7980,"mtime":1786084510027,"results":"10319","hashOfConfig":"9493"},{"size":6884,"mtime":1786084510027,"results":"10320","hashOfConfig":"9493"},{"size":7390,"mtime":1786084510027,"results":"10321","hashOfConfig":"9493"},{"size":1395,"mtime":1786084510028,"results":"10322","hashOfConfig":"9493"},{"size":6944,"mtime":1786084510028,"results":"10323","hashOfConfig":"9493"},{"size":2976,"mtime":1786084510028,"results":"10324","hashOfConfig":"9493"},{"size":2039,"mtime":1786084510029,"results":"10325","hashOfConfig":"9493"},{"size":2436,"mtime":1786084510029,"results":"10326","hashOfConfig":"9493"},{"size":1999,"mtime":1786084510030,"results":"10327","hashOfConfig":"9493"},{"size":3121,"mtime":1786084510030,"results":"10328","hashOfConfig":"9493"},{"size":3771,"mtime":1786084510030,"results":"10329","hashOfConfig":"9493"},{"size":10718,"mtime":1786084510031,"results":"10330","hashOfConfig":"9493"},{"size":7795,"mtime":1786084510031,"results":"10331","hashOfConfig":"9493"},{"size":617,"mtime":1786084510031,"results":"10332","hashOfConfig":"9493"},{"size":1817,"mtime":1786084510031,"results":"10333","hashOfConfig":"9493"},{"size":1721,"mtime":1786084510031,"results":"10334","hashOfConfig":"9493"},{"size":5543,"mtime":1786084510032,"results":"10335","hashOfConfig":"9493"},{"size":7005,"mtime":1786084510032,"results":"10336","hashOfConfig":"9493"},{"size":2394,"mtime":1786084510032,"results":"10337","hashOfConfig":"9493"},{"size":1904,"mtime":1786084510032,"results":"10338","hashOfConfig":"9493"},{"size":3047,"mtime":1786084510032,"results":"10339","hashOfConfig":"9493"},{"size":1028,"mtime":1786084510033,"results":"10340","hashOfConfig":"9493"},{"size":495,"mtime":1786084510033,"results":"10341","hashOfConfig":"9493"},{"size":14039,"mtime":1786084510033,"results":"10342","hashOfConfig":"9493"},{"size":2121,"mtime":1786084510033,"results":"10343","hashOfConfig":"9493"},{"size":420,"mtime":1786084510033,"results":"10344","hashOfConfig":"9493"},{"size":1346,"mtime":1786084510034,"results":"10345","hashOfConfig":"9493"},{"size":258,"mtime":1786084510034,"results":"10346","hashOfConfig":"9493"},{"size":65,"mtime":1786084510034,"results":"10347","hashOfConfig":"9493"},{"size":1674,"mtime":1786084510034,"results":"10348","hashOfConfig":"9493"},{"size":2750,"mtime":1786084510034,"results":"10349","hashOfConfig":"9493"},{"size":1916,"mtime":1786084510034,"results":"10350","hashOfConfig":"9493"},{"size":1798,"mtime":1786084510034,"results":"10351","hashOfConfig":"9493"},{"size":1343,"mtime":1786084510035,"results":"10352","hashOfConfig":"9493"},{"size":1137,"mtime":1786084510035,"results":"10353","hashOfConfig":"9493"},{"size":517,"mtime":1786084510035,"results":"10354","hashOfConfig":"9493"},{"size":2546,"mtime":1786084510035,"results":"10355","hashOfConfig":"9493"},{"size":1677,"mtime":1786084510035,"results":"10356","hashOfConfig":"9493"},{"size":874,"mtime":1786084510036,"results":"10357","hashOfConfig":"9493"},{"size":1338,"mtime":1786084510036,"results":"10358","hashOfConfig":"9493"},{"size":1595,"mtime":1786084510036,"results":"10359","hashOfConfig":"9493"},{"size":1793,"mtime":1786084510036,"results":"10360","hashOfConfig":"9493"},{"size":1360,"mtime":1786084510037,"results":"10361","hashOfConfig":"9493"},{"size":1985,"mtime":1786084510036,"results":"10362","hashOfConfig":"9493"},{"size":4647,"mtime":1786084510037,"results":"10363","hashOfConfig":"9493"},{"size":8032,"mtime":1786084510037,"results":"10364","hashOfConfig":"9493"},{"size":6097,"mtime":1786084510037,"results":"10365","hashOfConfig":"9493"},{"size":1999,"mtime":1786084510037,"results":"10366","hashOfConfig":"9493"},{"size":1245,"mtime":1786084510037,"results":"10367","hashOfConfig":"9493"},{"size":1830,"mtime":1786084510038,"results":"10368","hashOfConfig":"9493"},{"size":1184,"mtime":1786084510038,"results":"10369","hashOfConfig":"9493"},{"size":430,"mtime":1786084510038,"results":"10370","hashOfConfig":"9493"},{"size":3655,"mtime":1786084510038,"results":"10371","hashOfConfig":"9493"},{"size":783,"mtime":1786084510038,"results":"10372","hashOfConfig":"9493"},{"size":3406,"mtime":1786084510038,"results":"10373","hashOfConfig":"9493"},{"size":2720,"mtime":1786084510039,"results":"10374","hashOfConfig":"9493"},{"size":1213,"mtime":1786084510039,"results":"10375","hashOfConfig":"9493"},{"size":2321,"mtime":1786084510039,"results":"10376","hashOfConfig":"9493"},{"size":1049,"mtime":1786084510039,"results":"10377","hashOfConfig":"9493"},{"size":665,"mtime":1786084510039,"results":"10378","hashOfConfig":"9493"},{"size":887,"mtime":1786084510039,"results":"10379","hashOfConfig":"9493"},{"size":1797,"mtime":1786084510040,"results":"10380","hashOfConfig":"9493"},{"size":1400,"mtime":1786084510040,"results":"10381","hashOfConfig":"9493"},{"size":654,"mtime":1786084510040,"results":"10382","hashOfConfig":"9493"},{"size":958,"mtime":1786084510040,"results":"10383","hashOfConfig":"9493"},{"size":1106,"mtime":1786084510040,"results":"10384","hashOfConfig":"9493"},{"size":1690,"mtime":1786084510040,"results":"10385","hashOfConfig":"9493"},{"size":1649,"mtime":1786084510041,"results":"10386","hashOfConfig":"9493"},{"size":1333,"mtime":1786084510041,"results":"10387","hashOfConfig":"9493"},{"size":2266,"mtime":1786084510041,"results":"10388","hashOfConfig":"9493"},{"size":1091,"mtime":1786084510041,"results":"10389","hashOfConfig":"9493"},{"size":942,"mtime":1786084510041,"results":"10390","hashOfConfig":"9493"},{"size":1041,"mtime":1786084510041,"results":"10391","hashOfConfig":"9493"},{"size":1012,"mtime":1786084510042,"results":"10392","hashOfConfig":"9493"},{"size":2007,"mtime":1786084510042,"results":"10393","hashOfConfig":"9493"},{"size":2424,"mtime":1786084510042,"results":"10394","hashOfConfig":"9493"},{"size":2071,"mtime":1786084510042,"results":"10395","hashOfConfig":"9493"},{"size":3688,"mtime":1786084510042,"results":"10396","hashOfConfig":"9493"},{"size":1205,"mtime":1786084510042,"results":"10397","hashOfConfig":"9493"},{"size":2118,"mtime":1786084510043,"results":"10398","hashOfConfig":"9493"},{"size":1625,"mtime":1786084510043,"results":"10399","hashOfConfig":"9493"},{"size":929,"mtime":1786084510043,"results":"10400","hashOfConfig":"9493"},{"size":586,"mtime":1786084510043,"results":"10401","hashOfConfig":"9493"},{"size":836,"mtime":1786084510043,"results":"10402","hashOfConfig":"9493"},{"size":1380,"mtime":1786084510044,"results":"10403","hashOfConfig":"9493"},{"size":259,"mtime":1786084510044,"results":"10404","hashOfConfig":"9493"},{"size":2491,"mtime":1786084510044,"results":"10405","hashOfConfig":"9493"},{"size":4916,"mtime":1786084510044,"results":"10406","hashOfConfig":"9493"},{"size":9102,"mtime":1786084510044,"results":"10407","hashOfConfig":"9493"},{"size":4412,"mtime":1786084510045,"results":"10408","hashOfConfig":"9493"},{"size":21492,"mtime":1786084510045,"results":"10409","hashOfConfig":"9493"},{"size":5205,"mtime":1786084510045,"results":"10410","hashOfConfig":"9493"},{"size":1919,"mtime":1786084510045,"results":"10411","hashOfConfig":"9493"},{"size":1085,"mtime":1786084510046,"results":"10412","hashOfConfig":"9493"},{"size":1046,"mtime":1786084510046,"results":"10413","hashOfConfig":"9493"},{"size":7357,"mtime":1786084510046,"results":"10414","hashOfConfig":"9493"},{"size":1772,"mtime":1786084510046,"results":"10415","hashOfConfig":"9493"},{"size":2560,"mtime":1786084510046,"results":"10416","hashOfConfig":"9493"},{"size":2775,"mtime":1786084510046,"results":"10417","hashOfConfig":"9493"},{"size":2450,"mtime":1786084510047,"results":"10418","hashOfConfig":"9493"},{"size":1295,"mtime":1786084510047,"results":"10419","hashOfConfig":"9493"},{"size":5278,"mtime":1786084510047,"results":"10420","hashOfConfig":"9493"},{"size":2332,"mtime":1786084510047,"results":"10421","hashOfConfig":"9493"},{"size":1974,"mtime":1786084510047,"results":"10422","hashOfConfig":"9493"},{"size":2465,"mtime":1786084510048,"results":"10423","hashOfConfig":"9493"},{"size":1530,"mtime":1786084510048,"results":"10424","hashOfConfig":"9493"},{"size":4279,"mtime":1786084510048,"results":"10425","hashOfConfig":"9493"},{"size":4569,"mtime":1786084510048,"results":"10426","hashOfConfig":"9493"},{"size":1871,"mtime":1786084510049,"results":"10427","hashOfConfig":"9493"},{"size":2219,"mtime":1786084510049,"results":"10428","hashOfConfig":"9493"},{"size":1507,"mtime":1786084510049,"results":"10429","hashOfConfig":"9493"},{"size":601,"mtime":1786084510049,"results":"10430","hashOfConfig":"9493"},{"size":1502,"mtime":1786084510049,"results":"10431","hashOfConfig":"9493"},{"size":3145,"mtime":1786084510049,"results":"10432","hashOfConfig":"9493"},{"size":1878,"mtime":1786084510049,"results":"10433","hashOfConfig":"9493"},{"size":923,"mtime":1786084510050,"results":"10434","hashOfConfig":"9493"},{"size":2733,"mtime":1786084510050,"results":"10435","hashOfConfig":"9493"},{"size":714,"mtime":1786084510050,"results":"10436","hashOfConfig":"9493"},{"size":684,"mtime":1786084510050,"results":"10437","hashOfConfig":"9493"},{"size":672,"mtime":1786084510051,"results":"10438","hashOfConfig":"9493"},{"size":1842,"mtime":1786084510051,"results":"10439","hashOfConfig":"9493"},{"size":1834,"mtime":1786084510051,"results":"10440","hashOfConfig":"9493"},{"size":4422,"mtime":1786084510051,"results":"10441","hashOfConfig":"9493"},{"size":1514,"mtime":1786084510051,"results":"10442","hashOfConfig":"9493"},{"size":4808,"mtime":1786084510052,"results":"10443","hashOfConfig":"9493"},{"size":3910,"mtime":1786084510052,"results":"10444","hashOfConfig":"9493"},{"size":4188,"mtime":1786084510052,"results":"10445","hashOfConfig":"9493"},{"size":2795,"mtime":1786084510052,"results":"10446","hashOfConfig":"9493"},{"size":2592,"mtime":1786084510052,"results":"10447","hashOfConfig":"9493"},{"size":6039,"mtime":1786084510052,"results":"10448","hashOfConfig":"9493"},{"size":2803,"mtime":1786084510053,"results":"10449","hashOfConfig":"9493"},{"size":2038,"mtime":1786084510053,"results":"10450","hashOfConfig":"9493"},{"size":5914,"mtime":1786084510053,"results":"10451","hashOfConfig":"9493"},{"size":3548,"mtime":1786084510054,"results":"10452","hashOfConfig":"9493"},{"size":9311,"mtime":1786084510053,"results":"10453","hashOfConfig":"9493"},{"size":8153,"mtime":1786084510054,"results":"10454","hashOfConfig":"9493"},{"size":1141,"mtime":1786084510054,"results":"10455","hashOfConfig":"9493"},{"size":1859,"mtime":1786084510054,"results":"10456","hashOfConfig":"9493"},{"size":1381,"mtime":1786084510055,"results":"10457","hashOfConfig":"9493"},{"size":36056,"mtime":1786084510055,"results":"10458","hashOfConfig":"9493"},{"size":3471,"mtime":1786084510055,"results":"10459","hashOfConfig":"9493"},{"size":2939,"mtime":1786084510056,"results":"10460","hashOfConfig":"9493"},{"size":5835,"mtime":1786084510056,"results":"10461","hashOfConfig":"9493"},{"size":5348,"mtime":1786084510056,"results":"10462","hashOfConfig":"9493"},{"size":12371,"mtime":1786084510057,"results":"10463","hashOfConfig":"9493"},{"size":5052,"mtime":1786084510057,"results":"10464","hashOfConfig":"9493"},{"size":900,"mtime":1786084510057,"results":"10465","hashOfConfig":"9493"},{"size":4393,"mtime":1786084510057,"results":"10466","hashOfConfig":"9493"},{"size":24243,"mtime":1786084510058,"results":"10467","hashOfConfig":"9493"},{"size":10400,"mtime":1786084510058,"results":"10468","hashOfConfig":"9493"},{"size":1896,"mtime":1786084510058,"results":"10469","hashOfConfig":"9493"},{"size":4598,"mtime":1786084510058,"results":"10470","hashOfConfig":"9493"},{"size":4097,"mtime":1786084510059,"results":"10471","hashOfConfig":"9493"},{"size":4462,"mtime":1786084510059,"results":"10472","hashOfConfig":"9493"},{"size":4820,"mtime":1786084510059,"results":"10473","hashOfConfig":"9493"},{"size":7172,"mtime":1786084510060,"results":"10474","hashOfConfig":"9493"},{"size":4595,"mtime":1786084510060,"results":"10475","hashOfConfig":"9493"},{"size":4928,"mtime":1786084510060,"results":"10476","hashOfConfig":"9493"},{"size":6066,"mtime":1786084510061,"results":"10477","hashOfConfig":"9493"},{"size":5292,"mtime":1786084510061,"results":"10478","hashOfConfig":"9493"},{"size":7507,"mtime":1786084510061,"results":"10479","hashOfConfig":"9493"},{"size":1107,"mtime":1786084510062,"results":"10480","hashOfConfig":"9493"},{"size":3464,"mtime":1786084510062,"results":"10481","hashOfConfig":"9493"},{"size":1119,"mtime":1786084510062,"results":"10482","hashOfConfig":"9493"},{"size":2527,"mtime":1786084510062,"results":"10483","hashOfConfig":"9493"},{"size":1027,"mtime":1786084510062,"results":"10484","hashOfConfig":"9493"},{"size":3030,"mtime":1786084510062,"results":"10485","hashOfConfig":"9493"},{"size":1044,"mtime":1786084510063,"results":"10486","hashOfConfig":"9493"},{"size":1586,"mtime":1786084510063,"results":"10487","hashOfConfig":"9493"},{"size":495,"mtime":1786084510063,"results":"10488","hashOfConfig":"9493"},{"size":5378,"mtime":1786084510063,"results":"10489","hashOfConfig":"9493"},{"size":3055,"mtime":1786084510063,"results":"10490","hashOfConfig":"9493"},{"size":2494,"mtime":1786084510064,"results":"10491","hashOfConfig":"9493"},{"size":3202,"mtime":1786084510064,"results":"10492","hashOfConfig":"9493"},{"size":16755,"mtime":1786084510064,"results":"10493","hashOfConfig":"9493"},{"size":5758,"mtime":1786084510064,"results":"10494","hashOfConfig":"9493"},{"size":7551,"mtime":1786084510065,"results":"10495","hashOfConfig":"9493"},{"size":1201,"mtime":1786084510065,"results":"10496","hashOfConfig":"9493"},{"size":13348,"mtime":1786084510065,"results":"10497","hashOfConfig":"9493"},{"size":1941,"mtime":1786084510065,"results":"10498","hashOfConfig":"9493"},{"size":2900,"mtime":1786084510065,"results":"10499","hashOfConfig":"9493"},{"size":2373,"mtime":1786084510066,"results":"10500","hashOfConfig":"9493"},{"size":1395,"mtime":1786084510066,"results":"10501","hashOfConfig":"9493"},{"size":2195,"mtime":1786084510066,"results":"10502","hashOfConfig":"9493"},{"size":1388,"mtime":1786084510066,"results":"10503","hashOfConfig":"9493"},{"size":2768,"mtime":1786084510066,"results":"10504","hashOfConfig":"9493"},{"size":5531,"mtime":1786084510066,"results":"10505","hashOfConfig":"9493"},{"size":16573,"mtime":1786084510067,"results":"10506","hashOfConfig":"9493"},{"size":4152,"mtime":1786084510067,"results":"10507","hashOfConfig":"9493"},{"size":9975,"mtime":1786084510067,"results":"10508","hashOfConfig":"9493"},{"size":27484,"mtime":1786084510067,"results":"10509","hashOfConfig":"9493"},{"size":4377,"mtime":1786084510067,"results":"10510","hashOfConfig":"9493"},{"size":2351,"mtime":1786084510068,"results":"10511","hashOfConfig":"9493"},{"size":1919,"mtime":1786084510068,"results":"10512","hashOfConfig":"9493"},{"size":89395,"mtime":1786084510069,"results":"10513","hashOfConfig":"9493"},{"size":1482,"mtime":1786084510069,"results":"10514","hashOfConfig":"9493"},{"size":2876,"mtime":1786084510069,"results":"10515","hashOfConfig":"9493"},{"size":8761,"mtime":1786084510069,"results":"10516","hashOfConfig":"9493"},{"size":16003,"mtime":1786084510069,"results":"10517","hashOfConfig":"9493"},{"size":975,"mtime":1786084510070,"results":"10518","hashOfConfig":"9493"},{"size":22384,"mtime":1786084510070,"results":"10519","hashOfConfig":"9493"},{"size":606,"mtime":1786084510070,"results":"10520","hashOfConfig":"9493"},{"size":2016,"mtime":1786084510070,"results":"10521","hashOfConfig":"9493"},{"size":6849,"mtime":1786084510071,"results":"10522","hashOfConfig":"9493"},{"size":27942,"mtime":1786084510071,"results":"10523","hashOfConfig":"9493"},{"size":4502,"mtime":1786084510071,"results":"10524","hashOfConfig":"9493"},{"size":3192,"mtime":1786084510072,"results":"10525","hashOfConfig":"9493"},{"size":3629,"mtime":1786084510071,"results":"10526","hashOfConfig":"9493"},{"size":1707,"mtime":1786084510072,"results":"10527","hashOfConfig":"9493"},{"size":8507,"mtime":1786084510072,"results":"10528","hashOfConfig":"9493"},{"size":5932,"mtime":1786084510072,"results":"10529","hashOfConfig":"9493"},{"size":3264,"mtime":1786084510073,"results":"10530","hashOfConfig":"9493"},{"size":3767,"mtime":1786084510072,"results":"10531","hashOfConfig":"9493"},{"size":1725,"mtime":1786084510073,"results":"10532","hashOfConfig":"9493"},{"size":776,"mtime":1786084510073,"results":"10533","hashOfConfig":"9493"},{"size":3123,"mtime":1786084510073,"results":"10534","hashOfConfig":"9493"},{"size":3675,"mtime":1786084510073,"results":"10535","hashOfConfig":"9493"},{"size":1722,"mtime":1786084510073,"results":"10536","hashOfConfig":"9493"},{"size":3566,"mtime":1786084510074,"results":"10537","hashOfConfig":"9493"},{"size":1947,"mtime":1786084510074,"results":"10538","hashOfConfig":"9493"},{"size":4162,"mtime":1786084510074,"results":"10539","hashOfConfig":"9493"},{"size":1005,"mtime":1786084510074,"results":"10540","hashOfConfig":"9493"},{"size":1335,"mtime":1786084510074,"results":"10541","hashOfConfig":"9493"},{"size":515,"mtime":1786084510074,"results":"10542","hashOfConfig":"9493"},{"size":2147,"mtime":1786084510075,"results":"10543","hashOfConfig":"9493"},{"size":1151,"mtime":1786084510075,"results":"10544","hashOfConfig":"9493"},{"size":1732,"mtime":1786084510075,"results":"10545","hashOfConfig":"9493"},{"size":10121,"mtime":1786084510075,"results":"10546","hashOfConfig":"9493"},{"size":1496,"mtime":1786084510075,"results":"10547","hashOfConfig":"9493"},{"size":1556,"mtime":1786084510076,"results":"10548","hashOfConfig":"9493"},{"size":15186,"mtime":1786084510076,"results":"10549","hashOfConfig":"9493"},{"size":9595,"mtime":1786084510076,"results":"10550","hashOfConfig":"9493"},{"size":5205,"mtime":1786084510076,"results":"10551","hashOfConfig":"9493"},{"size":3814,"mtime":1786084510076,"results":"10552","hashOfConfig":"9493"},{"size":7544,"mtime":1786084510077,"results":"10553","hashOfConfig":"9493"},{"size":1872,"mtime":1786084510077,"results":"10554","hashOfConfig":"9493"},{"size":3389,"mtime":1786084510077,"results":"10555","hashOfConfig":"9493"},{"size":3840,"mtime":1786084510078,"results":"10556","hashOfConfig":"9493"},{"size":1952,"mtime":1786084510078,"results":"10557","hashOfConfig":"9493"},{"size":2639,"mtime":1786084510078,"results":"10558","hashOfConfig":"9493"},{"size":4556,"mtime":1786084510078,"results":"10559","hashOfConfig":"9493"},{"size":2419,"mtime":1786084510078,"results":"10560","hashOfConfig":"9493"},{"size":1677,"mtime":1786084510079,"results":"10561","hashOfConfig":"9493"},{"size":5725,"mtime":1786084510079,"results":"10562","hashOfConfig":"9493"},{"size":2476,"mtime":1786084510079,"results":"10563","hashOfConfig":"9493"},{"size":2689,"mtime":1786084510079,"results":"10564","hashOfConfig":"9493"},{"size":2946,"mtime":1786084510079,"results":"10565","hashOfConfig":"9493"},{"size":1491,"mtime":1786084510079,"results":"10566","hashOfConfig":"9493"},{"size":2941,"mtime":1786084510080,"results":"10567","hashOfConfig":"9493"},{"size":1857,"mtime":1786084510080,"results":"10568","hashOfConfig":"9493"},{"size":475,"mtime":1786084510080,"results":"10569","hashOfConfig":"9493"},{"size":3544,"mtime":1786084510080,"results":"10570","hashOfConfig":"9493"},{"size":2779,"mtime":1786084510080,"results":"10571","hashOfConfig":"9493"},{"size":2145,"mtime":1786084510081,"results":"10572","hashOfConfig":"9493"},{"size":2413,"mtime":1786084510081,"results":"10573","hashOfConfig":"9493"},{"size":1402,"mtime":1786084510081,"results":"10574","hashOfConfig":"9493"},{"size":9276,"mtime":1786084510081,"results":"10575","hashOfConfig":"9493"},{"size":492,"mtime":1786084510081,"results":"10576","hashOfConfig":"9493"},{"size":877,"mtime":1786084510082,"results":"10577","hashOfConfig":"9493"},{"size":7086,"mtime":1786084510082,"results":"10578","hashOfConfig":"9493"},{"size":1814,"mtime":1786084510082,"results":"10579","hashOfConfig":"9493"},{"size":2010,"mtime":1786084510082,"results":"10580","hashOfConfig":"9493"},{"size":973,"mtime":1786084510083,"results":"10581","hashOfConfig":"9493"},{"size":964,"mtime":1786084510083,"results":"10582","hashOfConfig":"9493"},{"size":262,"mtime":1786084510083,"results":"10583","hashOfConfig":"9493"},{"size":1914,"mtime":1786084510083,"results":"10584","hashOfConfig":"9493"},{"size":1338,"mtime":1786084510083,"results":"10585","hashOfConfig":"9493"},{"size":810,"mtime":1786084510083,"results":"10586","hashOfConfig":"9493"},{"size":1521,"mtime":1786084510084,"results":"10587","hashOfConfig":"9493"},{"size":809,"mtime":1786084510084,"results":"10588","hashOfConfig":"9493"},{"size":2928,"mtime":1786084510084,"results":"10589","hashOfConfig":"9493"},{"size":643,"mtime":1786084510084,"results":"10590","hashOfConfig":"9493"},{"size":1490,"mtime":1786084510084,"results":"10591","hashOfConfig":"9493"},{"size":4233,"mtime":1786084510084,"results":"10592","hashOfConfig":"9493"},{"size":2227,"mtime":1786084510085,"results":"10593","hashOfConfig":"9493"},{"size":1205,"mtime":1786084510085,"results":"10594","hashOfConfig":"9493"},{"size":973,"mtime":1786084510085,"results":"10595","hashOfConfig":"9493"},{"size":964,"mtime":1786084510085,"results":"10596","hashOfConfig":"9493"},{"size":259,"mtime":1786084510085,"results":"10597","hashOfConfig":"9493"},{"size":810,"mtime":1786084510085,"results":"10598","hashOfConfig":"9493"},{"size":808,"mtime":1786084510085,"results":"10599","hashOfConfig":"9493"},{"size":1591,"mtime":1786084510086,"results":"10600","hashOfConfig":"9493"},{"size":643,"mtime":1786084510086,"results":"10601","hashOfConfig":"9493"},{"size":1497,"mtime":1786084510086,"results":"10602","hashOfConfig":"9493"},{"size":1214,"mtime":1786084510086,"results":"10603","hashOfConfig":"9493"},{"size":974,"mtime":1786084510086,"results":"10604","hashOfConfig":"9493"},{"size":965,"mtime":1786084510086,"results":"10605","hashOfConfig":"9493"},{"size":260,"mtime":1786084510086,"results":"10606","hashOfConfig":"9493"},{"size":1353,"mtime":1786084510086,"results":"10607","hashOfConfig":"9493"},{"size":815,"mtime":1786084510087,"results":"10608","hashOfConfig":"9493"},{"size":813,"mtime":1786084510087,"results":"10609","hashOfConfig":"9493"},{"size":1647,"mtime":1786084510087,"results":"10610","hashOfConfig":"9493"},{"size":644,"mtime":1786084510087,"results":"10611","hashOfConfig":"9493"},{"size":1500,"mtime":1786084510087,"results":"10612","hashOfConfig":"9493"},{"size":1806,"mtime":1786084510087,"results":"10613","hashOfConfig":"9493"},{"size":3625,"mtime":1786084510087,"results":"10614","hashOfConfig":"9493"},{"size":1740,"mtime":1786084510088,"results":"10615","hashOfConfig":"9493"},{"size":7150,"mtime":1786084510088,"results":"10616","hashOfConfig":"9493"},{"size":1216,"mtime":1786084510088,"results":"10617","hashOfConfig":"9493"},{"size":1213,"mtime":1786084510088,"results":"10618","hashOfConfig":"9493"},{"size":971,"mtime":1786084510088,"results":"10619","hashOfConfig":"9493"},{"size":962,"mtime":1786084510088,"results":"10620","hashOfConfig":"9493"},{"size":257,"mtime":1786084510088,"results":"10621","hashOfConfig":"9493"},{"size":806,"mtime":1786084510089,"results":"10622","hashOfConfig":"9493"},{"size":804,"mtime":1786084510089,"results":"10623","hashOfConfig":"9493"},{"size":1583,"mtime":1786084510089,"results":"10624","hashOfConfig":"9493"},{"size":641,"mtime":1786084510089,"results":"10625","hashOfConfig":"9493"},{"size":1491,"mtime":1786084510089,"results":"10626","hashOfConfig":"9493"},{"size":1302,"mtime":1786084510089,"results":"10627","hashOfConfig":"9493"},{"size":969,"mtime":1786084510089,"results":"10628","hashOfConfig":"9493"},{"size":960,"mtime":1786084510090,"results":"10629","hashOfConfig":"9493"},{"size":255,"mtime":1786084510090,"results":"10630","hashOfConfig":"9493"},{"size":802,"mtime":1786084510090,"results":"10631","hashOfConfig":"9493"},{"size":800,"mtime":1786084510090,"results":"10632","hashOfConfig":"9493"},{"size":1575,"mtime":1786084510091,"results":"10633","hashOfConfig":"9493"},{"size":639,"mtime":1786084510091,"results":"10634","hashOfConfig":"9493"},{"size":1485,"mtime":1786084510091,"results":"10635","hashOfConfig":"9493"},{"size":1110,"mtime":1786084510091,"results":"10636","hashOfConfig":"9493"},{"size":741,"mtime":1786084510091,"results":"10637","hashOfConfig":"9493"},{"size":615,"mtime":1786084510092,"results":"10638","hashOfConfig":"9493"},{"size":2992,"mtime":1786084510092,"results":"10639","hashOfConfig":"9493"},{"size":3257,"mtime":1786084510092,"results":"10640","hashOfConfig":"9493"},{"size":5770,"mtime":1786084510092,"results":"10641","hashOfConfig":"9493"},{"size":2193,"mtime":1786084510092,"results":"10642","hashOfConfig":"9493"},{"size":4815,"mtime":1786084510092,"results":"10643","hashOfConfig":"9493"},{"size":4772,"mtime":1786084510093,"results":"10644","hashOfConfig":"9493"},{"size":1009,"mtime":1786084510093,"results":"10645","hashOfConfig":"9493"},{"size":1008,"mtime":1786084510093,"results":"10646","hashOfConfig":"9493"},{"size":4806,"mtime":1786084510093,"results":"10647","hashOfConfig":"9493"},{"size":2285,"mtime":1786084510093,"results":"10648","hashOfConfig":"9493"},{"size":1692,"mtime":1786084510093,"results":"10649","hashOfConfig":"9493"},{"size":57,"mtime":1786084510094,"results":"10650","hashOfConfig":"9493"},{"size":777,"mtime":1786084510094,"results":"10651","hashOfConfig":"9493"},{"size":631,"mtime":1786084510094,"results":"10652","hashOfConfig":"9493"},{"size":1703,"mtime":1786084510094,"results":"10653","hashOfConfig":"9493"},{"size":1772,"mtime":1786084510094,"results":"10654","hashOfConfig":"9493"},{"size":4479,"mtime":1786084510094,"results":"10655","hashOfConfig":"9493"},{"size":3368,"mtime":1786084510095,"results":"10656","hashOfConfig":"9493"},{"size":6472,"mtime":1786084510095,"results":"10657","hashOfConfig":"9493"},{"size":3734,"mtime":1786084510095,"results":"10658","hashOfConfig":"9493"},{"size":3889,"mtime":1786084510095,"results":"10659","hashOfConfig":"9493"},{"size":4094,"mtime":1786084510095,"results":"10660","hashOfConfig":"9493"},{"size":994,"mtime":1786084510096,"results":"10661","hashOfConfig":"9493"},{"size":2066,"mtime":1786084510096,"results":"10662","hashOfConfig":"9493"},{"size":3574,"mtime":1786084510096,"results":"10663","hashOfConfig":"9493"},{"size":2460,"mtime":1786084510096,"results":"10664","hashOfConfig":"9493"},{"size":559,"mtime":1786084510097,"results":"10665","hashOfConfig":"9493"},{"size":2517,"mtime":1786084510097,"results":"10666","hashOfConfig":"9493"},{"size":2062,"mtime":1786084510097,"results":"10667","hashOfConfig":"9493"},{"size":8700,"mtime":1786084510097,"results":"10668","hashOfConfig":"9493"},{"size":5531,"mtime":1786084510098,"results":"10669","hashOfConfig":"9493"},{"size":2586,"mtime":1786084510098,"results":"10670","hashOfConfig":"9493"},{"size":2717,"mtime":1786084510098,"results":"10671","hashOfConfig":"9493"},{"size":3410,"mtime":1786084510098,"results":"10672","hashOfConfig":"9493"},{"size":2449,"mtime":1786084510098,"results":"10673","hashOfConfig":"9493"},{"size":527,"mtime":1786084510099,"results":"10674","hashOfConfig":"9493"},{"size":992,"mtime":1786084510099,"results":"10675","hashOfConfig":"9493"},{"size":1859,"mtime":1786084510099,"results":"10676","hashOfConfig":"9493"},{"size":4086,"mtime":1786084510099,"results":"10677","hashOfConfig":"9493"},{"size":2508,"mtime":1786084510099,"results":"10678","hashOfConfig":"9493"},{"size":5101,"mtime":1786084510099,"results":"10679","hashOfConfig":"9493"},{"size":2558,"mtime":1786084510100,"results":"10680","hashOfConfig":"9493"},{"size":2093,"mtime":1786084510100,"results":"10681","hashOfConfig":"9493"},{"size":1712,"mtime":1786084510100,"results":"10682","hashOfConfig":"9493"},{"size":2187,"mtime":1786084510100,"results":"10683","hashOfConfig":"9493"},{"size":1636,"mtime":1786084510100,"results":"10684","hashOfConfig":"9493"},{"size":706,"mtime":1786084510100,"results":"10685","hashOfConfig":"9493"},{"size":1367,"mtime":1786084510100,"results":"10686","hashOfConfig":"9493"},{"size":5781,"mtime":1786084510101,"results":"10687","hashOfConfig":"9493"},{"size":2643,"mtime":1786084510101,"results":"10688","hashOfConfig":"9493"},{"size":7566,"mtime":1786084510101,"results":"10689","hashOfConfig":"9493"},{"size":14014,"mtime":1786084510101,"results":"10690","hashOfConfig":"9493"},{"size":9648,"mtime":1786084510101,"results":"10691","hashOfConfig":"9493"},{"size":2582,"mtime":1786084510102,"results":"10692","hashOfConfig":"9493"},{"size":9672,"mtime":1786084510102,"results":"10693","hashOfConfig":"9493"},{"size":12589,"mtime":1786084510102,"results":"10694","hashOfConfig":"9493"},{"size":750,"mtime":1786084510102,"results":"10695","hashOfConfig":"9493"},{"size":637,"mtime":1786084510102,"results":"10696","hashOfConfig":"9493"},{"size":869,"mtime":1786084510103,"results":"10697","hashOfConfig":"9493"},{"size":641,"mtime":1786084510103,"results":"10698","hashOfConfig":"9493"},{"size":991,"mtime":1786084510103,"results":"10699","hashOfConfig":"9493"},{"size":2309,"mtime":1786084510103,"results":"10700","hashOfConfig":"9493"},{"size":1014,"mtime":1786084510103,"results":"10701","hashOfConfig":"9493"},{"size":3543,"mtime":1786084510103,"results":"10702","hashOfConfig":"9493"},{"size":708,"mtime":1786084510103,"results":"10703","hashOfConfig":"9493"},{"size":4147,"mtime":1786084510103,"results":"10704","hashOfConfig":"9493"},{"size":1356,"mtime":1786084510104,"results":"10705","hashOfConfig":"9493"},{"size":4356,"mtime":1786084510104,"results":"10706","hashOfConfig":"9493"},{"size":2447,"mtime":1786084510104,"results":"10707","hashOfConfig":"9493"},{"size":1378,"mtime":1786084510104,"results":"10708","hashOfConfig":"9493"},{"size":4076,"mtime":1786084510104,"results":"10709","hashOfConfig":"9493"},{"size":4059,"mtime":1786084510104,"results":"10710","hashOfConfig":"9493"},{"size":20116,"mtime":1786084510104,"results":"10711","hashOfConfig":"9493"},{"size":1823,"mtime":1786084510105,"results":"10712","hashOfConfig":"9493"},{"size":4213,"mtime":1786084510105,"results":"10713","hashOfConfig":"9493"},{"size":1966,"mtime":1786084510105,"results":"10714","hashOfConfig":"9493"},{"size":2239,"mtime":1786084510105,"results":"10715","hashOfConfig":"9493"},{"size":442,"mtime":1786084510105,"results":"10716","hashOfConfig":"9493"},{"size":2789,"mtime":1786084510105,"results":"10717","hashOfConfig":"9493"},{"size":6170,"mtime":1786084510106,"results":"10718","hashOfConfig":"9493"},{"size":5330,"mtime":1786084510106,"results":"10719","hashOfConfig":"9493"},{"size":4791,"mtime":1786084510106,"results":"10720","hashOfConfig":"9493"},{"size":2335,"mtime":1786084510106,"results":"10721","hashOfConfig":"9493"},{"size":1785,"mtime":1786084510106,"results":"10722","hashOfConfig":"9493"},{"size":2115,"mtime":1786084510107,"results":"10723","hashOfConfig":"9493"},{"size":2173,"mtime":1786084510107,"results":"10724","hashOfConfig":"9493"},{"size":2585,"mtime":1786084510107,"results":"10725","hashOfConfig":"9493"},{"size":2247,"mtime":1786084510107,"results":"10726","hashOfConfig":"9493"},{"size":1032,"mtime":1786084510107,"results":"10727","hashOfConfig":"9493"},{"size":2567,"mtime":1786084510107,"results":"10728","hashOfConfig":"9493"},{"size":1585,"mtime":1786084510107,"results":"10729","hashOfConfig":"9493"},{"size":8524,"mtime":1786084510108,"results":"10730","hashOfConfig":"9493"},{"size":1400,"mtime":1786084510108,"results":"10731","hashOfConfig":"9493"},{"size":1717,"mtime":1786084510108,"results":"10732","hashOfConfig":"9493"},{"size":2580,"mtime":1786084510108,"results":"10733","hashOfConfig":"9493"},{"size":1021,"mtime":1786084510108,"results":"10734","hashOfConfig":"9493"},{"size":3031,"mtime":1786084510108,"results":"10735","hashOfConfig":"9493"},{"size":13002,"mtime":1786084510109,"results":"10736","hashOfConfig":"9493"},{"size":383,"mtime":1786084510109,"results":"10737","hashOfConfig":"9493"},{"size":1365,"mtime":1786084510109,"results":"10738","hashOfConfig":"9493"},{"size":1345,"mtime":1786084510109,"results":"10739","hashOfConfig":"9493"},{"size":1139,"mtime":1786084510110,"results":"10740","hashOfConfig":"9493"},{"size":1968,"mtime":1786084510110,"results":"10741","hashOfConfig":"9493"},{"size":2644,"mtime":1786084510110,"results":"10742","hashOfConfig":"9493"},{"size":2002,"mtime":1786084510110,"results":"10743","hashOfConfig":"9493"},{"size":2174,"mtime":1786084510110,"results":"10744","hashOfConfig":"9493"},{"size":871,"mtime":1786084510110,"results":"10745","hashOfConfig":"9493"},{"size":2438,"mtime":1786084510110,"results":"10746","hashOfConfig":"9493"},{"size":1043,"mtime":1786084510111,"results":"10747","hashOfConfig":"9493"},{"size":1011,"mtime":1786084510111,"results":"10748","hashOfConfig":"9493"},{"size":4958,"mtime":1786084510111,"results":"10749","hashOfConfig":"9493"},{"size":1623,"mtime":1786084510111,"results":"10750","hashOfConfig":"9493"},{"size":3285,"mtime":1786084510111,"results":"10751","hashOfConfig":"9493"},{"size":1987,"mtime":1786084510111,"results":"10752","hashOfConfig":"9493"},{"size":5853,"mtime":1786084510112,"results":"10753","hashOfConfig":"9493"},{"size":3375,"mtime":1786084510112,"results":"10754","hashOfConfig":"9493"},{"size":3007,"mtime":1786084510112,"results":"10755","hashOfConfig":"9493"},{"size":3018,"mtime":1786084510112,"results":"10756","hashOfConfig":"9493"},{"size":2211,"mtime":1786084510112,"results":"10757","hashOfConfig":"9493"},{"size":2910,"mtime":1786084510112,"results":"10758","hashOfConfig":"9493"},{"size":1600,"mtime":1786084510113,"results":"10759","hashOfConfig":"9493"},{"size":3043,"mtime":1786084510113,"results":"10760","hashOfConfig":"9493"},{"size":1423,"mtime":1786084510113,"results":"10761","hashOfConfig":"9493"},{"size":2051,"mtime":1786084510113,"results":"10762","hashOfConfig":"9493"},{"size":3339,"mtime":1786084510113,"results":"10763","hashOfConfig":"9493"},{"size":2900,"mtime":1786084510113,"results":"10764","hashOfConfig":"9493"},{"size":5272,"mtime":1786084510114,"results":"10765","hashOfConfig":"9493"},{"size":1851,"mtime":1786084510114,"results":"10766","hashOfConfig":"9493"},{"size":2059,"mtime":1786084510114,"results":"10767","hashOfConfig":"9493"},{"size":710,"mtime":1786084510114,"results":"10768","hashOfConfig":"9493"},{"size":1527,"mtime":1786084510114,"results":"10769","hashOfConfig":"9493"},{"size":1880,"mtime":1786084510114,"results":"10770","hashOfConfig":"9493"},{"size":2178,"mtime":1786084510115,"results":"10771","hashOfConfig":"9493"},{"size":3724,"mtime":1786084510115,"results":"10772","hashOfConfig":"9493"},{"size":1690,"mtime":1786084510115,"results":"10773","hashOfConfig":"9493"},{"size":4239,"mtime":1786084510115,"results":"10774","hashOfConfig":"9493"},{"size":1308,"mtime":1786084510115,"results":"10775","hashOfConfig":"9493"},{"size":1763,"mtime":1786084510115,"results":"10776","hashOfConfig":"9493"},{"size":4722,"mtime":1786084510116,"results":"10777","hashOfConfig":"9493"},{"size":1288,"mtime":1786084510116,"results":"10778","hashOfConfig":"9493"},{"size":6998,"mtime":1786084510116,"results":"10779","hashOfConfig":"9493"},{"size":1883,"mtime":1786084510116,"results":"10780","hashOfConfig":"9493"},{"size":1890,"mtime":1786084510116,"results":"10781","hashOfConfig":"9493"},{"size":635,"mtime":1786084510117,"results":"10782","hashOfConfig":"9493"},{"size":821,"mtime":1786084510117,"results":"10783","hashOfConfig":"9493"},{"size":822,"mtime":1786084510117,"results":"10784","hashOfConfig":"9493"},{"size":1620,"mtime":1786084510117,"results":"10785","hashOfConfig":"9493"},{"size":814,"mtime":1786084510117,"results":"10786","hashOfConfig":"9493"},{"size":636,"mtime":1786084510117,"results":"10787","hashOfConfig":"9493"},{"size":1278,"mtime":1786084510117,"results":"10788","hashOfConfig":"9493"},{"size":900,"mtime":1786084510118,"results":"10789","hashOfConfig":"9493"},{"size":3735,"mtime":1786084510118,"results":"10790","hashOfConfig":"9493"},{"size":1384,"mtime":1786084510118,"results":"10791","hashOfConfig":"9493"},{"size":32641,"mtime":1786084510119,"results":"10792","hashOfConfig":"9493"},{"size":1450,"mtime":1786084510119,"results":"10793","hashOfConfig":"9493"},{"size":2888,"mtime":1786084510119,"results":"10794","hashOfConfig":"9493"},{"size":1142,"mtime":1786084510119,"results":"10795","hashOfConfig":"9493"},{"size":714,"mtime":1786084510119,"results":"10796","hashOfConfig":"9493"},{"size":7038,"mtime":1786084510119,"results":"10797","hashOfConfig":"9493"},{"size":2517,"mtime":1786084510120,"results":"10798","hashOfConfig":"9493"},{"size":1546,"mtime":1786084510120,"results":"10799","hashOfConfig":"9493"},{"size":1261,"mtime":1786084510120,"results":"10800","hashOfConfig":"9493"},{"size":1982,"mtime":1786084510120,"results":"10801","hashOfConfig":"9493"},{"size":1725,"mtime":1786084510120,"results":"10802","hashOfConfig":"9493"},{"size":1705,"mtime":1786084510120,"results":"10803","hashOfConfig":"9493"},{"size":563,"mtime":1786084510121,"results":"10804","hashOfConfig":"9493"},{"size":550,"mtime":1786084510121,"results":"10805","hashOfConfig":"9493"},{"size":1979,"mtime":1786084510121,"results":"10806","hashOfConfig":"9493"},{"size":512,"mtime":1786084510121,"results":"10807","hashOfConfig":"9493"},{"size":1480,"mtime":1786084510121,"results":"10808","hashOfConfig":"9493"},{"size":1092,"mtime":1786084510121,"results":"10809","hashOfConfig":"9493"},{"size":1619,"mtime":1786084510122,"results":"10810","hashOfConfig":"9493"},{"size":5743,"mtime":1786084510122,"results":"10811","hashOfConfig":"9493"},{"size":620,"mtime":1786084510122,"results":"10812","hashOfConfig":"9493"},{"size":4013,"mtime":1786084510122,"results":"10813","hashOfConfig":"9493"},{"size":834,"mtime":1786084510122,"results":"10814","hashOfConfig":"9493"},{"size":3354,"mtime":1786084510122,"results":"10815","hashOfConfig":"9493"},{"size":2139,"mtime":1786084510123,"results":"10816","hashOfConfig":"9493"},{"size":1659,"mtime":1786084510123,"results":"10817","hashOfConfig":"9493"},{"size":910,"mtime":1786084510123,"results":"10818","hashOfConfig":"9493"},{"size":4444,"mtime":1786084510123,"results":"10819","hashOfConfig":"9493"},{"size":4320,"mtime":1786084510123,"results":"10820","hashOfConfig":"9493"},{"size":802,"mtime":1786084510123,"results":"10821","hashOfConfig":"9493"},{"size":1017,"mtime":1786084510123,"results":"10822","hashOfConfig":"9493"},{"size":1966,"mtime":1786084510124,"results":"10823","hashOfConfig":"9493"},{"size":2669,"mtime":1786084510124,"results":"10824","hashOfConfig":"9493"},{"size":2852,"mtime":1786084510124,"results":"10825","hashOfConfig":"9493"},{"size":7247,"mtime":1786084510124,"results":"10826","hashOfConfig":"9493"},{"size":5680,"mtime":1786084510124,"results":"10827","hashOfConfig":"9493"},{"size":1523,"mtime":1786084510125,"results":"10828","hashOfConfig":"9493"},{"size":938,"mtime":1786084510125,"results":"10829","hashOfConfig":"9493"},{"size":4281,"mtime":1786084510125,"results":"10830","hashOfConfig":"9493"},{"size":6375,"mtime":1786084510125,"results":"10831","hashOfConfig":"9493"},{"size":3955,"mtime":1786084510126,"results":"10832","hashOfConfig":"9493"},{"size":1999,"mtime":1786084510126,"results":"10833","hashOfConfig":"9493"},{"size":1562,"mtime":1786084510126,"results":"10834","hashOfConfig":"9493"},{"size":2224,"mtime":1786084510126,"results":"10835","hashOfConfig":"9493"},{"size":986,"mtime":1786084510126,"results":"10836","hashOfConfig":"9493"},{"size":1035,"mtime":1786084510126,"results":"10837","hashOfConfig":"9493"},{"size":1316,"mtime":1786084510127,"results":"10838","hashOfConfig":"9493"},{"size":3466,"mtime":1786084510127,"results":"10839","hashOfConfig":"9493"},{"size":10109,"mtime":1786084510127,"results":"10840","hashOfConfig":"9493"},{"size":1752,"mtime":1786084510127,"results":"10841","hashOfConfig":"9493"},{"size":5031,"mtime":1786084510127,"results":"10842","hashOfConfig":"9493"},{"size":2491,"mtime":1786084510127,"results":"10843","hashOfConfig":"9493"},{"size":4488,"mtime":1786084510128,"results":"10844","hashOfConfig":"9493"},{"size":5588,"mtime":1786084510128,"results":"10845","hashOfConfig":"9493"},{"size":3122,"mtime":1786084510128,"results":"10846","hashOfConfig":"9493"},{"size":1518,"mtime":1786084510128,"results":"10847","hashOfConfig":"9493"},{"size":1978,"mtime":1786084510128,"results":"10848","hashOfConfig":"9493"},{"size":3488,"mtime":1786084510129,"results":"10849","hashOfConfig":"9493"},{"size":20062,"mtime":1786084510129,"results":"10850","hashOfConfig":"9493"},{"size":11571,"mtime":1786084510129,"results":"10851","hashOfConfig":"9493"},{"size":9933,"mtime":1786084510129,"results":"10852","hashOfConfig":"9493"},{"size":4131,"mtime":1786084510130,"results":"10853","hashOfConfig":"9493"},{"size":2870,"mtime":1786084510130,"results":"10854","hashOfConfig":"9493"},{"size":1712,"mtime":1786084510130,"results":"10855","hashOfConfig":"9493"},{"size":706,"mtime":1786084510130,"results":"10856","hashOfConfig":"9493"},{"size":1817,"mtime":1786084510130,"results":"10857","hashOfConfig":"9493"},{"size":1142,"mtime":1786084510130,"results":"10858","hashOfConfig":"9493"},{"size":901,"mtime":1786084510130,"results":"10859","hashOfConfig":"9493"},{"size":2575,"mtime":1786084510131,"results":"10860","hashOfConfig":"9493"},{"size":2095,"mtime":1786084510131,"results":"10861","hashOfConfig":"9493"},{"size":1558,"mtime":1786084510131,"results":"10862","hashOfConfig":"9493"},{"size":6473,"mtime":1786084510131,"results":"10863","hashOfConfig":"9493"},{"size":2862,"mtime":1786084510131,"results":"10864","hashOfConfig":"9493"},{"size":1202,"mtime":1786084510131,"results":"10865","hashOfConfig":"9493"},{"size":1827,"mtime":1786084510131,"results":"10866","hashOfConfig":"9493"},{"size":66949,"mtime":1786084510132,"results":"10867","hashOfConfig":"9493"},{"size":15663,"mtime":1786084510132,"results":"10868","hashOfConfig":"9493"},{"size":2888,"mtime":1786084510132,"results":"10869","hashOfConfig":"9493"},{"size":4454,"mtime":1786084510133,"results":"10870","hashOfConfig":"9493"},{"size":1838,"mtime":1786084510133,"results":"10871","hashOfConfig":"9493"},{"size":4085,"mtime":1786084510133,"results":"10872","hashOfConfig":"9493"},{"size":6606,"mtime":1786084510133,"results":"10873","hashOfConfig":"9493"},{"size":2739,"mtime":1786084510133,"results":"10874","hashOfConfig":"9493"},{"size":10325,"mtime":1786084510133,"results":"10875","hashOfConfig":"9493"},{"size":2613,"mtime":1786084510133,"results":"10876","hashOfConfig":"9493"},{"size":2154,"mtime":1786084510133,"results":"10877","hashOfConfig":"9493"},{"size":3026,"mtime":1786084510133,"results":"10878","hashOfConfig":"9493"},{"size":1676,"mtime":1786084510133,"results":"10879","hashOfConfig":"9493"},{"size":2495,"mtime":1786084510134,"results":"10880","hashOfConfig":"9493"},{"size":965,"mtime":1786084510134,"results":"10881","hashOfConfig":"9493"},{"size":1893,"mtime":1786084510134,"results":"10882","hashOfConfig":"9493"},{"size":2535,"mtime":1786084510134,"results":"10883","hashOfConfig":"9493"},{"size":3968,"mtime":1786084510134,"results":"10884","hashOfConfig":"9493"},{"size":2455,"mtime":1786084510134,"results":"10885","hashOfConfig":"9493"},{"size":6822,"mtime":1786084510134,"results":"10886","hashOfConfig":"9493"},{"size":3434,"mtime":1786084510135,"results":"10887","hashOfConfig":"9493"},{"size":3270,"mtime":1786084510135,"results":"10888","hashOfConfig":"9493"},{"size":4243,"mtime":1786084510135,"results":"10889","hashOfConfig":"9493"},{"size":1926,"mtime":1786084510135,"results":"10890","hashOfConfig":"9493"},{"size":3765,"mtime":1786084510135,"results":"10891","hashOfConfig":"9493"},{"size":4368,"mtime":1786084510135,"results":"10892","hashOfConfig":"9493"},{"size":1230,"mtime":1786084510136,"results":"10893","hashOfConfig":"9493"},{"size":883,"mtime":1786084510136,"results":"10894","hashOfConfig":"9493"},{"size":1561,"mtime":1786084510136,"results":"10895","hashOfConfig":"9493"},{"size":4327,"mtime":1786084510136,"results":"10896","hashOfConfig":"9493"},{"size":12192,"mtime":1786084510136,"results":"10897","hashOfConfig":"9493"},{"size":1244,"mtime":1786084510137,"results":"10898","hashOfConfig":"9493"},{"size":2816,"mtime":1786084510137,"results":"10899","hashOfConfig":"9493"},{"size":13182,"mtime":1786084510137,"results":"10900","hashOfConfig":"9493"},{"size":4121,"mtime":1786084510137,"results":"10901","hashOfConfig":"9493"},{"size":856,"mtime":1786084510137,"results":"10902","hashOfConfig":"9493"},{"size":6309,"mtime":1786084510137,"results":"10903","hashOfConfig":"9493"},{"size":850,"mtime":1786084510137,"results":"10904","hashOfConfig":"9493"},{"size":4648,"mtime":1786084510138,"results":"10905","hashOfConfig":"9493"},{"size":528,"mtime":1786084510138,"results":"10906","hashOfConfig":"9493"},{"size":2096,"mtime":1786084510138,"results":"10907","hashOfConfig":"9493"},{"size":12524,"mtime":1786084510138,"results":"10908","hashOfConfig":"9493"},{"size":5052,"mtime":1786084510138,"results":"10909","hashOfConfig":"9493"},{"size":301,"mtime":1786084510138,"results":"10910","hashOfConfig":"9493"},{"size":10621,"mtime":1786084510139,"results":"10911","hashOfConfig":"9493"},{"size":7988,"mtime":1786084510139,"results":"10912","hashOfConfig":"9493"},{"size":353,"mtime":1786084510139,"results":"10913","hashOfConfig":"9493"},{"size":494,"mtime":1786084510139,"results":"10914","hashOfConfig":"9493"},{"size":1700,"mtime":1786084510140,"results":"10915","hashOfConfig":"9493"},{"size":157,"mtime":1786084510140,"results":"10916","hashOfConfig":"9493"},{"size":138,"mtime":1786084510140,"results":"10917","hashOfConfig":"9493"},{"size":14319,"mtime":1786084510140,"results":"10918","hashOfConfig":"9493"},{"size":376,"mtime":1786084510140,"results":"10919","hashOfConfig":"9493"},{"size":487,"mtime":1786084510140,"results":"10920","hashOfConfig":"9493"},{"size":616,"mtime":1786084510140,"results":"10921","hashOfConfig":"9493"},{"size":419,"mtime":1786084510140,"results":"10922","hashOfConfig":"9493"},{"size":99,"mtime":1786084510140,"results":"10923","hashOfConfig":"9493"},{"size":2152,"mtime":1786084510140,"results":"10924","hashOfConfig":"9493"},{"size":494,"mtime":1786084510141,"results":"10925","hashOfConfig":"9493"},{"size":73,"mtime":1786084510141,"results":"10926","hashOfConfig":"9493"},{"size":14326,"mtime":1786084510141,"results":"10927","hashOfConfig":"9493"},{"size":7770,"mtime":1786084510141,"results":"10928","hashOfConfig":"9493"},{"size":305,"mtime":1786084510141,"results":"10929","hashOfConfig":"9493"},{"size":10589,"mtime":1786084510142,"results":"10930","hashOfConfig":"9493"},{"size":6327,"mtime":1786084510142,"results":"10931","hashOfConfig":"9493"},{"size":353,"mtime":1786084510142,"results":"10932","hashOfConfig":"9493"},{"size":502,"mtime":1786084510142,"results":"10933","hashOfConfig":"9493"},{"size":1708,"mtime":1786084510142,"results":"10934","hashOfConfig":"9493"},{"size":157,"mtime":1786084510142,"results":"10935","hashOfConfig":"9493"},{"size":138,"mtime":1786084510142,"results":"10936","hashOfConfig":"9493"},{"size":1279,"mtime":1786084510142,"results":"10937","hashOfConfig":"9493"},{"size":376,"mtime":1786084510143,"results":"10938","hashOfConfig":"9493"},{"size":495,"mtime":1786084510143,"results":"10939","hashOfConfig":"9493"},{"size":620,"mtime":1786084510143,"results":"10940","hashOfConfig":"9493"},{"size":419,"mtime":1786084510143,"results":"10941","hashOfConfig":"9493"},{"size":128,"mtime":1786084510143,"results":"10942","hashOfConfig":"9493"},{"size":502,"mtime":1786084510143,"results":"10943","hashOfConfig":"9493"},{"size":76,"mtime":1786084510143,"results":"10944","hashOfConfig":"9493"},{"size":10241,"mtime":1786084510143,"results":"10945","hashOfConfig":"9493"},{"size":3234,"mtime":1786084510144,"results":"10946","hashOfConfig":"9493"},{"size":5816,"mtime":1786084510144,"results":"10947","hashOfConfig":"9493"},{"size":4626,"mtime":1786084510144,"results":"10948","hashOfConfig":"9493"},{"size":7764,"mtime":1786084510144,"results":"10949","hashOfConfig":"9493"},{"size":1526,"mtime":1786084510144,"results":"10950","hashOfConfig":"9493"},{"size":1669,"mtime":1786084510144,"results":"10951","hashOfConfig":"9493"},{"size":1537,"mtime":1786084510144,"results":"10952","hashOfConfig":"9493"},{"size":1205,"mtime":1786084510145,"results":"10953","hashOfConfig":"9493"},{"size":1207,"mtime":1786084510145,"results":"10954","hashOfConfig":"9493"},{"size":1409,"mtime":1786084510145,"results":"10955","hashOfConfig":"9493"},{"size":939,"mtime":1786084510145,"results":"10956","hashOfConfig":"9493"},{"size":4935,"mtime":1786084510145,"results":"10957","hashOfConfig":"9493"},{"size":935,"mtime":1786084510145,"results":"10958","hashOfConfig":"9493"},{"size":1155,"mtime":1786084510146,"results":"10959","hashOfConfig":"9493"},{"size":4450,"mtime":1786084510146,"results":"10960","hashOfConfig":"9493"},{"size":5578,"mtime":1786084510146,"results":"10961","hashOfConfig":"9493"},{"size":3447,"mtime":1786084510146,"results":"10962","hashOfConfig":"9493"},{"size":1422,"mtime":1786084510146,"results":"10963","hashOfConfig":"9493"},{"size":504,"mtime":1786084510146,"results":"10964","hashOfConfig":"9493"},{"size":3043,"mtime":1786084510146,"results":"10965","hashOfConfig":"9493"},{"size":3889,"mtime":1786084510147,"results":"10966","hashOfConfig":"9493"},{"size":6587,"mtime":1786084510147,"results":"10967","hashOfConfig":"9493"},{"size":7742,"mtime":1786084510147,"results":"10968","hashOfConfig":"9493"},{"size":596,"mtime":1786084510147,"results":"10969","hashOfConfig":"9493"},{"size":4617,"mtime":1786084510147,"results":"10970","hashOfConfig":"9493"},{"size":153,"mtime":1786084510148,"results":"10971","hashOfConfig":"9493"},{"size":657,"mtime":1786084510148,"results":"10972","hashOfConfig":"9493"},{"size":10698,"mtime":1786084510148,"results":"10973","hashOfConfig":"9493"},{"size":2147,"mtime":1786084510148,"results":"10974","hashOfConfig":"9493"},{"size":1809,"mtime":1786084510148,"results":"10975","hashOfConfig":"9493"},{"size":1546,"mtime":1786084510148,"results":"10976","hashOfConfig":"9493"},{"size":7120,"mtime":1786084510149,"results":"10977","hashOfConfig":"9493"},{"size":4653,"mtime":1786084510149,"results":"10978","hashOfConfig":"9493"},{"size":2810,"mtime":1786084510149,"results":"10979","hashOfConfig":"9493"},{"size":1427,"mtime":1786084510149,"results":"10980","hashOfConfig":"9493"},{"size":8760,"mtime":1786084510149,"results":"10981","hashOfConfig":"9493"},{"size":2786,"mtime":1786084510149,"results":"10982","hashOfConfig":"9493"},{"size":773,"mtime":1786084510150,"results":"10983","hashOfConfig":"9493"},{"size":1904,"mtime":1786084510150,"results":"10984","hashOfConfig":"9493"},{"size":4254,"mtime":1786084510150,"results":"10985","hashOfConfig":"9493"},{"size":6419,"mtime":1786084510150,"results":"10986","hashOfConfig":"9493"},{"size":4751,"mtime":1786084510151,"results":"10987","hashOfConfig":"9493"},{"size":5396,"mtime":1786084510151,"results":"10988","hashOfConfig":"9493"},{"size":2543,"mtime":1786084510151,"results":"10989","hashOfConfig":"9493"},{"size":3330,"mtime":1786084510151,"results":"10990","hashOfConfig":"9493"},{"size":4855,"mtime":1786084510151,"results":"10991","hashOfConfig":"9493"},{"size":4675,"mtime":1786084510151,"results":"10992","hashOfConfig":"9493"},{"size":6657,"mtime":1786084510151,"results":"10993","hashOfConfig":"9493"},{"size":173,"mtime":1786084510151,"results":"10994","hashOfConfig":"9493"},{"size":13903,"mtime":1786084510152,"results":"10995","hashOfConfig":"9493"},{"size":2296,"mtime":1786084510152,"results":"10996","hashOfConfig":"9493"},{"size":1320,"mtime":1786084510152,"results":"10997","hashOfConfig":"9493"},{"size":1692,"mtime":1786084510152,"results":"10998","hashOfConfig":"9493"},{"size":2530,"mtime":1786084510152,"results":"10999","hashOfConfig":"9493"},{"size":110,"mtime":1786084510152,"results":"11000","hashOfConfig":"9493"},{"size":5722,"mtime":1786084510152,"results":"11001","hashOfConfig":"9493"},{"size":6045,"mtime":1786084510153,"results":"11002","hashOfConfig":"9493"},{"size":3264,"mtime":1786084510153,"results":"11003","hashOfConfig":"9493"},{"size":6509,"mtime":1786084510153,"results":"11004","hashOfConfig":"11005"},{"size":4433,"mtime":1786084510153,"results":"11006","hashOfConfig":"11005"},{"size":505,"mtime":1786084510153,"results":"11007","hashOfConfig":"11005"},{"size":3704,"mtime":1786084510153,"results":"11008","hashOfConfig":"11005"},{"size":7630,"mtime":1786084510153,"results":"11009","hashOfConfig":"11005"},{"size":11585,"mtime":1786084510154,"results":"11010","hashOfConfig":"11005"},{"size":3351,"mtime":1786084510154,"results":"11011","hashOfConfig":"11005"},{"size":7713,"mtime":1786084510154,"results":"11012","hashOfConfig":"11005"},{"size":2740,"mtime":1786084510154,"results":"11013","hashOfConfig":"11005"},{"size":19205,"mtime":1786084510154,"results":"11014","hashOfConfig":"11005"},{"size":7745,"mtime":1786084510154,"results":"11015","hashOfConfig":"11005"},{"size":3952,"mtime":1786084510155,"results":"11016","hashOfConfig":"11005"},{"size":5247,"mtime":1786084510155,"results":"11017","hashOfConfig":"11005"},{"size":1210,"mtime":1786084510155,"results":"11018","hashOfConfig":"11005"},{"size":8827,"mtime":1786084510155,"results":"11019","hashOfConfig":"11005"},{"size":1841,"mtime":1786084510155,"results":"11020","hashOfConfig":"11005"},{"size":8958,"mtime":1786084510155,"results":"11021","hashOfConfig":"11005"},{"size":5372,"mtime":1786084510155,"results":"11022","hashOfConfig":"11005"},{"size":3566,"mtime":1786084510155,"results":"11023","hashOfConfig":"11005"},{"size":7186,"mtime":1786084510156,"results":"11024","hashOfConfig":"11005"},{"size":23200,"mtime":1786084510156,"results":"11025","hashOfConfig":"11005"},{"size":3498,"mtime":1786084510156,"results":"11026","hashOfConfig":"11005"},{"size":2056,"mtime":1786084510156,"results":"11027","hashOfConfig":"11005"},{"size":5214,"mtime":1786084510156,"results":"11028","hashOfConfig":"11005"},{"size":3401,"mtime":1786084510157,"results":"11029","hashOfConfig":"11005"},{"size":18016,"mtime":1786084510157,"results":"11030","hashOfConfig":"11005"},{"size":3088,"mtime":1786084510157,"results":"11031","hashOfConfig":"11005"},{"size":3064,"mtime":1786084510157,"results":"11032","hashOfConfig":"11005"},{"size":1618,"mtime":1786084510157,"results":"11033","hashOfConfig":"11005"},{"size":1785,"mtime":1786084510157,"results":"11034","hashOfConfig":"11005"},{"size":5734,"mtime":1786084510656,"results":"11035","hashOfConfig":"11005"},{"size":28861,"mtime":1786084510657,"results":"11036","hashOfConfig":"11005"},{"size":772,"mtime":1786084510657,"results":"11037","hashOfConfig":"11005"},{"size":1758,"mtime":1786084510659,"results":"11038","hashOfConfig":"11005"},{"size":5084,"mtime":1786084510659,"results":"11039","hashOfConfig":"11005"},{"size":5012,"mtime":1786084510659,"results":"11040","hashOfConfig":"11005"},{"size":2058,"mtime":1786084510659,"results":"11041","hashOfConfig":"11005"},{"size":6796,"mtime":1786084510660,"results":"11042","hashOfConfig":"11005"},{"size":4622,"mtime":1786084510660,"results":"11043","hashOfConfig":"11005"},{"size":3292,"mtime":1786084510660,"results":"11044","hashOfConfig":"11005"},{"size":3961,"mtime":1786084510660,"results":"11045","hashOfConfig":"11005"},{"size":2038,"mtime":1786084510660,"results":"11046","hashOfConfig":"11005"},{"size":6618,"mtime":1786084510660,"results":"11047","hashOfConfig":"11005"},{"size":2163,"mtime":1786084510661,"results":"11048","hashOfConfig":"11005"},{"size":336,"mtime":1786084510661,"results":"11049","hashOfConfig":"11005"},{"size":5498,"mtime":1786084510661,"results":"11050","hashOfConfig":"11005"},{"size":9117,"mtime":1786084510661,"results":"11051","hashOfConfig":"11005"},{"size":8186,"mtime":1786084510662,"results":"11052","hashOfConfig":"11005"},{"size":8680,"mtime":1786084510662,"results":"11053","hashOfConfig":"11005"},{"size":13191,"mtime":1786084510662,"results":"11054","hashOfConfig":"11005"},{"size":6375,"mtime":1786084510662,"results":"11055","hashOfConfig":"11005"},{"size":1163,"mtime":1786084510663,"results":"11056","hashOfConfig":"11005"},{"size":2843,"mtime":1786084510663,"results":"11057","hashOfConfig":"11005"},{"size":2872,"mtime":1786084510663,"results":"11058","hashOfConfig":"11005"},{"size":1297,"mtime":1786084510663,"results":"11059","hashOfConfig":"11005"},{"size":1350,"mtime":1786084510663,"results":"11060","hashOfConfig":"11005"},{"size":20841,"mtime":1786084510664,"results":"11061","hashOfConfig":"11005"},{"size":4664,"mtime":1786084510664,"results":"11062","hashOfConfig":"11005"},{"size":205,"mtime":1786084510665,"results":"11063","hashOfConfig":"11005"},{"size":4132,"mtime":1786084510665,"results":"11064","hashOfConfig":"11005"},{"size":1462,"mtime":1786084510665,"results":"11065","hashOfConfig":"11005"},{"size":6647,"mtime":1786084510665,"results":"11066","hashOfConfig":"11005"},{"size":549,"mtime":1786084510665,"results":"11067","hashOfConfig":"11005"},{"size":18113,"mtime":1786084510666,"results":"11068","hashOfConfig":"11005"},{"size":2982,"mtime":1786084510666,"results":"11069","hashOfConfig":"11005"},{"size":1771,"mtime":1786084510666,"results":"11070","hashOfConfig":"11005"},{"size":4058,"mtime":1786084510666,"results":"11071","hashOfConfig":"11005"},{"size":3881,"mtime":1786084510666,"results":"11072","hashOfConfig":"11005"},{"size":4633,"mtime":1786084510667,"results":"11073","hashOfConfig":"11005"},{"size":7787,"mtime":1786084510667,"results":"11074","hashOfConfig":"11005"},{"size":1877,"mtime":1786084510667,"results":"11075","hashOfConfig":"11005"},{"size":2254,"mtime":1786084510667,"results":"11076","hashOfConfig":"11005"},{"size":1442,"mtime":1786084510667,"results":"11077","hashOfConfig":"11005"},{"size":3485,"mtime":1786084510668,"results":"11078","hashOfConfig":"11005"},{"size":4811,"mtime":1786084510668,"results":"11079","hashOfConfig":"11005"},{"size":685,"mtime":1786084510668,"results":"11080","hashOfConfig":"11005"},{"size":918,"mtime":1786084510668,"results":"11081","hashOfConfig":"11005"},{"size":739,"mtime":1786084510668,"results":"11082","hashOfConfig":"11005"},{"size":5807,"mtime":1786084510668,"results":"11083","hashOfConfig":"11005"},{"size":4709,"mtime":1786084510669,"results":"11084","hashOfConfig":"11005"},{"size":11588,"mtime":1786084510669,"results":"11085","hashOfConfig":"11005"},{"size":7945,"mtime":1786084510669,"results":"11086","hashOfConfig":"11005"},{"size":3822,"mtime":1786084510669,"results":"11087","hashOfConfig":"11005"},{"size":15157,"mtime":1786084510670,"results":"11088","hashOfConfig":"11005"},{"size":3490,"mtime":1786084510670,"results":"11089","hashOfConfig":"11005"},{"size":2891,"mtime":1786084510670,"results":"11090","hashOfConfig":"11005"},{"size":682,"mtime":1786084510670,"results":"11091","hashOfConfig":"11005"},{"size":608,"mtime":1786084510671,"results":"11092","hashOfConfig":"11005"},{"size":808,"mtime":1786084510671,"results":"11093","hashOfConfig":"11005"},{"size":861,"mtime":1786084510671,"results":"11094","hashOfConfig":"11005"},{"size":7500,"mtime":1786084510671,"results":"11095","hashOfConfig":"11005"},{"size":1049,"mtime":1786084510671,"results":"11096","hashOfConfig":"11005"},{"size":1377,"mtime":1786084510671,"results":"11097","hashOfConfig":"11005"},{"size":3894,"mtime":1786084510671,"results":"11098","hashOfConfig":"11005"},{"size":601,"mtime":1786084510671,"results":"11099","hashOfConfig":"11005"},{"size":17131,"mtime":1786084510672,"results":"11100","hashOfConfig":"11005"},{"size":1066,"mtime":1786084510672,"results":"11101","hashOfConfig":"11005"},{"size":2114,"mtime":1786084510672,"results":"11102","hashOfConfig":"11005"},{"size":6557,"mtime":1786084510672,"results":"11103","hashOfConfig":"11005"},{"size":1594,"mtime":1786084510673,"results":"11104","hashOfConfig":"11005"},{"size":3817,"mtime":1786084510673,"results":"11105","hashOfConfig":"11005"},{"size":4109,"mtime":1786084510673,"results":"11106","hashOfConfig":"11005"},{"size":7192,"mtime":1786084510673,"results":"11107","hashOfConfig":"11005"},{"size":3759,"mtime":1786084510674,"results":"11108","hashOfConfig":"11005"},{"size":11442,"mtime":1786084510674,"results":"11109","hashOfConfig":"11005"},{"size":3934,"mtime":1786084510674,"results":"11110","hashOfConfig":"11005"},{"size":2637,"mtime":1786084510674,"results":"11111","hashOfConfig":"11005"},{"size":2979,"mtime":1786084510674,"results":"11112","hashOfConfig":"11005"},{"size":3982,"mtime":1786084510674,"results":"11113","hashOfConfig":"11005"},{"size":200,"mtime":1786084510674,"results":"11114","hashOfConfig":"11005"},{"size":315,"mtime":1786084510675,"results":"11115","hashOfConfig":"11005"},{"size":1040,"mtime":1786084510675,"results":"11116","hashOfConfig":"11005"},{"size":2235,"mtime":1786084510675,"results":"11117","hashOfConfig":"11005"},{"size":1102,"mtime":1786084510675,"results":"11118","hashOfConfig":"11005"},{"size":8300,"mtime":1786084510675,"results":"11119","hashOfConfig":"11005"},{"size":25952,"mtime":1786084510676,"results":"11120","hashOfConfig":"11005"},{"size":3704,"mtime":1786084510676,"results":"11121","hashOfConfig":"11005"},{"size":12608,"mtime":1786084510676,"results":"11122","hashOfConfig":"11005"},{"size":27765,"mtime":1786084510677,"results":"11123","hashOfConfig":"11005"},{"size":6084,"mtime":1786084510677,"results":"11124","hashOfConfig":"11005"},{"size":5468,"mtime":1786084510677,"results":"11125","hashOfConfig":"11005"},{"size":9401,"mtime":1786084510677,"results":"11126","hashOfConfig":"11005"},{"size":7413,"mtime":1786084510677,"results":"11127","hashOfConfig":"11005"},{"size":2337,"mtime":1786084510678,"results":"11128","hashOfConfig":"11005"},{"size":3539,"mtime":1786084510678,"results":"11129","hashOfConfig":"11005"},{"size":13647,"mtime":1786084510678,"results":"11130","hashOfConfig":"11005"},{"size":8704,"mtime":1786084510678,"results":"11131","hashOfConfig":"11005"},{"size":18887,"mtime":1786084510679,"results":"11132","hashOfConfig":"11005"},{"size":2352,"mtime":1786084510679,"results":"11133","hashOfConfig":"11005"},{"size":3023,"mtime":1786084510679,"results":"11134","hashOfConfig":"11005"},{"size":1761,"mtime":1786084510679,"results":"11135","hashOfConfig":"11005"},{"size":3405,"mtime":1786084510679,"results":"11136","hashOfConfig":"11005"},{"size":18437,"mtime":1786084510680,"results":"11137","hashOfConfig":"11005"},{"size":10487,"mtime":1786084510680,"results":"11138","hashOfConfig":"11005"},{"size":3086,"mtime":1786084510680,"results":"11139","hashOfConfig":"11005"},{"size":5551,"mtime":1786084510680,"results":"11140","hashOfConfig":"11005"},{"size":6975,"mtime":1786084510681,"results":"11141","hashOfConfig":"11005"},{"size":2337,"mtime":1786084510681,"results":"11142","hashOfConfig":"11005"},{"size":13300,"mtime":1786084510681,"results":"11143","hashOfConfig":"11005"},{"size":7349,"mtime":1786084510682,"results":"11144","hashOfConfig":"11005"},{"size":15790,"mtime":1786084510682,"results":"11145","hashOfConfig":"11005"},{"size":5997,"mtime":1786084510682,"results":"11146","hashOfConfig":"11005"},{"size":10971,"mtime":1786084510683,"results":"11147","hashOfConfig":"11005"},{"size":3691,"mtime":1786084510683,"results":"11148","hashOfConfig":"11005"},{"size":17834,"mtime":1786084510684,"results":"11149","hashOfConfig":"11150"},{"size":1068,"mtime":1786084510684,"results":"11151","hashOfConfig":"11150"},{"size":5906,"mtime":1786084510684,"results":"11152","hashOfConfig":"11150"},{"size":1435,"mtime":1786084510685,"results":"11153","hashOfConfig":"11150"},{"size":4065,"mtime":1786084510685,"results":"11154","hashOfConfig":"11150"},{"size":11637,"mtime":1786084510685,"results":"11155","hashOfConfig":"11150"},{"size":1678,"mtime":1786084510685,"results":"11156","hashOfConfig":"11150"},{"size":4735,"mtime":1786084510685,"results":"11157","hashOfConfig":"11150"},{"size":9614,"mtime":1786084510686,"results":"11158","hashOfConfig":"11150"},{"size":1007,"mtime":1786084510686,"results":"11159","hashOfConfig":"11150"},{"size":2308,"mtime":1786084510686,"results":"11160","hashOfConfig":"11150"},{"size":2569,"mtime":1786084510686,"results":"11161","hashOfConfig":"11150"},{"size":3555,"mtime":1786084510686,"results":"11162","hashOfConfig":"11150"},{"size":2412,"mtime":1786084510687,"results":"11163","hashOfConfig":"11150"},{"size":3113,"mtime":1786084510687,"results":"11164","hashOfConfig":"11150"},{"size":9800,"mtime":1786084510687,"results":"11165","hashOfConfig":"11150"},{"size":2203,"mtime":1786084510687,"results":"11166","hashOfConfig":"11150"},{"size":5556,"mtime":1786084510688,"results":"11167","hashOfConfig":"11150"},{"size":4947,"mtime":1786084510689,"results":"11168","hashOfConfig":"11150"},{"size":584,"mtime":1786084510689,"results":"11169","hashOfConfig":"11150"},{"size":56768,"mtime":1786084510688,"results":"11170","hashOfConfig":"11150"},{"size":3968,"mtime":1786084510689,"results":"11171","hashOfConfig":"11150"},{"size":24364,"mtime":1786084510690,"results":"11172","hashOfConfig":"11150"},{"size":13071,"mtime":1786084510690,"results":"11173","hashOfConfig":"11150"},{"size":7638,"mtime":1786084510690,"results":"11174","hashOfConfig":"11150"},{"size":2783,"mtime":1786084510690,"results":"11175","hashOfConfig":"11150"},{"size":5409,"mtime":1786084510691,"results":"11176","hashOfConfig":"11150"},{"size":4032,"mtime":1786084510691,"results":"11177","hashOfConfig":"11150"},{"size":4260,"mtime":1786084510691,"results":"11178","hashOfConfig":"11150"},{"size":2680,"mtime":1786084510692,"results":"11179","hashOfConfig":"11150"},{"size":25357,"mtime":1786084510692,"results":"11180","hashOfConfig":"11150"},{"size":4931,"mtime":1786084510692,"results":"11181","hashOfConfig":"11150"},{"size":4152,"mtime":1786084510693,"results":"11182","hashOfConfig":"11150"},{"size":4522,"mtime":1786084510693,"results":"11183","hashOfConfig":"11150"},{"size":6487,"mtime":1786084510693,"results":"11184","hashOfConfig":"11150"},{"size":32468,"mtime":1786084510694,"results":"11185","hashOfConfig":"11150"},{"size":23101,"mtime":1786084510694,"results":"11186","hashOfConfig":"11150"},{"size":3541,"mtime":1786084510695,"results":"11187","hashOfConfig":"11150"},{"size":16276,"mtime":1786084510695,"results":"11188","hashOfConfig":"11150"},{"size":3164,"mtime":1786084510695,"results":"11189","hashOfConfig":"11150"},{"size":2794,"mtime":1786084510695,"results":"11190","hashOfConfig":"11150"},{"size":3901,"mtime":1786084510696,"results":"11191","hashOfConfig":"11150"},{"size":9838,"mtime":1786084510696,"results":"11192","hashOfConfig":"11150"},{"size":58948,"mtime":1786084510697,"results":"11193","hashOfConfig":"11150"},{"size":2714,"mtime":1786084510697,"results":"11194","hashOfConfig":"11150"},{"size":10048,"mtime":1786084510698,"results":"11195","hashOfConfig":"11150"},{"size":6244,"mtime":1786084510698,"results":"11196","hashOfConfig":"11150"},{"size":3615,"mtime":1786084510698,"results":"11197","hashOfConfig":"11150"},{"size":5668,"mtime":1786084510698,"results":"11198","hashOfConfig":"11150"},{"size":20149,"mtime":1786084510699,"results":"11199","hashOfConfig":"11150"},{"size":11852,"mtime":1786084510699,"results":"11200","hashOfConfig":"11150"},{"size":23963,"mtime":1786084510700,"results":"11201","hashOfConfig":"11150"},{"size":2467,"mtime":1786084510700,"results":"11202","hashOfConfig":"11150"},{"size":5031,"mtime":1786084510700,"results":"11203","hashOfConfig":"11150"},{"size":14925,"mtime":1786084510700,"results":"11204","hashOfConfig":"11150"},{"size":3971,"mtime":1786084510701,"results":"11205","hashOfConfig":"11150"},{"size":18078,"mtime":1786084510701,"results":"11206","hashOfConfig":"11150"},{"size":17263,"mtime":1786084510702,"results":"11207","hashOfConfig":"11150"},{"size":2710,"mtime":1786084510702,"results":"11208","hashOfConfig":"11150"},{"size":4977,"mtime":1786084510702,"results":"11209","hashOfConfig":"11150"},{"size":8761,"mtime":1786084510702,"results":"11210","hashOfConfig":"11150"},{"size":14230,"mtime":1786084510703,"results":"11211","hashOfConfig":"11150"},{"size":1333,"mtime":1786084510703,"results":"11212","hashOfConfig":"11150"},{"size":4349,"mtime":1786084510703,"results":"11213","hashOfConfig":"11150"},{"size":7227,"mtime":1786084510703,"results":"11214","hashOfConfig":"11150"},{"size":4163,"mtime":1786084510705,"results":"11215","hashOfConfig":"11150"},{"size":6939,"mtime":1786084510705,"results":"11216","hashOfConfig":"11150"},{"size":40729,"mtime":1786084510705,"results":"11217","hashOfConfig":"11150"},{"size":4166,"mtime":1786084510725,"results":"11218","hashOfConfig":"11150"},{"size":1341,"mtime":1786084510725,"results":"11219","hashOfConfig":"11150"},{"size":4752,"mtime":1786084510725,"results":"11220","hashOfConfig":"11150"},{"size":6917,"mtime":1786084510725,"results":"11221","hashOfConfig":"11150"},{"size":5736,"mtime":1786084510726,"results":"11222","hashOfConfig":"11150"},{"size":4366,"mtime":1786084510727,"results":"11223","hashOfConfig":"11150"},{"size":9273,"mtime":1786084510727,"results":"11224","hashOfConfig":"11150"},{"size":1134,"mtime":1786084510727,"results":"11225","hashOfConfig":"11150"},{"size":728,"mtime":1786084510727,"results":"11226","hashOfConfig":"11150"},{"size":3879,"mtime":1786084510727,"results":"11227","hashOfConfig":"11150"},{"size":36914,"mtime":1786084510726,"results":"11228","hashOfConfig":"11150"},{"size":1325,"mtime":1786084510727,"results":"11229","hashOfConfig":"11150"},{"size":8059,"mtime":1786084510728,"results":"11230","hashOfConfig":"11150"},{"size":2552,"mtime":1786084510728,"results":"11231","hashOfConfig":"11150"},{"size":8954,"mtime":1786084510728,"results":"11232","hashOfConfig":"11150"},{"size":10316,"mtime":1786084510729,"results":"11233","hashOfConfig":"11150"},{"size":8627,"mtime":1786084510729,"results":"11234","hashOfConfig":"11150"},{"size":5097,"mtime":1786084510729,"results":"11235","hashOfConfig":"11150"},{"size":2930,"mtime":1786084510729,"results":"11236","hashOfConfig":"11150"},{"size":7746,"mtime":1786084510730,"results":"11237","hashOfConfig":"11150"},{"size":3379,"mtime":1786084510730,"results":"11238","hashOfConfig":"11150"},{"size":8376,"mtime":1786084510730,"results":"11239","hashOfConfig":"11150"},{"size":4767,"mtime":1786084510731,"results":"11240","hashOfConfig":"11150"},{"size":1854,"mtime":1786084510731,"results":"11241","hashOfConfig":"11150"},{"size":4564,"mtime":1786084510731,"results":"11242","hashOfConfig":"11150"},{"size":2026,"mtime":1786084510731,"results":"11243","hashOfConfig":"11150"},{"size":4445,"mtime":1786084510733,"results":"11244","hashOfConfig":"11150"},{"size":5139,"mtime":1786084510733,"results":"11245","hashOfConfig":"11150"},{"size":6899,"mtime":1786084510733,"results":"11246","hashOfConfig":"11150"},{"size":4307,"mtime":1786084510734,"results":"11247","hashOfConfig":"11150"},{"size":6651,"mtime":1786084510734,"results":"11248","hashOfConfig":"11150"},{"size":8108,"mtime":1786084510735,"results":"11249","hashOfConfig":"11150"},{"size":3141,"mtime":1786084510735,"results":"11250","hashOfConfig":"11150"},{"size":35241,"mtime":1786084510733,"results":"11251","hashOfConfig":"11150"},{"size":2810,"mtime":1786084510736,"results":"11252","hashOfConfig":"11150"},{"size":8734,"mtime":1786084510736,"results":"11253","hashOfConfig":"11150"},{"size":398,"mtime":1786084510737,"results":"11254","hashOfConfig":"11150"},{"size":11800,"mtime":1786084510738,"results":"11255","hashOfConfig":"11150"},{"size":2267,"mtime":1786084510738,"results":"11256","hashOfConfig":"11150"},{"size":31401,"mtime":1786084510736,"results":"11257","hashOfConfig":"11150"},{"size":2128,"mtime":1786084510738,"results":"11258","hashOfConfig":"11150"},{"size":1333,"mtime":1786084510738,"results":"11259","hashOfConfig":"11150"},{"size":2417,"mtime":1786084510738,"results":"11260","hashOfConfig":"11150"},{"size":9032,"mtime":1786084510739,"results":"11261","hashOfConfig":"11150"},{"size":4200,"mtime":1786084510739,"results":"11262","hashOfConfig":"11150"},{"size":3833,"mtime":1786084510739,"results":"11263","hashOfConfig":"11150"},{"size":21417,"mtime":1786084510739,"results":"11264","hashOfConfig":"11150"},{"size":10646,"mtime":1786084510740,"results":"11265","hashOfConfig":"11150"},{"size":6324,"mtime":1786084510740,"results":"11266","hashOfConfig":"11150"},{"size":3897,"mtime":1786084510740,"results":"11267","hashOfConfig":"11150"},{"size":10479,"mtime":1786084510740,"results":"11268","hashOfConfig":"11150"},{"size":8419,"mtime":1786084510740,"results":"11269","hashOfConfig":"11150"},{"size":9291,"mtime":1786084510741,"results":"11270","hashOfConfig":"11150"},{"size":1111,"mtime":1786084510741,"results":"11271","hashOfConfig":"11150"},{"size":16675,"mtime":1786084510741,"results":"11272","hashOfConfig":"11150"},{"size":862,"mtime":1786084510741,"results":"11273","hashOfConfig":"11150"},{"size":11341,"mtime":1786084510742,"results":"11274","hashOfConfig":"11150"},{"size":1028,"mtime":1786084510742,"results":"11275","hashOfConfig":"11150"},{"size":10881,"mtime":1786084510742,"results":"11276","hashOfConfig":"11150"},{"size":8023,"mtime":1786084510743,"results":"11277","hashOfConfig":"11150"},{"size":14258,"mtime":1786084510743,"results":"11278","hashOfConfig":"11150"},{"size":797,"mtime":1786084510743,"results":"11279","hashOfConfig":"11150"},{"size":3505,"mtime":1786084510744,"results":"11280","hashOfConfig":"11150"},{"size":2585,"mtime":1786084510744,"results":"11281","hashOfConfig":"11150"},{"size":6840,"mtime":1786084510744,"results":"11282","hashOfConfig":"11150"},{"size":6931,"mtime":1786084510746,"results":"11283","hashOfConfig":"11150"},{"size":1400,"mtime":1786084510746,"results":"11284","hashOfConfig":"11150"},{"size":3015,"mtime":1786084510746,"results":"11285","hashOfConfig":"11150"},{"size":8512,"mtime":1786084510746,"results":"11286","hashOfConfig":"11150"},{"size":288,"mtime":1786084510747,"results":"11287","hashOfConfig":"11150"},{"size":31167,"mtime":1786084510745,"results":"11288","hashOfConfig":"11150"},{"size":2036,"mtime":1786084510747,"results":"11289","hashOfConfig":"11150"},{"size":782,"mtime":1786084510747,"results":"11290","hashOfConfig":"11150"},{"size":2175,"mtime":1786084510747,"results":"11291","hashOfConfig":"11150"},{"size":5039,"mtime":1786084510747,"results":"11292","hashOfConfig":"11150"},{"size":3026,"mtime":1786084510747,"results":"11293","hashOfConfig":"11150"},{"size":11050,"mtime":1786084510748,"results":"11294","hashOfConfig":"11150"},{"size":8766,"mtime":1786084510748,"results":"11295","hashOfConfig":"11150"},{"size":7644,"mtime":1786084510749,"results":"11296","hashOfConfig":"11150"},{"size":27679,"mtime":1786084510748,"results":"11297","hashOfConfig":"11150"},{"size":2473,"mtime":1786084510749,"results":"11298","hashOfConfig":"11150"},{"size":677,"mtime":1786084510749,"results":"11299","hashOfConfig":"11150"},{"size":10719,"mtime":1786084510749,"results":"11300","hashOfConfig":"11150"},{"size":12567,"mtime":1786084510749,"results":"11301","hashOfConfig":"11150"},{"size":1993,"mtime":1786084510750,"results":"11302","hashOfConfig":"11150"},{"size":2511,"mtime":1786084510750,"results":"11303","hashOfConfig":"11150"},{"size":5183,"mtime":1786084510750,"results":"11304","hashOfConfig":"11150"},{"size":3707,"mtime":1786084510750,"results":"11305","hashOfConfig":"11005"},{"size":2552,"mtime":1786084510751,"results":"11306","hashOfConfig":"11005"},{"size":2235,"mtime":1786084510751,"results":"11307","hashOfConfig":"11005"},{"size":1300,"mtime":1786084510751,"results":"11308","hashOfConfig":"11005"},{"size":1544,"mtime":1786084510751,"results":"11309","hashOfConfig":"11005"},{"size":1205,"mtime":1786084510751,"results":"11310","hashOfConfig":"11005"},{"size":13343,"mtime":1786084510752,"results":"11311","hashOfConfig":"11005"},{"size":5259,"mtime":1786084510752,"results":"11312","hashOfConfig":"11005"},{"size":20068,"mtime":1786084510753,"results":"11313","hashOfConfig":"11005"},{"size":8421,"mtime":1786084510753,"results":"11314","hashOfConfig":"11005"},{"size":9306,"mtime":1786084510753,"results":"11315","hashOfConfig":"11005"},{"size":4148,"mtime":1786084510754,"results":"11316","hashOfConfig":"11005"},{"size":5630,"mtime":1786084510754,"results":"11317","hashOfConfig":"11005"},{"size":13641,"mtime":1786084510754,"results":"11318","hashOfConfig":"11005"},{"size":1753,"mtime":1786084510754,"results":"11319","hashOfConfig":"11005"},{"size":747,"mtime":1786084510755,"results":"11320","hashOfConfig":"11005"},{"size":3695,"mtime":1786084510755,"results":"11321","hashOfConfig":"11005"},{"size":4021,"mtime":1786084510755,"results":"11322","hashOfConfig":"11005"},{"size":4719,"mtime":1786084510755,"results":"11323","hashOfConfig":"11005"},{"size":5835,"mtime":1786084510755,"results":"11324","hashOfConfig":"11005"},{"size":2087,"mtime":1786084510755,"results":"11325","hashOfConfig":"11005"},{"size":888,"mtime":1786084510756,"results":"11326","hashOfConfig":"11005"},{"size":5025,"mtime":1786084510756,"results":"11327","hashOfConfig":"11005"},{"size":4982,"mtime":1786084510756,"results":"11328","hashOfConfig":"11005"},{"size":16507,"mtime":1786084510756,"results":"11329","hashOfConfig":"11005"},{"size":5769,"mtime":1786084510757,"results":"11330","hashOfConfig":"11005"},{"size":924,"mtime":1786084510757,"results":"11331","hashOfConfig":"11005"},{"size":3412,"mtime":1786084510757,"results":"11332","hashOfConfig":"11005"},{"size":2176,"mtime":1786084510757,"results":"11333","hashOfConfig":"11005"},{"size":3321,"mtime":1786084510757,"results":"11334","hashOfConfig":"11005"},{"size":5105,"mtime":1786084510758,"results":"11335","hashOfConfig":"11005"},{"size":1734,"mtime":1786084510758,"results":"11336","hashOfConfig":"11005"},{"size":5171,"mtime":1786084510758,"results":"11337","hashOfConfig":"11005"},{"size":4769,"mtime":1786084510758,"results":"11338","hashOfConfig":"11005"},{"size":5170,"mtime":1786084510758,"results":"11339","hashOfConfig":"11005"},{"size":1796,"mtime":1786084510759,"results":"11340","hashOfConfig":"11005"},{"size":10415,"mtime":1786084510759,"results":"11341","hashOfConfig":"11005"},{"size":152,"mtime":1786084510759,"results":"11342","hashOfConfig":"11005"},{"size":7434,"mtime":1786084510759,"results":"11343","hashOfConfig":"11005"},{"size":8495,"mtime":1786084510759,"results":"11344","hashOfConfig":"11005"},{"size":9319,"mtime":1786084510760,"results":"11345","hashOfConfig":"11005"},{"size":14851,"mtime":1786084510760,"results":"11346","hashOfConfig":"11005"},{"size":4042,"mtime":1786084510760,"results":"11347","hashOfConfig":"11005"},{"size":26069,"mtime":1786084529127,"results":"11348","hashOfConfig":"11005"},{"size":11121,"mtime":1786084510761,"results":"11349","hashOfConfig":"11005"},{"size":7275,"mtime":1786084510761,"results":"11350","hashOfConfig":"11005"},{"size":4571,"mtime":1786084510762,"results":"11351","hashOfConfig":"11005"},{"size":2783,"mtime":1786084510762,"results":"11352","hashOfConfig":"11005"},{"size":9681,"mtime":1786084510762,"results":"11353","hashOfConfig":"11005"},{"size":1436,"mtime":1786084510762,"results":"11354","hashOfConfig":"11005"},{"size":3344,"mtime":1786084510762,"results":"11355","hashOfConfig":"11005"},{"size":3095,"mtime":1786084510763,"results":"11356","hashOfConfig":"11005"},{"size":2807,"mtime":1786084510763,"results":"11357","hashOfConfig":"11005"},{"size":5052,"mtime":1786084510763,"results":"11358","hashOfConfig":"11005"},{"size":1587,"mtime":1786084510763,"results":"11359","hashOfConfig":"11005"},{"size":249,"mtime":1786084510763,"results":"11360","hashOfConfig":"11005"},{"size":2333,"mtime":1786084510764,"results":"11361","hashOfConfig":"11005"},{"size":5572,"mtime":1786084510764,"results":"11362","hashOfConfig":"11005"},{"size":1183,"mtime":1786084510764,"results":"11363","hashOfConfig":"11005"},{"size":3661,"mtime":1786084510764,"results":"11364","hashOfConfig":"11005"},{"size":1953,"mtime":1786084510765,"results":"11365","hashOfConfig":"11005"},{"size":3938,"mtime":1786084510765,"results":"11366","hashOfConfig":"11005"},{"size":4786,"mtime":1786084510765,"results":"11367","hashOfConfig":"11005"},{"size":971,"mtime":1786084510766,"results":"11368","hashOfConfig":"11005"},{"size":3362,"mtime":1786084510766,"results":"11369","hashOfConfig":"11005"},{"size":995,"mtime":1786084510766,"results":"11370","hashOfConfig":"11005"},{"size":1208,"mtime":1786084510766,"results":"11371","hashOfConfig":"11005"},{"size":17713,"mtime":1786084510766,"results":"11372","hashOfConfig":"11005"},{"size":19769,"mtime":1786084510767,"results":"11373","hashOfConfig":"11005"},{"size":8972,"mtime":1786084510767,"results":"11374","hashOfConfig":"11005"},{"size":5952,"mtime":1786084510767,"results":"11375","hashOfConfig":"11005"},{"size":3632,"mtime":1786084510768,"results":"11376","hashOfConfig":"11005"},{"size":6712,"mtime":1786084510768,"results":"11377","hashOfConfig":"11005"},{"size":1481,"mtime":1786084510768,"results":"11378","hashOfConfig":"11005"},{"size":22361,"mtime":1786084510769,"results":"11379","hashOfConfig":"11005"},{"size":7465,"mtime":1786084510769,"results":"11380","hashOfConfig":"11005"},{"size":7565,"mtime":1786084510769,"results":"11381","hashOfConfig":"11005"},{"size":12400,"mtime":1786084510769,"results":"11382","hashOfConfig":"11005"},{"size":1656,"mtime":1786084510769,"results":"11383","hashOfConfig":"11005"},{"size":2600,"mtime":1786084510770,"results":"11384","hashOfConfig":"11005"},{"size":1655,"mtime":1786084510770,"results":"11385","hashOfConfig":"11005"},{"size":1854,"mtime":1786084510770,"results":"11386","hashOfConfig":"11005"},{"size":9334,"mtime":1786084510770,"results":"11387","hashOfConfig":"11005"},{"size":2705,"mtime":1786084510771,"results":"11388","hashOfConfig":"11005"},{"size":7626,"mtime":1786084510771,"results":"11389","hashOfConfig":"11005"},{"size":5111,"mtime":1786084510771,"results":"11390","hashOfConfig":"11005"},{"size":1524,"mtime":1786084510771,"results":"11391","hashOfConfig":"11005"},{"size":6266,"mtime":1786084510771,"results":"11392","hashOfConfig":"11005"},{"size":14096,"mtime":1786084510772,"results":"11393","hashOfConfig":"11005"},{"size":1441,"mtime":1786084510772,"results":"11394","hashOfConfig":"11005"},{"size":8055,"mtime":1786084510772,"results":"11395","hashOfConfig":"11005"},{"size":6700,"mtime":1786084510772,"results":"11396","hashOfConfig":"11005"},{"size":10744,"mtime":1786084510772,"results":"11397","hashOfConfig":"11005"},{"size":17763,"mtime":1786084510773,"results":"11398","hashOfConfig":"11005"},{"size":3505,"mtime":1786084510773,"results":"11399","hashOfConfig":"11005"},{"size":3245,"mtime":1786084510774,"results":"11400","hashOfConfig":"11005"},{"size":38618,"mtime":1786084510773,"results":"11401","hashOfConfig":"11005"},{"size":1172,"mtime":1786084510774,"results":"11402","hashOfConfig":"11005"},{"size":8768,"mtime":1786084510774,"results":"11403","hashOfConfig":"11005"},{"size":2850,"mtime":1786084510774,"results":"11404","hashOfConfig":"11005"},{"size":19749,"mtime":1786084510775,"results":"11405","hashOfConfig":"11005"},{"size":6120,"mtime":1786084510775,"results":"11406","hashOfConfig":"11005"},{"size":8876,"mtime":1786084510775,"results":"11407","hashOfConfig":"11005"},{"size":1189,"mtime":1786084510775,"results":"11408","hashOfConfig":"11005"},{"size":17802,"mtime":1786084510776,"results":"11409","hashOfConfig":"11005"},{"size":1578,"mtime":1786084510776,"results":"11410","hashOfConfig":"11005"},{"size":3429,"mtime":1786084510776,"results":"11411","hashOfConfig":"11005"},{"size":12991,"mtime":1786084510777,"results":"11412","hashOfConfig":"11005"},{"size":3465,"mtime":1786084510777,"results":"11413","hashOfConfig":"11005"},{"size":2255,"mtime":1786084510777,"results":"11414","hashOfConfig":"11005"},{"size":3828,"mtime":1786084510777,"results":"11415","hashOfConfig":"11005"},{"size":33386,"mtime":1786084510778,"results":"11416","hashOfConfig":"11005"},{"size":27278,"mtime":1786084510778,"results":"11417","hashOfConfig":"11005"},{"size":10224,"mtime":1786084510780,"results":"11418","hashOfConfig":"11005"},{"size":22664,"mtime":1786084510779,"results":"11419","hashOfConfig":"11005"},{"size":15618,"mtime":1786084510780,"results":"11420","hashOfConfig":"11005"},{"size":12822,"mtime":1786084510780,"results":"11421","hashOfConfig":"11005"},{"size":25725,"mtime":1786084510781,"results":"11422","hashOfConfig":"11005"},{"size":22960,"mtime":1786084510781,"results":"11423","hashOfConfig":"11005"},{"size":3782,"mtime":1786084510781,"results":"11424","hashOfConfig":"11005"},{"size":7116,"mtime":1786084510782,"results":"11425","hashOfConfig":"11005"},{"size":10953,"mtime":1786084510782,"results":"11426","hashOfConfig":"11005"},{"size":887,"mtime":1786084510783,"results":"11427","hashOfConfig":"11005"},{"size":6587,"mtime":1786084510783,"results":"11428","hashOfConfig":"11005"},{"size":25597,"mtime":1786084510784,"results":"11429","hashOfConfig":"11005"},{"size":4305,"mtime":1786084510784,"results":"11430","hashOfConfig":"11005"},{"size":4124,"mtime":1786084510784,"results":"11431","hashOfConfig":"11005"},{"size":3220,"mtime":1786084510785,"results":"11432","hashOfConfig":"11005"},{"size":1982,"mtime":1786084510785,"results":"11433","hashOfConfig":"11005"},{"size":1415,"mtime":1786084510785,"results":"11434","hashOfConfig":"11005"},{"size":2205,"mtime":1786084510785,"results":"11435","hashOfConfig":"11005"},{"size":265,"mtime":1786084510786,"results":"11436","hashOfConfig":"11005"},{"size":7309,"mtime":1786084510786,"results":"11437","hashOfConfig":"11005"},{"size":5880,"mtime":1786084510786,"results":"11438","hashOfConfig":"11005"},{"size":3018,"mtime":1786084510786,"results":"11439","hashOfConfig":"11005"},{"size":4287,"mtime":1786084510787,"results":"11440","hashOfConfig":"11005"},{"size":6751,"mtime":1786084510787,"results":"11441","hashOfConfig":"11005"},{"size":370,"mtime":1786084510787,"results":"11442","hashOfConfig":"11005"},{"size":4137,"mtime":1786084510787,"results":"11443","hashOfConfig":"11005"},{"size":2635,"mtime":1786084510788,"results":"11444","hashOfConfig":"11005"},{"size":3976,"mtime":1786084510789,"results":"11445","hashOfConfig":"11005"},{"size":3984,"mtime":1786084510790,"results":"11446","hashOfConfig":"11005"},{"size":17442,"mtime":1786084510792,"results":"11447","hashOfConfig":"11005"},{"size":2224,"mtime":1786084510793,"results":"11448","hashOfConfig":"11005"},{"size":2110,"mtime":1786084510794,"results":"11449","hashOfConfig":"11005"},{"size":4237,"mtime":1786084510796,"results":"11450","hashOfConfig":"11005"},{"size":6030,"mtime":1786084510799,"results":"11451","hashOfConfig":"11005"},{"size":2718,"mtime":1786084510799,"results":"11452","hashOfConfig":"11005"},{"size":992,"mtime":1786084510800,"results":"11453","hashOfConfig":"11005"},{"size":3282,"mtime":1786084510802,"results":"11454","hashOfConfig":"11005"},{"size":2832,"mtime":1786084510803,"results":"11455","hashOfConfig":"11005"},{"size":3152,"mtime":1786084510804,"results":"11456","hashOfConfig":"11005"},{"size":3300,"mtime":1786084510805,"results":"11457","hashOfConfig":"11005"},{"size":1331,"mtime":1786084510805,"results":"11458","hashOfConfig":"11005"},{"size":10756,"mtime":1786084510785,"results":"11459","hashOfConfig":"11005"},{"size":9824,"mtime":1786084510808,"results":"11460","hashOfConfig":"11005"},{"size":7359,"mtime":1786084510809,"results":"11461","hashOfConfig":"11005"},{"size":20165,"mtime":1786084510811,"results":"11462","hashOfConfig":"11005"},{"size":1945,"mtime":1786084510812,"results":"11463","hashOfConfig":"11005"},{"size":5946,"mtime":1786084510812,"results":"11464","hashOfConfig":"11005"},{"size":9261,"mtime":1786084510814,"results":"11465","hashOfConfig":"11005"},{"size":1492,"mtime":1786084510814,"results":"11466","hashOfConfig":"11005"},{"size":10426,"mtime":1786084510816,"results":"11467","hashOfConfig":"11005"},{"size":9002,"mtime":1786084510817,"results":"11468","hashOfConfig":"11005"},{"size":145,"mtime":1786084510818,"results":"11469","hashOfConfig":"11005"},{"size":4982,"mtime":1786084510819,"results":"11470","hashOfConfig":"11005"},{"size":10783,"mtime":1786084510819,"results":"11471","hashOfConfig":"11005"},{"size":10872,"mtime":1786084510820,"results":"11472","hashOfConfig":"11005"},{"size":144,"mtime":1786084510820,"results":"11473","hashOfConfig":"11005"},{"size":1978,"mtime":1786084510821,"results":"11474","hashOfConfig":"11005"},{"size":5126,"mtime":1786084510821,"results":"11475","hashOfConfig":"11005"},{"size":3092,"mtime":1786084510822,"results":"11476","hashOfConfig":"11005"},{"size":3151,"mtime":1786084510823,"results":"11477","hashOfConfig":"11005"},{"size":2602,"mtime":1786084510824,"results":"11478","hashOfConfig":"11005"},{"size":1849,"mtime":1786084510824,"results":"11479","hashOfConfig":"11005"},{"size":853,"mtime":1786084510825,"results":"11480","hashOfConfig":"11005"},{"size":5089,"mtime":1786084510825,"results":"11481","hashOfConfig":"11005"},{"size":3704,"mtime":1786084510826,"results":"11482","hashOfConfig":"11005"},{"size":1030,"mtime":1786084510827,"results":"11483","hashOfConfig":"11005"},{"size":12476,"mtime":1786084510827,"results":"11484","hashOfConfig":"11005"},{"size":3118,"mtime":1786084510828,"results":"11485","hashOfConfig":"11005"},{"size":632,"mtime":1786084510828,"results":"11486","hashOfConfig":"11005"},{"size":4531,"mtime":1786084510829,"results":"11487","hashOfConfig":"11005"},{"size":13272,"mtime":1786084510829,"results":"11488","hashOfConfig":"11005"},{"size":12176,"mtime":1786084510830,"results":"11489","hashOfConfig":"11005"},{"size":5485,"mtime":1786084510831,"results":"11490","hashOfConfig":"11005"},{"size":1853,"mtime":1786084510831,"results":"11491","hashOfConfig":"11005"},{"size":2983,"mtime":1786084510832,"results":"11492","hashOfConfig":"11005"},{"size":1774,"mtime":1786084510832,"results":"11493","hashOfConfig":"11005"},{"size":4372,"mtime":1786084510832,"results":"11494","hashOfConfig":"11005"},{"size":1086,"mtime":1786084510833,"results":"11495","hashOfConfig":"11005"},{"size":10622,"mtime":1786084510833,"results":"11496","hashOfConfig":"11005"},{"size":2452,"mtime":1786084510833,"results":"11497","hashOfConfig":"11005"},{"size":14213,"mtime":1786084510834,"results":"11498","hashOfConfig":"11005"},{"size":1233,"mtime":1786084510834,"results":"11499","hashOfConfig":"11005"},{"size":20950,"mtime":1786084510835,"results":"11500","hashOfConfig":"11005"},{"size":6967,"mtime":1786084510835,"results":"11501","hashOfConfig":"11005"},{"size":6277,"mtime":1786084510836,"results":"11502","hashOfConfig":"11005"},{"size":3170,"mtime":1786084510836,"results":"11503","hashOfConfig":"11005"},{"size":2284,"mtime":1786084510836,"results":"11504","hashOfConfig":"11005"},{"size":2690,"mtime":1786084510836,"results":"11505","hashOfConfig":"11005"},{"size":2630,"mtime":1786084510837,"results":"11506","hashOfConfig":"11005"},{"size":17193,"mtime":1786084510837,"results":"11507","hashOfConfig":"11005"},{"size":74,"mtime":1786084510837,"results":"11508","hashOfConfig":"11005"},{"size":2101,"mtime":1786084510838,"results":"11509","hashOfConfig":"11005"},{"size":6557,"mtime":1786084510838,"results":"11510","hashOfConfig":"11005"},{"size":3431,"mtime":1786084510838,"results":"11511","hashOfConfig":"11005"},{"size":5100,"mtime":1786084510839,"results":"11512","hashOfConfig":"11005"},{"size":14326,"mtime":1786084510839,"results":"11513","hashOfConfig":"11005"},{"size":12568,"mtime":1786084510840,"results":"11514","hashOfConfig":"11005"},{"size":7780,"mtime":1786084510840,"results":"11515","hashOfConfig":"11005"},{"size":4861,"mtime":1786084510840,"results":"11516","hashOfConfig":"11005"},{"size":2666,"mtime":1786084510840,"results":"11517","hashOfConfig":"11005"},{"size":2742,"mtime":1786084510841,"results":"11518","hashOfConfig":"11005"},{"size":7615,"mtime":1786084510841,"results":"11519","hashOfConfig":"11005"},{"size":4323,"mtime":1786084510843,"results":"11520","hashOfConfig":"11005"},{"size":707,"mtime":1786084510843,"results":"11521","hashOfConfig":"11005"},{"size":1820,"mtime":1786084510844,"results":"11522","hashOfConfig":"11005"},{"size":1232,"mtime":1786084510844,"results":"11523","hashOfConfig":"11005"},{"size":12661,"mtime":1786084510844,"results":"11524","hashOfConfig":"11005"},{"size":1369,"mtime":1786084510844,"results":"11525","hashOfConfig":"11005"},{"size":9375,"mtime":1786084510845,"results":"11526","hashOfConfig":"11005"},{"size":9460,"mtime":1786084510846,"results":"11527","hashOfConfig":"11005"},{"size":20903,"mtime":1786084510847,"results":"11528","hashOfConfig":"11005"},{"size":23181,"mtime":1786084510847,"results":"11529","hashOfConfig":"11005"},{"size":2260,"mtime":1786084510847,"results":"11530","hashOfConfig":"11005"},{"size":1445,"mtime":1786084510847,"results":"11531","hashOfConfig":"11005"},{"size":4521,"mtime":1786084510847,"results":"11532","hashOfConfig":"11005"},{"size":4842,"mtime":1786084510848,"results":"11533","hashOfConfig":"11005"},{"size":2343,"mtime":1786084510848,"results":"11534","hashOfConfig":"11005"},{"size":4217,"mtime":1786084510848,"results":"11535","hashOfConfig":"11005"},{"size":18872,"mtime":1786084510848,"results":"11536","hashOfConfig":"11005"},{"size":7921,"mtime":1786084510848,"results":"11537","hashOfConfig":"11005"},{"size":14572,"mtime":1786084510849,"results":"11538","hashOfConfig":"11005"},{"size":7021,"mtime":1786084510849,"results":"11539","hashOfConfig":"11005"},{"size":4422,"mtime":1786084510849,"results":"11540","hashOfConfig":"11005"},{"size":6335,"mtime":1786084510849,"results":"11541","hashOfConfig":"11005"},{"size":31347,"mtime":1786084510850,"results":"11542","hashOfConfig":"11005"},{"size":23067,"mtime":1786084510850,"results":"11543","hashOfConfig":"11005"},{"size":17223,"mtime":1786084510845,"results":"11544","hashOfConfig":"11005"},{"size":5725,"mtime":1786084510851,"results":"11545","hashOfConfig":"11005"},{"size":4132,"mtime":1786084510851,"results":"11546","hashOfConfig":"11005"},{"size":11076,"mtime":1786084510851,"results":"11547","hashOfConfig":"11005"},{"size":10662,"mtime":1786084510852,"results":"11548","hashOfConfig":"11005"},{"size":10129,"mtime":1786084510852,"results":"11549","hashOfConfig":"11005"},{"size":2537,"mtime":1786084510852,"results":"11550","hashOfConfig":"11005"},{"size":13460,"mtime":1786084510852,"results":"11551","hashOfConfig":"11005"},{"size":3234,"mtime":1786084510853,"results":"11552","hashOfConfig":"11005"},{"size":7436,"mtime":1786084510853,"results":"11553","hashOfConfig":"11005"},{"size":1841,"mtime":1786084510853,"results":"11554","hashOfConfig":"11005"},{"size":5205,"mtime":1786084510852,"results":"11555","hashOfConfig":"11005"},{"size":7819,"mtime":1786084510854,"results":"11556","hashOfConfig":"11005"},{"size":6682,"mtime":1786084510854,"results":"11557","hashOfConfig":"11005"},{"size":1278,"mtime":1786084510854,"results":"11558","hashOfConfig":"11005"},{"size":1125,"mtime":1786084510854,"results":"11559","hashOfConfig":"11005"},{"size":4747,"mtime":1786084510854,"results":"11560","hashOfConfig":"11005"},{"size":1817,"mtime":1786084510855,"results":"11561","hashOfConfig":"11005"},{"size":113,"mtime":1786084510855,"results":"11562","hashOfConfig":"11005"},{"size":1462,"mtime":1786084510855,"results":"11563","hashOfConfig":"11005"},{"size":10032,"mtime":1786084510855,"results":"11564","hashOfConfig":"11005"},{"size":3956,"mtime":1786084510855,"results":"11565","hashOfConfig":"11005"},{"size":1172,"mtime":1786084510855,"results":"11566","hashOfConfig":"11005"},{"size":27232,"mtime":1786084510856,"results":"11567","hashOfConfig":"11005"},{"size":603,"mtime":1786084510856,"results":"11568","hashOfConfig":"11005"},{"size":670,"mtime":1786084510856,"results":"11569","hashOfConfig":"11005"},{"size":8117,"mtime":1786084510856,"results":"11570","hashOfConfig":"11005"},{"size":3658,"mtime":1786084510857,"results":"11571","hashOfConfig":"11005"},{"size":1452,"mtime":1786084510857,"results":"11572","hashOfConfig":"11005"},{"size":11443,"mtime":1786084510857,"results":"11573","hashOfConfig":"11005"},{"size":1914,"mtime":1786084510857,"results":"11574","hashOfConfig":"11005"},{"size":15354,"mtime":1786084510857,"results":"11575","hashOfConfig":"11005"},{"size":7027,"mtime":1786084510858,"results":"11576","hashOfConfig":"11005"},{"size":4857,"mtime":1786084510858,"results":"11577","hashOfConfig":"11005"},{"size":2444,"mtime":1786084510858,"results":"11578","hashOfConfig":"11005"},{"size":14973,"mtime":1786084510859,"results":"11579","hashOfConfig":"11005"},{"size":7837,"mtime":1786084510859,"results":"11580","hashOfConfig":"11005"},{"size":2781,"mtime":1786084510859,"results":"11581","hashOfConfig":"11005"},{"size":11873,"mtime":1786084510859,"results":"11582","hashOfConfig":"11005"},{"size":21176,"mtime":1786084510860,"results":"11583","hashOfConfig":"11005"},{"size":4228,"mtime":1786084510860,"results":"11584","hashOfConfig":"11005"},{"size":9882,"mtime":1786084510860,"results":"11585","hashOfConfig":"11005"},{"size":4102,"mtime":1786084510860,"results":"11586","hashOfConfig":"11005"},{"size":3266,"mtime":1786084510860,"results":"11587","hashOfConfig":"11005"},{"size":9859,"mtime":1786084510861,"results":"11588","hashOfConfig":"11005"},{"size":5296,"mtime":1786084510861,"results":"11589","hashOfConfig":"11005"},{"size":3925,"mtime":1786084510861,"results":"11590","hashOfConfig":"11005"},{"size":1933,"mtime":1786084510861,"results":"11591","hashOfConfig":"11005"},{"size":8391,"mtime":1786084510862,"results":"11592","hashOfConfig":"11005"},{"size":1291,"mtime":1786084510862,"results":"11593","hashOfConfig":"11005"},{"size":2138,"mtime":1786084510862,"results":"11594","hashOfConfig":"11005"},{"size":21300,"mtime":1786084510862,"results":"11595","hashOfConfig":"11005"},{"size":2907,"mtime":1786084510863,"results":"11596","hashOfConfig":"11005"},{"size":14986,"mtime":1786084510863,"results":"11597","hashOfConfig":"11005"},{"size":9048,"mtime":1786084510864,"results":"11598","hashOfConfig":"11005"},{"size":17021,"mtime":1786084510863,"results":"11599","hashOfConfig":"11005"},{"size":12861,"mtime":1786084510864,"results":"11600","hashOfConfig":"11005"},{"size":1064,"mtime":1786084510864,"results":"11601","hashOfConfig":"11005"},{"size":8759,"mtime":1786084510865,"results":"11602","hashOfConfig":"11005"},{"size":4227,"mtime":1786084510865,"results":"11603","hashOfConfig":"11005"},{"size":11822,"mtime":1786084510865,"results":"11604","hashOfConfig":"11005"},{"size":645,"mtime":1786084510866,"results":"11605","hashOfConfig":"11005"},{"size":10739,"mtime":1786084510866,"results":"11606","hashOfConfig":"11005"},{"size":1730,"mtime":1786084510866,"results":"11607","hashOfConfig":"11005"},{"size":5870,"mtime":1786084510866,"results":"11608","hashOfConfig":"11005"},{"size":779,"mtime":1786084510866,"results":"11609","hashOfConfig":"11005"},{"size":9313,"mtime":1786084510867,"results":"11610","hashOfConfig":"11005"},{"size":2042,"mtime":1786084510867,"results":"11611","hashOfConfig":"11005"},{"size":6334,"mtime":1786084510867,"results":"11612","hashOfConfig":"11005"},{"size":5427,"mtime":1786084510867,"results":"11613","hashOfConfig":"11005"},{"size":3716,"mtime":1786084510867,"results":"11614","hashOfConfig":"11005"},{"size":9167,"mtime":1786084510868,"results":"11615","hashOfConfig":"11005"},{"size":5813,"mtime":1786084510868,"results":"11616","hashOfConfig":"11005"},{"size":582,"mtime":1786084510868,"results":"11617","hashOfConfig":"11005"},{"size":4932,"mtime":1786084510868,"results":"11618","hashOfConfig":"11005"},{"size":5809,"mtime":1786084510869,"results":"11619","hashOfConfig":"11005"},{"size":3447,"mtime":1786084510869,"results":"11620","hashOfConfig":"11005"},{"size":5267,"mtime":1786084510869,"results":"11621","hashOfConfig":"11005"},{"size":1642,"mtime":1786084510869,"results":"11622","hashOfConfig":"11005"},{"size":1633,"mtime":1786084510869,"results":"11623","hashOfConfig":"11005"},{"size":15841,"mtime":1786084510870,"results":"11624","hashOfConfig":"11005"},{"size":1555,"mtime":1786084510870,"results":"11625","hashOfConfig":"11005"},{"size":7226,"mtime":1786084510870,"results":"11626","hashOfConfig":"11005"},{"size":2524,"mtime":1786084510870,"results":"11627","hashOfConfig":"11005"},{"size":1738,"mtime":1786084510870,"results":"11628","hashOfConfig":"11005"},{"size":1711,"mtime":1786084510870,"results":"11629","hashOfConfig":"11005"},{"size":4560,"mtime":1786084510871,"results":"11630","hashOfConfig":"11005"},{"size":901,"mtime":1786084510871,"results":"11631","hashOfConfig":"11005"},{"size":678,"mtime":1786084510871,"results":"11632","hashOfConfig":"11005"},{"size":16076,"mtime":1786084510871,"results":"11633","hashOfConfig":"11005"},{"size":14153,"mtime":1786084510871,"results":"11634","hashOfConfig":"11005"},{"size":1244,"mtime":1786084510872,"results":"11635","hashOfConfig":"11005"},{"size":6065,"mtime":1786084510872,"results":"11636","hashOfConfig":"11005"},{"size":14152,"mtime":1786084510872,"results":"11637","hashOfConfig":"11005"},{"size":1962,"mtime":1786084510872,"results":"11638","hashOfConfig":"11005"},{"size":8252,"mtime":1786084510872,"results":"11639","hashOfConfig":"11005"},{"size":11653,"mtime":1786084510873,"results":"11640","hashOfConfig":"11005"},{"size":545,"mtime":1786084510873,"results":"11641","hashOfConfig":"11005"},{"size":13077,"mtime":1786084510873,"results":"11642","hashOfConfig":"11005"},{"size":4923,"mtime":1786084510873,"results":"11643","hashOfConfig":"11005"},{"size":1166,"mtime":1786084510873,"results":"11644","hashOfConfig":"11005"},{"size":2320,"mtime":1786084510873,"results":"11645","hashOfConfig":"11005"},{"size":1462,"mtime":1786084510873,"results":"11646","hashOfConfig":"11005"},{"size":4263,"mtime":1786084510874,"results":"11647","hashOfConfig":"11005"},{"size":183,"mtime":1786084510874,"results":"11648","hashOfConfig":"11005"},{"size":5991,"mtime":1786084510874,"results":"11649","hashOfConfig":"11005"},{"size":11756,"mtime":1786084510874,"results":"11650","hashOfConfig":"11005"},{"size":10549,"mtime":1786084510874,"results":"11651","hashOfConfig":"11005"},{"size":7636,"mtime":1786084510875,"results":"11652","hashOfConfig":"11005"},{"size":3495,"mtime":1786084510875,"results":"11653","hashOfConfig":"11005"},{"size":13475,"mtime":1786084510875,"results":"11654","hashOfConfig":"11005"},{"size":1703,"mtime":1786084510875,"results":"11655","hashOfConfig":"11005"},{"size":8915,"mtime":1786084510875,"results":"11656","hashOfConfig":"11005"},{"size":1952,"mtime":1786084510876,"results":"11657","hashOfConfig":"11005"},{"size":35990,"mtime":1786084510876,"results":"11658","hashOfConfig":"11005"},{"size":42805,"mtime":1786084510877,"results":"11659","hashOfConfig":"11005"},{"size":3409,"mtime":1786084510877,"results":"11660","hashOfConfig":"11005"},{"size":4018,"mtime":1786084510877,"results":"11661","hashOfConfig":"11005"},{"size":794,"mtime":1786084510877,"results":"11662","hashOfConfig":"11005"},{"size":1093,"mtime":1786084510877,"results":"11663","hashOfConfig":"11005"},{"size":4183,"mtime":1786084510878,"results":"11664","hashOfConfig":"11005"},{"size":7920,"mtime":1786084510878,"results":"11665","hashOfConfig":"11005"},{"size":13795,"mtime":1786084510878,"results":"11666","hashOfConfig":"11005"},{"size":19899,"mtime":1786084510878,"results":"11667","hashOfConfig":"11005"},{"size":9968,"mtime":1786084510878,"results":"11668","hashOfConfig":"11005"},{"size":841,"mtime":1786084510878,"results":"11669","hashOfConfig":"11005"},{"size":10268,"mtime":1786084510879,"results":"11670","hashOfConfig":"11005"},{"size":3952,"mtime":1786084510879,"results":"11671","hashOfConfig":"11005"},{"size":33294,"mtime":1786084510879,"results":"11672","hashOfConfig":"11005"},{"size":1881,"mtime":1786084510880,"results":"11673","hashOfConfig":"11005"},{"size":16198,"mtime":1786084510880,"results":"11674","hashOfConfig":"11005"},{"size":15263,"mtime":1786084510880,"results":"11675","hashOfConfig":"11005"},{"size":17658,"mtime":1786084510881,"results":"11676","hashOfConfig":"11005"},{"size":3284,"mtime":1786084510881,"results":"11677","hashOfConfig":"11005"},{"size":18064,"mtime":1786084510881,"results":"11678","hashOfConfig":"11005"},{"size":3744,"mtime":1786084510881,"results":"11679","hashOfConfig":"11005"},{"size":12040,"mtime":1786084510882,"results":"11680","hashOfConfig":"11005"},{"size":15337,"mtime":1786084510882,"results":"11681","hashOfConfig":"11005"},{"size":3124,"mtime":1786084510883,"results":"11682","hashOfConfig":"11005"},{"size":26080,"mtime":1786084510883,"results":"11683","hashOfConfig":"11005"},{"size":20002,"mtime":1786084510883,"results":"11684","hashOfConfig":"11005"},{"size":820,"mtime":1786084510884,"results":"11685","hashOfConfig":"11005"},{"size":3022,"mtime":1786084510884,"results":"11686","hashOfConfig":"11005"},{"size":1299,"mtime":1786084510885,"results":"11687","hashOfConfig":"11005"},{"size":2658,"mtime":1786084510885,"results":"11688","hashOfConfig":"11005"},{"size":36009,"mtime":1786084510885,"results":"11689","hashOfConfig":"11005"},{"size":1787,"mtime":1786084510885,"results":"11690","hashOfConfig":"11005"},{"size":25183,"mtime":1786084510886,"results":"11691","hashOfConfig":"11005"},{"size":15188,"mtime":1786084510886,"results":"11692","hashOfConfig":"11005"},{"size":24965,"mtime":1786084510887,"results":"11693","hashOfConfig":"11005"},{"size":7704,"mtime":1786084510887,"results":"11694","hashOfConfig":"11005"},{"size":3429,"mtime":1786084510887,"results":"11695","hashOfConfig":"11005"},{"size":7440,"mtime":1786084510888,"results":"11696","hashOfConfig":"11005"},{"size":32954,"mtime":1786084510888,"results":"11697","hashOfConfig":"11005"},{"size":19975,"mtime":1786084510888,"results":"11698","hashOfConfig":"11005"},{"size":12127,"mtime":1786084510889,"results":"11699","hashOfConfig":"11005"},{"size":1196,"mtime":1786084510889,"results":"11700","hashOfConfig":"11005"},{"size":8054,"mtime":1786084510889,"results":"11701","hashOfConfig":"11005"},{"size":1910,"mtime":1786084510889,"results":"11702","hashOfConfig":"11005"},{"size":4174,"mtime":1786084510889,"results":"11703","hashOfConfig":"11005"},{"size":4758,"mtime":1786084510890,"results":"11704","hashOfConfig":"11005"},{"size":2950,"mtime":1786084510890,"results":"11705","hashOfConfig":"11005"},{"size":13103,"mtime":1786084510890,"results":"11706","hashOfConfig":"11005"},{"size":3601,"mtime":1786084510890,"results":"11707","hashOfConfig":"11005"},{"size":12899,"mtime":1786084510891,"results":"11708","hashOfConfig":"11005"},{"size":2896,"mtime":1786084510891,"results":"11709","hashOfConfig":"11005"},{"size":4627,"mtime":1786084510891,"results":"11710","hashOfConfig":"11005"},{"size":7505,"mtime":1786084510891,"results":"11711","hashOfConfig":"11005"},{"size":5840,"mtime":1786084510891,"results":"11712","hashOfConfig":"11005"},{"size":2468,"mtime":1786084510892,"results":"11713","hashOfConfig":"11005"},{"size":7884,"mtime":1786084510892,"results":"11714","hashOfConfig":"11005"},{"size":2253,"mtime":1786084510892,"results":"11715","hashOfConfig":"11005"},{"size":1341,"mtime":1786084510892,"results":"11716","hashOfConfig":"11005"},{"size":1180,"mtime":1786084510893,"results":"11717","hashOfConfig":"11005"},{"size":2642,"mtime":1786084510893,"results":"11718","hashOfConfig":"11005"},{"size":3404,"mtime":1786084510893,"results":"11719","hashOfConfig":"11005"},{"size":1353,"mtime":1786084510893,"results":"11720","hashOfConfig":"11005"},{"size":824,"mtime":1786084510893,"results":"11721","hashOfConfig":"11005"},{"size":1342,"mtime":1786084510893,"results":"11722","hashOfConfig":"11005"},{"size":1160,"mtime":1786084510893,"results":"11723","hashOfConfig":"11005"},{"size":791,"mtime":1786084510894,"results":"11724","hashOfConfig":"11005"},{"size":6694,"mtime":1786084510894,"results":"11725","hashOfConfig":"11005"},{"size":3956,"mtime":1786084510894,"results":"11726","hashOfConfig":"11005"},{"size":3027,"mtime":1786084510894,"results":"11727","hashOfConfig":"8808"},{"size":6076,"mtime":1786084510895,"results":"11728","hashOfConfig":"8808"},{"size":1977,"mtime":1786084510895,"results":"11729","hashOfConfig":"8808"},{"size":3581,"mtime":1786084510895,"results":"11730","hashOfConfig":"8808"},{"size":3832,"mtime":1786084510895,"results":"11731","hashOfConfig":"8808"},{"size":1926,"mtime":1786084510895,"results":"11732","hashOfConfig":"8808"},{"size":3510,"mtime":1786084510895,"results":"11733","hashOfConfig":"11005"},{"size":2096,"mtime":1786084510895,"results":"11734","hashOfConfig":"11005"},{"size":864,"mtime":1786084510896,"results":"11735","hashOfConfig":"11005"},{"size":18987,"mtime":1786084510896,"results":"11736","hashOfConfig":"11005"},{"size":1818,"mtime":1786084510896,"results":"11737","hashOfConfig":"11005"},{"size":2576,"mtime":1786084510896,"results":"11738","hashOfConfig":"11005"},{"size":1135,"mtime":1786084510896,"results":"11739","hashOfConfig":"11005"},{"size":891,"mtime":1786084510897,"results":"11740","hashOfConfig":"11005"},{"size":768,"mtime":1786084510897,"results":"11741","hashOfConfig":"11005"},{"size":769,"mtime":1786084510897,"results":"11742","hashOfConfig":"11005"},{"size":1226,"mtime":1786084510897,"results":"11743","hashOfConfig":"11005"},{"size":810,"mtime":1786084510897,"results":"11744","hashOfConfig":"11005"},{"size":1546,"mtime":1786084510897,"results":"11745","hashOfConfig":"11005"},{"size":762,"mtime":1786084510898,"results":"11746","hashOfConfig":"11005"},{"size":868,"mtime":1786084510898,"results":"11747","hashOfConfig":"11005"},{"size":710,"mtime":1786084510898,"results":"11748","hashOfConfig":"11005"},{"size":10421,"mtime":1786084510898,"results":"11749","hashOfConfig":"11005"},{"size":5879,"mtime":1786084510898,"results":"11750","hashOfConfig":"11005"},{"size":6356,"mtime":1786084510899,"results":"11751","hashOfConfig":"11005"},{"size":10811,"mtime":1786084510899,"results":"11752","hashOfConfig":"11005"},{"size":2795,"mtime":1786084510899,"results":"11753","hashOfConfig":"11005"},{"size":1772,"mtime":1786084510899,"results":"11754","hashOfConfig":"11005"},{"size":1810,"mtime":1786084510899,"results":"11755","hashOfConfig":"11005"},{"size":1757,"mtime":1786084510899,"results":"11756","hashOfConfig":"11005"},{"size":1929,"mtime":1786084510900,"results":"11757","hashOfConfig":"11005"},{"size":1780,"mtime":1786084510900,"results":"11758","hashOfConfig":"11005"},{"size":825,"mtime":1786084510900,"results":"11759","hashOfConfig":"11005"},{"size":1748,"mtime":1786084510900,"results":"11760","hashOfConfig":"11005"},{"size":5201,"mtime":1786084510900,"results":"11761","hashOfConfig":"11005"},{"size":6280,"mtime":1786084510900,"results":"11762","hashOfConfig":"11005"},{"size":3020,"mtime":1786084510901,"results":"11763","hashOfConfig":"11005"},{"size":12343,"mtime":1786084510901,"results":"11764","hashOfConfig":"11005"},{"size":2288,"mtime":1786084510901,"results":"11765","hashOfConfig":"11005"},{"size":9176,"mtime":1786084510901,"results":"11766","hashOfConfig":"11005"},{"size":2557,"mtime":1786084510901,"results":"11767","hashOfConfig":"11005"},{"size":6536,"mtime":1786084510901,"results":"11768","hashOfConfig":"11005"},{"size":2312,"mtime":1786084510902,"results":"11769","hashOfConfig":"11005"},{"size":3362,"mtime":1786084510902,"results":"11770","hashOfConfig":"11005"},{"size":10325,"mtime":1786084510902,"results":"11771","hashOfConfig":"11005"},{"size":11435,"mtime":1786084510902,"results":"11772","hashOfConfig":"11005"},{"size":3675,"mtime":1786084510902,"results":"11773","hashOfConfig":"11005"},{"size":297,"mtime":1786084510903,"results":"11774","hashOfConfig":"11005"},{"size":2246,"mtime":1786084510903,"results":"11775","hashOfConfig":"11005"},{"size":29103,"mtime":1786084510903,"results":"11776","hashOfConfig":"11005"},{"size":1424,"mtime":1786084510903,"results":"11777","hashOfConfig":"11005"},{"size":2683,"mtime":1786084510903,"results":"11778","hashOfConfig":"11005"},{"size":492,"mtime":1786084510903,"results":"11779","hashOfConfig":"11005"},{"size":4307,"mtime":1786084510904,"results":"11780","hashOfConfig":"11005"},{"size":2134,"mtime":1786084510904,"results":"11781","hashOfConfig":"11005"},{"size":34357,"mtime":1786084510905,"results":"11782","hashOfConfig":"8808"},{"size":956,"mtime":1786084510905,"results":"11783","hashOfConfig":"11005"},{"size":845,"mtime":1786084510905,"results":"11784","hashOfConfig":"11005"},{"size":1375,"mtime":1786084510905,"results":"11785","hashOfConfig":"11005"},{"size":10778,"mtime":1786084510906,"results":"11786","hashOfConfig":"11005"},{"size":2713,"mtime":1786084510906,"results":"11787","hashOfConfig":"11005"},{"size":1274,"mtime":1786084510906,"results":"11788","hashOfConfig":"11005"},{"size":948,"mtime":1786084510906,"results":"11789","hashOfConfig":"11005"},{"size":1121,"mtime":1786084510906,"results":"11790","hashOfConfig":"11005"},{"size":1016,"mtime":1786084510906,"results":"11791","hashOfConfig":"11005"},{"size":1366,"mtime":1786084510906,"results":"11792","hashOfConfig":"11005"},{"size":2429,"mtime":1786084510906,"results":"11793","hashOfConfig":"11005"},{"size":1984,"mtime":1786084510907,"results":"11794","hashOfConfig":"11005"},{"size":1038,"mtime":1786084510907,"results":"11795","hashOfConfig":"11005"},{"size":1029,"mtime":1786084510907,"results":"11796","hashOfConfig":"11005"},{"size":948,"mtime":1786084510907,"results":"11797","hashOfConfig":"11005"},{"size":4736,"mtime":1786084510907,"results":"11798","hashOfConfig":"11005"},{"size":4360,"mtime":1786084510907,"results":"11799","hashOfConfig":"11005"},{"size":8664,"mtime":1786084510908,"results":"11800","hashOfConfig":"11005"},{"size":5781,"mtime":1786084510908,"results":"11801","hashOfConfig":"11005"},{"size":4561,"mtime":1786084510908,"results":"11802","hashOfConfig":"11005"},{"size":2704,"mtime":1786084510909,"results":"11803","hashOfConfig":"11005"},{"size":13942,"mtime":1786084510909,"results":"11804","hashOfConfig":"11005"},{"size":5444,"mtime":1786084510909,"results":"11805","hashOfConfig":"11005"},{"size":2335,"mtime":1786084510909,"results":"11806","hashOfConfig":"11005"},{"size":1743,"mtime":1786084510910,"results":"11807","hashOfConfig":"11005"},{"size":748,"mtime":1786084510910,"results":"11808","hashOfConfig":"11005"},{"size":529,"mtime":1786084510910,"results":"11809","hashOfConfig":"11005"},{"size":3828,"mtime":1786084510911,"results":"11810","hashOfConfig":"11005"},{"size":3861,"mtime":1786084510911,"results":"11811","hashOfConfig":"11005"},{"size":2717,"mtime":1786084510912,"results":"11812","hashOfConfig":"11005"},{"size":2701,"mtime":1786084510912,"results":"11813","hashOfConfig":"11005"},{"size":2657,"mtime":1786084510912,"results":"11814","hashOfConfig":"11005"},{"size":4069,"mtime":1786084510912,"results":"11815","hashOfConfig":"11005"},{"size":1057,"mtime":1786084510912,"results":"11816","hashOfConfig":"11005"},{"size":2856,"mtime":1786084510913,"results":"11817","hashOfConfig":"11005"},{"size":3607,"mtime":1786084510913,"results":"11818","hashOfConfig":"11005"},{"size":4229,"mtime":1786084510913,"results":"11819","hashOfConfig":"11005"},{"size":15189,"mtime":1786084510913,"results":"11820","hashOfConfig":"11005"},{"size":4044,"mtime":1786084510913,"results":"11821","hashOfConfig":"11005"},{"size":15850,"mtime":1786084510914,"results":"11822","hashOfConfig":"11005"},{"size":307,"mtime":1786084510914,"results":"11823","hashOfConfig":"11005"},{"size":14066,"mtime":1786084510914,"results":"11824","hashOfConfig":"11005"},{"size":2502,"mtime":1786084510914,"results":"11825","hashOfConfig":"11005"},{"size":7888,"mtime":1786084510915,"results":"11826","hashOfConfig":"11005"},{"size":9152,"mtime":1786084510915,"results":"11827","hashOfConfig":"11005"},{"size":22836,"mtime":1786084510915,"results":"11828","hashOfConfig":"11005"},{"size":3588,"mtime":1786084510916,"results":"11829","hashOfConfig":"11005"},{"size":1726,"mtime":1786084510916,"results":"11830","hashOfConfig":"11005"},{"size":6273,"mtime":1786084510911,"results":"11831","hashOfConfig":"11005"},{"size":1873,"mtime":1786084510916,"results":"11832","hashOfConfig":"11833"},{"size":1692,"mtime":1786084510916,"results":"11834","hashOfConfig":"11833"},{"size":491,"mtime":1786084510916,"results":"11835","hashOfConfig":"11833"},{"size":4662,"mtime":1786084510916,"results":"11836","hashOfConfig":"11833"},{"size":2506,"mtime":1786084510916,"results":"11837","hashOfConfig":"11833"},{"size":3464,"mtime":1786084510917,"results":"11838","hashOfConfig":"11833"},{"size":1106,"mtime":1786084510917,"results":"11839","hashOfConfig":"11833"},{"size":3851,"mtime":1786084510917,"results":"11840","hashOfConfig":"11833"},{"size":3228,"mtime":1786084510917,"results":"11841","hashOfConfig":"11833"},{"size":1987,"mtime":1786084510917,"results":"11842","hashOfConfig":"11833"},{"size":2931,"mtime":1786084510917,"results":"11843","hashOfConfig":"11833"},{"size":14110,"mtime":1786084510917,"results":"11844","hashOfConfig":"11833"},{"size":12150,"mtime":1786084510918,"results":"11845","hashOfConfig":"11833"},{"size":6538,"mtime":1786084510918,"results":"11846","hashOfConfig":"11833"},{"size":5460,"mtime":1786084510918,"results":"11847","hashOfConfig":"11833"},{"size":1325,"mtime":1786084510918,"results":"11848","hashOfConfig":"11833"},{"size":7317,"mtime":1786084510918,"results":"11849","hashOfConfig":"11833"},{"size":2382,"mtime":1786084510918,"results":"11850","hashOfConfig":"11833"},{"size":3339,"mtime":1786084510919,"results":"11851","hashOfConfig":"11833"},{"size":3142,"mtime":1786084510919,"results":"11852","hashOfConfig":"11833"},{"size":6116,"mtime":1786084510919,"results":"11853","hashOfConfig":"11833"},{"size":7299,"mtime":1786084510919,"results":"11854","hashOfConfig":"11833"},{"size":10386,"mtime":1786084510919,"results":"11855","hashOfConfig":"11833"},{"size":907,"mtime":1786084510919,"results":"11856","hashOfConfig":"11833"},{"size":4753,"mtime":1786084510919,"results":"11857","hashOfConfig":"11833"},{"size":16059,"mtime":1786084510920,"results":"11858","hashOfConfig":"11833"},{"size":3250,"mtime":1786084510920,"results":"11859","hashOfConfig":"11833"},{"size":8366,"mtime":1786084510920,"results":"11860","hashOfConfig":"11833"},{"size":3668,"mtime":1786084510920,"results":"11861","hashOfConfig":"11833"},{"size":908,"mtime":1786084510920,"results":"11862","hashOfConfig":"11833"},{"size":3085,"mtime":1786084510920,"results":"11863","hashOfConfig":"11833"},{"size":1767,"mtime":1786084510921,"results":"11864","hashOfConfig":"11833"},{"size":3082,"mtime":1786084510921,"results":"11865","hashOfConfig":"11833"},{"size":2055,"mtime":1786084510921,"results":"11866","hashOfConfig":"11833"},{"size":7370,"mtime":1786084510921,"results":"11867","hashOfConfig":"11833"},{"size":13108,"mtime":1786084510921,"results":"11868","hashOfConfig":"11833"},{"size":2953,"mtime":1786084510921,"results":"11869","hashOfConfig":"11833"},{"size":29890,"mtime":1786084510922,"results":"11870","hashOfConfig":"11833"},{"size":756,"mtime":1786084510922,"results":"11871","hashOfConfig":"11833"},{"size":3853,"mtime":1786084510922,"results":"11872","hashOfConfig":"11833"},{"size":24064,"mtime":1786084510922,"results":"11873","hashOfConfig":"11833"},{"size":1556,"mtime":1786084510923,"results":"11874","hashOfConfig":"11833"},{"size":910,"mtime":1786084510923,"results":"11875","hashOfConfig":"11833"},{"size":5553,"mtime":1786084510923,"results":"11876","hashOfConfig":"11833"},{"size":43003,"mtime":1786084510923,"results":"11877","hashOfConfig":"11833"},{"size":13162,"mtime":1786084510924,"results":"11878","hashOfConfig":"11833"},{"size":1992,"mtime":1786084510924,"results":"11879","hashOfConfig":"11833"},{"size":1717,"mtime":1786084510924,"results":"11880","hashOfConfig":"11833"},{"size":7919,"mtime":1786084510924,"results":"11881","hashOfConfig":"11833"},{"size":4451,"mtime":1786084510924,"results":"11882","hashOfConfig":"11833"},{"size":12475,"mtime":1786084510924,"results":"11883","hashOfConfig":"11833"},{"size":19916,"mtime":1786084510925,"results":"11884","hashOfConfig":"11833"},{"size":29696,"mtime":1786084510925,"results":"11885","hashOfConfig":"11833"},{"size":7457,"mtime":1786084510925,"results":"11886","hashOfConfig":"11833"},{"size":23245,"mtime":1786084510926,"results":"11887","hashOfConfig":"11833"},{"size":522,"mtime":1786084510926,"results":"11888","hashOfConfig":"11833"},{"size":7446,"mtime":1786084510926,"results":"11889","hashOfConfig":"11833"},{"size":21289,"mtime":1786084510926,"results":"11890","hashOfConfig":"11833"},{"size":39688,"mtime":1786084510927,"results":"11891","hashOfConfig":"11833"},{"size":69106,"mtime":1786084510927,"results":"11892","hashOfConfig":"11833"},{"size":29434,"mtime":1786084510928,"results":"11893","hashOfConfig":"11833"},{"size":2279,"mtime":1786084510928,"results":"11894","hashOfConfig":"11833"},{"size":1654,"mtime":1786084510928,"results":"11895","hashOfConfig":"11833"},{"size":3439,"mtime":1786084510928,"results":"11896","hashOfConfig":"11833"},{"size":3592,"mtime":1786084510928,"results":"11897","hashOfConfig":"11833"},{"size":28078,"mtime":1786084510929,"results":"11898","hashOfConfig":"11833"},{"size":3386,"mtime":1786084510929,"results":"11899","hashOfConfig":"11833"},{"size":5506,"mtime":1786084510929,"results":"11900","hashOfConfig":"11833"},{"size":1005,"mtime":1786084510929,"results":"11901","hashOfConfig":"11833"},{"size":272,"mtime":1786084510929,"results":"11902","hashOfConfig":"11833"},{"size":1425,"mtime":1786084510929,"results":"11903","hashOfConfig":"11833"},{"size":2514,"mtime":1786084510929,"results":"11904","hashOfConfig":"11833"},{"size":3918,"mtime":1786084510929,"results":"11905","hashOfConfig":"11833"},{"size":6342,"mtime":1786084510930,"results":"11906","hashOfConfig":"11833"},{"size":13413,"mtime":1786084510930,"results":"11907","hashOfConfig":"11833"},{"size":14675,"mtime":1786084510930,"results":"11908","hashOfConfig":"11833"},{"size":27881,"mtime":1786084510930,"results":"11909","hashOfConfig":"11833"},{"size":6978,"mtime":1786084510931,"results":"11910","hashOfConfig":"11833"},{"size":6399,"mtime":1786084510931,"results":"11911","hashOfConfig":"11833"},{"size":6131,"mtime":1786084510931,"results":"11912","hashOfConfig":"11833"},{"size":2814,"mtime":1786084510931,"results":"11913","hashOfConfig":"11833"},{"size":1306,"mtime":1786084510932,"results":"11914","hashOfConfig":"11833"},{"size":3548,"mtime":1786084510932,"results":"11915","hashOfConfig":"11833"},{"size":1465,"mtime":1786084510932,"results":"11916","hashOfConfig":"11833"},{"size":166,"mtime":1786084510932,"results":"11917","hashOfConfig":"11005"},{"size":33359,"mtime":1786084510932,"results":"11918","hashOfConfig":"11833"},{"size":1017,"mtime":1786084510932,"results":"11919","hashOfConfig":"11833"},{"size":2578,"mtime":1786084510932,"results":"11920","hashOfConfig":"11005"},{"size":2150,"mtime":1786084510932,"results":"11921","hashOfConfig":"11833"},{"size":6194,"mtime":1786084510932,"results":"11922","hashOfConfig":"11833"},{"size":10409,"mtime":1786084510933,"results":"11923","hashOfConfig":"11833"},{"size":833,"mtime":1786084510933,"results":"11924","hashOfConfig":"11005"},{"size":1549,"mtime":1786084510933,"results":"11925","hashOfConfig":"11005"},{"size":2905,"mtime":1786084510933,"results":"11926","hashOfConfig":"11833"},{"size":1962,"mtime":1786084510933,"results":"11927","hashOfConfig":"11833"},{"size":5523,"mtime":1786084510933,"results":"11928","hashOfConfig":"11833"},{"size":387,"mtime":1786084510933,"results":"11929","hashOfConfig":"11005"},{"size":3725,"mtime":1786084510934,"results":"11930","hashOfConfig":"11833"},{"size":5642,"mtime":1786084510934,"results":"11931","hashOfConfig":"11833"},{"size":2881,"mtime":1786084510934,"results":"11932","hashOfConfig":"11833"},{"size":19237,"mtime":1786084510934,"results":"11933","hashOfConfig":"11833"},{"size":2917,"mtime":1786084510934,"results":"11934","hashOfConfig":"11005"},{"size":955,"mtime":1786084510935,"results":"11935","hashOfConfig":"11833"},{"size":2841,"mtime":1786084510935,"results":"11936","hashOfConfig":"11833"},{"size":899,"mtime":1786084510935,"results":"11937","hashOfConfig":"11833"},{"size":996,"mtime":1786084510935,"results":"11938","hashOfConfig":"11833"},{"size":536,"mtime":1786084510935,"results":"11939","hashOfConfig":"11833"},{"size":1285,"mtime":1786084510935,"results":"11940","hashOfConfig":"11833"},{"size":459,"mtime":1786084510935,"results":"11941","hashOfConfig":"11833"},{"size":1401,"mtime":1786084510935,"results":"11942","hashOfConfig":"11833"},{"size":732,"mtime":1786084510935,"results":"11943","hashOfConfig":"11833"},{"size":2510,"mtime":1786084510935,"results":"11944","hashOfConfig":"11833"},{"size":476,"mtime":1786084510936,"results":"11945","hashOfConfig":"11833"},{"size":645,"mtime":1786084510936,"results":"11946","hashOfConfig":"11833"},{"size":1356,"mtime":1786084510936,"results":"11947","hashOfConfig":"11833"},{"size":1090,"mtime":1786084510936,"results":"11948","hashOfConfig":"11005"},{"size":4971,"mtime":1786084510936,"results":"11949","hashOfConfig":"11833"},{"size":1597,"mtime":1786084510936,"results":"11950","hashOfConfig":"11833"},{"size":1792,"mtime":1786084510936,"results":"11951","hashOfConfig":"11005"},{"size":2910,"mtime":1786084510936,"results":"11952","hashOfConfig":"11833"},{"size":1106,"mtime":1786084510937,"results":"11953","hashOfConfig":"11833"},{"size":4989,"mtime":1786084510937,"results":"11954","hashOfConfig":"11833"},{"size":152,"mtime":1786084510937,"results":"11955","hashOfConfig":"11833"},{"size":24136,"mtime":1786084510937,"results":"11956","hashOfConfig":"11005"},{"size":510,"mtime":1786084510937,"results":"11957","hashOfConfig":"11005"},{"size":5631,"mtime":1786084510937,"results":"11958","hashOfConfig":"11005"},{"size":1758,"mtime":1786084510937,"results":"11959","hashOfConfig":"11005"},{"size":1423,"mtime":1786084510938,"results":"11960","hashOfConfig":"11833"},{"size":1426,"mtime":1786084510938,"results":"11961","hashOfConfig":"11833"},{"size":1804,"mtime":1786084510938,"results":"11962","hashOfConfig":"11833"},{"size":1121,"mtime":1786084510938,"results":"11963","hashOfConfig":"11833"},{"size":1961,"mtime":1786084510938,"results":"11964","hashOfConfig":"11833"},{"size":1311,"mtime":1786084510938,"results":"11965","hashOfConfig":"11005"},{"size":1563,"mtime":1786084510938,"results":"11966","hashOfConfig":"11005"},{"size":2520,"mtime":1786084510938,"results":"11967","hashOfConfig":"11005"},{"size":17521,"mtime":1786084510939,"results":"11968","hashOfConfig":"11005"},{"size":5947,"mtime":1786084510939,"results":"11969","hashOfConfig":"11005"},{"size":1381,"mtime":1786084510939,"results":"11970","hashOfConfig":"11005"},{"size":275,"mtime":1786084510939,"results":"11971","hashOfConfig":"11005"},{"size":276,"mtime":1786084510939,"results":"11972","hashOfConfig":"11005"},{"size":67,"mtime":1786084510939,"results":"11973","hashOfConfig":"11005"},{"size":300,"mtime":1786084510939,"results":"11974","hashOfConfig":"11005"},{"size":1481,"mtime":1786084510939,"results":"11975","hashOfConfig":"11005"},{"size":784,"mtime":1786084510939,"results":"11976","hashOfConfig":"11005"},{"size":2537,"mtime":1786084510939,"results":"11977","hashOfConfig":"11005"},{"size":29488,"mtime":1786084510940,"results":"11978","hashOfConfig":"11005"},{"size":731,"mtime":1786084510940,"results":"11979","hashOfConfig":"11005"},{"size":3224,"mtime":1786084510940,"results":"11980","hashOfConfig":"11005"},{"size":336,"mtime":1786084510940,"results":"11981","hashOfConfig":"11005"},{"size":6146,"mtime":1786084510940,"results":"11982","hashOfConfig":"11005"},{"size":328,"mtime":1786084510940,"results":"11983","hashOfConfig":"11005"},{"size":2181,"mtime":1786084510940,"results":"11984","hashOfConfig":"11005"},{"size":57,"mtime":1786084510940,"results":"11985","hashOfConfig":"11005"},{"size":3374,"mtime":1786084510940,"results":"11986","hashOfConfig":"11005"},{"size":6068,"mtime":1786084510940,"results":"11987","hashOfConfig":"11005"},{"size":20595,"mtime":1786084510941,"results":"11988","hashOfConfig":"11005"},{"size":902,"mtime":1786084510941,"results":"11989","hashOfConfig":"11005"},{"size":628,"mtime":1786084510941,"results":"11990","hashOfConfig":"11005"},{"size":163,"mtime":1786084510941,"results":"11991","hashOfConfig":"11005"},{"size":114,"mtime":1786084510941,"results":"11992","hashOfConfig":"11005"},{"size":2209,"mtime":1786084510941,"results":"11993","hashOfConfig":"11005"},{"size":3144,"mtime":1786084510941,"results":"11994","hashOfConfig":"11005"},{"size":1546,"mtime":1786084510941,"results":"11995","hashOfConfig":"11005"},{"size":411,"mtime":1786084510942,"results":"11996","hashOfConfig":"11005"},{"size":445,"mtime":1786084510942,"results":"11997","hashOfConfig":"11005"},{"size":30127,"mtime":1786084510942,"results":"11998","hashOfConfig":"11005"},{"size":1326,"mtime":1786084510942,"results":"11999","hashOfConfig":"11005"},{"size":427,"mtime":1786084510942,"results":"12000","hashOfConfig":"11005"},{"size":698,"mtime":1786084510943,"results":"12001","hashOfConfig":"11005"},{"size":9522,"mtime":1786084510943,"results":"12002","hashOfConfig":"11005"},{"size":12881,"mtime":1786084510944,"results":"12003","hashOfConfig":"11005"},{"size":12462,"mtime":1786084510944,"results":"12004","hashOfConfig":"11005"},{"size":3986,"mtime":1786084510944,"results":"12005","hashOfConfig":"11005"},{"size":3379,"mtime":1786084510944,"results":"12006","hashOfConfig":"11005"},{"size":1297,"mtime":1786084510943,"results":"12007","hashOfConfig":"11005"},{"size":7596,"mtime":1786084510945,"results":"12008","hashOfConfig":"11005"},{"size":7931,"mtime":1786084510945,"results":"12009","hashOfConfig":"11005"},{"size":28380,"mtime":1786084510945,"results":"12010","hashOfConfig":"11005"},{"size":960,"mtime":1786084510945,"results":"12011","hashOfConfig":"11005"},{"size":10090,"mtime":1786084510945,"results":"12012","hashOfConfig":"11005"},{"size":16090,"mtime":1786084510946,"results":"12013","hashOfConfig":"11005"},{"size":8609,"mtime":1786084510946,"results":"12014","hashOfConfig":"11005"},{"size":2532,"mtime":1786084510946,"results":"12015","hashOfConfig":"11005"},{"size":964,"mtime":1786084510946,"results":"12016","hashOfConfig":"11005"},{"size":5336,"mtime":1786084510946,"results":"12017","hashOfConfig":"11005"},{"size":6904,"mtime":1786084510946,"results":"12018","hashOfConfig":"11005"},{"size":9487,"mtime":1786084510947,"results":"12019","hashOfConfig":"11005"},{"size":4107,"mtime":1786084510947,"results":"12020","hashOfConfig":"11005"},{"size":470,"mtime":1786084510947,"results":"12021","hashOfConfig":"11005"},{"size":1019,"mtime":1786084510947,"results":"12022","hashOfConfig":"11005"},{"size":19942,"mtime":1786084510947,"results":"12023","hashOfConfig":"11005"},{"size":14548,"mtime":1786084510944,"results":"12024","hashOfConfig":"11005"},{"size":2800,"mtime":1786084510947,"results":"12025","hashOfConfig":"11005"},{"size":2005,"mtime":1786084510947,"results":"12026","hashOfConfig":"11005"},{"size":295,"mtime":1786084510947,"results":"12027","hashOfConfig":"11005"},{"size":5731,"mtime":1786084510948,"results":"12028","hashOfConfig":"11005"},{"size":801,"mtime":1786084510948,"results":"12029","hashOfConfig":"11005"},{"size":659,"mtime":1786084510948,"results":"12030","hashOfConfig":"11005"},{"size":836,"mtime":1786084510948,"results":"12031","hashOfConfig":"11005"},{"size":19877,"mtime":1786084510948,"results":"12032","hashOfConfig":"11005"},{"size":3726,"mtime":1786084510948,"results":"12033","hashOfConfig":"11005"},{"size":8545,"mtime":1786084510948,"results":"12034","hashOfConfig":"11005"},{"size":2917,"mtime":1786084510949,"results":"12035","hashOfConfig":"11005"},{"size":758,"mtime":1786084510949,"results":"12036","hashOfConfig":"11005"},{"size":1508,"mtime":1786084510949,"results":"12037","hashOfConfig":"11005"},{"size":2942,"mtime":1786084510949,"results":"12038","hashOfConfig":"11005"},{"size":2304,"mtime":1786084510949,"results":"12039","hashOfConfig":"11005"},{"size":4237,"mtime":1786084510949,"results":"12040","hashOfConfig":"11005"},{"size":10700,"mtime":1786084510950,"results":"12041","hashOfConfig":"11833"},{"size":1704,"mtime":1786084510950,"results":"12042","hashOfConfig":"11005"},{"size":207,"mtime":1786084510950,"results":"12043","hashOfConfig":"11005"},{"size":1098,"mtime":1786084510950,"results":"12044","hashOfConfig":"11005"},{"size":9518,"mtime":1786084510950,"results":"12045","hashOfConfig":"11005"},{"size":4919,"mtime":1786084510950,"results":"12046","hashOfConfig":"11005"},{"size":1708,"mtime":1786084510950,"results":"12047","hashOfConfig":"11005"},{"size":959,"mtime":1786084510950,"results":"12048","hashOfConfig":"11005"},{"size":725,"mtime":1786084510951,"results":"12049","hashOfConfig":"11005"},{"size":5512,"mtime":1786084510951,"results":"12050","hashOfConfig":"11005"},{"size":18283,"mtime":1786084510951,"results":"12051","hashOfConfig":"11005"},{"size":1224,"mtime":1786084510951,"results":"12052","hashOfConfig":"11005"},{"size":1849,"mtime":1786084510951,"results":"12053","hashOfConfig":"11005"},{"size":6012,"mtime":1786084510952,"results":"12054","hashOfConfig":"11005"},{"size":5197,"mtime":1786084510952,"results":"12055","hashOfConfig":"11005"},{"size":8422,"mtime":1786084510952,"results":"12056","hashOfConfig":"11005"},{"size":10166,"mtime":1786084510953,"results":"12057","hashOfConfig":"11005"},{"size":3176,"mtime":1786084510953,"results":"12058","hashOfConfig":"11005"},{"size":15384,"mtime":1786084510953,"results":"12059","hashOfConfig":"11005"},{"size":6518,"mtime":1786084510953,"results":"12060","hashOfConfig":"11005"},{"size":4417,"mtime":1786084510953,"results":"12061","hashOfConfig":"11005"},{"size":1151,"mtime":1786084510954,"results":"12062","hashOfConfig":"11005"},{"size":2635,"mtime":1786084510954,"results":"12063","hashOfConfig":"11005"},{"size":1519,"mtime":1786084510954,"results":"12064","hashOfConfig":"11005"},{"size":5092,"mtime":1786084510954,"results":"12065","hashOfConfig":"11005"},{"size":2384,"mtime":1786084510954,"results":"12066","hashOfConfig":"11005"},{"size":1283,"mtime":1786084510954,"results":"12067","hashOfConfig":"11005"},{"size":2010,"mtime":1786084510954,"results":"12068","hashOfConfig":"11005"},{"size":1525,"mtime":1786084510954,"results":"12069","hashOfConfig":"11005"},{"size":6035,"mtime":1786084510955,"results":"12070","hashOfConfig":"11005"},{"size":1353,"mtime":1786084510955,"results":"12071","hashOfConfig":"11005"},{"size":6156,"mtime":1786084510955,"results":"12072","hashOfConfig":"11005"},{"size":1934,"mtime":1786084510956,"results":"12073","hashOfConfig":"11005"},{"size":2712,"mtime":1786084510956,"results":"12074","hashOfConfig":"11005"},{"size":35808,"mtime":1786084510956,"results":"12075","hashOfConfig":"11005"},{"size":1040,"mtime":1786084510956,"results":"12076","hashOfConfig":"11005"},{"size":826,"mtime":1786084510956,"results":"12077","hashOfConfig":"11005"},{"size":3055,"mtime":1786084510956,"results":"12078","hashOfConfig":"11005"},{"size":3417,"mtime":1786084510956,"results":"12079","hashOfConfig":"11005"},{"size":12877,"mtime":1786084510957,"results":"12080","hashOfConfig":"11005"},{"size":1090,"mtime":1786084510957,"results":"12081","hashOfConfig":"11005"},{"size":3550,"mtime":1786084510957,"results":"12082","hashOfConfig":"11005"},{"size":941,"mtime":1786084510957,"results":"12083","hashOfConfig":"11005"},{"size":3287,"mtime":1786084510957,"results":"12084","hashOfConfig":"11005"},{"size":10670,"mtime":1786084510957,"results":"12085","hashOfConfig":"11005"},{"size":3964,"mtime":1786084510957,"results":"12086","hashOfConfig":"11005"},{"size":2115,"mtime":1786084510958,"results":"12087","hashOfConfig":"11005"},{"size":8756,"mtime":1786084510958,"results":"12088","hashOfConfig":"11005"},{"size":450,"mtime":1786084510958,"results":"12089","hashOfConfig":"11005"},{"size":95,"mtime":1786084510958,"results":"12090","hashOfConfig":"11005"},{"size":1513,"mtime":1786084510958,"results":"12091","hashOfConfig":"11005"},{"size":10397,"mtime":1786084510958,"results":"12092","hashOfConfig":"11005"},{"size":4277,"mtime":1786084510959,"results":"12093","hashOfConfig":"11005"},{"size":3417,"mtime":1786084510959,"results":"12094","hashOfConfig":"11005"},{"size":11277,"mtime":1786084510959,"results":"12095","hashOfConfig":"11005"},{"size":2637,"mtime":1786084510959,"results":"12096","hashOfConfig":"11005"},{"size":24999,"mtime":1786084510960,"results":"12097","hashOfConfig":"11005"},{"size":2180,"mtime":1786084510960,"results":"12098","hashOfConfig":"11005"},{"size":2469,"mtime":1786084510960,"results":"12099","hashOfConfig":"11005"},{"size":3140,"mtime":1786084510960,"results":"12100","hashOfConfig":"11005"},{"size":5412,"mtime":1786084510960,"results":"12101","hashOfConfig":"11005"},{"size":20818,"mtime":1786084510960,"results":"12102","hashOfConfig":"11005"},{"size":10145,"mtime":1786084510961,"results":"12103","hashOfConfig":"11005"},{"size":194,"mtime":1786084510961,"results":"12104","hashOfConfig":"11005"},{"size":2089,"mtime":1786084510961,"results":"12105","hashOfConfig":"11005"},{"size":6352,"mtime":1786084510961,"results":"12106","hashOfConfig":"11005"},{"size":1560,"mtime":1786084510961,"results":"12107","hashOfConfig":"11005"},{"size":1280,"mtime":1786084510961,"results":"12108","hashOfConfig":"11005"},{"size":501,"mtime":1786084510961,"results":"12109","hashOfConfig":"11005"},{"size":1067,"mtime":1786084510961,"results":"12110","hashOfConfig":"11005"},{"size":1229,"mtime":1786084510961,"results":"12111","hashOfConfig":"11005"},{"size":1495,"mtime":1786084510961,"results":"12112","hashOfConfig":"11005"},{"size":2639,"mtime":1786084510962,"results":"12113","hashOfConfig":"11005"},{"size":1632,"mtime":1786084510962,"results":"12114","hashOfConfig":"11005"},{"size":1090,"mtime":1786084510962,"results":"12115","hashOfConfig":"11005"},{"size":4284,"mtime":1786084510962,"results":"12116","hashOfConfig":"11005"},{"size":5926,"mtime":1786084510962,"results":"12117","hashOfConfig":"11005"},{"size":655,"mtime":1786084510962,"results":"12118","hashOfConfig":"11005"},{"size":3533,"mtime":1786084510962,"results":"12119","hashOfConfig":"11005"},{"size":1171,"mtime":1786084510962,"results":"12120","hashOfConfig":"11005"},{"size":2185,"mtime":1786084510962,"results":"12121","hashOfConfig":"11005"},{"size":6714,"mtime":1786084510962,"results":"12122","hashOfConfig":"11005"},{"size":6522,"mtime":1786084510963,"results":"12123","hashOfConfig":"11005"},{"size":994,"mtime":1786084510963,"results":"12124","hashOfConfig":"11005"},{"size":5393,"mtime":1786084510963,"results":"12125","hashOfConfig":"11005"},{"size":1082,"mtime":1786084510963,"results":"12126","hashOfConfig":"11005"},{"size":1700,"mtime":1786084510963,"results":"12127","hashOfConfig":"11005"},{"size":13757,"mtime":1786084510963,"results":"12128","hashOfConfig":"11005"},{"size":2317,"mtime":1786084510963,"results":"12129","hashOfConfig":"11005"},{"size":4261,"mtime":1786084510963,"results":"12130","hashOfConfig":"11005"},{"size":6997,"mtime":1786084510963,"results":"12131","hashOfConfig":"11005"},{"size":137,"mtime":1786084510964,"results":"12132","hashOfConfig":"11005"},{"size":6058,"mtime":1786084510964,"results":"12133","hashOfConfig":"11005"},{"size":2493,"mtime":1786084510964,"results":"12134","hashOfConfig":"11005"},{"size":2380,"mtime":1786084510964,"results":"12135","hashOfConfig":"11005"},{"size":3237,"mtime":1786084510964,"results":"12136","hashOfConfig":"11005"},{"size":3905,"mtime":1786084510964,"results":"12137","hashOfConfig":"11005"},{"size":3064,"mtime":1786084510964,"results":"12138","hashOfConfig":"12139"},{"size":1337,"mtime":1786084510964,"results":"12140","hashOfConfig":"11005"},{"size":1479,"mtime":1786084510964,"results":"12141","hashOfConfig":"11005"},{"size":5416,"mtime":1786084510965,"results":"12142","hashOfConfig":"11005"},{"size":1960,"mtime":1786084510965,"results":"12143","hashOfConfig":"11005"},{"size":1703,"mtime":1786084510965,"results":"12144","hashOfConfig":"11005"},{"size":2463,"mtime":1786084510965,"results":"12145","hashOfConfig":"11005"},{"size":1800,"mtime":1786084510965,"results":"12146","hashOfConfig":"11005"},{"size":429,"mtime":1786084510965,"results":"12147","hashOfConfig":"11005"},{"size":8890,"mtime":1786084510965,"results":"12148","hashOfConfig":"11005"},{"size":1676,"mtime":1786084510965,"results":"12149","hashOfConfig":"11005"},{"size":2864,"mtime":1786084510965,"results":"12150","hashOfConfig":"11005"},{"size":4747,"mtime":1786084510966,"results":"12151","hashOfConfig":"11005"},{"size":1646,"mtime":1786084510966,"results":"12152","hashOfConfig":"11005"},{"size":657,"mtime":1786084510966,"results":"12153","hashOfConfig":"11005"},{"size":8489,"mtime":1786084510966,"results":"12154","hashOfConfig":"11005"},{"size":4169,"mtime":1786084510966,"results":"12155","hashOfConfig":"11005"},{"size":3228,"mtime":1786084510966,"results":"12156","hashOfConfig":"11005"},{"size":1439,"mtime":1786084510966,"results":"12157","hashOfConfig":"11005"},{"size":5421,"mtime":1786084510966,"results":"12158","hashOfConfig":"11005"},{"size":810,"mtime":1786084510966,"results":"12159","hashOfConfig":"11005"},{"size":986,"mtime":1786084510967,"results":"12160","hashOfConfig":"11005"},{"size":2176,"mtime":1786084510967,"results":"12161","hashOfConfig":"11005"},{"size":4837,"mtime":1786084510967,"results":"12162","hashOfConfig":"11005"},{"size":8256,"mtime":1786084510967,"results":"12163","hashOfConfig":"11005"},{"size":3056,"mtime":1786084510967,"results":"12164","hashOfConfig":"11005"},{"size":2042,"mtime":1786084510967,"results":"12165","hashOfConfig":"11005"},{"size":2838,"mtime":1786084510967,"results":"12166","hashOfConfig":"11005"},{"size":3007,"mtime":1786084510967,"results":"12167","hashOfConfig":"11005"},{"size":1147,"mtime":1786084510967,"results":"12168","hashOfConfig":"11005"},{"size":14304,"mtime":1786084510968,"results":"12169","hashOfConfig":"11005"},{"size":3807,"mtime":1786084510968,"results":"12170","hashOfConfig":"11005"},{"size":3196,"mtime":1786084510968,"results":"12171","hashOfConfig":"11005"},{"size":503,"mtime":1786084510968,"results":"12172","hashOfConfig":"11005"},{"size":2056,"mtime":1786084510968,"results":"12173","hashOfConfig":"11005"},{"size":15771,"mtime":1786084510968,"results":"12174","hashOfConfig":"11005"},{"size":14882,"mtime":1786084510969,"results":"12175","hashOfConfig":"11005"},{"size":8185,"mtime":1786084510969,"results":"12176","hashOfConfig":"11005"},{"size":4066,"mtime":1786084510969,"results":"12177","hashOfConfig":"11005"},{"size":1814,"mtime":1786084510969,"results":"12178","hashOfConfig":"11005"},{"size":18018,"mtime":1786084510969,"results":"12179","hashOfConfig":"11005"},{"size":3251,"mtime":1786084510969,"results":"12180","hashOfConfig":"11005"},{"size":1859,"mtime":1786084510969,"results":"12181","hashOfConfig":"11005"},{"size":6075,"mtime":1786084510970,"results":"12182","hashOfConfig":"11005"},{"size":7663,"mtime":1786084510970,"results":"12183","hashOfConfig":"11005"},{"size":2148,"mtime":1786084510970,"results":"12184","hashOfConfig":"11005"},{"size":1402,"mtime":1786084510970,"results":"12185","hashOfConfig":"11005"},{"size":24577,"mtime":1786084510970,"results":"12186","hashOfConfig":"11005"},{"size":8348,"mtime":1786084510971,"results":"12187","hashOfConfig":"11005"},{"size":4149,"mtime":1786084510971,"results":"12188","hashOfConfig":"11005"},{"size":2721,"mtime":1786084510971,"results":"12189","hashOfConfig":"11005"},{"size":9837,"mtime":1786084510971,"results":"12190","hashOfConfig":"11005"},{"size":1584,"mtime":1786084510971,"results":"12191","hashOfConfig":"11005"},{"size":704,"mtime":1786084510968,"results":"12192","hashOfConfig":"11005"},{"size":19687,"mtime":1786084510971,"results":"12193","hashOfConfig":"11005"},{"size":5112,"mtime":1786084510971,"results":"12194","hashOfConfig":"11005"},{"size":2948,"mtime":1786084510972,"results":"12195","hashOfConfig":"11005"},{"size":79473,"mtime":1786084510972,"results":"12196","hashOfConfig":"11005"},{"size":7819,"mtime":1786084510972,"results":"12197","hashOfConfig":"11005"},{"size":35802,"mtime":1786084510973,"results":"12198","hashOfConfig":"11005"},{"size":2055,"mtime":1786084510973,"results":"12199","hashOfConfig":"11005"},{"size":780,"mtime":1786084510973,"results":"12200","hashOfConfig":"11005"},{"size":7651,"mtime":1786084510973,"results":"12201","hashOfConfig":"11005"},{"size":5276,"mtime":1786084510973,"results":"12202","hashOfConfig":"11005"},{"size":986,"mtime":1786084510973,"results":"12203","hashOfConfig":"11005"},{"size":6818,"mtime":1786084510974,"results":"12204","hashOfConfig":"11005"},{"size":97727,"mtime":1786084510975,"results":"12205","hashOfConfig":"11005"},{"size":5303,"mtime":1786084510975,"results":"12206","hashOfConfig":"11005"},{"size":994,"mtime":1786084510975,"results":"12207","hashOfConfig":"11005"},{"size":1434,"mtime":1786084510975,"results":"12208","hashOfConfig":"11005"},{"size":3807,"mtime":1786084510975,"results":"12209","hashOfConfig":"11005"},{"size":18357,"mtime":1786084510975,"results":"12210","hashOfConfig":"11005"},{"size":612,"mtime":1786084510976,"results":"12211","hashOfConfig":"11005"},{"size":1255,"mtime":1786084510976,"results":"12212","hashOfConfig":"11005"},{"size":4523,"mtime":1786084510976,"results":"12213","hashOfConfig":"11005"},{"size":823,"mtime":1786084510976,"results":"12214","hashOfConfig":"11005"},{"size":10513,"mtime":1786084510976,"results":"12215","hashOfConfig":"11005"},{"size":5575,"mtime":1786084510976,"results":"12216","hashOfConfig":"11005"},{"size":12934,"mtime":1786084510976,"results":"12217","hashOfConfig":"11005"},{"size":2281,"mtime":1786084510976,"results":"12218","hashOfConfig":"11005"},{"size":1246,"mtime":1786084510977,"results":"12219","hashOfConfig":"11005"},{"size":633,"mtime":1786084510977,"results":"12220","hashOfConfig":"11005"},{"size":219,"mtime":1786084510977,"results":"12221","hashOfConfig":"11005"},{"size":2547,"mtime":1786084510977,"results":"12222","hashOfConfig":"11005"},{"size":3557,"mtime":1786084510977,"results":"12223","hashOfConfig":"11005"},{"size":3867,"mtime":1786084510977,"results":"12224","hashOfConfig":"11005"},{"size":3585,"mtime":1786084510977,"results":"12225","hashOfConfig":"11005"},{"size":302,"mtime":1786084510977,"results":"12226","hashOfConfig":"11005"},{"size":249,"mtime":1786084510977,"results":"12227","hashOfConfig":"11005"},{"size":794,"mtime":1786084510977,"results":"12228","hashOfConfig":"11005"},{"size":533,"mtime":1786084510978,"results":"12229","hashOfConfig":"8216"},{"size":1137,"mtime":1786084510978,"results":"12230","hashOfConfig":"8216"},{"size":2489,"mtime":1786084510978,"results":"12231","hashOfConfig":"12232"},{"size":2691,"mtime":1786084510979,"results":"12233","hashOfConfig":"12232"},{"size":4337,"mtime":1786084510979,"results":"12234","hashOfConfig":"12232"},{"size":10284,"mtime":1786084510979,"results":"12235","hashOfConfig":"12232"},{"size":16678,"mtime":1786084510979,"results":"12236","hashOfConfig":"12232"},{"size":4508,"mtime":1786084510979,"results":"12237","hashOfConfig":"12232"},{"size":10728,"mtime":1786084510980,"results":"12238","hashOfConfig":"12232"},{"size":13001,"mtime":1786084510980,"results":"12239","hashOfConfig":"12232"},{"size":22327,"mtime":1786084510980,"results":"12240","hashOfConfig":"12232"},{"size":1637,"mtime":1786084510980,"results":"12241","hashOfConfig":"12232"},{"size":11751,"mtime":1786084510980,"results":"12242","hashOfConfig":"12232"},{"size":6246,"mtime":1786084510980,"results":"12243","hashOfConfig":"12232"},{"size":6142,"mtime":1786084510981,"results":"12244","hashOfConfig":"12232"},{"size":6615,"mtime":1786084510981,"results":"12245","hashOfConfig":"12232"},{"size":10016,"mtime":1786084510981,"results":"12246","hashOfConfig":"12232"},{"size":23177,"mtime":1786084510981,"results":"12247","hashOfConfig":"12232"},{"size":1138,"mtime":1786084510981,"results":"12248","hashOfConfig":"12232"},{"size":1754,"mtime":1786084510981,"results":"12249","hashOfConfig":"12232"},{"size":6479,"mtime":1786084510981,"results":"12250","hashOfConfig":"12232"},{"size":20290,"mtime":1786084510982,"results":"12251","hashOfConfig":"12232"},{"size":2819,"mtime":1786084510982,"results":"12252","hashOfConfig":"12232"},{"size":12117,"mtime":1786084510982,"results":"12253","hashOfConfig":"12232"},{"size":3453,"mtime":1786084510982,"results":"12254","hashOfConfig":"12232"},{"size":4087,"mtime":1786084510982,"results":"12255","hashOfConfig":"12232"},{"size":5866,"mtime":1786084510982,"results":"12256","hashOfConfig":"12232"},{"size":3059,"mtime":1786084510982,"results":"12257","hashOfConfig":"12232"},{"size":2177,"mtime":1786084510982,"results":"12258","hashOfConfig":"12232"},{"size":4997,"mtime":1786084510983,"results":"12259","hashOfConfig":"12232"},{"size":5319,"mtime":1786084510983,"results":"12260","hashOfConfig":"12232"},{"size":19903,"mtime":1786084510983,"results":"12261","hashOfConfig":"12232"},{"size":11514,"mtime":1786084510983,"results":"12262","hashOfConfig":"12232"},{"size":6436,"mtime":1786084510983,"results":"12263","hashOfConfig":"12232"},{"size":1993,"mtime":1786084510983,"results":"12264","hashOfConfig":"12232"},{"size":5776,"mtime":1786084510984,"results":"12265","hashOfConfig":"12232"},{"size":4013,"mtime":1786084510984,"results":"12266","hashOfConfig":"12232"},{"size":7286,"mtime":1786084510984,"results":"12267","hashOfConfig":"12232"},{"size":988,"mtime":1786084510984,"results":"12268","hashOfConfig":"12232"},{"size":8582,"mtime":1786084510984,"results":"12269","hashOfConfig":"12232"},{"size":12162,"mtime":1786084510984,"results":"12270","hashOfConfig":"12232"},{"size":7233,"mtime":1786084510985,"results":"12271","hashOfConfig":"12232"},{"size":11112,"mtime":1786084510985,"results":"12272","hashOfConfig":"12232"},{"size":815,"mtime":1786084510985,"results":"12273","hashOfConfig":"12232"},{"size":2306,"mtime":1786084510985,"results":"12274","hashOfConfig":"12232"},{"size":4644,"mtime":1786084510985,"results":"12275","hashOfConfig":"12232"},{"size":4795,"mtime":1786084510986,"results":"12276","hashOfConfig":"12232"},{"size":7553,"mtime":1786084510986,"results":"12277","hashOfConfig":"12232"},{"size":1206,"mtime":1786084510986,"results":"12278","hashOfConfig":"12232"},{"size":24684,"mtime":1786084510986,"results":"12279","hashOfConfig":"12232"},{"size":7261,"mtime":1786084510986,"results":"12280","hashOfConfig":"12232"},{"size":4087,"mtime":1786084510987,"results":"12281","hashOfConfig":"12232"},{"size":746,"mtime":1786084510987,"results":"12282","hashOfConfig":"12232"},{"size":775,"mtime":1786084510987,"results":"12283","hashOfConfig":"12232"},{"size":233,"mtime":1786084510988,"results":"12284","hashOfConfig":"12285"},{"size":46,"mtime":1786084510988,"results":"12286","hashOfConfig":"8216"},{"size":176,"mtime":1786084510988,"results":"12287","hashOfConfig":"8216"},{"size":2323,"mtime":1786084510989,"results":"12288","hashOfConfig":"12232"},{"size":876,"mtime":1786084510990,"results":"12289","hashOfConfig":"12285"},{"size":3632,"mtime":1786084510990,"results":"12290","hashOfConfig":"12232"},{"size":4765,"mtime":1786084510990,"results":"12291","hashOfConfig":"12232"},{"size":4006,"mtime":1786084510990,"results":"12292","hashOfConfig":"12232"},{"size":5733,"mtime":1786084510990,"results":"12293","hashOfConfig":"12232"},{"size":799,"mtime":1786084510990,"results":"12294","hashOfConfig":"12232"},{"size":2061,"mtime":1786084510991,"results":"12295","hashOfConfig":"12232"},{"size":1988,"mtime":1786084510991,"results":"12296","hashOfConfig":"12232"},{"size":2165,"mtime":1786084510991,"results":"12297","hashOfConfig":"12232"},{"size":8162,"mtime":1786084510991,"results":"12298","hashOfConfig":"12232"},{"size":544,"mtime":1786084510991,"results":"12299","hashOfConfig":"12232"},{"size":883,"mtime":1786084510991,"results":"12300","hashOfConfig":"12232"},{"size":1684,"mtime":1786084510992,"results":"12301","hashOfConfig":"12232"},{"size":672,"mtime":1786084510992,"results":"12302","hashOfConfig":"12232"},{"size":1280,"mtime":1786084510992,"results":"12303","hashOfConfig":"12232"},{"size":2004,"mtime":1786084510992,"results":"12304","hashOfConfig":"12232"},{"size":468,"mtime":1786084510992,"results":"12305","hashOfConfig":"12232"},{"size":11934,"mtime":1786084510992,"results":"12306","hashOfConfig":"12232"},{"size":3863,"mtime":1786084510992,"results":"12307","hashOfConfig":"12232"},{"size":5394,"mtime":1786084510993,"results":"12308","hashOfConfig":"12232"},{"size":6202,"mtime":1786084510993,"results":"12309","hashOfConfig":"12232"},{"size":6335,"mtime":1786084510993,"results":"12310","hashOfConfig":"12232"},{"size":6827,"mtime":1786084510993,"results":"12311","hashOfConfig":"12232"},{"size":12331,"mtime":1786084510993,"results":"12312","hashOfConfig":"12232"},{"size":5574,"mtime":1786084510993,"results":"12313","hashOfConfig":"12232"},{"size":7318,"mtime":1786084510994,"results":"12314","hashOfConfig":"12232"},{"size":10758,"mtime":1786084510994,"results":"12315","hashOfConfig":"12232"},{"size":10785,"mtime":1786084510994,"results":"12316","hashOfConfig":"12232"},{"size":7539,"mtime":1786084510994,"results":"12317","hashOfConfig":"12232"},{"size":18359,"mtime":1786084510994,"results":"12318","hashOfConfig":"12232"},{"size":19835,"mtime":1786084510995,"results":"12319","hashOfConfig":"12232"},{"size":6591,"mtime":1786084510995,"results":"12320","hashOfConfig":"12232"},{"size":13544,"mtime":1786084510995,"results":"12321","hashOfConfig":"12232"},{"size":10002,"mtime":1786084510995,"results":"12322","hashOfConfig":"12232"},{"size":50084,"mtime":1786084510996,"results":"12323","hashOfConfig":"12232"},{"size":35973,"mtime":1786084510996,"results":"12324","hashOfConfig":"12232"},{"size":3667,"mtime":1786084510996,"results":"12325","hashOfConfig":"12232"},{"size":11454,"mtime":1786084510996,"results":"12326","hashOfConfig":"12232"},{"size":7446,"mtime":1786084510997,"results":"12327","hashOfConfig":"12232"},{"size":7728,"mtime":1786084510997,"results":"12328","hashOfConfig":"12232"},{"size":10997,"mtime":1786084510997,"results":"12329","hashOfConfig":"12232"},{"size":7202,"mtime":1786084510997,"results":"12330","hashOfConfig":"12232"},{"size":7150,"mtime":1786084510997,"results":"12331","hashOfConfig":"12232"},{"size":6887,"mtime":1786084510998,"results":"12332","hashOfConfig":"12232"},{"size":7112,"mtime":1786084510998,"results":"12333","hashOfConfig":"12232"},{"size":7202,"mtime":1786084510998,"results":"12334","hashOfConfig":"12232"},{"size":10347,"mtime":1786084510998,"results":"12335","hashOfConfig":"12232"},{"size":6029,"mtime":1786084510998,"results":"12336","hashOfConfig":"12232"},{"size":16161,"mtime":1786084510998,"results":"12337","hashOfConfig":"12232"},{"size":13880,"mtime":1786084510999,"results":"12338","hashOfConfig":"12232"},{"size":18473,"mtime":1786084510999,"results":"12339","hashOfConfig":"12232"},{"size":17857,"mtime":1786084510999,"results":"12340","hashOfConfig":"12232"},{"size":5709,"mtime":1786084510999,"results":"12341","hashOfConfig":"12232"},{"size":15823,"mtime":1786084511000,"results":"12342","hashOfConfig":"12232"},{"size":11159,"mtime":1786084511000,"results":"12343","hashOfConfig":"12232"},{"size":6888,"mtime":1786084511000,"results":"12344","hashOfConfig":"12232"},{"size":2459,"mtime":1786084511000,"results":"12345","hashOfConfig":"12232"},{"size":7343,"mtime":1786084511000,"results":"12346","hashOfConfig":"12232"},{"size":12242,"mtime":1786084511001,"results":"12347","hashOfConfig":"12232"},{"size":8432,"mtime":1786084511001,"results":"12348","hashOfConfig":"12232"},{"size":1894,"mtime":1786084511001,"results":"12349","hashOfConfig":"12232"},{"size":21681,"mtime":1786084511001,"results":"12350","hashOfConfig":"12232"},{"size":13365,"mtime":1786084511002,"results":"12351","hashOfConfig":"12232"},{"size":5022,"mtime":1786084511002,"results":"12352","hashOfConfig":"12232"},{"size":18772,"mtime":1786084511002,"results":"12353","hashOfConfig":"12232"},{"size":7286,"mtime":1786084511002,"results":"12354","hashOfConfig":"12232"},{"size":11487,"mtime":1786084511003,"results":"12355","hashOfConfig":"12232"},{"size":4232,"mtime":1786084511003,"results":"12356","hashOfConfig":"12232"},{"size":3504,"mtime":1786084511003,"results":"12357","hashOfConfig":"12232"},{"size":17821,"mtime":1786084511003,"results":"12358","hashOfConfig":"12232"},{"size":4673,"mtime":1786084511003,"results":"12359","hashOfConfig":"12232"},{"size":2887,"mtime":1786084511003,"results":"12360","hashOfConfig":"12232"},{"size":6239,"mtime":1786084511004,"results":"12361","hashOfConfig":"12232"},{"size":12661,"mtime":1786084511004,"results":"12362","hashOfConfig":"12232"},{"size":13477,"mtime":1786084511004,"results":"12363","hashOfConfig":"12232"},{"size":5760,"mtime":1786084511004,"results":"12364","hashOfConfig":"12232"},{"size":2603,"mtime":1786084511004,"results":"12365","hashOfConfig":"12232"},{"size":7336,"mtime":1786084511004,"results":"12366","hashOfConfig":"12232"},{"size":26079,"mtime":1786084511005,"results":"12367","hashOfConfig":"12232"},{"size":15464,"mtime":1786084511005,"results":"12368","hashOfConfig":"12232"},{"size":8286,"mtime":1786084511005,"results":"12369","hashOfConfig":"12232"},{"size":10049,"mtime":1786084511005,"results":"12370","hashOfConfig":"12232"},{"size":6380,"mtime":1786084511005,"results":"12371","hashOfConfig":"12232"},{"size":5248,"mtime":1786084511006,"results":"12372","hashOfConfig":"12232"},{"size":79093,"mtime":1786084511007,"results":"12373","hashOfConfig":"12232"},{"size":6476,"mtime":1786084511007,"results":"12374","hashOfConfig":"12232"},{"size":2631,"mtime":1786084511007,"results":"12375","hashOfConfig":"12232"},{"size":3352,"mtime":1786084511007,"results":"12376","hashOfConfig":"12232"},{"size":3915,"mtime":1786084511007,"results":"12377","hashOfConfig":"12232"},{"size":19809,"mtime":1786084511007,"results":"12378","hashOfConfig":"12232"},{"size":3777,"mtime":1786084511008,"results":"12379","hashOfConfig":"12232"},{"size":4512,"mtime":1786084511008,"results":"12380","hashOfConfig":"12232"},{"size":4715,"mtime":1786084511008,"results":"12381","hashOfConfig":"12232"},{"size":4995,"mtime":1786084511008,"results":"12382","hashOfConfig":"12232"},{"size":5958,"mtime":1786084511008,"results":"12383","hashOfConfig":"12232"},{"size":7062,"mtime":1786084511008,"results":"12384","hashOfConfig":"12232"},{"size":2962,"mtime":1786084511008,"results":"12385","hashOfConfig":"12232"},{"size":4160,"mtime":1786084511008,"results":"12386","hashOfConfig":"12232"},{"size":24550,"mtime":1786084511009,"results":"12387","hashOfConfig":"12232"},{"size":9667,"mtime":1786084511009,"results":"12388","hashOfConfig":"12232"},{"size":16162,"mtime":1786084511009,"results":"12389","hashOfConfig":"12232"},{"size":11246,"mtime":1786084511009,"results":"12390","hashOfConfig":"12232"},{"size":12469,"mtime":1786084511009,"results":"12391","hashOfConfig":"12232"},{"size":11230,"mtime":1786084511010,"results":"12392","hashOfConfig":"12232"},{"size":13731,"mtime":1786084511010,"results":"12393","hashOfConfig":"12232"},{"size":2343,"mtime":1786084511010,"results":"12394","hashOfConfig":"12232"},{"size":21285,"mtime":1786084511010,"results":"12395","hashOfConfig":"12232"},{"size":6805,"mtime":1786084511010,"results":"12396","hashOfConfig":"12232"},{"size":14586,"mtime":1786084511011,"results":"12397","hashOfConfig":"12232"},{"size":8417,"mtime":1786084511011,"results":"12398","hashOfConfig":"12232"},{"size":14614,"mtime":1786084511011,"results":"12399","hashOfConfig":"12232"},{"size":10891,"mtime":1786084511011,"results":"12400","hashOfConfig":"12232"},{"size":4083,"mtime":1786084511011,"results":"12401","hashOfConfig":"12232"},{"size":11230,"mtime":1786084511011,"results":"12402","hashOfConfig":"12232"},{"size":6348,"mtime":1786084511012,"results":"12403","hashOfConfig":"12232"},{"size":5621,"mtime":1786084511012,"results":"12404","hashOfConfig":"12232"},{"size":9945,"mtime":1786084511012,"results":"12405","hashOfConfig":"12232"},{"size":7461,"mtime":1786084511012,"results":"12406","hashOfConfig":"12232"},{"size":13037,"mtime":1786084511012,"results":"12407","hashOfConfig":"12232"},{"size":2208,"mtime":1786084511012,"results":"12408","hashOfConfig":"12232"},{"size":25438,"mtime":1786084511013,"results":"12409","hashOfConfig":"12232"},{"size":16265,"mtime":1786084511013,"results":"12410","hashOfConfig":"12232"},{"size":13534,"mtime":1786084511013,"results":"12411","hashOfConfig":"12232"},{"size":7418,"mtime":1786084511013,"results":"12412","hashOfConfig":"12232"},{"size":13302,"mtime":1786084511014,"results":"12413","hashOfConfig":"12232"},{"size":8412,"mtime":1786084511014,"results":"12414","hashOfConfig":"12232"},{"size":27589,"mtime":1786084511014,"results":"12415","hashOfConfig":"12232"},{"size":4776,"mtime":1786084511014,"results":"12416","hashOfConfig":"12232"},{"size":5676,"mtime":1786084511014,"results":"12417","hashOfConfig":"12232"},{"size":5927,"mtime":1786084511014,"results":"12418","hashOfConfig":"12232"},{"size":9076,"mtime":1786084511015,"results":"12419","hashOfConfig":"12232"},{"size":7004,"mtime":1786084511015,"results":"12420","hashOfConfig":"12232"},{"size":4965,"mtime":1786084511015,"results":"12421","hashOfConfig":"12232"},{"size":4857,"mtime":1786084511015,"results":"12422","hashOfConfig":"12232"},{"size":4305,"mtime":1786084511015,"results":"12423","hashOfConfig":"12232"},{"size":6599,"mtime":1786084511015,"results":"12424","hashOfConfig":"12232"},{"size":4662,"mtime":1786084511015,"results":"12425","hashOfConfig":"12232"},{"size":7889,"mtime":1786084511016,"results":"12426","hashOfConfig":"12232"},{"size":4596,"mtime":1786084511016,"results":"12427","hashOfConfig":"12232"},{"size":6630,"mtime":1786084511016,"results":"12428","hashOfConfig":"12232"},{"size":2617,"mtime":1786084511016,"results":"12429","hashOfConfig":"12232"},{"size":671,"mtime":1786084511016,"results":"12430","hashOfConfig":"8216"},{"size":4207,"mtime":1786084511016,"results":"12431","hashOfConfig":"12232"},{"size":214,"mtime":1786084511017,"results":"12432","hashOfConfig":"12285"},{"size":7896,"mtime":1786084511022,"results":"12433","hashOfConfig":"12232"},{"size":4273,"mtime":1786084511022,"results":"12434","hashOfConfig":"12232"},{"size":5033,"mtime":1786084511022,"results":"12435","hashOfConfig":"12232"},{"size":3154,"mtime":1786084511023,"results":"12436","hashOfConfig":"12232"},{"size":2492,"mtime":1786084511023,"results":"12437","hashOfConfig":"12232"},{"size":4305,"mtime":1786084511023,"results":"12438","hashOfConfig":"12232"},{"size":2888,"mtime":1786084511023,"results":"12439","hashOfConfig":"12232"},{"size":6507,"mtime":1786084511023,"results":"12440","hashOfConfig":"12232"},{"size":2722,"mtime":1786084511023,"results":"12441","hashOfConfig":"12232"},{"size":1890,"mtime":1786084511024,"results":"12442","hashOfConfig":"12232"},{"size":1476,"mtime":1786084511024,"results":"12443","hashOfConfig":"12232"},{"size":2629,"mtime":1786084511024,"results":"12444","hashOfConfig":"12232"},{"size":4845,"mtime":1786084511024,"results":"12445","hashOfConfig":"12232"},{"size":12866,"mtime":1786084511024,"results":"12446","hashOfConfig":"12232"},{"size":3436,"mtime":1786084511024,"results":"12447","hashOfConfig":"12232"},{"size":5561,"mtime":1786084511024,"results":"12448","hashOfConfig":"12232"},{"size":7283,"mtime":1786084511025,"results":"12449","hashOfConfig":"12232"},{"size":4973,"mtime":1786084511025,"results":"12450","hashOfConfig":"12232"},{"size":2790,"mtime":1786084511025,"results":"12451","hashOfConfig":"12232"},{"size":4440,"mtime":1786084511025,"results":"12452","hashOfConfig":"12232"},{"size":6817,"mtime":1786084511025,"results":"12453","hashOfConfig":"12232"},{"size":3297,"mtime":1786084511025,"results":"12454","hashOfConfig":"12232"},{"size":3654,"mtime":1786084511026,"results":"12455","hashOfConfig":"12232"},{"size":3519,"mtime":1786084511026,"results":"12456","hashOfConfig":"12232"},{"size":3101,"mtime":1786084511026,"results":"12457","hashOfConfig":"12232"},{"size":6675,"mtime":1786084511026,"results":"12458","hashOfConfig":"12232"},{"size":3101,"mtime":1786084511026,"results":"12459","hashOfConfig":"12232"},{"size":4445,"mtime":1786084511026,"results":"12460","hashOfConfig":"12232"},{"size":10285,"mtime":1786084511027,"results":"12461","hashOfConfig":"12232"},{"size":8570,"mtime":1786084511027,"results":"12462","hashOfConfig":"12232"},{"size":6935,"mtime":1786084511027,"results":"12463","hashOfConfig":"12232"},{"size":3745,"mtime":1786084511027,"results":"12464","hashOfConfig":"12232"},{"size":701,"mtime":1786084511027,"results":"12465","hashOfConfig":"12232"},{"size":5412,"mtime":1786084511027,"results":"12466","hashOfConfig":"12232"},{"size":1565,"mtime":1786084511027,"results":"12467","hashOfConfig":"12232"},{"size":4677,"mtime":1786084511027,"results":"12468","hashOfConfig":"12232"},{"size":5123,"mtime":1786084511028,"results":"12469","hashOfConfig":"12232"},{"size":5184,"mtime":1786084511028,"results":"12470","hashOfConfig":"12232"},{"size":1538,"mtime":1786084511028,"results":"12471","hashOfConfig":"12232"},{"size":1793,"mtime":1786084511028,"results":"12472","hashOfConfig":"12232"},{"size":2678,"mtime":1786084511028,"results":"12473","hashOfConfig":"12232"},{"size":4004,"mtime":1786084511028,"results":"12474","hashOfConfig":"12232"},{"size":4213,"mtime":1786084511028,"results":"12475","hashOfConfig":"8189"},{"size":6217,"mtime":1786084511029,"results":"12476","hashOfConfig":"8189"},{"size":1650,"mtime":1786084511029,"results":"12477","hashOfConfig":"12232"},{"size":2883,"mtime":1786084511029,"results":"12478","hashOfConfig":"12232"},{"size":2826,"mtime":1786084511029,"results":"12479","hashOfConfig":"12232"},{"size":3841,"mtime":1786084511030,"results":"12480","hashOfConfig":"12232"},{"size":2600,"mtime":1786084511030,"results":"12481","hashOfConfig":"12232"},{"size":3743,"mtime":1786084511030,"results":"12482","hashOfConfig":"12232"},{"size":893,"mtime":1786084511030,"results":"12483","hashOfConfig":"12232"},{"size":2503,"mtime":1786084511030,"results":"12484","hashOfConfig":"12232"},{"size":2284,"mtime":1786084511030,"results":"12485","hashOfConfig":"12232"},{"size":4291,"mtime":1786084511030,"results":"12486","hashOfConfig":"12232"},{"size":3992,"mtime":1786084511030,"results":"12487","hashOfConfig":"12232"},{"size":5679,"mtime":1786084511031,"results":"12488","hashOfConfig":"12232"},{"size":3607,"mtime":1786084511031,"results":"12489","hashOfConfig":"12232"},{"size":4495,"mtime":1786084511031,"results":"12490","hashOfConfig":"12232"},{"size":1663,"mtime":1786084511031,"results":"12491","hashOfConfig":"12232"},{"size":1960,"mtime":1786084511031,"results":"12492","hashOfConfig":"12232"},{"size":54659,"mtime":1786084511032,"results":"12493","hashOfConfig":"12232"},{"size":4681,"mtime":1786084511032,"results":"12494","hashOfConfig":"12232"},{"size":4836,"mtime":1786084511032,"results":"12495","hashOfConfig":"12232"},{"size":2139,"mtime":1786084511032,"results":"12496","hashOfConfig":"12232"},{"size":3224,"mtime":1786084511032,"results":"12497","hashOfConfig":"12232"},{"size":1728,"mtime":1786084511033,"results":"12498","hashOfConfig":"12232"},{"size":25883,"mtime":1786084511033,"results":"12499","hashOfConfig":"12232"},{"size":34417,"mtime":1786084511033,"results":"12500","hashOfConfig":"12232"},{"size":4807,"mtime":1786084511034,"results":"12501","hashOfConfig":"12232"},{"size":12242,"mtime":1786084511034,"results":"12502","hashOfConfig":"12232"},{"size":9491,"mtime":1786084511034,"results":"12503","hashOfConfig":"12232"},{"size":14662,"mtime":1786084511034,"results":"12504","hashOfConfig":"12232"},{"size":2641,"mtime":1786084511034,"results":"12505","hashOfConfig":"12232"},{"size":15225,"mtime":1786084511035,"results":"12506","hashOfConfig":"12232"},{"size":28590,"mtime":1786084511035,"results":"12507","hashOfConfig":"12232"},{"size":9435,"mtime":1786084511035,"results":"12508","hashOfConfig":"12232"},{"size":3983,"mtime":1786084511035,"results":"12509","hashOfConfig":"12232"},{"size":3262,"mtime":1786084511036,"results":"12510","hashOfConfig":"12232"},{"size":36728,"mtime":1786084511036,"results":"12511","hashOfConfig":"12232"},{"size":9698,"mtime":1786084511037,"results":"12512","hashOfConfig":"12232"},{"size":14142,"mtime":1786084511037,"results":"12513","hashOfConfig":"12232"},{"size":3424,"mtime":1786084511037,"results":"12514","hashOfConfig":"12232"},{"size":1611,"mtime":1786084511037,"results":"12515","hashOfConfig":"12232"},{"size":1749,"mtime":1786084511038,"results":"12516","hashOfConfig":"12232"},{"size":3291,"mtime":1786084511038,"results":"12517","hashOfConfig":"12232"},{"size":4763,"mtime":1786084511038,"results":"12518","hashOfConfig":"12232"},{"size":1674,"mtime":1786084511038,"results":"12519","hashOfConfig":"12232"},{"size":4856,"mtime":1786084511038,"results":"12520","hashOfConfig":"12232"},{"size":2304,"mtime":1786084511038,"results":"12521","hashOfConfig":"12232"},{"size":1758,"mtime":1786084511038,"results":"12522","hashOfConfig":"12232"},{"size":899,"mtime":1786084511039,"results":"12523","hashOfConfig":"12232"},{"size":5217,"mtime":1786084511039,"results":"12524","hashOfConfig":"12232"},{"size":6236,"mtime":1786084511039,"results":"12525","hashOfConfig":"12232"},{"size":1131,"mtime":1786084511039,"results":"12526","hashOfConfig":"12232"},{"size":3861,"mtime":1786084511039,"results":"12527","hashOfConfig":"12232"},{"size":5828,"mtime":1786084511039,"results":"12528","hashOfConfig":"12232"},{"size":8263,"mtime":1786084511040,"results":"12529","hashOfConfig":"12232"},{"size":4402,"mtime":1786084511040,"results":"12530","hashOfConfig":"12232"},{"size":1706,"mtime":1786084511040,"results":"12531","hashOfConfig":"12232"},{"size":2702,"mtime":1786084511040,"results":"12532","hashOfConfig":"12232"},{"size":2784,"mtime":1786084511040,"results":"12533","hashOfConfig":"12232"},{"size":23227,"mtime":1786084511040,"results":"12534","hashOfConfig":"8189"},{"size":8810,"mtime":1786084511040,"results":"12535","hashOfConfig":"12232"},{"size":9783,"mtime":1786084511041,"results":"12536","hashOfConfig":"12232"},{"size":11509,"mtime":1786084511041,"results":"12537","hashOfConfig":"12232"},{"size":19280,"mtime":1786084511041,"results":"12538","hashOfConfig":"12232"},{"size":8360,"mtime":1786084511041,"results":"12539","hashOfConfig":"12232"},{"size":19900,"mtime":1786084511041,"results":"12540","hashOfConfig":"12232"},{"size":8912,"mtime":1786084511042,"results":"12541","hashOfConfig":"12232"},{"size":2428,"mtime":1786084511042,"results":"12542","hashOfConfig":"12232"},{"size":3503,"mtime":1786084511042,"results":"12543","hashOfConfig":"12232"},{"size":4229,"mtime":1786084511042,"results":"12544","hashOfConfig":"12232"},{"size":15586,"mtime":1786084511042,"results":"12545","hashOfConfig":"12232"},{"size":5026,"mtime":1786084511042,"results":"12546","hashOfConfig":"12232"},{"size":864,"mtime":1786084511042,"results":"12547","hashOfConfig":"12232"},{"size":3357,"mtime":1786084511043,"results":"12548","hashOfConfig":"12232"},{"size":4634,"mtime":1786084511043,"results":"12549","hashOfConfig":"12232"},{"size":2933,"mtime":1786084511043,"results":"12550","hashOfConfig":"12232"},{"size":2508,"mtime":1786084511043,"results":"12551","hashOfConfig":"12232"},{"size":1095,"mtime":1786084511043,"results":"12552","hashOfConfig":"12232"},{"size":1858,"mtime":1786084511043,"results":"12553","hashOfConfig":"12232"},{"size":13928,"mtime":1786084511043,"results":"12554","hashOfConfig":"12232"},{"size":1532,"mtime":1786084511044,"results":"12555","hashOfConfig":"12232"},{"size":6564,"mtime":1786084511044,"results":"12556","hashOfConfig":"12232"},{"size":2859,"mtime":1786084511044,"results":"12557","hashOfConfig":"12232"},{"size":2789,"mtime":1786084511044,"results":"12558","hashOfConfig":"12232"},{"size":2859,"mtime":1786084511044,"results":"12559","hashOfConfig":"12232"},{"size":5080,"mtime":1786084511044,"results":"12560","hashOfConfig":"12232"},{"size":12883,"mtime":1786084511045,"results":"12561","hashOfConfig":"12232"},{"size":8302,"mtime":1786084511045,"results":"12562","hashOfConfig":"12232"},{"size":7589,"mtime":1786084511045,"results":"12563","hashOfConfig":"12232"},{"size":409,"mtime":1786084511045,"results":"12564","hashOfConfig":"12232"},{"size":3249,"mtime":1786084511045,"results":"12565","hashOfConfig":"12232"},{"size":3157,"mtime":1786084511045,"results":"12566","hashOfConfig":"12232"},{"size":2582,"mtime":1786084511045,"results":"12567","hashOfConfig":"12232"},{"size":5710,"mtime":1786084511046,"results":"12568","hashOfConfig":"12232"},{"size":9759,"mtime":1786084511046,"results":"12569","hashOfConfig":"12232"},{"size":5491,"mtime":1786084511046,"results":"12570","hashOfConfig":"12232"},{"size":4664,"mtime":1786084511046,"results":"12571","hashOfConfig":"12232"},{"size":3329,"mtime":1786084511046,"results":"12572","hashOfConfig":"12232"},{"size":4288,"mtime":1786084511046,"results":"12573","hashOfConfig":"12232"},{"size":5150,"mtime":1786084511046,"results":"12574","hashOfConfig":"12232"},{"size":4899,"mtime":1786084511047,"results":"12575","hashOfConfig":"12232"},{"size":7357,"mtime":1786084511047,"results":"12576","hashOfConfig":"12232"},{"size":14053,"mtime":1786084511047,"results":"12577","hashOfConfig":"12232"},{"size":2058,"mtime":1786084511047,"results":"12578","hashOfConfig":"12232"},{"size":1096,"mtime":1786084511047,"results":"12579","hashOfConfig":"12232"},{"size":1063,"mtime":1786084511047,"results":"12580","hashOfConfig":"12232"},{"size":4070,"mtime":1786084511047,"results":"12581","hashOfConfig":"12232"},{"size":1524,"mtime":1786084511048,"results":"12582","hashOfConfig":"12232"},{"size":5066,"mtime":1786084511048,"results":"12583","hashOfConfig":"12232"},{"size":3159,"mtime":1786084511048,"results":"12584","hashOfConfig":"12232"},{"size":2411,"mtime":1786084511048,"results":"12585","hashOfConfig":"12232"},{"size":10094,"mtime":1786084511048,"results":"12586","hashOfConfig":"12232"},{"size":3872,"mtime":1786084511048,"results":"12587","hashOfConfig":"12232"},{"size":3527,"mtime":1786084511048,"results":"12588","hashOfConfig":"12232"},{"size":3703,"mtime":1786084511049,"results":"12589","hashOfConfig":"12232"},{"size":8841,"mtime":1786084511049,"results":"12590","hashOfConfig":"12232"},{"size":4421,"mtime":1786084511049,"results":"12591","hashOfConfig":"12232"},{"size":5925,"mtime":1786084511049,"results":"12592","hashOfConfig":"12232"},{"size":2308,"mtime":1786085222301,"results":"12593","hashOfConfig":"12232"},{"size":941,"mtime":1786084511049,"results":"12594","hashOfConfig":"12232"},{"size":3368,"mtime":1786084511049,"results":"12595","hashOfConfig":"12232"},{"size":2952,"mtime":1786084511050,"results":"12596","hashOfConfig":"12232"},{"size":7344,"mtime":1786084511050,"results":"12597","hashOfConfig":"12232"},{"size":5652,"mtime":1786084511050,"results":"12598","hashOfConfig":"12232"},{"size":3591,"mtime":1786084511050,"results":"12599","hashOfConfig":"12232"},{"size":2069,"mtime":1786084511051,"results":"12600","hashOfConfig":"12232"},{"size":2228,"mtime":1786084511051,"results":"12601","hashOfConfig":"12232"},{"size":2782,"mtime":1786084511051,"results":"12602","hashOfConfig":"12232"},{"size":6947,"mtime":1786084511051,"results":"12603","hashOfConfig":"12232"},{"size":3457,"mtime":1786084511051,"results":"12604","hashOfConfig":"12232"},{"size":1865,"mtime":1786084511051,"results":"12605","hashOfConfig":"12232"},{"size":2077,"mtime":1786084511052,"results":"12606","hashOfConfig":"12232"},{"size":1710,"mtime":1786084511052,"results":"12607","hashOfConfig":"12232"},{"size":5137,"mtime":1786084511052,"results":"12608","hashOfConfig":"12232"},{"size":10551,"mtime":1786084511052,"results":"12609","hashOfConfig":"12232"},{"size":9461,"mtime":1786084511052,"results":"12610","hashOfConfig":"12232"},{"size":6939,"mtime":1786084511053,"results":"12611","hashOfConfig":"12232"},{"size":8474,"mtime":1786084511053,"results":"12612","hashOfConfig":"12232"},{"size":2178,"mtime":1786084511057,"results":"12613","hashOfConfig":"12232"},{"size":11106,"mtime":1786084511057,"results":"12614","hashOfConfig":"12232"},{"size":1998,"mtime":1786084511057,"results":"12615","hashOfConfig":"12232"},{"size":2407,"mtime":1786084511058,"results":"12616","hashOfConfig":"12232"},{"size":4340,"mtime":1786084511058,"results":"12617","hashOfConfig":"12232"},{"size":4768,"mtime":1786084511058,"results":"12618","hashOfConfig":"12232"},{"size":8576,"mtime":1786084511059,"results":"12619","hashOfConfig":"12232"},{"size":4921,"mtime":1786084511059,"results":"12620","hashOfConfig":"12232"},{"size":4334,"mtime":1786084511059,"results":"12621","hashOfConfig":"12232"},{"size":5506,"mtime":1786084511058,"results":"12622","hashOfConfig":"12232"},{"size":6146,"mtime":1786084511058,"results":"12623","hashOfConfig":"12232"},{"size":6695,"mtime":1786084511058,"results":"12624","hashOfConfig":"12232"},{"size":5613,"mtime":1786084511059,"results":"12625","hashOfConfig":"12232"},{"size":7523,"mtime":1786084511059,"results":"12626","hashOfConfig":"12232"},{"size":5907,"mtime":1786084511059,"results":"12627","hashOfConfig":"12232"},{"size":4043,"mtime":1786084511059,"results":"12628","hashOfConfig":"12232"},{"size":3925,"mtime":1786084511060,"results":"12629","hashOfConfig":"12232"},{"size":8796,"mtime":1786084511060,"results":"12630","hashOfConfig":"12232"},{"size":4639,"mtime":1786084511060,"results":"12631","hashOfConfig":"12232"},{"size":3735,"mtime":1786084511060,"results":"12632","hashOfConfig":"12232"},{"size":1687,"mtime":1786084511060,"results":"12633","hashOfConfig":"12232"},{"size":4584,"mtime":1786084511060,"results":"12634","hashOfConfig":"12232"},{"size":3375,"mtime":1786084511060,"results":"12635","hashOfConfig":"12232"},{"size":4809,"mtime":1786084511060,"results":"12636","hashOfConfig":"12232"},{"size":3222,"mtime":1786084511061,"results":"12637","hashOfConfig":"12232"},{"size":12488,"mtime":1786084511061,"results":"12638","hashOfConfig":"12232"},{"size":8939,"mtime":1786084511061,"results":"12639","hashOfConfig":"12232"},{"size":1476,"mtime":1786084511061,"results":"12640","hashOfConfig":"12232"},{"size":9779,"mtime":1786084511061,"results":"12641","hashOfConfig":"12232"},{"size":8988,"mtime":1786084511062,"results":"12642","hashOfConfig":"12232"},{"size":7122,"mtime":1786084511062,"results":"12643","hashOfConfig":"12232"},{"size":1457,"mtime":1786084511062,"results":"12644","hashOfConfig":"12232"},{"size":2184,"mtime":1786084511061,"results":"12645","hashOfConfig":"12232"},{"size":1080,"mtime":1786084511061,"results":"12646","hashOfConfig":"12232"},{"size":3947,"mtime":1786084511062,"results":"12647","hashOfConfig":"12232"},{"size":6606,"mtime":1786084511062,"results":"12648","hashOfConfig":"12232"},{"size":17499,"mtime":1786084511053,"results":"12649","hashOfConfig":"12232"},{"size":1096,"mtime":1786084511053,"results":"12650","hashOfConfig":"12232"},{"size":1213,"mtime":1786084511053,"results":"12651","hashOfConfig":"12232"},{"size":5358,"mtime":1786084511053,"results":"12652","hashOfConfig":"12232"},{"size":8127,"mtime":1786084511054,"results":"12653","hashOfConfig":"12285"},{"size":22465,"mtime":1786084511054,"results":"12654","hashOfConfig":"12232"},{"size":1734,"mtime":1786084511054,"results":"12655","hashOfConfig":"12232"},{"size":1920,"mtime":1786084511054,"results":"12656","hashOfConfig":"12232"},{"size":5784,"mtime":1786084511054,"results":"12657","hashOfConfig":"12232"},{"size":23106,"mtime":1786084511054,"results":"12658","hashOfConfig":"12232"},{"size":2440,"mtime":1786084511054,"results":"12659","hashOfConfig":"12232"},{"size":14504,"mtime":1786084511055,"results":"12660","hashOfConfig":"12232"},{"size":12634,"mtime":1786084511055,"results":"12661","hashOfConfig":"12232"},{"size":968,"mtime":1786084511055,"results":"12662","hashOfConfig":"12232"},{"size":4405,"mtime":1786084511055,"results":"12663","hashOfConfig":"12232"},{"size":8262,"mtime":1786084511055,"results":"12664","hashOfConfig":"12232"},{"size":13168,"mtime":1786084511055,"results":"12665","hashOfConfig":"12232"},{"size":1921,"mtime":1786084511056,"results":"12666","hashOfConfig":"12232"},{"size":2218,"mtime":1786084511056,"results":"12667","hashOfConfig":"12232"},{"size":7278,"mtime":1786084511056,"results":"12668","hashOfConfig":"12232"},{"size":2507,"mtime":1786084511056,"results":"12669","hashOfConfig":"12232"},{"size":2643,"mtime":1786084511056,"results":"12670","hashOfConfig":"12232"},{"size":1486,"mtime":1786084511056,"results":"12671","hashOfConfig":"12232"},{"size":2185,"mtime":1786084511057,"results":"12672","hashOfConfig":"12232"},{"size":1712,"mtime":1786084511057,"results":"12673","hashOfConfig":"12232"},{"size":1296,"mtime":1786084511057,"results":"12674","hashOfConfig":"12232"},{"size":8889,"mtime":1786084511062,"results":"12675","hashOfConfig":"12232"},{"size":2924,"mtime":1786084511063,"results":"12676","hashOfConfig":"12232"},{"size":13196,"mtime":1786084511063,"results":"12677","hashOfConfig":"12232"},{"size":12057,"mtime":1786084511063,"results":"12678","hashOfConfig":"12232"},{"size":3859,"mtime":1786084511063,"results":"12679","hashOfConfig":"12232"},{"size":4921,"mtime":1786084511063,"results":"12680","hashOfConfig":"12232"},{"size":2086,"mtime":1786084511063,"results":"12681","hashOfConfig":"12232"},{"size":3836,"mtime":1786084511065,"results":"12682","hashOfConfig":"12232"},{"size":1982,"mtime":1786084511066,"results":"12683","hashOfConfig":"12232"},{"size":3319,"mtime":1786084511066,"results":"12684","hashOfConfig":"12232"},{"size":2013,"mtime":1786084511066,"results":"12685","hashOfConfig":"12232"},{"size":2009,"mtime":1786084511066,"results":"12686","hashOfConfig":"12232"},{"size":1881,"mtime":1786084511066,"results":"12687","hashOfConfig":"12232"},{"size":28939,"mtime":1786084511066,"results":"12688","hashOfConfig":"12232"},{"size":6220,"mtime":1786084511067,"results":"12689","hashOfConfig":"12232"},{"size":2581,"mtime":1786084511067,"results":"12690","hashOfConfig":"12232"},{"size":19718,"mtime":1786084511067,"results":"12691","hashOfConfig":"12232"},{"size":28539,"mtime":1786084511067,"results":"12692","hashOfConfig":"12232"},{"size":6716,"mtime":1786084511067,"results":"12693","hashOfConfig":"12232"},{"size":4091,"mtime":1786084511068,"results":"12694","hashOfConfig":"12232"},{"size":7059,"mtime":1786084511068,"results":"12695","hashOfConfig":"12232"},{"size":2003,"mtime":1786084511068,"results":"12696","hashOfConfig":"12232"},{"size":5186,"mtime":1786084511068,"results":"12697","hashOfConfig":"12232"},{"size":2103,"mtime":1786084511068,"results":"12698","hashOfConfig":"12232"},{"size":2760,"mtime":1786084511068,"results":"12699","hashOfConfig":"12232"},{"size":5793,"mtime":1786084511068,"results":"12700","hashOfConfig":"12232"},{"size":21671,"mtime":1786084511069,"results":"12701","hashOfConfig":"12232"},{"size":2171,"mtime":1786084511069,"results":"12702","hashOfConfig":"12232"},{"size":4265,"mtime":1786084511071,"results":"12703","hashOfConfig":"12232"},{"size":6619,"mtime":1786084511069,"results":"12704","hashOfConfig":"12232"},{"size":4705,"mtime":1786084511069,"results":"12705","hashOfConfig":"12232"},{"size":7230,"mtime":1786084511069,"results":"12706","hashOfConfig":"12232"},{"size":6203,"mtime":1786084511069,"results":"12707","hashOfConfig":"12232"},{"size":7825,"mtime":1786084511069,"results":"12708","hashOfConfig":"12232"},{"size":4575,"mtime":1786084511069,"results":"12709","hashOfConfig":"12232"},{"size":4237,"mtime":1786084511070,"results":"12710","hashOfConfig":"12232"},{"size":4481,"mtime":1786084511070,"results":"12711","hashOfConfig":"12232"},{"size":3225,"mtime":1786084511070,"results":"12712","hashOfConfig":"12232"},{"size":4458,"mtime":1786084511070,"results":"12713","hashOfConfig":"12232"},{"size":1691,"mtime":1786084511070,"results":"12714","hashOfConfig":"12232"},{"size":7893,"mtime":1786084511070,"results":"12715","hashOfConfig":"12232"},{"size":7940,"mtime":1786084511071,"results":"12716","hashOfConfig":"12232"},{"size":10578,"mtime":1786084511071,"results":"12717","hashOfConfig":"12232"},{"size":11052,"mtime":1786084511071,"results":"12718","hashOfConfig":"12232"},{"size":2501,"mtime":1786084511071,"results":"12719","hashOfConfig":"12232"},{"size":986,"mtime":1786084511071,"results":"12720","hashOfConfig":"12232"},{"size":4020,"mtime":1786084511072,"results":"12721","hashOfConfig":"12232"},{"size":17261,"mtime":1786084511072,"results":"12722","hashOfConfig":"12232"},{"size":21756,"mtime":1786084511072,"results":"12723","hashOfConfig":"12232"},{"size":5323,"mtime":1786084511072,"results":"12724","hashOfConfig":"12232"},{"size":3378,"mtime":1786084511072,"results":"12725","hashOfConfig":"12232"},{"size":10987,"mtime":1786084511072,"results":"12726","hashOfConfig":"12232"},{"size":737,"mtime":1786084511072,"results":"12727","hashOfConfig":"12232"},{"size":3473,"mtime":1786084511073,"results":"12728","hashOfConfig":"12232"},{"size":2742,"mtime":1786084511073,"results":"12729","hashOfConfig":"12232"},{"size":4370,"mtime":1786084511073,"results":"12730","hashOfConfig":"12232"},{"size":1372,"mtime":1786084511073,"results":"12731","hashOfConfig":"12232"},{"size":13039,"mtime":1786084511073,"results":"12732","hashOfConfig":"12232"},{"size":3891,"mtime":1786084511073,"results":"12733","hashOfConfig":"12232"},{"size":3514,"mtime":1786084511073,"results":"12734","hashOfConfig":"12232"},{"size":5101,"mtime":1786084511073,"results":"12735","hashOfConfig":"12232"},{"size":2305,"mtime":1786084511074,"results":"12736","hashOfConfig":"12232"},{"size":5006,"mtime":1786084511074,"results":"12737","hashOfConfig":"12232"},{"size":1997,"mtime":1786084511074,"results":"12738","hashOfConfig":"12232"},{"size":9029,"mtime":1786084511074,"results":"12739","hashOfConfig":"12232"},{"size":5760,"mtime":1786084511074,"results":"12740","hashOfConfig":"12232"},{"size":4475,"mtime":1786084511074,"results":"12741","hashOfConfig":"12232"},{"size":3910,"mtime":1786084511074,"results":"12742","hashOfConfig":"12232"},{"size":2757,"mtime":1786084511074,"results":"12743","hashOfConfig":"12232"},{"size":5325,"mtime":1786084511075,"results":"12744","hashOfConfig":"12232"},{"size":2402,"mtime":1786084511075,"results":"12745","hashOfConfig":"12232"},{"size":5796,"mtime":1786084511075,"results":"12746","hashOfConfig":"12232"},{"size":5578,"mtime":1786084511075,"results":"12747","hashOfConfig":"12232"},{"size":2434,"mtime":1786084511075,"results":"12748","hashOfConfig":"12232"},{"size":1390,"mtime":1786084511075,"results":"12749","hashOfConfig":"12232"},{"size":2188,"mtime":1786084511075,"results":"12750","hashOfConfig":"12232"},{"size":1576,"mtime":1786084511075,"results":"12751","hashOfConfig":"12232"},{"size":2227,"mtime":1786084511075,"results":"12752","hashOfConfig":"12232"},{"size":5055,"mtime":1786084511076,"results":"12753","hashOfConfig":"12232"},{"size":15243,"mtime":1786084511076,"results":"12754","hashOfConfig":"12232"},{"size":1027,"mtime":1786084511076,"results":"12755","hashOfConfig":"12232"},{"size":2076,"mtime":1786084511076,"results":"12756","hashOfConfig":"12232"},{"size":1698,"mtime":1786084511076,"results":"12757","hashOfConfig":"12232"},{"size":8796,"mtime":1786084511076,"results":"12758","hashOfConfig":"12232"},{"size":824,"mtime":1786084511077,"results":"12759","hashOfConfig":"12232"},{"size":4492,"mtime":1786084511077,"results":"12760","hashOfConfig":"12232"},{"size":9043,"mtime":1786084511077,"results":"12761","hashOfConfig":"12232"},{"size":3415,"mtime":1786084511077,"results":"12762","hashOfConfig":"12232"},{"size":6509,"mtime":1786084511077,"results":"12763","hashOfConfig":"12232"},{"size":2222,"mtime":1786084511077,"results":"12764","hashOfConfig":"12232"},{"size":2737,"mtime":1786084511077,"results":"12765","hashOfConfig":"12232"},{"size":4132,"mtime":1786084511077,"results":"12766","hashOfConfig":"12232"},{"size":7519,"mtime":1786084511078,"results":"12767","hashOfConfig":"12232"},{"size":5428,"mtime":1786084511078,"results":"12768","hashOfConfig":"12232"},{"size":4352,"mtime":1786084511078,"results":"12769","hashOfConfig":"12232"},{"size":5769,"mtime":1786084511078,"results":"12770","hashOfConfig":"12232"},{"size":1464,"mtime":1786084511078,"results":"12771","hashOfConfig":"12232"},{"size":7666,"mtime":1786084511078,"results":"12772","hashOfConfig":"12232"},{"size":23663,"mtime":1786084511079,"results":"12773","hashOfConfig":"12232"},{"size":17168,"mtime":1786084511079,"results":"12774","hashOfConfig":"12232"},{"size":4464,"mtime":1786084511079,"results":"12775","hashOfConfig":"12232"},{"size":5464,"mtime":1786084511079,"results":"12776","hashOfConfig":"12232"},{"size":3004,"mtime":1786084511079,"results":"12777","hashOfConfig":"12232"},{"size":963,"mtime":1786084511079,"results":"12778","hashOfConfig":"12232"},{"size":1431,"mtime":1786084511080,"results":"12779","hashOfConfig":"12232"},{"size":27195,"mtime":1786084511080,"results":"12780","hashOfConfig":"12232"},{"size":1841,"mtime":1786084511080,"results":"12781","hashOfConfig":"12232"},{"size":2115,"mtime":1786084511080,"results":"12782","hashOfConfig":"12232"},{"size":1518,"mtime":1786084511080,"results":"12783","hashOfConfig":"12232"},{"size":4373,"mtime":1786084511080,"results":"12784","hashOfConfig":"12232"},{"size":7580,"mtime":1786084511081,"results":"12785","hashOfConfig":"12232"},{"size":10327,"mtime":1786084511081,"results":"12786","hashOfConfig":"12232"},{"size":4119,"mtime":1786084511081,"results":"12787","hashOfConfig":"12232"},{"size":7293,"mtime":1786084511081,"results":"12788","hashOfConfig":"12232"},{"size":8736,"mtime":1786084511081,"results":"12789","hashOfConfig":"12232"},{"size":1869,"mtime":1786084511081,"results":"12790","hashOfConfig":"12232"},{"size":5007,"mtime":1786084511081,"results":"12791","hashOfConfig":"12232"},{"size":5538,"mtime":1786084511082,"results":"12792","hashOfConfig":"12232"},{"size":19690,"mtime":1786084511082,"results":"12793","hashOfConfig":"12232"},{"size":4200,"mtime":1786084511082,"results":"12794","hashOfConfig":"12232"},{"size":8700,"mtime":1786084511082,"results":"12795","hashOfConfig":"12285"},{"size":41363,"mtime":1786084511083,"results":"12796","hashOfConfig":"12232"},{"size":4824,"mtime":1786084511083,"results":"12797","hashOfConfig":"12232"},{"size":11502,"mtime":1786084511083,"results":"12798","hashOfConfig":"12232"},{"size":3612,"mtime":1786084511083,"results":"12799","hashOfConfig":"12232"},{"size":2614,"mtime":1786084511083,"results":"12800","hashOfConfig":"12232"},{"size":2326,"mtime":1786084511083,"results":"12801","hashOfConfig":"12232"},{"size":1777,"mtime":1786084511084,"results":"12802","hashOfConfig":"12232"},{"size":5957,"mtime":1786084511084,"results":"12803","hashOfConfig":"12232"},{"size":3806,"mtime":1786084511084,"results":"12804","hashOfConfig":"12232"},{"size":11449,"mtime":1786084511084,"results":"12805","hashOfConfig":"12232"},{"size":1979,"mtime":1786084511085,"results":"12806","hashOfConfig":"12232"},{"size":2216,"mtime":1786084511085,"results":"12807","hashOfConfig":"12232"},{"size":8499,"mtime":1786084511085,"results":"12808","hashOfConfig":"12232"},{"size":5233,"mtime":1786084511085,"results":"12809","hashOfConfig":"12232"},{"size":5073,"mtime":1786084511085,"results":"12810","hashOfConfig":"12232"},{"size":1047,"mtime":1786084511085,"results":"12811","hashOfConfig":"12232"},{"size":1911,"mtime":1786084511085,"results":"12812","hashOfConfig":"12232"},{"size":3427,"mtime":1786084511086,"results":"12813","hashOfConfig":"12232"},{"size":1538,"mtime":1786084511086,"results":"12814","hashOfConfig":"12232"},{"size":1860,"mtime":1786084511086,"results":"12815","hashOfConfig":"12232"},{"size":2996,"mtime":1786084511086,"results":"12816","hashOfConfig":"12232"},{"size":2794,"mtime":1786084511086,"results":"12817","hashOfConfig":"12232"},{"size":4753,"mtime":1786084511086,"results":"12818","hashOfConfig":"12232"},{"size":1688,"mtime":1786084511087,"results":"12819","hashOfConfig":"12232"},{"size":9313,"mtime":1786084511087,"results":"12820","hashOfConfig":"12232"},{"size":3633,"mtime":1786084511087,"results":"12821","hashOfConfig":"12232"},{"size":8523,"mtime":1786084511087,"results":"12822","hashOfConfig":"12232"},{"size":2500,"mtime":1786084511087,"results":"12823","hashOfConfig":"12232"},{"size":12960,"mtime":1786084511087,"results":"12824","hashOfConfig":"12232"},{"size":3145,"mtime":1786084511087,"results":"12825","hashOfConfig":"12232"},{"size":984,"mtime":1786084511087,"results":"12826","hashOfConfig":"12232"},{"size":1246,"mtime":1786084511088,"results":"12827","hashOfConfig":"12232"},{"size":4330,"mtime":1786084511088,"results":"12828","hashOfConfig":"12232"},{"size":5473,"mtime":1786084511088,"results":"12829","hashOfConfig":"12232"},{"size":12990,"mtime":1786084511088,"results":"12830","hashOfConfig":"12232"},{"size":7015,"mtime":1786084511088,"results":"12831","hashOfConfig":"12232"},{"size":5565,"mtime":1786084511088,"results":"12832","hashOfConfig":"12232"},{"size":3000,"mtime":1786084511088,"results":"12833","hashOfConfig":"12232"},{"size":6900,"mtime":1786084511088,"results":"12834","hashOfConfig":"12232"},{"size":6278,"mtime":1786084511089,"results":"12835","hashOfConfig":"12232"},{"size":12241,"mtime":1786084511089,"results":"12836","hashOfConfig":"12232"},{"size":1307,"mtime":1786084511089,"results":"12837","hashOfConfig":"12232"},{"size":2122,"mtime":1786084511089,"results":"12838","hashOfConfig":"12232"},{"size":3080,"mtime":1786084511089,"results":"12839","hashOfConfig":"12232"},{"size":14360,"mtime":1786084511089,"results":"12840","hashOfConfig":"12232"},{"size":16539,"mtime":1786084511089,"results":"12841","hashOfConfig":"12232"},{"size":3554,"mtime":1786084511090,"results":"12842","hashOfConfig":"12232"},{"size":3633,"mtime":1786084511090,"results":"12843","hashOfConfig":"12232"},{"size":2638,"mtime":1786084511090,"results":"12844","hashOfConfig":"12232"},{"size":3400,"mtime":1786084511090,"results":"12845","hashOfConfig":"12232"},{"size":6470,"mtime":1786084511090,"results":"12846","hashOfConfig":"12232"},{"size":3016,"mtime":1786084511091,"results":"12847","hashOfConfig":"12232"},{"size":1685,"mtime":1786084511091,"results":"12848","hashOfConfig":"12232"},{"size":2723,"mtime":1786084511091,"results":"12849","hashOfConfig":"12232"},{"size":5654,"mtime":1786084511091,"results":"12850","hashOfConfig":"12232"},{"size":1861,"mtime":1786084511091,"results":"12851","hashOfConfig":"12232"},{"size":1327,"mtime":1786084511086,"results":"12852","hashOfConfig":"12232"},{"size":3635,"mtime":1786084511086,"results":"12853","hashOfConfig":"12232"},{"size":7347,"mtime":1786084511086,"results":"12854","hashOfConfig":"12232"},{"size":2670,"mtime":1786084511092,"results":"12855","hashOfConfig":"12232"},{"size":7485,"mtime":1786084511092,"results":"12856","hashOfConfig":"12232"},{"size":8270,"mtime":1786084511092,"results":"12857","hashOfConfig":"12232"},{"size":4497,"mtime":1786084511092,"results":"12858","hashOfConfig":"12232"},{"size":7711,"mtime":1786084511092,"results":"12859","hashOfConfig":"12232"},{"size":5764,"mtime":1786084511093,"results":"12860","hashOfConfig":"12232"},{"size":2965,"mtime":1786084511093,"results":"12861","hashOfConfig":"12232"},{"size":2846,"mtime":1786084511093,"results":"12862","hashOfConfig":"12232"},{"size":2080,"mtime":1786084511093,"results":"12863","hashOfConfig":"12232"},{"size":3160,"mtime":1786084511093,"results":"12864","hashOfConfig":"12232"},{"size":5065,"mtime":1786084511093,"results":"12865","hashOfConfig":"12232"},{"size":18441,"mtime":1786084511093,"results":"12866","hashOfConfig":"12232"},{"size":4681,"mtime":1786084511094,"results":"12867","hashOfConfig":"12232"},{"size":14837,"mtime":1786084511094,"results":"12868","hashOfConfig":"12232"},{"size":25807,"mtime":1786084511094,"results":"12869","hashOfConfig":"12232"},{"size":9261,"mtime":1786084511094,"results":"12870","hashOfConfig":"12232"},{"size":10312,"mtime":1786084511094,"results":"12871","hashOfConfig":"12232"},{"size":3868,"mtime":1786084511095,"results":"12872","hashOfConfig":"12232"},{"size":3711,"mtime":1786084511095,"results":"12873","hashOfConfig":"12232"},{"size":1941,"mtime":1786084511095,"results":"12874","hashOfConfig":"12232"},{"size":2950,"mtime":1786084511095,"results":"12875","hashOfConfig":"12232"},{"size":3819,"mtime":1786084511095,"results":"12876","hashOfConfig":"12232"},{"size":3702,"mtime":1786084511095,"results":"12877","hashOfConfig":"12232"},{"size":4924,"mtime":1786084511095,"results":"12878","hashOfConfig":"12232"},{"size":4351,"mtime":1786084511095,"results":"12879","hashOfConfig":"12232"},{"size":5026,"mtime":1786084511095,"results":"12880","hashOfConfig":"12232"},{"size":4428,"mtime":1786084511096,"results":"12881","hashOfConfig":"12232"},{"size":5871,"mtime":1786084511096,"results":"12882","hashOfConfig":"12232"},{"size":3794,"mtime":1786084511096,"results":"12883","hashOfConfig":"12232"},{"size":4741,"mtime":1786084511096,"results":"12884","hashOfConfig":"12232"},{"size":1593,"mtime":1786084511096,"results":"12885","hashOfConfig":"12232"},{"size":3252,"mtime":1786084511096,"results":"12886","hashOfConfig":"12232"},{"size":8420,"mtime":1786084511097,"results":"12887","hashOfConfig":"12232"},{"size":5883,"mtime":1786084511097,"results":"12888","hashOfConfig":"12232"},{"size":6678,"mtime":1786084511097,"results":"12889","hashOfConfig":"12232"},{"size":5303,"mtime":1786084511097,"results":"12890","hashOfConfig":"12232"},{"size":3970,"mtime":1786084511097,"results":"12891","hashOfConfig":"12232"},{"size":1749,"mtime":1786084511097,"results":"12892","hashOfConfig":"12232"},{"size":2241,"mtime":1786084511097,"results":"12893","hashOfConfig":"12232"},{"size":6132,"mtime":1786084511097,"results":"12894","hashOfConfig":"12232"},{"size":9109,"mtime":1786084511098,"results":"12895","hashOfConfig":"12232"},{"size":2629,"mtime":1786084511098,"results":"12896","hashOfConfig":"12232"},{"size":3055,"mtime":1786084511098,"results":"12897","hashOfConfig":"12232"},{"size":7412,"mtime":1786084511098,"results":"12898","hashOfConfig":"12232"},{"size":8307,"mtime":1786084511098,"results":"12899","hashOfConfig":"12232"},{"size":17490,"mtime":1786084511099,"results":"12900","hashOfConfig":"12232"},{"size":2077,"mtime":1786084511099,"results":"12901","hashOfConfig":"12232"},{"size":40206,"mtime":1786084511099,"results":"12902","hashOfConfig":"12232"},{"size":4474,"mtime":1786084511099,"results":"12903","hashOfConfig":"12232"},{"size":4320,"mtime":1786084511100,"results":"12904","hashOfConfig":"12232"},{"size":3750,"mtime":1786084511100,"results":"12905","hashOfConfig":"12232"},{"size":6079,"mtime":1786084511100,"results":"12906","hashOfConfig":"12232"},{"size":3642,"mtime":1786084511100,"results":"12907","hashOfConfig":"12232"},{"size":8894,"mtime":1786084511100,"results":"12908","hashOfConfig":"12232"},{"size":2564,"mtime":1786084511100,"results":"12909","hashOfConfig":"12232"},{"size":7187,"mtime":1786087859395,"results":"12910","hashOfConfig":"12232"},{"size":8444,"mtime":1786084511101,"results":"12911","hashOfConfig":"12232"},{"size":7604,"mtime":1786084511101,"results":"12912","hashOfConfig":"12232"},{"size":12906,"mtime":1786084511101,"results":"12913","hashOfConfig":"12232"},{"size":4472,"mtime":1786084511101,"results":"12914","hashOfConfig":"12232"},{"size":8411,"mtime":1786084511101,"results":"12915","hashOfConfig":"12232"},{"size":1491,"mtime":1786084511101,"results":"12916","hashOfConfig":"12232"},{"size":13889,"mtime":1786084511102,"results":"12917","hashOfConfig":"12232"},{"size":15630,"mtime":1786084511102,"results":"12918","hashOfConfig":"12232"},{"size":1748,"mtime":1786084511102,"results":"12919","hashOfConfig":"12232"},{"size":27000,"mtime":1786084511102,"results":"12920","hashOfConfig":"12232"},{"size":5109,"mtime":1786084511102,"results":"12921","hashOfConfig":"12232"},{"size":9774,"mtime":1786084511102,"results":"12922","hashOfConfig":"12232"},{"size":3953,"mtime":1786084511103,"results":"12923","hashOfConfig":"12232"},{"size":10123,"mtime":1786084511103,"results":"12924","hashOfConfig":"12232"},{"size":3485,"mtime":1786084511103,"results":"12925","hashOfConfig":"12232"},{"size":11260,"mtime":1786084511103,"results":"12926","hashOfConfig":"12232"},{"size":10367,"mtime":1786084511103,"results":"12927","hashOfConfig":"12232"},{"size":4124,"mtime":1786084511104,"results":"12928","hashOfConfig":"12232"},{"size":3854,"mtime":1786084511104,"results":"12929","hashOfConfig":"12232"},{"size":16124,"mtime":1786084511104,"results":"12930","hashOfConfig":"12232"},{"size":6904,"mtime":1786084511104,"results":"12931","hashOfConfig":"12232"},{"size":3994,"mtime":1786084511104,"results":"12932","hashOfConfig":"12232"},{"size":2754,"mtime":1786084511104,"results":"12933","hashOfConfig":"12232"},{"size":2800,"mtime":1786084511104,"results":"12934","hashOfConfig":"12232"},{"size":3448,"mtime":1786084511105,"results":"12935","hashOfConfig":"12232"},{"size":2089,"mtime":1786084511105,"results":"12936","hashOfConfig":"12232"},{"size":16703,"mtime":1786084511105,"results":"12937","hashOfConfig":"12232"},{"size":10123,"mtime":1786084511105,"results":"12938","hashOfConfig":"12232"},{"size":5597,"mtime":1786084511105,"results":"12939","hashOfConfig":"12232"},{"size":4820,"mtime":1786084511105,"results":"12940","hashOfConfig":"12232"},{"size":3153,"mtime":1786084511106,"results":"12941","hashOfConfig":"12232"},{"size":2433,"mtime":1786084511106,"results":"12942","hashOfConfig":"12232"},{"size":2667,"mtime":1786084511106,"results":"12943","hashOfConfig":"12232"},{"size":4418,"mtime":1786084511106,"results":"12944","hashOfConfig":"12232"},{"size":4501,"mtime":1786084511106,"results":"12945","hashOfConfig":"12232"},{"size":6481,"mtime":1786084511106,"results":"12946","hashOfConfig":"12232"},{"size":4653,"mtime":1786084511106,"results":"12947","hashOfConfig":"12232"},{"size":5417,"mtime":1786084511107,"results":"12948","hashOfConfig":"12232"},{"size":5379,"mtime":1786084511107,"results":"12949","hashOfConfig":"12232"},{"size":4673,"mtime":1786084511107,"results":"12950","hashOfConfig":"12232"},{"size":3075,"mtime":1786084511107,"results":"12951","hashOfConfig":"12232"},{"size":2065,"mtime":1786084511107,"results":"12952","hashOfConfig":"12232"},{"size":5179,"mtime":1786084511107,"results":"12953","hashOfConfig":"12232"},{"size":1751,"mtime":1786084511108,"results":"12954","hashOfConfig":"12232"},{"size":2716,"mtime":1786084511108,"results":"12955","hashOfConfig":"12232"},{"size":3275,"mtime":1786084511108,"results":"12956","hashOfConfig":"12232"},{"size":1311,"mtime":1786084511108,"results":"12957","hashOfConfig":"12232"},{"size":6839,"mtime":1786084511108,"results":"12958","hashOfConfig":"12232"},{"size":1933,"mtime":1786084511108,"results":"12959","hashOfConfig":"12232"},{"size":7447,"mtime":1786084511108,"results":"12960","hashOfConfig":"12232"},{"size":5343,"mtime":1786084511109,"results":"12961","hashOfConfig":"12232"},{"size":5154,"mtime":1786084511109,"results":"12962","hashOfConfig":"12232"},{"size":3153,"mtime":1786084511109,"results":"12963","hashOfConfig":"12232"},{"size":2733,"mtime":1786084511109,"results":"12964","hashOfConfig":"12232"},{"size":3131,"mtime":1786084511109,"results":"12965","hashOfConfig":"12232"},{"size":966,"mtime":1786084511109,"results":"12966","hashOfConfig":"12232"},{"size":3257,"mtime":1786084511109,"results":"12967","hashOfConfig":"12232"},{"size":3359,"mtime":1786084511109,"results":"12968","hashOfConfig":"12232"},{"size":9524,"mtime":1786084511110,"results":"12969","hashOfConfig":"12232"},{"size":4882,"mtime":1786084511110,"results":"12970","hashOfConfig":"12232"},{"size":4376,"mtime":1786084511110,"results":"12971","hashOfConfig":"12232"},{"size":5535,"mtime":1786084511110,"results":"12972","hashOfConfig":"12232"},{"size":3971,"mtime":1786084511110,"results":"12973","hashOfConfig":"12232"},{"size":4441,"mtime":1786084511110,"results":"12974","hashOfConfig":"12232"},{"size":5925,"mtime":1786084511111,"results":"12975","hashOfConfig":"12232"},{"size":5387,"mtime":1786084511111,"results":"12976","hashOfConfig":"12232"},{"size":4642,"mtime":1786084511111,"results":"12977","hashOfConfig":"12232"},{"size":809,"mtime":1786084511111,"results":"12978","hashOfConfig":"12232"},{"size":3273,"mtime":1786084511111,"results":"12979","hashOfConfig":"12232"},{"size":3510,"mtime":1786084511111,"results":"12980","hashOfConfig":"12232"},{"size":1688,"mtime":1786084511111,"results":"12981","hashOfConfig":"12232"},{"size":2764,"mtime":1786084511112,"results":"12982","hashOfConfig":"12232"},{"size":3617,"mtime":1786084511112,"results":"12983","hashOfConfig":"12232"},{"size":2719,"mtime":1786084511112,"results":"12984","hashOfConfig":"12232"},{"size":2513,"mtime":1786084511112,"results":"12985","hashOfConfig":"12232"},{"size":5345,"mtime":1786084511112,"results":"12986","hashOfConfig":"12232"},{"size":2106,"mtime":1786084511112,"results":"12987","hashOfConfig":"12232"},{"size":27377,"mtime":1786084511112,"results":"12988","hashOfConfig":"12232"},{"size":4769,"mtime":1786084511113,"results":"12989","hashOfConfig":"12232"},{"size":16398,"mtime":1786084511113,"results":"12990","hashOfConfig":"12232"},{"size":3708,"mtime":1786084511113,"results":"12991","hashOfConfig":"12232"},{"size":1536,"mtime":1786084511113,"results":"12992","hashOfConfig":"12232"},{"size":1873,"mtime":1786084511113,"results":"12993","hashOfConfig":"12232"},{"size":2709,"mtime":1786084511113,"results":"12994","hashOfConfig":"12232"},{"size":1490,"mtime":1786084511113,"results":"12995","hashOfConfig":"12232"},{"size":4666,"mtime":1786084511114,"results":"12996","hashOfConfig":"12232"},{"size":3182,"mtime":1786084511114,"results":"12997","hashOfConfig":"12232"},{"size":7279,"mtime":1786084511114,"results":"12998","hashOfConfig":"12232"},{"size":3125,"mtime":1786084511114,"results":"12999","hashOfConfig":"12232"},{"size":2710,"mtime":1786084511114,"results":"13000","hashOfConfig":"12232"},{"size":3690,"mtime":1786084511114,"results":"13001","hashOfConfig":"12232"},{"size":1837,"mtime":1786084511114,"results":"13002","hashOfConfig":"12232"},{"size":4308,"mtime":1786084511115,"results":"13003","hashOfConfig":"12232"},{"size":6089,"mtime":1786084511115,"results":"13004","hashOfConfig":"12232"},{"size":2302,"mtime":1786084511115,"results":"13005","hashOfConfig":"12232"},{"size":93505,"mtime":1786084511116,"results":"13006","hashOfConfig":"12232"},{"size":4983,"mtime":1786084511116,"results":"13007","hashOfConfig":"12232"},{"size":9214,"mtime":1786084511116,"results":"13008","hashOfConfig":"12232"},{"size":2938,"mtime":1786084511116,"results":"13009","hashOfConfig":"12232"},{"size":1761,"mtime":1786084511116,"results":"13010","hashOfConfig":"12232"},{"size":3136,"mtime":1786084511117,"results":"13011","hashOfConfig":"12232"},{"size":16962,"mtime":1786084511117,"results":"13012","hashOfConfig":"12232"},{"size":2228,"mtime":1786084511117,"results":"13013","hashOfConfig":"12232"},{"size":13117,"mtime":1786084511117,"results":"13014","hashOfConfig":"12232"},{"size":8494,"mtime":1786084511117,"results":"13015","hashOfConfig":"12232"},{"size":3659,"mtime":1786084511117,"results":"13016","hashOfConfig":"12232"},{"size":1525,"mtime":1786084511118,"results":"13017","hashOfConfig":"12232"},{"size":3365,"mtime":1786084511118,"results":"13018","hashOfConfig":"12232"},{"size":9320,"mtime":1786084511118,"results":"13019","hashOfConfig":"12232"},{"size":111602,"mtime":1786084511119,"results":"13020","hashOfConfig":"12232"},{"size":3898,"mtime":1786084511119,"results":"13021","hashOfConfig":"12232"},{"size":2551,"mtime":1786084511119,"results":"13022","hashOfConfig":"12232"},{"size":5502,"mtime":1786084511119,"results":"13023","hashOfConfig":"12232"},{"size":2039,"mtime":1786084511120,"results":"13024","hashOfConfig":"12232"},{"size":2471,"mtime":1786084511120,"results":"13025","hashOfConfig":"12232"},{"size":1635,"mtime":1786084511120,"results":"13026","hashOfConfig":"12232"},{"size":8685,"mtime":1786084511120,"results":"13027","hashOfConfig":"12232"},{"size":9951,"mtime":1786084511120,"results":"13028","hashOfConfig":"12232"},{"size":3017,"mtime":1786084511120,"results":"13029","hashOfConfig":"12232"},{"size":7638,"mtime":1786084511120,"results":"13030","hashOfConfig":"12232"},{"size":7751,"mtime":1786084511121,"results":"13031","hashOfConfig":"12232"},{"size":8648,"mtime":1786084511121,"results":"13032","hashOfConfig":"12232"},{"size":738,"mtime":1786084511121,"results":"13033","hashOfConfig":"12232"},{"size":6067,"mtime":1786084511121,"results":"13034","hashOfConfig":"12232"},{"size":11851,"mtime":1786084511121,"results":"13035","hashOfConfig":"12232"},{"size":14227,"mtime":1786084511121,"results":"13036","hashOfConfig":"12232"},{"size":4714,"mtime":1786084511122,"results":"13037","hashOfConfig":"12232"},{"size":5246,"mtime":1786084511122,"results":"13038","hashOfConfig":"12232"},{"size":3699,"mtime":1786084511122,"results":"13039","hashOfConfig":"12232"},{"size":20134,"mtime":1786084511122,"results":"13040","hashOfConfig":"12232"},{"size":6999,"mtime":1786084511122,"results":"13041","hashOfConfig":"12232"},{"size":7074,"mtime":1786084511122,"results":"13042","hashOfConfig":"12232"},{"size":1761,"mtime":1786084511123,"results":"13043","hashOfConfig":"12232"},{"size":6729,"mtime":1786084511123,"results":"13044","hashOfConfig":"12232"},{"size":1996,"mtime":1786084511123,"results":"13045","hashOfConfig":"12232"},{"size":1897,"mtime":1786084511123,"results":"13046","hashOfConfig":"12232"},{"size":9214,"mtime":1786084511123,"results":"13047","hashOfConfig":"12232"},{"size":7086,"mtime":1786084511123,"results":"13048","hashOfConfig":"12232"},{"size":1790,"mtime":1786084511123,"results":"13049","hashOfConfig":"12232"},{"size":3817,"mtime":1786084511124,"results":"13050","hashOfConfig":"12232"},{"size":3752,"mtime":1786084511124,"results":"13051","hashOfConfig":"12232"},{"size":20297,"mtime":1786084511124,"results":"13052","hashOfConfig":"12232"},{"size":8633,"mtime":1786084511124,"results":"13053","hashOfConfig":"12232"},{"size":2557,"mtime":1786084511124,"results":"13054","hashOfConfig":"12232"},{"size":2345,"mtime":1786084511124,"results":"13055","hashOfConfig":"12232"},{"size":2766,"mtime":1786084511125,"results":"13056","hashOfConfig":"12232"},{"size":489,"mtime":1786084511125,"results":"13057","hashOfConfig":"12232"},{"size":3180,"mtime":1786084511125,"results":"13058","hashOfConfig":"12232"},{"size":3080,"mtime":1786084511125,"results":"13059","hashOfConfig":"12232"},{"size":8176,"mtime":1786084511125,"results":"13060","hashOfConfig":"12232"},{"size":1357,"mtime":1786084511125,"results":"13061","hashOfConfig":"12232"},{"size":2873,"mtime":1786084511126,"results":"13062","hashOfConfig":"12232"},{"size":3780,"mtime":1786084511126,"results":"13063","hashOfConfig":"12232"},{"size":10911,"mtime":1786084511126,"results":"13064","hashOfConfig":"12232"},{"size":3076,"mtime":1786084511126,"results":"13065","hashOfConfig":"12232"},{"size":6554,"mtime":1786084511126,"results":"13066","hashOfConfig":"12232"},{"size":2433,"mtime":1786084511126,"results":"13067","hashOfConfig":"12232"},{"size":3834,"mtime":1786084511126,"results":"13068","hashOfConfig":"12232"},{"size":3262,"mtime":1786084511127,"results":"13069","hashOfConfig":"12232"},{"size":6275,"mtime":1786084511127,"results":"13070","hashOfConfig":"12232"},{"size":8490,"mtime":1786084511127,"results":"13071","hashOfConfig":"12232"},{"size":3670,"mtime":1786084511127,"results":"13072","hashOfConfig":"12232"},{"size":900,"mtime":1786084511127,"results":"13073","hashOfConfig":"12232"},{"size":5510,"mtime":1786084511127,"results":"13074","hashOfConfig":"12232"},{"size":17575,"mtime":1786084511128,"results":"13075","hashOfConfig":"12232"},{"size":2567,"mtime":1786084511128,"results":"13076","hashOfConfig":"12232"},{"size":975,"mtime":1786084511128,"results":"13077","hashOfConfig":"12232"},{"size":17999,"mtime":1786084511128,"results":"13078","hashOfConfig":"12232"},{"size":7845,"mtime":1786084511128,"results":"13079","hashOfConfig":"12232"},{"size":2115,"mtime":1786084511128,"results":"13080","hashOfConfig":"12232"},{"size":3190,"mtime":1786084511129,"results":"13081","hashOfConfig":"12232"},{"size":3004,"mtime":1786084511129,"results":"13082","hashOfConfig":"12232"},{"size":5857,"mtime":1786084511129,"results":"13083","hashOfConfig":"12232"},{"size":3018,"mtime":1786084511129,"results":"13084","hashOfConfig":"12232"},{"size":6020,"mtime":1786084511129,"results":"13085","hashOfConfig":"12232"},{"size":9939,"mtime":1786084511129,"results":"13086","hashOfConfig":"12232"},{"size":3409,"mtime":1786084511130,"results":"13087","hashOfConfig":"12232"},{"size":3835,"mtime":1786084511130,"results":"13088","hashOfConfig":"12232"},{"size":7464,"mtime":1786084511130,"results":"13089","hashOfConfig":"12232"},{"size":4050,"mtime":1786084511130,"results":"13090","hashOfConfig":"12232"},{"size":2150,"mtime":1786084511130,"results":"13091","hashOfConfig":"12232"},{"size":2233,"mtime":1786084511130,"results":"13092","hashOfConfig":"12232"},{"size":9955,"mtime":1786084511131,"results":"13093","hashOfConfig":"12232"},{"size":2505,"mtime":1786084511131,"results":"13094","hashOfConfig":"12232"},{"size":3710,"mtime":1786084511131,"results":"13095","hashOfConfig":"12232"},{"size":18252,"mtime":1786084511131,"results":"13096","hashOfConfig":"12232"},{"size":2309,"mtime":1786084511131,"results":"13097","hashOfConfig":"12232"},{"size":1751,"mtime":1786084511131,"results":"13098","hashOfConfig":"12232"},{"size":3209,"mtime":1786084511131,"results":"13099","hashOfConfig":"12232"},{"size":2692,"mtime":1786084511132,"results":"13100","hashOfConfig":"12232"},{"size":4519,"mtime":1786084511132,"results":"13101","hashOfConfig":"12232"},{"size":3181,"mtime":1786084511132,"results":"13102","hashOfConfig":"12232"},{"size":6189,"mtime":1786084511132,"results":"13103","hashOfConfig":"12232"},{"size":2739,"mtime":1786084511132,"results":"13104","hashOfConfig":"12232"},{"size":3537,"mtime":1786084511132,"results":"13105","hashOfConfig":"12232"},{"size":1311,"mtime":1786084511132,"results":"13106","hashOfConfig":"12232"},{"size":7845,"mtime":1786084511133,"results":"13107","hashOfConfig":"12232"},{"size":3632,"mtime":1786084511133,"results":"13108","hashOfConfig":"12232"},{"size":7854,"mtime":1786084511133,"results":"13109","hashOfConfig":"12232"},{"size":2860,"mtime":1786084511133,"results":"13110","hashOfConfig":"12232"},{"size":4786,"mtime":1786084511133,"results":"13111","hashOfConfig":"12232"},{"size":3388,"mtime":1786084511133,"results":"13112","hashOfConfig":"12232"},{"size":4682,"mtime":1786084511134,"results":"13113","hashOfConfig":"12232"},{"size":17693,"mtime":1786084511134,"results":"13114","hashOfConfig":"12232"},{"size":1693,"mtime":1786084511134,"results":"13115","hashOfConfig":"12232"},{"size":9445,"mtime":1786084511134,"results":"13116","hashOfConfig":"12232"},{"size":4655,"mtime":1786084511134,"results":"13117","hashOfConfig":"12232"},{"size":10505,"mtime":1786084511135,"results":"13118","hashOfConfig":"12232"},{"size":1422,"mtime":1786084511135,"results":"13119","hashOfConfig":"12232"},{"size":950,"mtime":1786084511135,"results":"13120","hashOfConfig":"12232"},{"size":11541,"mtime":1786084511135,"results":"13121","hashOfConfig":"12232"},{"size":14034,"mtime":1786084511135,"results":"13122","hashOfConfig":"12232"},{"size":3239,"mtime":1786084511135,"results":"13123","hashOfConfig":"12232"},{"size":5909,"mtime":1786084511136,"results":"13124","hashOfConfig":"12232"},{"size":12776,"mtime":1786084511136,"results":"13125","hashOfConfig":"12232"},{"size":12934,"mtime":1786084511137,"results":"13126","hashOfConfig":"12232"},{"size":3926,"mtime":1786084511137,"results":"13127","hashOfConfig":"12285"},{"size":13439,"mtime":1786084511160,"results":"13128","hashOfConfig":"12232"},{"size":4191,"mtime":1786084511160,"results":"13129","hashOfConfig":"12232"},{"size":3873,"mtime":1786084511161,"results":"13130","hashOfConfig":"12232"},{"size":3921,"mtime":1786084511161,"results":"13131","hashOfConfig":"12232"},{"size":316,"mtime":1786084511161,"results":"13132","hashOfConfig":"12232"},{"size":3775,"mtime":1786084511161,"results":"13133","hashOfConfig":"12232"},{"size":5307,"mtime":1786084511161,"results":"13134","hashOfConfig":"12232"},{"size":2357,"mtime":1786084511161,"results":"13135","hashOfConfig":"12232"},{"size":1245,"mtime":1786084511161,"results":"13136","hashOfConfig":"12232"},{"size":5496,"mtime":1786084511161,"results":"13137","hashOfConfig":"12232"},{"size":1373,"mtime":1786084511162,"results":"13138","hashOfConfig":"12232"},{"size":9274,"mtime":1786084511162,"results":"13139","hashOfConfig":"12232"},{"size":1888,"mtime":1786084511162,"results":"13140","hashOfConfig":"12232"},{"size":2221,"mtime":1786084511162,"results":"13141","hashOfConfig":"12232"},{"size":2531,"mtime":1786084511162,"results":"13142","hashOfConfig":"12232"},{"size":1321,"mtime":1786084511162,"results":"13143","hashOfConfig":"12232"},{"size":1251,"mtime":1786084511162,"results":"13144","hashOfConfig":"12232"},{"size":1325,"mtime":1786084511163,"results":"13145","hashOfConfig":"12232"},{"size":2068,"mtime":1786084511163,"results":"13146","hashOfConfig":"12232"},{"size":2476,"mtime":1786084511163,"results":"13147","hashOfConfig":"12232"},{"size":2897,"mtime":1786084511163,"results":"13148","hashOfConfig":"12232"},{"size":1536,"mtime":1786084511163,"results":"13149","hashOfConfig":"12232"},{"size":1262,"mtime":1786084511163,"results":"13150","hashOfConfig":"12232"},{"size":5637,"mtime":1786084511137,"results":"13151","hashOfConfig":"12232"},{"size":5856,"mtime":1786084511137,"results":"13152","hashOfConfig":"12232"},{"size":12695,"mtime":1786084511137,"results":"13153","hashOfConfig":"12232"},{"size":3645,"mtime":1786084511138,"results":"13154","hashOfConfig":"12232"},{"size":4547,"mtime":1786084511138,"results":"13155","hashOfConfig":"12232"},{"size":1730,"mtime":1786084511138,"results":"13156","hashOfConfig":"12232"},{"size":3750,"mtime":1786084511138,"results":"13157","hashOfConfig":"12232"},{"size":1314,"mtime":1786084511138,"results":"13158","hashOfConfig":"12232"},{"size":4662,"mtime":1786084511138,"results":"13159","hashOfConfig":"12232"},{"size":1543,"mtime":1786084511138,"results":"13160","hashOfConfig":"12232"},{"size":3015,"mtime":1786084511138,"results":"13161","hashOfConfig":"12232"},{"size":6142,"mtime":1786084511139,"results":"13162","hashOfConfig":"12232"},{"size":1116,"mtime":1786084511139,"results":"13163","hashOfConfig":"12232"},{"size":5333,"mtime":1786084511139,"results":"13164","hashOfConfig":"12232"},{"size":3562,"mtime":1786084511139,"results":"13165","hashOfConfig":"12232"},{"size":4337,"mtime":1786084511139,"results":"13166","hashOfConfig":"12232"},{"size":3458,"mtime":1786084511140,"results":"13167","hashOfConfig":"12232"},{"size":9322,"mtime":1786084511140,"results":"13168","hashOfConfig":"12232"},{"size":1633,"mtime":1786084511140,"results":"13169","hashOfConfig":"12232"},{"size":4738,"mtime":1786084511140,"results":"13170","hashOfConfig":"12232"},{"size":4755,"mtime":1786084511140,"results":"13171","hashOfConfig":"12232"},{"size":6676,"mtime":1786084511140,"results":"13172","hashOfConfig":"12232"},{"size":1458,"mtime":1786084511141,"results":"13173","hashOfConfig":"12232"},{"size":2774,"mtime":1786084511141,"results":"13174","hashOfConfig":"12232"},{"size":4679,"mtime":1786084511141,"results":"13175","hashOfConfig":"12232"},{"size":2442,"mtime":1786084511142,"results":"13176","hashOfConfig":"12232"},{"size":3735,"mtime":1786084511142,"results":"13177","hashOfConfig":"12232"},{"size":2899,"mtime":1786084511142,"results":"13178","hashOfConfig":"12232"},{"size":3281,"mtime":1786084511142,"results":"13179","hashOfConfig":"12232"},{"size":4353,"mtime":1786084511143,"results":"13180","hashOfConfig":"12232"},{"size":487,"mtime":1786084511143,"results":"13181","hashOfConfig":"12232"},{"size":3875,"mtime":1786084511143,"results":"13182","hashOfConfig":"12232"},{"size":4296,"mtime":1786084511144,"results":"13183","hashOfConfig":"12232"},{"size":6972,"mtime":1786084511144,"results":"13184","hashOfConfig":"12232"},{"size":4896,"mtime":1786084511144,"results":"13185","hashOfConfig":"12232"},{"size":13062,"mtime":1786084511144,"results":"13186","hashOfConfig":"12232"},{"size":3810,"mtime":1786084511144,"results":"13187","hashOfConfig":"12232"},{"size":932,"mtime":1786084511145,"results":"13188","hashOfConfig":"12232"},{"size":2696,"mtime":1786084511145,"results":"13189","hashOfConfig":"12232"},{"size":21792,"mtime":1786084511146,"results":"13190","hashOfConfig":"12232"},{"size":3686,"mtime":1786084511146,"results":"13191","hashOfConfig":"12232"},{"size":3455,"mtime":1786084511146,"results":"13192","hashOfConfig":"12232"},{"size":3921,"mtime":1786084511146,"results":"13193","hashOfConfig":"12232"},{"size":2763,"mtime":1786084511145,"results":"13194","hashOfConfig":"12232"},{"size":4377,"mtime":1786084511146,"results":"13195","hashOfConfig":"12232"},{"size":1359,"mtime":1786084511146,"results":"13196","hashOfConfig":"12232"},{"size":2555,"mtime":1786084511146,"results":"13197","hashOfConfig":"12232"},{"size":4603,"mtime":1786084511147,"results":"13198","hashOfConfig":"12232"},{"size":10354,"mtime":1786084511147,"results":"13199","hashOfConfig":"12232"},{"size":3767,"mtime":1786084511147,"results":"13200","hashOfConfig":"12232"},{"size":7665,"mtime":1786084511147,"results":"13201","hashOfConfig":"12232"},{"size":7610,"mtime":1786084511147,"results":"13202","hashOfConfig":"12232"},{"size":4418,"mtime":1786084511147,"results":"13203","hashOfConfig":"12232"},{"size":4851,"mtime":1786084511148,"results":"13204","hashOfConfig":"12232"},{"size":6255,"mtime":1786084511148,"results":"13205","hashOfConfig":"12232"},{"size":9537,"mtime":1786084511148,"results":"13206","hashOfConfig":"12285"},{"size":6037,"mtime":1786084511148,"results":"13207","hashOfConfig":"12232"},{"size":2967,"mtime":1786084511148,"results":"13208","hashOfConfig":"12232"},{"size":1087,"mtime":1786084511149,"results":"13209","hashOfConfig":"12232"},{"size":3392,"mtime":1786084511149,"results":"13210","hashOfConfig":"12232"},{"size":4716,"mtime":1786084511149,"results":"13211","hashOfConfig":"12232"},{"size":6193,"mtime":1786084511149,"results":"13212","hashOfConfig":"12232"},{"size":4680,"mtime":1786084511149,"results":"13213","hashOfConfig":"12232"},{"size":2203,"mtime":1786084511149,"results":"13214","hashOfConfig":"12232"},{"size":4165,"mtime":1786084511150,"results":"13215","hashOfConfig":"12232"},{"size":3017,"mtime":1786084511150,"results":"13216","hashOfConfig":"12232"},{"size":5941,"mtime":1786084511150,"results":"13217","hashOfConfig":"12232"},{"size":2996,"mtime":1786084511150,"results":"13218","hashOfConfig":"12232"},{"size":7473,"mtime":1786084511150,"results":"13219","hashOfConfig":"12232"},{"size":6045,"mtime":1786084511150,"results":"13220","hashOfConfig":"12232"},{"size":4761,"mtime":1786084511151,"results":"13221","hashOfConfig":"12232"},{"size":3624,"mtime":1786084511151,"results":"13222","hashOfConfig":"12232"},{"size":9221,"mtime":1786084511151,"results":"13223","hashOfConfig":"12232"},{"size":5928,"mtime":1786084511151,"results":"13224","hashOfConfig":"12232"},{"size":4789,"mtime":1786084511151,"results":"13225","hashOfConfig":"12232"},{"size":4972,"mtime":1786084511151,"results":"13226","hashOfConfig":"12232"},{"size":6444,"mtime":1786084511152,"results":"13227","hashOfConfig":"12232"},{"size":8871,"mtime":1786084511152,"results":"13228","hashOfConfig":"12232"},{"size":10986,"mtime":1786084511152,"results":"13229","hashOfConfig":"12232"},{"size":6377,"mtime":1786084511152,"results":"13230","hashOfConfig":"12232"},{"size":4324,"mtime":1786084511152,"results":"13231","hashOfConfig":"12232"},{"size":12183,"mtime":1786084511153,"results":"13232","hashOfConfig":"12232"},{"size":14729,"mtime":1786084511153,"results":"13233","hashOfConfig":"12232"},{"size":3438,"mtime":1786084511153,"results":"13234","hashOfConfig":"12232"},{"size":2834,"mtime":1786084511153,"results":"13235","hashOfConfig":"12232"},{"size":5871,"mtime":1786084511153,"results":"13236","hashOfConfig":"12232"},{"size":3097,"mtime":1786084511154,"results":"13237","hashOfConfig":"12232"},{"size":3375,"mtime":1786084511154,"results":"13238","hashOfConfig":"12232"},{"size":2616,"mtime":1786084511154,"results":"13239","hashOfConfig":"12232"},{"size":1549,"mtime":1786084511154,"results":"13240","hashOfConfig":"12232"},{"size":1609,"mtime":1786084511154,"results":"13241","hashOfConfig":"12232"},{"size":1255,"mtime":1786084511154,"results":"13242","hashOfConfig":"12232"},{"size":6433,"mtime":1786084511155,"results":"13243","hashOfConfig":"12232"},{"size":3308,"mtime":1786084511155,"results":"13244","hashOfConfig":"12232"},{"size":8301,"mtime":1786084511155,"results":"13245","hashOfConfig":"12232"},{"size":1645,"mtime":1786084511155,"results":"13246","hashOfConfig":"12232"},{"size":5806,"mtime":1786084511155,"results":"13247","hashOfConfig":"12232"},{"size":6432,"mtime":1786084511155,"results":"13248","hashOfConfig":"12232"},{"size":7092,"mtime":1786084511155,"results":"13249","hashOfConfig":"12232"},{"size":2496,"mtime":1786084511156,"results":"13250","hashOfConfig":"12232"},{"size":1433,"mtime":1786084511156,"results":"13251","hashOfConfig":"12232"},{"size":3442,"mtime":1786084511156,"results":"13252","hashOfConfig":"12232"},{"size":8787,"mtime":1786084511156,"results":"13253","hashOfConfig":"12232"},{"size":3306,"mtime":1786084511156,"results":"13254","hashOfConfig":"12232"},{"size":2192,"mtime":1786084511156,"results":"13255","hashOfConfig":"12232"},{"size":5403,"mtime":1786084511157,"results":"13256","hashOfConfig":"12232"},{"size":4999,"mtime":1786084511157,"results":"13257","hashOfConfig":"12232"},{"size":3963,"mtime":1786084511157,"results":"13258","hashOfConfig":"12232"},{"size":3509,"mtime":1786084511157,"results":"13259","hashOfConfig":"12232"},{"size":1721,"mtime":1786084511157,"results":"13260","hashOfConfig":"12232"},{"size":2669,"mtime":1786084511157,"results":"13261","hashOfConfig":"12232"},{"size":9125,"mtime":1786084511158,"results":"13262","hashOfConfig":"12232"},{"size":1305,"mtime":1786084511158,"results":"13263","hashOfConfig":"12232"},{"size":2744,"mtime":1786084511158,"results":"13264","hashOfConfig":"12232"},{"size":3445,"mtime":1786084511158,"results":"13265","hashOfConfig":"12232"},{"size":4879,"mtime":1786084511158,"results":"13266","hashOfConfig":"12232"},{"size":4431,"mtime":1786084511158,"results":"13267","hashOfConfig":"12232"},{"size":4562,"mtime":1786084511158,"results":"13268","hashOfConfig":"12232"},{"size":3286,"mtime":1786084511159,"results":"13269","hashOfConfig":"12232"},{"size":4210,"mtime":1786084511159,"results":"13270","hashOfConfig":"12232"},{"size":3356,"mtime":1786084511159,"results":"13271","hashOfConfig":"12232"},{"size":3037,"mtime":1786084511159,"results":"13272","hashOfConfig":"12232"},{"size":1379,"mtime":1786084511159,"results":"13273","hashOfConfig":"12232"},{"size":1552,"mtime":1786084511159,"results":"13274","hashOfConfig":"12232"},{"size":1558,"mtime":1786084511159,"results":"13275","hashOfConfig":"12232"},{"size":7397,"mtime":1786084511160,"results":"13276","hashOfConfig":"12232"},{"size":2412,"mtime":1786084511160,"results":"13277","hashOfConfig":"12232"},{"size":3044,"mtime":1786084511160,"results":"13278","hashOfConfig":"12285"},{"size":7088,"mtime":1786084511160,"results":"13279","hashOfConfig":"12232"},{"size":3298,"mtime":1786084511163,"results":"13280","hashOfConfig":"12232"},{"size":2622,"mtime":1786084511163,"results":"13281","hashOfConfig":"12232"},{"size":7140,"mtime":1786084511164,"results":"13282","hashOfConfig":"12232"},{"size":1242,"mtime":1786084511164,"results":"13283","hashOfConfig":"12232"},{"size":2440,"mtime":1786084511164,"results":"13284","hashOfConfig":"12232"},{"size":977,"mtime":1786084511164,"results":"13285","hashOfConfig":"12232"},{"size":4630,"mtime":1786084511164,"results":"13286","hashOfConfig":"12232"},{"size":14670,"mtime":1786084511164,"results":"13287","hashOfConfig":"12232"},{"size":3211,"mtime":1786084511165,"results":"13288","hashOfConfig":"12232"},{"size":4450,"mtime":1786084511165,"results":"13289","hashOfConfig":"12232"},{"size":7238,"mtime":1786084511165,"results":"13290","hashOfConfig":"12232"},{"size":18081,"mtime":1786084511165,"results":"13291","hashOfConfig":"12232"},{"size":11176,"mtime":1786084511165,"results":"13292","hashOfConfig":"12232"},{"size":4398,"mtime":1786084511165,"results":"13293","hashOfConfig":"12232"},{"size":2494,"mtime":1786084511166,"results":"13294","hashOfConfig":"12232"},{"size":3677,"mtime":1786084511166,"results":"13295","hashOfConfig":"12232"},{"size":3334,"mtime":1786084511166,"results":"13296","hashOfConfig":"12232"},{"size":5904,"mtime":1786084511166,"results":"13297","hashOfConfig":"12232"},{"size":2694,"mtime":1786084511166,"results":"13298","hashOfConfig":"12232"},{"size":2749,"mtime":1786084511167,"results":"13299","hashOfConfig":"12232"},{"size":8653,"mtime":1786084511167,"results":"13300","hashOfConfig":"12232"},{"size":7972,"mtime":1786084511167,"results":"13301","hashOfConfig":"12232"},{"size":6019,"mtime":1786084511167,"results":"13302","hashOfConfig":"12232"},{"size":1485,"mtime":1786084511167,"results":"13303","hashOfConfig":"12232"},{"size":1980,"mtime":1786084511167,"results":"13304","hashOfConfig":"12232"},{"size":4317,"mtime":1786084511167,"results":"13305","hashOfConfig":"12232"},{"size":3909,"mtime":1786084511168,"results":"13306","hashOfConfig":"12232"},{"size":4906,"mtime":1786084511168,"results":"13307","hashOfConfig":"12232"},{"size":12838,"mtime":1786084511168,"results":"13308","hashOfConfig":"12232"},{"size":10409,"mtime":1786084511168,"results":"13309","hashOfConfig":"12232"},{"size":1894,"mtime":1786084511168,"results":"13310","hashOfConfig":"12232"},{"size":10708,"mtime":1786084511169,"results":"13311","hashOfConfig":"12232"},{"size":1653,"mtime":1786084511169,"results":"13312","hashOfConfig":"12232"},{"size":3775,"mtime":1786084511169,"results":"13313","hashOfConfig":"12232"},{"size":17790,"mtime":1786084511170,"results":"13314","hashOfConfig":"12232"},{"size":7441,"mtime":1786084511170,"results":"13315","hashOfConfig":"12232"},{"size":1672,"mtime":1786084511170,"results":"13316","hashOfConfig":"12232"},{"size":3648,"mtime":1786084511170,"results":"13317","hashOfConfig":"12232"},{"size":2970,"mtime":1786084511170,"results":"13318","hashOfConfig":"12232"},{"size":3410,"mtime":1786084511170,"results":"13319","hashOfConfig":"12232"},{"size":8218,"mtime":1786084511171,"results":"13320","hashOfConfig":"12232"},{"size":1031,"mtime":1786084511171,"results":"13321","hashOfConfig":"12232"},{"size":1502,"mtime":1786084511171,"results":"13322","hashOfConfig":"12232"},{"size":5755,"mtime":1786084511171,"results":"13323","hashOfConfig":"12232"},{"size":7570,"mtime":1786084511171,"results":"13324","hashOfConfig":"12232"},{"size":1117,"mtime":1786084511171,"results":"13325","hashOfConfig":"12232"},{"size":2519,"mtime":1786084511171,"results":"13326","hashOfConfig":"12232"},{"size":6262,"mtime":1786084511172,"results":"13327","hashOfConfig":"12232"},{"size":2356,"mtime":1786084511172,"results":"13328","hashOfConfig":"12232"},{"size":3882,"mtime":1786084511172,"results":"13329","hashOfConfig":"12232"},{"size":5422,"mtime":1786084511172,"results":"13330","hashOfConfig":"12232"},{"size":1419,"mtime":1786084511172,"results":"13331","hashOfConfig":"12232"},{"size":8467,"mtime":1786084511172,"results":"13332","hashOfConfig":"12232"},{"size":6130,"mtime":1786084511172,"results":"13333","hashOfConfig":"12232"},{"size":2657,"mtime":1786084511173,"results":"13334","hashOfConfig":"12232"},{"size":2232,"mtime":1786084511173,"results":"13335","hashOfConfig":"12232"},{"size":3096,"mtime":1786084511173,"results":"13336","hashOfConfig":"12232"},{"size":4009,"mtime":1786084511173,"results":"13337","hashOfConfig":"12232"},{"size":1805,"mtime":1786084511173,"results":"13338","hashOfConfig":"12232"},{"size":6416,"mtime":1786084511173,"results":"13339","hashOfConfig":"12232"},{"size":3695,"mtime":1786084511173,"results":"13340","hashOfConfig":"12232"},{"size":7010,"mtime":1786084511174,"results":"13341","hashOfConfig":"12232"},{"size":3045,"mtime":1786084511174,"results":"13342","hashOfConfig":"12232"},{"size":6022,"mtime":1786084511174,"results":"13343","hashOfConfig":"12232"},{"size":8647,"mtime":1786084511174,"results":"13344","hashOfConfig":"12232"},{"size":2158,"mtime":1786084511174,"results":"13345","hashOfConfig":"12232"},{"size":4216,"mtime":1786084511174,"results":"13346","hashOfConfig":"12232"},{"size":3228,"mtime":1786084511174,"results":"13347","hashOfConfig":"12232"},{"size":2560,"mtime":1786084511174,"results":"13348","hashOfConfig":"12232"},{"size":3213,"mtime":1786084511175,"results":"13349","hashOfConfig":"12232"},{"size":7966,"mtime":1786084511175,"results":"13350","hashOfConfig":"12232"},{"size":2882,"mtime":1786084511175,"results":"13351","hashOfConfig":"12232"},{"size":4170,"mtime":1786084511175,"results":"13352","hashOfConfig":"12232"},{"size":12415,"mtime":1786084511175,"results":"13353","hashOfConfig":"12232"},{"size":2905,"mtime":1786084511175,"results":"13354","hashOfConfig":"12232"},{"size":2312,"mtime":1786084511176,"results":"13355","hashOfConfig":"12232"},{"size":2634,"mtime":1786084511176,"results":"13356","hashOfConfig":"12232"},{"size":7530,"mtime":1786084511176,"results":"13357","hashOfConfig":"12232"},{"size":4784,"mtime":1786084511176,"results":"13358","hashOfConfig":"12232"},{"size":2354,"mtime":1786084511176,"results":"13359","hashOfConfig":"12232"},{"size":5373,"mtime":1786084511176,"results":"13360","hashOfConfig":"12232"},{"size":5994,"mtime":1786084511176,"results":"13361","hashOfConfig":"12232"},{"size":12242,"mtime":1786084511177,"results":"13362","hashOfConfig":"12232"},{"size":6012,"mtime":1786084511177,"results":"13363","hashOfConfig":"12232"},{"size":2770,"mtime":1786084511177,"results":"13364","hashOfConfig":"12232"},{"size":3642,"mtime":1786084511177,"results":"13365","hashOfConfig":"12232"},{"size":2348,"mtime":1786084511177,"results":"13366","hashOfConfig":"12232"},{"size":1393,"mtime":1786084511177,"results":"13367","hashOfConfig":"12232"},{"size":4843,"mtime":1786084511177,"results":"13368","hashOfConfig":"12232"},{"size":3968,"mtime":1786084511177,"results":"13369","hashOfConfig":"12232"},{"size":1505,"mtime":1786084511177,"results":"13370","hashOfConfig":"12232"},{"size":2904,"mtime":1786084511178,"results":"13371","hashOfConfig":"12232"},{"size":3880,"mtime":1786084511178,"results":"13372","hashOfConfig":"12232"},{"size":9286,"mtime":1786084511178,"results":"13373","hashOfConfig":"12232"},{"size":3631,"mtime":1786084511178,"results":"13374","hashOfConfig":"12232"},{"size":8453,"mtime":1786084511178,"results":"13375","hashOfConfig":"12232"},{"size":6198,"mtime":1786084511178,"results":"13376","hashOfConfig":"12232"},{"size":4899,"mtime":1786084511178,"results":"13377","hashOfConfig":"12232"},{"size":11748,"mtime":1786084511179,"results":"13378","hashOfConfig":"12232"},{"size":6907,"mtime":1786084511179,"results":"13379","hashOfConfig":"12232"},{"size":6765,"mtime":1786084511179,"results":"13380","hashOfConfig":"12232"},{"size":6587,"mtime":1786084511197,"results":"13381","hashOfConfig":"12232"},{"size":3669,"mtime":1786084511197,"results":"13382","hashOfConfig":"12232"},{"size":3002,"mtime":1786084511197,"results":"13383","hashOfConfig":"12232"},{"size":2582,"mtime":1786084511197,"results":"13384","hashOfConfig":"12232"},{"size":4295,"mtime":1786084511198,"results":"13385","hashOfConfig":"12232"},{"size":4708,"mtime":1786084511198,"results":"13386","hashOfConfig":"12232"},{"size":18916,"mtime":1786084511198,"results":"13387","hashOfConfig":"12232"},{"size":10089,"mtime":1786084511198,"results":"13388","hashOfConfig":"12232"},{"size":4615,"mtime":1786084511198,"results":"13389","hashOfConfig":"12232"},{"size":1882,"mtime":1786084511198,"results":"13390","hashOfConfig":"12232"},{"size":4483,"mtime":1786084511209,"results":"13391","hashOfConfig":"12232"},{"size":4336,"mtime":1786084511209,"results":"13392","hashOfConfig":"12232"},{"size":5338,"mtime":1786084511209,"results":"13393","hashOfConfig":"12232"},{"size":5075,"mtime":1786084511209,"results":"13394","hashOfConfig":"12232"},{"size":4804,"mtime":1786084511179,"results":"13395","hashOfConfig":"12232"},{"size":9394,"mtime":1786084511179,"results":"13396","hashOfConfig":"12232"},{"size":4044,"mtime":1786084511179,"results":"13397","hashOfConfig":"12232"},{"size":2575,"mtime":1786084511180,"results":"13398","hashOfConfig":"12232"},{"size":9070,"mtime":1786084511180,"results":"13399","hashOfConfig":"12232"},{"size":7581,"mtime":1786084511180,"results":"13400","hashOfConfig":"12232"},{"size":4130,"mtime":1786084511180,"results":"13401","hashOfConfig":"12232"},{"size":4686,"mtime":1786084511180,"results":"13402","hashOfConfig":"12232"},{"size":3644,"mtime":1786084511180,"results":"13403","hashOfConfig":"12232"},{"size":2851,"mtime":1786084511180,"results":"13404","hashOfConfig":"12232"},{"size":2597,"mtime":1786084511180,"results":"13405","hashOfConfig":"12232"},{"size":8153,"mtime":1786084511181,"results":"13406","hashOfConfig":"12232"},{"size":4191,"mtime":1786084511181,"results":"13407","hashOfConfig":"12232"},{"size":3124,"mtime":1786084511181,"results":"13408","hashOfConfig":"12232"},{"size":3424,"mtime":1786084511181,"results":"13409","hashOfConfig":"12232"},{"size":2198,"mtime":1786084511181,"results":"13410","hashOfConfig":"12232"},{"size":2505,"mtime":1786084511181,"results":"13411","hashOfConfig":"12232"},{"size":8969,"mtime":1786084511181,"results":"13412","hashOfConfig":"12232"},{"size":7571,"mtime":1786084511181,"results":"13413","hashOfConfig":"12232"},{"size":4418,"mtime":1786084511182,"results":"13414","hashOfConfig":"12232"},{"size":31032,"mtime":1786084511182,"results":"13415","hashOfConfig":"12232"},{"size":7952,"mtime":1786084511182,"results":"13416","hashOfConfig":"12232"},{"size":3142,"mtime":1786084511182,"results":"13417","hashOfConfig":"12232"},{"size":21010,"mtime":1786084511183,"results":"13418","hashOfConfig":"12232"},{"size":9386,"mtime":1786084511183,"results":"13419","hashOfConfig":"12232"},{"size":13908,"mtime":1786084511183,"results":"13420","hashOfConfig":"12232"},{"size":4849,"mtime":1786084511183,"results":"13421","hashOfConfig":"12232"},{"size":9733,"mtime":1786084511183,"results":"13422","hashOfConfig":"12232"},{"size":3099,"mtime":1786084511183,"results":"13423","hashOfConfig":"12232"},{"size":8088,"mtime":1786084511183,"results":"13424","hashOfConfig":"12232"},{"size":3297,"mtime":1786084511184,"results":"13425","hashOfConfig":"12232"},{"size":5182,"mtime":1786084511184,"results":"13426","hashOfConfig":"12232"},{"size":8824,"mtime":1786084511184,"results":"13427","hashOfConfig":"12232"},{"size":22299,"mtime":1786084511184,"results":"13428","hashOfConfig":"12232"},{"size":7043,"mtime":1786084511185,"results":"13429","hashOfConfig":"12232"},{"size":961,"mtime":1786084511185,"results":"13430","hashOfConfig":"12232"},{"size":3542,"mtime":1786084511185,"results":"13431","hashOfConfig":"12232"},{"size":10982,"mtime":1786084511185,"results":"13432","hashOfConfig":"12232"},{"size":5077,"mtime":1786084511186,"results":"13433","hashOfConfig":"12232"},{"size":5470,"mtime":1786084511186,"results":"13434","hashOfConfig":"12232"},{"size":6853,"mtime":1786084511186,"results":"13435","hashOfConfig":"12232"},{"size":5050,"mtime":1786084511186,"results":"13436","hashOfConfig":"12232"},{"size":6168,"mtime":1786084511186,"results":"13437","hashOfConfig":"12232"},{"size":11186,"mtime":1786084511187,"results":"13438","hashOfConfig":"12232"},{"size":5032,"mtime":1786084511187,"results":"13439","hashOfConfig":"12232"},{"size":4823,"mtime":1786084511187,"results":"13440","hashOfConfig":"12232"},{"size":6224,"mtime":1786084511187,"results":"13441","hashOfConfig":"12232"},{"size":9454,"mtime":1786084511187,"results":"13442","hashOfConfig":"12232"},{"size":2907,"mtime":1786084511187,"results":"13443","hashOfConfig":"12232"},{"size":10261,"mtime":1786084511187,"results":"13444","hashOfConfig":"12232"},{"size":3388,"mtime":1786084511187,"results":"13445","hashOfConfig":"12232"},{"size":3008,"mtime":1786084511188,"results":"13446","hashOfConfig":"12232"},{"size":3887,"mtime":1786084511188,"results":"13447","hashOfConfig":"12232"},{"size":2674,"mtime":1786084511188,"results":"13448","hashOfConfig":"12232"},{"size":5215,"mtime":1786084511188,"results":"13449","hashOfConfig":"12232"},{"size":2584,"mtime":1786084511188,"results":"13450","hashOfConfig":"12232"},{"size":2872,"mtime":1786084511188,"results":"13451","hashOfConfig":"12232"},{"size":7006,"mtime":1786084511188,"results":"13452","hashOfConfig":"12232"},{"size":5430,"mtime":1786084511188,"results":"13453","hashOfConfig":"12232"},{"size":4391,"mtime":1786084511189,"results":"13454","hashOfConfig":"12232"},{"size":4312,"mtime":1786084511189,"results":"13455","hashOfConfig":"12232"},{"size":3375,"mtime":1786084511189,"results":"13456","hashOfConfig":"12232"},{"size":2875,"mtime":1786084511189,"results":"13457","hashOfConfig":"12232"},{"size":9666,"mtime":1786084511189,"results":"13458","hashOfConfig":"12232"},{"size":6483,"mtime":1786084511189,"results":"13459","hashOfConfig":"12232"},{"size":6693,"mtime":1786084511189,"results":"13460","hashOfConfig":"12232"},{"size":6027,"mtime":1786084511189,"results":"13461","hashOfConfig":"12232"},{"size":3631,"mtime":1786084511190,"results":"13462","hashOfConfig":"12232"},{"size":5228,"mtime":1786084511190,"results":"13463","hashOfConfig":"12232"},{"size":4711,"mtime":1786084511190,"results":"13464","hashOfConfig":"12232"},{"size":2523,"mtime":1786084511190,"results":"13465","hashOfConfig":"12232"},{"size":17683,"mtime":1786084511190,"results":"13466","hashOfConfig":"12232"},{"size":1267,"mtime":1786084511190,"results":"13467","hashOfConfig":"12232"},{"size":6424,"mtime":1786084511190,"results":"13468","hashOfConfig":"12232"},{"size":18483,"mtime":1786084511191,"results":"13469","hashOfConfig":"12232"},{"size":10002,"mtime":1786084511191,"results":"13470","hashOfConfig":"12232"},{"size":10216,"mtime":1786084511191,"results":"13471","hashOfConfig":"12232"},{"size":2619,"mtime":1786084511191,"results":"13472","hashOfConfig":"12232"},{"size":3370,"mtime":1786084511191,"results":"13473","hashOfConfig":"12232"},{"size":4596,"mtime":1786084511191,"results":"13474","hashOfConfig":"12232"},{"size":5373,"mtime":1786084511192,"results":"13475","hashOfConfig":"12232"},{"size":4083,"mtime":1786084511192,"results":"13476","hashOfConfig":"12232"},{"size":5529,"mtime":1786084511192,"results":"13477","hashOfConfig":"12232"},{"size":9543,"mtime":1786084511192,"results":"13478","hashOfConfig":"12232"},{"size":106735,"mtime":1786084511193,"results":"13479","hashOfConfig":"12232"},{"size":4108,"mtime":1786084511193,"results":"13480","hashOfConfig":"12232"},{"size":4885,"mtime":1786084511193,"results":"13481","hashOfConfig":"12232"},{"size":605,"mtime":1786084511193,"results":"13482","hashOfConfig":"12232"},{"size":4440,"mtime":1786084511193,"results":"13483","hashOfConfig":"12232"},{"size":4294,"mtime":1786084511193,"results":"13484","hashOfConfig":"12232"},{"size":3021,"mtime":1786084511193,"results":"13485","hashOfConfig":"12232"},{"size":18425,"mtime":1786084511194,"results":"13486","hashOfConfig":"12232"},{"size":4053,"mtime":1786084511194,"results":"13487","hashOfConfig":"12232"},{"size":11462,"mtime":1786084511194,"results":"13488","hashOfConfig":"12232"},{"size":18414,"mtime":1786084511194,"results":"13489","hashOfConfig":"12232"},{"size":6914,"mtime":1786084511194,"results":"13490","hashOfConfig":"12232"},{"size":2291,"mtime":1786084511194,"results":"13491","hashOfConfig":"12232"},{"size":10098,"mtime":1786084511194,"results":"13492","hashOfConfig":"12232"},{"size":9885,"mtime":1786084511195,"results":"13493","hashOfConfig":"12232"},{"size":22779,"mtime":1786084511195,"results":"13494","hashOfConfig":"12232"},{"size":26444,"mtime":1786084511195,"results":"13495","hashOfConfig":"12232"},{"size":19043,"mtime":1786084511195,"results":"13496","hashOfConfig":"12232"},{"size":11061,"mtime":1786084511195,"results":"13497","hashOfConfig":"12232"},{"size":2431,"mtime":1786084511196,"results":"13498","hashOfConfig":"12232"},{"size":5131,"mtime":1786084511196,"results":"13499","hashOfConfig":"12232"},{"size":2930,"mtime":1786084511196,"results":"13500","hashOfConfig":"12232"},{"size":7261,"mtime":1786084511196,"results":"13501","hashOfConfig":"12232"},{"size":3041,"mtime":1786084511196,"results":"13502","hashOfConfig":"12232"},{"size":3269,"mtime":1786084511196,"results":"13503","hashOfConfig":"12232"},{"size":16195,"mtime":1786084511196,"results":"13504","hashOfConfig":"12232"},{"size":4077,"mtime":1786084511196,"results":"13505","hashOfConfig":"12232"},{"size":14084,"mtime":1786084511197,"results":"13506","hashOfConfig":"12232"},{"size":2953,"mtime":1786084511197,"results":"13507","hashOfConfig":"12232"},{"size":5267,"mtime":1786084511197,"results":"13508","hashOfConfig":"12232"},{"size":5416,"mtime":1786084511209,"results":"13509","hashOfConfig":"12232"},{"size":7350,"mtime":1786084511209,"results":"13510","hashOfConfig":"12232"},{"size":8782,"mtime":1786084511209,"results":"13511","hashOfConfig":"12232"},{"size":14971,"mtime":1786084511209,"results":"13512","hashOfConfig":"12232"},{"size":2971,"mtime":1786084511210,"results":"13513","hashOfConfig":"12232"},{"size":2176,"mtime":1786084511210,"results":"13514","hashOfConfig":"12232"},{"size":3118,"mtime":1786084511210,"results":"13515","hashOfConfig":"12232"},{"size":6062,"mtime":1786084511210,"results":"13516","hashOfConfig":"12232"},{"size":21441,"mtime":1786084511210,"results":"13517","hashOfConfig":"12232"},{"size":3531,"mtime":1786084511210,"results":"13518","hashOfConfig":"12232"},{"size":4145,"mtime":1786084511210,"results":"13519","hashOfConfig":"12232"},{"size":1357,"mtime":1786084511210,"results":"13520","hashOfConfig":"12232"},{"size":6519,"mtime":1786084511211,"results":"13521","hashOfConfig":"12232"},{"size":2376,"mtime":1786084511211,"results":"13522","hashOfConfig":"12232"},{"size":3970,"mtime":1786084511211,"results":"13523","hashOfConfig":"12232"},{"size":2292,"mtime":1786084511211,"results":"13524","hashOfConfig":"12232"},{"size":9493,"mtime":1786084511211,"results":"13525","hashOfConfig":"12232"},{"size":1958,"mtime":1786084511211,"results":"13526","hashOfConfig":"12232"},{"size":1782,"mtime":1786084511211,"results":"13527","hashOfConfig":"12232"},{"size":10098,"mtime":1786084511211,"results":"13528","hashOfConfig":"12232"},{"size":3214,"mtime":1786084511211,"results":"13529","hashOfConfig":"12232"},{"size":2571,"mtime":1786084511213,"results":"13530","hashOfConfig":"12232"},{"size":2040,"mtime":1786084511213,"results":"13531","hashOfConfig":"12232"},{"size":718,"mtime":1786084511213,"results":"13532","hashOfConfig":"12232"},{"size":1629,"mtime":1786084511213,"results":"13533","hashOfConfig":"12232"},{"size":3328,"mtime":1786084511213,"results":"13534","hashOfConfig":"12232"},{"size":1297,"mtime":1786084511213,"results":"13535","hashOfConfig":"12232"},{"size":6698,"mtime":1786084511213,"results":"13536","hashOfConfig":"12232"},{"size":3418,"mtime":1786084511214,"results":"13537","hashOfConfig":"12232"},{"size":10036,"mtime":1786084511214,"results":"13538","hashOfConfig":"12232"},{"size":3239,"mtime":1786084511214,"results":"13539","hashOfConfig":"12232"},{"size":2833,"mtime":1786084511214,"results":"13540","hashOfConfig":"12232"},{"size":11572,"mtime":1786084511214,"results":"13541","hashOfConfig":"12232"},{"size":6750,"mtime":1786084511214,"results":"13542","hashOfConfig":"12232"},{"size":8736,"mtime":1786084511214,"results":"13543","hashOfConfig":"12232"},{"size":3082,"mtime":1786084511214,"results":"13544","hashOfConfig":"12232"},{"size":6137,"mtime":1786084511215,"results":"13545","hashOfConfig":"12232"},{"size":2707,"mtime":1786084511215,"results":"13546","hashOfConfig":"12232"},{"size":3494,"mtime":1786084511215,"results":"13547","hashOfConfig":"12232"},{"size":8339,"mtime":1786084511215,"results":"13548","hashOfConfig":"12232"},{"size":3185,"mtime":1786084511215,"results":"13549","hashOfConfig":"12232"},{"size":2697,"mtime":1786084511215,"results":"13550","hashOfConfig":"12232"},{"size":6227,"mtime":1786084511215,"results":"13551","hashOfConfig":"12232"},{"size":3057,"mtime":1786084511215,"results":"13552","hashOfConfig":"12232"},{"size":6142,"mtime":1786084511215,"results":"13553","hashOfConfig":"12232"},{"size":1588,"mtime":1786084511215,"results":"13554","hashOfConfig":"12232"},{"size":11113,"mtime":1786084511216,"results":"13555","hashOfConfig":"12232"},{"size":2782,"mtime":1786084511216,"results":"13556","hashOfConfig":"12232"},{"size":9807,"mtime":1786084511216,"results":"13557","hashOfConfig":"12232"},{"size":10277,"mtime":1786084511216,"results":"13558","hashOfConfig":"12232"},{"size":5142,"mtime":1786084511216,"results":"13559","hashOfConfig":"12232"},{"size":5980,"mtime":1786084511216,"results":"13560","hashOfConfig":"12232"},{"size":4058,"mtime":1786084511216,"results":"13561","hashOfConfig":"12232"},{"size":8032,"mtime":1786084511216,"results":"13562","hashOfConfig":"12232"},{"size":2827,"mtime":1786084511216,"results":"13563","hashOfConfig":"12232"},{"size":1427,"mtime":1786084511217,"results":"13564","hashOfConfig":"12232"},{"size":3963,"mtime":1786084511217,"results":"13565","hashOfConfig":"12232"},{"size":7268,"mtime":1786084511217,"results":"13566","hashOfConfig":"12232"},{"size":3389,"mtime":1786084511217,"results":"13567","hashOfConfig":"12232"},{"size":1835,"mtime":1786084511217,"results":"13568","hashOfConfig":"12232"},{"size":6381,"mtime":1786084511217,"results":"13569","hashOfConfig":"12232"},{"size":2191,"mtime":1786084511217,"results":"13570","hashOfConfig":"12232"},{"size":2042,"mtime":1786084511217,"results":"13571","hashOfConfig":"12232"},{"size":4309,"mtime":1786084511217,"results":"13572","hashOfConfig":"12232"},{"size":2534,"mtime":1786084511217,"results":"13573","hashOfConfig":"12232"},{"size":7046,"mtime":1786084511217,"results":"13574","hashOfConfig":"12232"},{"size":1988,"mtime":1786084511218,"results":"13575","hashOfConfig":"12232"},{"size":5419,"mtime":1786084511218,"results":"13576","hashOfConfig":"12232"},{"size":1349,"mtime":1786084511218,"results":"13577","hashOfConfig":"12232"},{"size":4785,"mtime":1786084511218,"results":"13578","hashOfConfig":"12232"},{"size":1793,"mtime":1786084511218,"results":"13579","hashOfConfig":"12232"},{"size":14760,"mtime":1786084511218,"results":"13580","hashOfConfig":"12232"},{"size":5315,"mtime":1786084511218,"results":"13581","hashOfConfig":"12232"},{"size":1606,"mtime":1786084511218,"results":"13582","hashOfConfig":"12232"},{"size":7974,"mtime":1786084511218,"results":"13583","hashOfConfig":"12232"},{"size":2398,"mtime":1786084511219,"results":"13584","hashOfConfig":"12232"},{"size":5089,"mtime":1786084511219,"results":"13585","hashOfConfig":"12232"},{"size":3895,"mtime":1786084511219,"results":"13586","hashOfConfig":"12232"},{"size":7132,"mtime":1786084511219,"results":"13587","hashOfConfig":"12232"},{"size":1665,"mtime":1786084511219,"results":"13588","hashOfConfig":"12232"},{"size":5341,"mtime":1786084511219,"results":"13589","hashOfConfig":"12232"},{"size":2048,"mtime":1786084511219,"results":"13590","hashOfConfig":"12232"},{"size":1477,"mtime":1786084511219,"results":"13591","hashOfConfig":"12232"},{"size":2411,"mtime":1786084511219,"results":"13592","hashOfConfig":"12232"},{"size":1527,"mtime":1786084511219,"results":"13593","hashOfConfig":"12232"},{"size":4551,"mtime":1786084511219,"results":"13594","hashOfConfig":"12232"},{"size":2462,"mtime":1786084511219,"results":"13595","hashOfConfig":"12232"},{"size":3736,"mtime":1786084511220,"results":"13596","hashOfConfig":"12232"},{"size":2367,"mtime":1786084511220,"results":"13597","hashOfConfig":"12232"},{"size":1597,"mtime":1786084511220,"results":"13598","hashOfConfig":"12232"},{"size":1035,"mtime":1786084511220,"results":"13599","hashOfConfig":"12232"},{"size":966,"mtime":1786084511220,"results":"13600","hashOfConfig":"12232"},{"size":1185,"mtime":1786084511220,"results":"13601","hashOfConfig":"12232"},{"size":1390,"mtime":1786084511220,"results":"13602","hashOfConfig":"12232"},{"size":4194,"mtime":1786084511220,"results":"13603","hashOfConfig":"12232"},{"size":1209,"mtime":1786084511220,"results":"13604","hashOfConfig":"12232"},{"size":1038,"mtime":1786084511220,"results":"13605","hashOfConfig":"12232"},{"size":1300,"mtime":1786084511220,"results":"13606","hashOfConfig":"12232"},{"size":3014,"mtime":1786084511220,"results":"13607","hashOfConfig":"12232"},{"size":2330,"mtime":1786084511221,"results":"13608","hashOfConfig":"12232"},{"size":4002,"mtime":1786084511221,"results":"13609","hashOfConfig":"12232"},{"size":803,"mtime":1786084511221,"results":"13610","hashOfConfig":"12232"},{"size":2732,"mtime":1786084511224,"results":"13611","hashOfConfig":"12232"},{"size":8230,"mtime":1786084511224,"results":"13612","hashOfConfig":"12232"},{"size":1779,"mtime":1786084511224,"results":"13613","hashOfConfig":"12232"},{"size":4234,"mtime":1786084511224,"results":"13614","hashOfConfig":"12232"},{"size":16495,"mtime":1786084511224,"results":"13615","hashOfConfig":"12232"},{"size":6881,"mtime":1786084511225,"results":"13616","hashOfConfig":"12232"},{"size":4087,"mtime":1786084511225,"results":"13617","hashOfConfig":"12232"},{"size":4748,"mtime":1786084511225,"results":"13618","hashOfConfig":"12232"},{"size":22188,"mtime":1786084511225,"results":"13619","hashOfConfig":"12232"},{"size":4228,"mtime":1786084511225,"results":"13620","hashOfConfig":"12232"},{"size":2754,"mtime":1786084511225,"results":"13621","hashOfConfig":"12232"},{"size":2087,"mtime":1786084511225,"results":"13622","hashOfConfig":"12232"},{"size":1208,"mtime":1786084511225,"results":"13623","hashOfConfig":"12232"},{"size":3236,"mtime":1786084511225,"results":"13624","hashOfConfig":"12232"},{"size":2309,"mtime":1786084511226,"results":"13625","hashOfConfig":"12232"},{"size":4431,"mtime":1786084511226,"results":"13626","hashOfConfig":"12232"},{"size":8171,"mtime":1786084511226,"results":"13627","hashOfConfig":"12232"},{"size":9479,"mtime":1786084511226,"results":"13628","hashOfConfig":"12232"},{"size":4752,"mtime":1786084511226,"results":"13629","hashOfConfig":"12232"},{"size":13943,"mtime":1786084511226,"results":"13630","hashOfConfig":"12232"},{"size":6039,"mtime":1786084511226,"results":"13631","hashOfConfig":"12232"},{"size":5480,"mtime":1786084511226,"results":"13632","hashOfConfig":"12232"},{"size":3806,"mtime":1786084511226,"results":"13633","hashOfConfig":"12232"},{"size":3318,"mtime":1786084511227,"results":"13634","hashOfConfig":"12232"},{"size":5066,"mtime":1786084511227,"results":"13635","hashOfConfig":"12232"},{"size":5430,"mtime":1786084511227,"results":"13636","hashOfConfig":"12232"},{"size":2392,"mtime":1786084511227,"results":"13637","hashOfConfig":"12232"},{"size":2382,"mtime":1786084511227,"results":"13638","hashOfConfig":"12232"},{"size":2390,"mtime":1786084511227,"results":"13639","hashOfConfig":"12232"},{"size":1862,"mtime":1786084511227,"results":"13640","hashOfConfig":"12232"},{"size":2793,"mtime":1786084511227,"results":"13641","hashOfConfig":"12232"},{"size":3056,"mtime":1786084511228,"results":"13642","hashOfConfig":"12232"},{"size":418,"mtime":1786084511228,"results":"13643","hashOfConfig":"12232"},{"size":458,"mtime":1786084511228,"results":"13644","hashOfConfig":"12232"},{"size":2737,"mtime":1786084511228,"results":"13645","hashOfConfig":"12232"},{"size":3414,"mtime":1786084511228,"results":"13646","hashOfConfig":"12232"},{"size":974,"mtime":1786084511228,"results":"13647","hashOfConfig":"12232"},{"size":1291,"mtime":1786084511228,"results":"13648","hashOfConfig":"12232"},{"size":5973,"mtime":1786084511228,"results":"13649","hashOfConfig":"12232"},{"size":2110,"mtime":1786084511228,"results":"13650","hashOfConfig":"12232"},{"size":1903,"mtime":1786084511228,"results":"13651","hashOfConfig":"12232"},{"size":1003,"mtime":1786084511229,"results":"13652","hashOfConfig":"12232"},{"size":1493,"mtime":1786084511229,"results":"13653","hashOfConfig":"12232"},{"size":3964,"mtime":1786084511229,"results":"13654","hashOfConfig":"12232"},{"size":5986,"mtime":1786084511229,"results":"13655","hashOfConfig":"12232"},{"size":3275,"mtime":1786084511229,"results":"13656","hashOfConfig":"12232"},{"size":3177,"mtime":1786084511229,"results":"13657","hashOfConfig":"12232"},{"size":4692,"mtime":1786084511229,"results":"13658","hashOfConfig":"12232"},{"size":2758,"mtime":1786084511229,"results":"13659","hashOfConfig":"12232"},{"size":3889,"mtime":1786084511229,"results":"13660","hashOfConfig":"12232"},{"size":3596,"mtime":1786084511229,"results":"13661","hashOfConfig":"12232"},{"size":2108,"mtime":1786084511230,"results":"13662","hashOfConfig":"12232"},{"size":3283,"mtime":1786084511230,"results":"13663","hashOfConfig":"12232"},{"size":1476,"mtime":1786084511230,"results":"13664","hashOfConfig":"12232"},{"size":1610,"mtime":1786084511230,"results":"13665","hashOfConfig":"12232"},{"size":1744,"mtime":1786084511230,"results":"13666","hashOfConfig":"12232"},{"size":1445,"mtime":1786084511230,"results":"13667","hashOfConfig":"12232"},{"size":2237,"mtime":1786084511230,"results":"13668","hashOfConfig":"12232"},{"size":1569,"mtime":1786084511230,"results":"13669","hashOfConfig":"12232"},{"size":2230,"mtime":1786084511230,"results":"13670","hashOfConfig":"12232"},{"size":6449,"mtime":1786084511230,"results":"13671","hashOfConfig":"12232"},{"size":3917,"mtime":1786084511231,"results":"13672","hashOfConfig":"12232"},{"size":1962,"mtime":1786084511231,"results":"13673","hashOfConfig":"12232"},{"size":5734,"mtime":1786084511231,"results":"13674","hashOfConfig":"12232"},{"size":5672,"mtime":1786084511231,"results":"13675","hashOfConfig":"12232"},{"size":14325,"mtime":1786084511231,"results":"13676","hashOfConfig":"12232"},{"size":2766,"mtime":1786084511231,"results":"13677","hashOfConfig":"12232"},{"size":4471,"mtime":1786084511231,"results":"13678","hashOfConfig":"12232"},{"size":1621,"mtime":1786084511231,"results":"13679","hashOfConfig":"12232"},{"size":1208,"mtime":1786084511232,"results":"13680","hashOfConfig":"12232"},{"size":5320,"mtime":1786084511232,"results":"13681","hashOfConfig":"12232"},{"size":15459,"mtime":1786084511232,"results":"13682","hashOfConfig":"12232"},{"size":1311,"mtime":1786084511232,"results":"13683","hashOfConfig":"12232"},{"size":2513,"mtime":1786084511232,"results":"13684","hashOfConfig":"12232"},{"size":4429,"mtime":1786084511232,"results":"13685","hashOfConfig":"12232"},{"size":3725,"mtime":1786084511232,"results":"13686","hashOfConfig":"12232"},{"size":2836,"mtime":1786084511232,"results":"13687","hashOfConfig":"12232"},{"size":4569,"mtime":1786084511233,"results":"13688","hashOfConfig":"12232"},{"size":4112,"mtime":1786084511233,"results":"13689","hashOfConfig":"12232"},{"size":3927,"mtime":1786084511233,"results":"13690","hashOfConfig":"12232"},{"size":5765,"mtime":1786084511233,"results":"13691","hashOfConfig":"12232"},{"size":4778,"mtime":1786084511233,"results":"13692","hashOfConfig":"12232"},{"size":2715,"mtime":1786084511233,"results":"13693","hashOfConfig":"12232"},{"size":4081,"mtime":1786084511233,"results":"13694","hashOfConfig":"12232"},{"size":818,"mtime":1786084511233,"results":"13695","hashOfConfig":"12232"},{"size":1190,"mtime":1786084511233,"results":"13696","hashOfConfig":"12232"},{"size":3030,"mtime":1786084511234,"results":"13697","hashOfConfig":"12232"},{"size":4250,"mtime":1786084511234,"results":"13698","hashOfConfig":"12232"},{"size":4640,"mtime":1786084511234,"results":"13699","hashOfConfig":"12232"},{"size":3252,"mtime":1786084511234,"results":"13700","hashOfConfig":"12232"},{"size":2330,"mtime":1786084511234,"results":"13701","hashOfConfig":"12232"},{"size":1218,"mtime":1786084511234,"results":"13702","hashOfConfig":"12232"},{"size":2279,"mtime":1786084511234,"results":"13703","hashOfConfig":"12232"},{"size":2542,"mtime":1786084511234,"results":"13704","hashOfConfig":"12232"},{"size":5348,"mtime":1786084511234,"results":"13705","hashOfConfig":"12232"},{"size":2459,"mtime":1786084511235,"results":"13706","hashOfConfig":"12232"},{"size":8052,"mtime":1786084511235,"results":"13707","hashOfConfig":"12232"},{"size":2174,"mtime":1786084511235,"results":"13708","hashOfConfig":"12232"},{"size":1420,"mtime":1786084511235,"results":"13709","hashOfConfig":"12232"},{"size":3761,"mtime":1786084511235,"results":"13710","hashOfConfig":"12232"},{"size":4834,"mtime":1786084511235,"results":"13711","hashOfConfig":"12232"},{"size":5988,"mtime":1786084511235,"results":"13712","hashOfConfig":"12232"},{"size":1093,"mtime":1786084511235,"results":"13713","hashOfConfig":"12232"},{"size":1053,"mtime":1786084511235,"results":"13714","hashOfConfig":"12232"},{"size":1402,"mtime":1786084511235,"results":"13715","hashOfConfig":"12232"},{"size":1555,"mtime":1786084511236,"results":"13716","hashOfConfig":"12232"},{"size":1579,"mtime":1786084511236,"results":"13717","hashOfConfig":"12232"},{"size":1497,"mtime":1786084511236,"results":"13718","hashOfConfig":"12232"},{"size":5289,"mtime":1786084511236,"results":"13719","hashOfConfig":"12232"},{"size":10079,"mtime":1786084511236,"results":"13720","hashOfConfig":"12232"},{"size":3893,"mtime":1786084511236,"results":"13721","hashOfConfig":"12232"},{"size":2250,"mtime":1786084511236,"results":"13722","hashOfConfig":"12232"},{"size":3731,"mtime":1786084511237,"results":"13723","hashOfConfig":"12232"},{"size":2453,"mtime":1786084511237,"results":"13724","hashOfConfig":"12232"},{"size":5189,"mtime":1786084511237,"results":"13725","hashOfConfig":"12232"},{"size":8181,"mtime":1786084511237,"results":"13726","hashOfConfig":"12232"},{"size":2922,"mtime":1786084511237,"results":"13727","hashOfConfig":"12232"},{"size":2273,"mtime":1786084511237,"results":"13728","hashOfConfig":"12232"},{"size":2394,"mtime":1786084511237,"results":"13729","hashOfConfig":"12232"},{"size":6004,"mtime":1786084511237,"results":"13730","hashOfConfig":"12232"},{"size":3114,"mtime":1786084511238,"results":"13731","hashOfConfig":"12232"},{"size":3145,"mtime":1786084511238,"results":"13732","hashOfConfig":"12232"},{"size":2444,"mtime":1786084511238,"results":"13733","hashOfConfig":"12232"},{"size":10621,"mtime":1786084511238,"results":"13734","hashOfConfig":"12232"},{"size":7952,"mtime":1786084511238,"results":"13735","hashOfConfig":"12232"},{"size":9048,"mtime":1786084511238,"results":"13736","hashOfConfig":"12232"},{"size":1613,"mtime":1786084511238,"results":"13737","hashOfConfig":"12232"},{"size":5259,"mtime":1786084511238,"results":"13738","hashOfConfig":"12232"},{"size":1833,"mtime":1786084511239,"results":"13739","hashOfConfig":"12232"},{"size":13164,"mtime":1786084511239,"results":"13740","hashOfConfig":"12232"},{"size":9434,"mtime":1786084511239,"results":"13741","hashOfConfig":"12232"},{"size":5009,"mtime":1786084511239,"results":"13742","hashOfConfig":"12232"},{"size":5670,"mtime":1786084511212,"results":"13743","hashOfConfig":"12232"},{"size":6306,"mtime":1786084511212,"results":"13744","hashOfConfig":"12232"},{"size":5233,"mtime":1786084511212,"results":"13745","hashOfConfig":"12232"},{"size":3568,"mtime":1786084511212,"results":"13746","hashOfConfig":"12232"},{"size":4333,"mtime":1786084511212,"results":"13747","hashOfConfig":"12232"},{"size":4499,"mtime":1786084511212,"results":"13748","hashOfConfig":"12232"},{"size":3781,"mtime":1786084511212,"results":"13749","hashOfConfig":"12232"},{"size":2045,"mtime":1786084511212,"results":"13750","hashOfConfig":"12232"},{"size":4259,"mtime":1786084511212,"results":"13751","hashOfConfig":"12232"},{"size":2673,"mtime":1786084511213,"results":"13752","hashOfConfig":"12232"},{"size":1842,"mtime":1786084511213,"results":"13753","hashOfConfig":"12232"},{"size":1137,"mtime":1786084511239,"results":"13754","hashOfConfig":"12232"},{"size":5857,"mtime":1786084511239,"results":"13755","hashOfConfig":"12232"},{"size":8021,"mtime":1786084511240,"results":"13756","hashOfConfig":"12232"},{"size":5635,"mtime":1786084511240,"results":"13757","hashOfConfig":"12232"},{"size":1767,"mtime":1786084511240,"results":"13758","hashOfConfig":"12232"},{"size":3151,"mtime":1786084511240,"results":"13759","hashOfConfig":"12232"},{"size":1197,"mtime":1786084511240,"results":"13760","hashOfConfig":"12232"},{"size":2523,"mtime":1786084511240,"results":"13761","hashOfConfig":"12232"},{"size":2784,"mtime":1786084511241,"results":"13762","hashOfConfig":"12232"},{"size":4964,"mtime":1786084511241,"results":"13763","hashOfConfig":"12232"},{"size":6781,"mtime":1786084511241,"results":"13764","hashOfConfig":"12232"},{"size":6078,"mtime":1786084511241,"results":"13765","hashOfConfig":"12232"},{"size":4725,"mtime":1786084511241,"results":"13766","hashOfConfig":"12232"},{"size":14202,"mtime":1786084511241,"results":"13767","hashOfConfig":"12232"},{"size":12466,"mtime":1786084511242,"results":"13768","hashOfConfig":"12232"},{"size":4411,"mtime":1786084511242,"results":"13769","hashOfConfig":"12232"},{"size":2174,"mtime":1786084511242,"results":"13770","hashOfConfig":"12232"},{"size":3764,"mtime":1786084511242,"results":"13771","hashOfConfig":"12232"},{"size":3886,"mtime":1786084511242,"results":"13772","hashOfConfig":"12232"},{"size":4627,"mtime":1786084511242,"results":"13773","hashOfConfig":"12232"},{"size":3791,"mtime":1786084511242,"results":"13774","hashOfConfig":"12232"},{"size":962,"mtime":1786084511242,"results":"13775","hashOfConfig":"12232"},{"size":6028,"mtime":1786084511243,"results":"13776","hashOfConfig":"12232"},{"size":4587,"mtime":1786084511243,"results":"13777","hashOfConfig":"12232"},{"size":6328,"mtime":1786084511243,"results":"13778","hashOfConfig":"12232"},{"size":5445,"mtime":1786084511243,"results":"13779","hashOfConfig":"12232"},{"size":6243,"mtime":1786084511243,"results":"13780","hashOfConfig":"12232"},{"size":5087,"mtime":1786084511243,"results":"13781","hashOfConfig":"12232"},{"size":5369,"mtime":1786084511243,"results":"13782","hashOfConfig":"12232"},{"size":3124,"mtime":1786084511244,"results":"13783","hashOfConfig":"12232"},{"size":1299,"mtime":1786084511244,"results":"13784","hashOfConfig":"12232"},{"size":3039,"mtime":1786084511244,"results":"13785","hashOfConfig":"12232"},{"size":4744,"mtime":1786084511244,"results":"13786","hashOfConfig":"12232"},{"size":2561,"mtime":1786084511244,"results":"13787","hashOfConfig":"12232"},{"size":1144,"mtime":1786084511244,"results":"13788","hashOfConfig":"12232"},{"size":672,"mtime":1786084511244,"results":"13789","hashOfConfig":"12232"},{"size":1606,"mtime":1786084511244,"results":"13790","hashOfConfig":"12232"},{"size":1690,"mtime":1786084511244,"results":"13791","hashOfConfig":"12232"},{"size":2712,"mtime":1786084511245,"results":"13792","hashOfConfig":"12232"},{"size":734,"mtime":1786084511245,"results":"13793","hashOfConfig":"12232"},{"size":3193,"mtime":1786084511245,"results":"13794","hashOfConfig":"12232"},{"size":11532,"mtime":1786084511245,"results":"13795","hashOfConfig":"12232"},{"size":2641,"mtime":1786084511245,"results":"13796","hashOfConfig":"12232"},{"size":4017,"mtime":1786084511245,"results":"13797","hashOfConfig":"12232"},{"size":2314,"mtime":1786084511245,"results":"13798","hashOfConfig":"12232"},{"size":1505,"mtime":1786084511245,"results":"13799","hashOfConfig":"12232"},{"size":1863,"mtime":1786084511246,"results":"13800","hashOfConfig":"12232"},{"size":1557,"mtime":1786084511246,"results":"13801","hashOfConfig":"12232"},{"size":3967,"mtime":1786084511246,"results":"13802","hashOfConfig":"12232"},{"size":1858,"mtime":1786084511246,"results":"13803","hashOfConfig":"12232"},{"size":3691,"mtime":1786084511246,"results":"13804","hashOfConfig":"12232"},{"size":4432,"mtime":1786084511246,"results":"13805","hashOfConfig":"12232"},{"size":5370,"mtime":1786084511246,"results":"13806","hashOfConfig":"12232"},{"size":3345,"mtime":1786084511246,"results":"13807","hashOfConfig":"12232"},{"size":5801,"mtime":1786084511246,"results":"13808","hashOfConfig":"12232"},{"size":8839,"mtime":1786084511247,"results":"13809","hashOfConfig":"12232"},{"size":2864,"mtime":1786084511247,"results":"13810","hashOfConfig":"12232"},{"size":29693,"mtime":1786084511247,"results":"13811","hashOfConfig":"12232"},{"size":9702,"mtime":1786084511247,"results":"13812","hashOfConfig":"12232"},{"size":5004,"mtime":1786084511247,"results":"13813","hashOfConfig":"12232"},{"size":20395,"mtime":1786084511248,"results":"13814","hashOfConfig":"12232"},{"size":16170,"mtime":1786084511248,"results":"13815","hashOfConfig":"12232"},{"size":8408,"mtime":1786084511248,"results":"13816","hashOfConfig":"12232"},{"size":2427,"mtime":1786084511248,"results":"13817","hashOfConfig":"12232"},{"size":16457,"mtime":1786084511248,"results":"13818","hashOfConfig":"12232"},{"size":2042,"mtime":1786084511248,"results":"13819","hashOfConfig":"12232"},{"size":3553,"mtime":1786084511249,"results":"13820","hashOfConfig":"12232"},{"size":1672,"mtime":1786084511249,"results":"13821","hashOfConfig":"12232"},{"size":12429,"mtime":1786084511249,"results":"13822","hashOfConfig":"12232"},{"size":7378,"mtime":1786084511249,"results":"13823","hashOfConfig":"12232"},{"size":4165,"mtime":1786084511249,"results":"13824","hashOfConfig":"12285"},{"size":2227,"mtime":1786084511249,"results":"13825","hashOfConfig":"12232"},{"size":5518,"mtime":1786084511249,"results":"13826","hashOfConfig":"12232"},{"size":6499,"mtime":1786084511249,"results":"13827","hashOfConfig":"12232"},{"size":19580,"mtime":1786084511250,"results":"13828","hashOfConfig":"12232"},{"size":3057,"mtime":1786084511250,"results":"13829","hashOfConfig":"12232"},{"size":3946,"mtime":1786084511250,"results":"13830","hashOfConfig":"12232"},{"size":1282,"mtime":1786084511250,"results":"13831","hashOfConfig":"12232"},{"size":1161,"mtime":1786084511250,"results":"13832","hashOfConfig":"12232"},{"size":817,"mtime":1786084511250,"results":"13833","hashOfConfig":"12232"},{"size":1401,"mtime":1786084511250,"results":"13834","hashOfConfig":"12232"},{"size":5165,"mtime":1786084511251,"results":"13835","hashOfConfig":"12232"},{"size":13553,"mtime":1786084511251,"results":"13836","hashOfConfig":"8189"},{"size":6096,"mtime":1786084511251,"results":"13837","hashOfConfig":"8189"},{"size":18849,"mtime":1786084511252,"results":"13838","hashOfConfig":"8189"},{"size":4033,"mtime":1786084511252,"results":"13839","hashOfConfig":"8189"},{"size":12037,"mtime":1786084511252,"results":"13840","hashOfConfig":"8189"},{"size":15020,"mtime":1786084511252,"results":"13841","hashOfConfig":"8189"},{"size":9008,"mtime":1786084511252,"results":"13842","hashOfConfig":"8189"},{"size":17637,"mtime":1786084511253,"results":"13843","hashOfConfig":"8189"},{"size":15511,"mtime":1786084511253,"results":"13844","hashOfConfig":"8189"},{"size":1150,"mtime":1786084511253,"results":"13845","hashOfConfig":"12232"},{"size":2543,"mtime":1786084511253,"results":"13846","hashOfConfig":"12232"},{"size":2959,"mtime":1786084511253,"results":"13847","hashOfConfig":"12232"},{"size":2575,"mtime":1786084511253,"results":"13848","hashOfConfig":"12232"},{"size":9749,"mtime":1786084511253,"results":"13849","hashOfConfig":"12232"},{"size":1123,"mtime":1786084511254,"results":"13850","hashOfConfig":"12232"},{"size":1392,"mtime":1786084511254,"results":"13851","hashOfConfig":"12232"},{"size":6541,"mtime":1786084511254,"results":"13852","hashOfConfig":"12232"},{"size":2443,"mtime":1786084511254,"results":"13853","hashOfConfig":"12232"},{"size":577,"mtime":1786084511254,"results":"13854","hashOfConfig":"12232"},{"size":6743,"mtime":1786084511254,"results":"13855","hashOfConfig":"12232"},{"size":3433,"mtime":1786084511254,"results":"13856","hashOfConfig":"12232"},{"size":8004,"mtime":1786084511250,"results":"13857","hashOfConfig":"12232"},{"size":4568,"mtime":1786084511251,"results":"13858","hashOfConfig":"12232"},{"size":2376,"mtime":1786084511251,"results":"13859","hashOfConfig":"12232"},{"size":7659,"mtime":1786084511255,"results":"13860","hashOfConfig":"12232"},{"size":5620,"mtime":1786084511255,"results":"13861","hashOfConfig":"12232"},{"size":5102,"mtime":1786084511255,"results":"13862","hashOfConfig":"12232"},{"size":4087,"mtime":1786084511255,"results":"13863","hashOfConfig":"12232"},{"size":13009,"mtime":1786084511255,"results":"13864","hashOfConfig":"12232"},{"size":11255,"mtime":1786084511271,"results":"13865","hashOfConfig":"12232"},{"size":2108,"mtime":1786084511271,"results":"13866","hashOfConfig":"12232"},{"size":3771,"mtime":1786084511271,"results":"13867","hashOfConfig":"12232"},{"size":7951,"mtime":1786084511271,"results":"13868","hashOfConfig":"12232"},{"size":4751,"mtime":1786084511271,"results":"13869","hashOfConfig":"12232"},{"size":1920,"mtime":1786084511271,"results":"13870","hashOfConfig":"12285"},{"size":5310,"mtime":1786084511271,"results":"13871","hashOfConfig":"12232"},{"size":2590,"mtime":1786084511271,"results":"13872","hashOfConfig":"12232"},{"size":1046,"mtime":1786084511271,"results":"13873","hashOfConfig":"12285"},{"size":1080,"mtime":1786084511271,"results":"13874","hashOfConfig":"12285"},{"size":4814,"mtime":1786084511272,"results":"13875","hashOfConfig":"12232"},{"size":5711,"mtime":1786084511272,"results":"13876","hashOfConfig":"12232"},{"size":5337,"mtime":1786084511272,"results":"13877","hashOfConfig":"12232"},{"size":6159,"mtime":1786084511272,"results":"13878","hashOfConfig":"12232"},{"size":1726,"mtime":1786084511272,"results":"13879","hashOfConfig":"12232"},{"size":7021,"mtime":1786084511272,"results":"13880","hashOfConfig":"12232"},{"size":2221,"mtime":1786084511272,"results":"13881","hashOfConfig":"12232"},{"size":7761,"mtime":1786084511272,"results":"13882","hashOfConfig":"12232"},{"size":2124,"mtime":1786084511273,"results":"13883","hashOfConfig":"12232"},{"size":2871,"mtime":1786084511255,"results":"13884","hashOfConfig":"12232"},{"size":2835,"mtime":1786084511255,"results":"13885","hashOfConfig":"12232"},{"size":1716,"mtime":1786084511256,"results":"13886","hashOfConfig":"12285"},{"size":16180,"mtime":1786084511256,"results":"13887","hashOfConfig":"12232"},{"size":3899,"mtime":1786084511256,"results":"13888","hashOfConfig":"12232"},{"size":6921,"mtime":1786084511256,"results":"13889","hashOfConfig":"12232"},{"size":4265,"mtime":1786084511256,"results":"13890","hashOfConfig":"12232"},{"size":4103,"mtime":1786084511256,"results":"13891","hashOfConfig":"12232"},{"size":3497,"mtime":1786084511256,"results":"13892","hashOfConfig":"12232"},{"size":3346,"mtime":1786084511256,"results":"13893","hashOfConfig":"12232"},{"size":24757,"mtime":1786084511257,"results":"13894","hashOfConfig":"12232"},{"size":3591,"mtime":1786084511257,"results":"13895","hashOfConfig":"12232"},{"size":12517,"mtime":1786084511257,"results":"13896","hashOfConfig":"12232"},{"size":9525,"mtime":1786084511257,"results":"13897","hashOfConfig":"12232"},{"size":11415,"mtime":1786084511257,"results":"13898","hashOfConfig":"12232"},{"size":3080,"mtime":1786084511258,"results":"13899","hashOfConfig":"12232"},{"size":4164,"mtime":1786084511258,"results":"13900","hashOfConfig":"12232"},{"size":2007,"mtime":1786084511258,"results":"13901","hashOfConfig":"12232"},{"size":2133,"mtime":1786084511258,"results":"13902","hashOfConfig":"12232"},{"size":7068,"mtime":1786084511258,"results":"13903","hashOfConfig":"12232"},{"size":2244,"mtime":1786084511258,"results":"13904","hashOfConfig":"12232"},{"size":1783,"mtime":1786084511258,"results":"13905","hashOfConfig":"12232"},{"size":2306,"mtime":1786084511258,"results":"13906","hashOfConfig":"12232"},{"size":6799,"mtime":1786084511258,"results":"13907","hashOfConfig":"12232"},{"size":26609,"mtime":1786084511259,"results":"13908","hashOfConfig":"12232"},{"size":3510,"mtime":1786084511259,"results":"13909","hashOfConfig":"12232"},{"size":3053,"mtime":1786084511259,"results":"13910","hashOfConfig":"12232"},{"size":852,"mtime":1786084511259,"results":"13911","hashOfConfig":"12232"},{"size":12959,"mtime":1786084511259,"results":"13912","hashOfConfig":"12232"},{"size":2239,"mtime":1786084511260,"results":"13913","hashOfConfig":"12232"},{"size":8002,"mtime":1786084511260,"results":"13914","hashOfConfig":"12232"},{"size":12593,"mtime":1786084511260,"results":"13915","hashOfConfig":"12232"},{"size":2577,"mtime":1786084511260,"results":"13916","hashOfConfig":"12232"},{"size":1952,"mtime":1786084511260,"results":"13917","hashOfConfig":"12232"},{"size":5273,"mtime":1786084511261,"results":"13918","hashOfConfig":"12232"},{"size":2989,"mtime":1786084511261,"results":"13919","hashOfConfig":"12232"},{"size":13589,"mtime":1786084511261,"results":"13920","hashOfConfig":"12232"},{"size":3917,"mtime":1786084511261,"results":"13921","hashOfConfig":"12232"},{"size":1708,"mtime":1786084511261,"results":"13922","hashOfConfig":"12232"},{"size":1495,"mtime":1786084511262,"results":"13923","hashOfConfig":"12232"},{"size":3387,"mtime":1786084511262,"results":"13924","hashOfConfig":"12232"},{"size":4123,"mtime":1786084511262,"results":"13925","hashOfConfig":"12232"},{"size":6386,"mtime":1786084511262,"results":"13926","hashOfConfig":"12232"},{"size":12577,"mtime":1786084511262,"results":"13927","hashOfConfig":"12232"},{"size":2327,"mtime":1786084511263,"results":"13928","hashOfConfig":"12232"},{"size":17135,"mtime":1786084511263,"results":"13929","hashOfConfig":"12232"},{"size":11209,"mtime":1786084511263,"results":"13930","hashOfConfig":"12232"},{"size":47245,"mtime":1786084511264,"results":"13931","hashOfConfig":"12232"},{"size":2772,"mtime":1786084511264,"results":"13932","hashOfConfig":"12232"},{"size":4445,"mtime":1786084511264,"results":"13933","hashOfConfig":"12232"},{"size":3403,"mtime":1786084511264,"results":"13934","hashOfConfig":"12232"},{"size":3805,"mtime":1786084511264,"results":"13935","hashOfConfig":"12232"},{"size":10649,"mtime":1786084511264,"results":"13936","hashOfConfig":"12232"},{"size":4922,"mtime":1786084511264,"results":"13937","hashOfConfig":"12232"},{"size":4693,"mtime":1786084511264,"results":"13938","hashOfConfig":"12232"},{"size":13103,"mtime":1786084511265,"results":"13939","hashOfConfig":"12232"},{"size":4454,"mtime":1786084511265,"results":"13940","hashOfConfig":"12232"},{"size":5437,"mtime":1786084511265,"results":"13941","hashOfConfig":"12232"},{"size":3439,"mtime":1786084511265,"results":"13942","hashOfConfig":"12232"},{"size":6824,"mtime":1786084511265,"results":"13943","hashOfConfig":"12232"},{"size":4038,"mtime":1786084511265,"results":"13944","hashOfConfig":"12232"},{"size":4083,"mtime":1786084511265,"results":"13945","hashOfConfig":"12232"},{"size":5600,"mtime":1786084511265,"results":"13946","hashOfConfig":"12232"},{"size":17963,"mtime":1786084511266,"results":"13947","hashOfConfig":"12232"},{"size":6608,"mtime":1786084511266,"results":"13948","hashOfConfig":"12232"},{"size":11090,"mtime":1786084511266,"results":"13949","hashOfConfig":"12232"},{"size":1291,"mtime":1786084511266,"results":"13950","hashOfConfig":"12232"},{"size":5985,"mtime":1786084511266,"results":"13951","hashOfConfig":"12232"},{"size":7177,"mtime":1786084511266,"results":"13952","hashOfConfig":"12232"},{"size":6303,"mtime":1786084511267,"results":"13953","hashOfConfig":"12232"},{"size":11192,"mtime":1786084511267,"results":"13954","hashOfConfig":"12232"},{"size":3783,"mtime":1786084511267,"results":"13955","hashOfConfig":"12232"},{"size":9653,"mtime":1786084511267,"results":"13956","hashOfConfig":"12232"},{"size":2881,"mtime":1786084511267,"results":"13957","hashOfConfig":"12232"},{"size":3311,"mtime":1786084511267,"results":"13958","hashOfConfig":"12232"},{"size":11944,"mtime":1786084511267,"results":"13959","hashOfConfig":"12232"},{"size":2269,"mtime":1786084511268,"results":"13960","hashOfConfig":"12232"},{"size":4316,"mtime":1786084511268,"results":"13961","hashOfConfig":"12232"},{"size":2077,"mtime":1786084511268,"results":"13962","hashOfConfig":"12232"},{"size":2667,"mtime":1786084511268,"results":"13963","hashOfConfig":"12232"},{"size":28429,"mtime":1786084511268,"results":"13964","hashOfConfig":"12232"},{"size":6440,"mtime":1786084511268,"results":"13965","hashOfConfig":"12232"},{"size":2795,"mtime":1786084511269,"results":"13966","hashOfConfig":"12232"},{"size":5008,"mtime":1786084511269,"results":"13967","hashOfConfig":"12232"},{"size":9118,"mtime":1786084511269,"results":"13968","hashOfConfig":"12232"},{"size":1587,"mtime":1786084511269,"results":"13969","hashOfConfig":"12232"},{"size":2619,"mtime":1786084511269,"results":"13970","hashOfConfig":"12232"},{"size":5082,"mtime":1786084511269,"results":"13971","hashOfConfig":"12232"},{"size":14955,"mtime":1786084511270,"results":"13972","hashOfConfig":"12232"},{"size":24451,"mtime":1786084511270,"results":"13973","hashOfConfig":"12232"},{"size":7393,"mtime":1786084511270,"results":"13974","hashOfConfig":"12232"},{"size":16198,"mtime":1786084511270,"results":"13975","hashOfConfig":"12232"},{"size":2962,"mtime":1786084511270,"results":"13976","hashOfConfig":"12232"},{"size":9594,"mtime":1786084511273,"results":"13977","hashOfConfig":"12232"},{"size":3685,"mtime":1786084511273,"results":"13978","hashOfConfig":"12232"},{"size":902,"mtime":1786084511273,"results":"13979","hashOfConfig":"12232"},{"size":9574,"mtime":1786084511273,"results":"13980","hashOfConfig":"12232"},{"size":4870,"mtime":1786084511273,"results":"13981","hashOfConfig":"12232"},{"size":1582,"mtime":1786084511273,"results":"13982","hashOfConfig":"12232"},{"size":2801,"mtime":1786084511273,"results":"13983","hashOfConfig":"12232"},{"size":6880,"mtime":1786084511274,"results":"13984","hashOfConfig":"12232"},{"size":2524,"mtime":1786084511274,"results":"13985","hashOfConfig":"12232"},{"size":7867,"mtime":1786084511274,"results":"13986","hashOfConfig":"12232"},{"size":6832,"mtime":1786084511274,"results":"13987","hashOfConfig":"12232"},{"size":5949,"mtime":1786084511274,"results":"13988","hashOfConfig":"12232"},{"size":10845,"mtime":1786084511274,"results":"13989","hashOfConfig":"12232"},{"size":38974,"mtime":1786084511275,"results":"13990","hashOfConfig":"12232"},{"size":9584,"mtime":1786084511275,"results":"13991","hashOfConfig":"12232"},{"size":1470,"mtime":1786084511275,"results":"13992","hashOfConfig":"12232"},{"size":3944,"mtime":1786084511275,"results":"13993","hashOfConfig":"12232"},{"size":4441,"mtime":1786084511275,"results":"13994","hashOfConfig":"12232"},{"size":1676,"mtime":1786084511275,"results":"13995","hashOfConfig":"12232"},{"size":14295,"mtime":1786084511276,"results":"13996","hashOfConfig":"12232"},{"size":2569,"mtime":1786084511276,"results":"13997","hashOfConfig":"12232"},{"size":3622,"mtime":1786084511276,"results":"13998","hashOfConfig":"12232"},{"size":328,"mtime":1786084511276,"results":"13999","hashOfConfig":"12232"},{"size":1564,"mtime":1786084511276,"results":"14000","hashOfConfig":"12232"},{"size":7827,"mtime":1786084511276,"results":"14001","hashOfConfig":"12232"},{"size":13552,"mtime":1786084511276,"results":"14002","hashOfConfig":"12232"},{"size":7615,"mtime":1786084511277,"results":"14003","hashOfConfig":"12232"},{"size":1285,"mtime":1786084511277,"results":"14004","hashOfConfig":"12232"},{"size":2874,"mtime":1786084511277,"results":"14005","hashOfConfig":"12232"},{"size":5970,"mtime":1786084511277,"results":"14006","hashOfConfig":"12232"},{"size":2759,"mtime":1786084511277,"results":"14007","hashOfConfig":"12232"},{"size":12438,"mtime":1786084511277,"results":"14008","hashOfConfig":"12232"},{"size":2047,"mtime":1786084511277,"results":"14009","hashOfConfig":"12232"},{"size":3999,"mtime":1786084511277,"results":"14010","hashOfConfig":"12232"},{"size":3204,"mtime":1786084511278,"results":"14011","hashOfConfig":"12232"},{"size":8564,"mtime":1786084511278,"results":"14012","hashOfConfig":"12232"},{"size":11662,"mtime":1786084511278,"results":"14013","hashOfConfig":"12232"},{"size":2436,"mtime":1786084511278,"results":"14014","hashOfConfig":"12232"},{"size":1881,"mtime":1786084511278,"results":"14015","hashOfConfig":"12232"},{"size":3213,"mtime":1786084511279,"results":"14016","hashOfConfig":"12232"},{"size":622,"mtime":1786084511279,"results":"14017","hashOfConfig":"12232"},{"size":6852,"mtime":1786084511279,"results":"14018","hashOfConfig":"12232"},{"size":2110,"mtime":1786084511279,"results":"14019","hashOfConfig":"12232"},{"size":4195,"mtime":1786084511279,"results":"14020","hashOfConfig":"12232"},{"size":3877,"mtime":1786084511280,"results":"14021","hashOfConfig":"12232"},{"size":5803,"mtime":1786084511280,"results":"14022","hashOfConfig":"12232"},{"size":3440,"mtime":1786084511280,"results":"14023","hashOfConfig":"12232"},{"size":15602,"mtime":1786084511280,"results":"14024","hashOfConfig":"12232"},{"size":9771,"mtime":1786084511281,"results":"14025","hashOfConfig":"12232"},{"size":7153,"mtime":1786084511281,"results":"14026","hashOfConfig":"12232"},{"size":3079,"mtime":1786084511281,"results":"14027","hashOfConfig":"12232"},{"size":4331,"mtime":1786084511281,"results":"14028","hashOfConfig":"12232"},{"size":11474,"mtime":1786084511281,"results":"14029","hashOfConfig":"12232"},{"size":4575,"mtime":1786084511281,"results":"14030","hashOfConfig":"12232"},{"size":1661,"mtime":1786084511281,"results":"14031","hashOfConfig":"12232"},{"size":3959,"mtime":1786084511281,"results":"14032","hashOfConfig":"12232"},{"size":3327,"mtime":1786084511282,"results":"14033","hashOfConfig":"12232"},{"size":8224,"mtime":1786084511282,"results":"14034","hashOfConfig":"12232"},{"size":2798,"mtime":1786084511282,"results":"14035","hashOfConfig":"12232"},{"size":15450,"mtime":1786084511282,"results":"14036","hashOfConfig":"12232"},{"size":6177,"mtime":1786084511282,"results":"14037","hashOfConfig":"12232"},{"size":13086,"mtime":1786084511283,"results":"14038","hashOfConfig":"12232"},{"size":7516,"mtime":1786084511283,"results":"14039","hashOfConfig":"12232"},{"size":18563,"mtime":1786084511283,"results":"14040","hashOfConfig":"12232"},{"size":1319,"mtime":1786084511283,"results":"14041","hashOfConfig":"12232"},{"size":10171,"mtime":1786084511283,"results":"14042","hashOfConfig":"12232"},{"size":4035,"mtime":1786084511283,"results":"14043","hashOfConfig":"12232"},{"size":1045,"mtime":1786084511284,"results":"14044","hashOfConfig":"12232"},{"size":5817,"mtime":1786084511284,"results":"14045","hashOfConfig":"12232"},{"size":10166,"mtime":1786084511284,"results":"14046","hashOfConfig":"12232"},{"size":2722,"mtime":1786084511284,"results":"14047","hashOfConfig":"12232"},{"size":2892,"mtime":1786084511284,"results":"14048","hashOfConfig":"12232"},{"size":1585,"mtime":1786084511284,"results":"14049","hashOfConfig":"12232"},{"size":4459,"mtime":1786084511284,"results":"14050","hashOfConfig":"12232"},{"size":4047,"mtime":1786084511284,"results":"14051","hashOfConfig":"12232"},{"size":5338,"mtime":1786084511285,"results":"14052","hashOfConfig":"12232"},{"size":5031,"mtime":1786084511285,"results":"14053","hashOfConfig":"12232"},{"size":4692,"mtime":1786084511285,"results":"14054","hashOfConfig":"12232"},{"size":3485,"mtime":1786084511285,"results":"14055","hashOfConfig":"12232"},{"size":2728,"mtime":1786084511285,"results":"14056","hashOfConfig":"12232"},{"size":3540,"mtime":1786084511285,"results":"14057","hashOfConfig":"12232"},{"size":5565,"mtime":1786084511285,"results":"14058","hashOfConfig":"12232"},{"size":8759,"mtime":1786084511286,"results":"14059","hashOfConfig":"12232"},{"size":4449,"mtime":1786084511286,"results":"14060","hashOfConfig":"12232"},{"size":11009,"mtime":1786084511286,"results":"14061","hashOfConfig":"12232"},{"size":3621,"mtime":1786084511286,"results":"14062","hashOfConfig":"12232"},{"size":4278,"mtime":1786084511287,"results":"14063","hashOfConfig":"12232"},{"size":5177,"mtime":1786084511287,"results":"14064","hashOfConfig":"12232"},{"size":3834,"mtime":1786084511287,"results":"14065","hashOfConfig":"12232"},{"size":3388,"mtime":1786084511287,"results":"14066","hashOfConfig":"12232"},{"size":3107,"mtime":1786084511287,"results":"14067","hashOfConfig":"12232"},{"size":3428,"mtime":1786084511287,"results":"14068","hashOfConfig":"12232"},{"size":7200,"mtime":1786084511287,"results":"14069","hashOfConfig":"12232"},{"size":7026,"mtime":1786084511287,"results":"14070","hashOfConfig":"12232"},{"size":1340,"mtime":1786084511288,"results":"14071","hashOfConfig":"12232"},{"size":12505,"mtime":1786084511288,"results":"14072","hashOfConfig":"12232"},{"size":4436,"mtime":1786084511288,"results":"14073","hashOfConfig":"12232"},{"size":7693,"mtime":1786084511288,"results":"14074","hashOfConfig":"12232"},{"size":2359,"mtime":1786084511288,"results":"14075","hashOfConfig":"12232"},{"size":405,"mtime":1786084511288,"results":"14076","hashOfConfig":"12232"},{"size":11574,"mtime":1786084511289,"results":"14077","hashOfConfig":"12232"},{"size":6745,"mtime":1786084511289,"results":"14078","hashOfConfig":"12232"},{"size":2316,"mtime":1786084511289,"results":"14079","hashOfConfig":"12232"},{"size":20396,"mtime":1786084511289,"results":"14080","hashOfConfig":"12232"},{"size":1620,"mtime":1786084511289,"results":"14081","hashOfConfig":"12232"},{"size":1642,"mtime":1786084511289,"results":"14082","hashOfConfig":"12232"},{"size":1860,"mtime":1786084511290,"results":"14083","hashOfConfig":"12232"},{"size":2590,"mtime":1786084511290,"results":"14084","hashOfConfig":"12232"},{"size":7002,"mtime":1786084511290,"results":"14085","hashOfConfig":"12232"},{"size":3385,"mtime":1786084511290,"results":"14086","hashOfConfig":"12232"},{"size":6838,"mtime":1786084511290,"results":"14087","hashOfConfig":"12232"},{"size":7168,"mtime":1786084511290,"results":"14088","hashOfConfig":"12232"},{"size":1773,"mtime":1786084511290,"results":"14089","hashOfConfig":"12232"},{"size":3206,"mtime":1786084511290,"results":"14090","hashOfConfig":"12232"},{"size":2012,"mtime":1786084511290,"results":"14091","hashOfConfig":"12232"},{"size":8347,"mtime":1786084511291,"results":"14092","hashOfConfig":"12232"},{"size":1979,"mtime":1786084511291,"results":"14093","hashOfConfig":"12232"},{"size":5782,"mtime":1786084511291,"results":"14094","hashOfConfig":"12232"},{"size":11544,"mtime":1786084511291,"results":"14095","hashOfConfig":"12232"},{"size":1019,"mtime":1786084511291,"results":"14096","hashOfConfig":"12232"},{"size":36065,"mtime":1786084511292,"results":"14097","hashOfConfig":"12232"},{"size":3060,"mtime":1786084511292,"results":"14098","hashOfConfig":"12232"},{"size":5918,"mtime":1786084511292,"results":"14099","hashOfConfig":"12232"},{"size":12901,"mtime":1786084511292,"results":"14100","hashOfConfig":"12232"},{"size":7534,"mtime":1786084511292,"results":"14101","hashOfConfig":"12232"},{"size":5402,"mtime":1786084511292,"results":"14102","hashOfConfig":"12232"},{"size":3492,"mtime":1786084511292,"results":"14103","hashOfConfig":"12232"},{"size":5403,"mtime":1786084511293,"results":"14104","hashOfConfig":"12232"},{"size":43260,"mtime":1786084511293,"results":"14105","hashOfConfig":"12232"},{"size":1878,"mtime":1786084511293,"results":"14106","hashOfConfig":"12232"},{"size":1468,"mtime":1786084511293,"results":"14107","hashOfConfig":"12232"},{"size":6684,"mtime":1786084511293,"results":"14108","hashOfConfig":"12232"},{"size":2598,"mtime":1786084511294,"results":"14109","hashOfConfig":"12232"},{"size":54446,"mtime":1786084511294,"results":"14110","hashOfConfig":"12232"},{"size":2632,"mtime":1786084511294,"results":"14111","hashOfConfig":"12232"},{"size":3814,"mtime":1786084511295,"results":"14112","hashOfConfig":"12232"},{"size":23783,"mtime":1786084511295,"results":"14113","hashOfConfig":"12232"},{"size":5738,"mtime":1786084511295,"results":"14114","hashOfConfig":"12232"},{"size":785,"mtime":1786084511295,"results":"14115","hashOfConfig":"12232"},{"size":8202,"mtime":1786084511295,"results":"14116","hashOfConfig":"12232"},{"size":4928,"mtime":1786084511296,"results":"14117","hashOfConfig":"12232"},{"size":4735,"mtime":1786084511296,"results":"14118","hashOfConfig":"12232"},{"size":20007,"mtime":1786084511296,"results":"14119","hashOfConfig":"12232"},{"size":8762,"mtime":1786084511297,"results":"14120","hashOfConfig":"12232"},{"size":9639,"mtime":1786084511297,"results":"14121","hashOfConfig":"12232"},{"size":4060,"mtime":1786084511297,"results":"14122","hashOfConfig":"12232"},{"size":12413,"mtime":1786084511297,"results":"14123","hashOfConfig":"12232"},{"size":2726,"mtime":1786084511297,"results":"14124","hashOfConfig":"12232"},{"size":7694,"mtime":1786084511297,"results":"14125","hashOfConfig":"12232"},{"size":9001,"mtime":1786084511298,"results":"14126","hashOfConfig":"12232"},{"size":8906,"mtime":1786084511298,"results":"14127","hashOfConfig":"12232"},{"size":24121,"mtime":1786084511298,"results":"14128","hashOfConfig":"12232"},{"size":4702,"mtime":1786084511298,"results":"14129","hashOfConfig":"12232"},{"size":17335,"mtime":1786084511298,"results":"14130","hashOfConfig":"12232"},{"size":26263,"mtime":1786084511299,"results":"14131","hashOfConfig":"12232"},{"size":1215,"mtime":1786084511299,"results":"14132","hashOfConfig":"12232"},{"size":1136,"mtime":1786084511299,"results":"14133","hashOfConfig":"12232"},{"size":3795,"mtime":1786084511299,"results":"14134","hashOfConfig":"12232"},{"size":24550,"mtime":1786084511299,"results":"14135","hashOfConfig":"12232"},{"size":2741,"mtime":1786084511299,"results":"14136","hashOfConfig":"12232"},{"size":15113,"mtime":1786084511300,"results":"14137","hashOfConfig":"12232"},{"size":3057,"mtime":1786084511300,"results":"14138","hashOfConfig":"12232"},{"size":7815,"mtime":1786084511300,"results":"14139","hashOfConfig":"12232"},{"size":833,"mtime":1786084511300,"results":"14140","hashOfConfig":"12232"},{"size":880,"mtime":1786084511300,"results":"14141","hashOfConfig":"12232"},{"size":8575,"mtime":1786084511300,"results":"14142","hashOfConfig":"12232"},{"size":8516,"mtime":1786084511300,"results":"14143","hashOfConfig":"12232"},{"size":4918,"mtime":1786084511300,"results":"14144","hashOfConfig":"12232"},{"size":7932,"mtime":1786084511301,"results":"14145","hashOfConfig":"12232"},{"size":9492,"mtime":1786084511301,"results":"14146","hashOfConfig":"12232"},{"size":1380,"mtime":1786084511301,"results":"14147","hashOfConfig":"12232"},{"size":1656,"mtime":1786084511301,"results":"14148","hashOfConfig":"12232"},{"size":1754,"mtime":1786084511301,"results":"14149","hashOfConfig":"12232"},{"size":19056,"mtime":1786084511301,"results":"14150","hashOfConfig":"12232"},{"size":1880,"mtime":1786084511302,"results":"14151","hashOfConfig":"12285"},{"size":4761,"mtime":1786084511302,"results":"14152","hashOfConfig":"12285"},{"size":4350,"mtime":1786084511302,"results":"14153","hashOfConfig":"12285"},{"size":2012,"mtime":1786084511302,"results":"14154","hashOfConfig":"12285"},{"size":4458,"mtime":1786084511302,"results":"14155","hashOfConfig":"12285"},{"size":3797,"mtime":1786084511302,"results":"14156","hashOfConfig":"12285"},{"size":2846,"mtime":1786084511302,"results":"14157","hashOfConfig":"12285"},{"size":2831,"mtime":1786084511302,"results":"14158","hashOfConfig":"12232"},{"size":12231,"mtime":1786084511302,"results":"14159","hashOfConfig":"12232"},{"size":1911,"mtime":1786084511303,"results":"14160","hashOfConfig":"12232"},{"size":3478,"mtime":1786084511303,"results":"14161","hashOfConfig":"12232"},{"size":5745,"mtime":1786084511303,"results":"14162","hashOfConfig":"12232"},{"size":5462,"mtime":1786084511303,"results":"14163","hashOfConfig":"12232"},{"size":4673,"mtime":1786084511303,"results":"14164","hashOfConfig":"12232"},{"size":3259,"mtime":1786084511303,"results":"14165","hashOfConfig":"12232"},{"size":7319,"mtime":1786084511303,"results":"14166","hashOfConfig":"12232"},{"size":6014,"mtime":1786084511303,"results":"14167","hashOfConfig":"12232"},{"size":10368,"mtime":1786084511304,"results":"14168","hashOfConfig":"12232"},{"size":5558,"mtime":1786084511304,"results":"14169","hashOfConfig":"12232"},{"size":3091,"mtime":1786084511304,"results":"14170","hashOfConfig":"12232"},{"size":3457,"mtime":1786084511304,"results":"14171","hashOfConfig":"12232"},{"size":4009,"mtime":1786084511304,"results":"14172","hashOfConfig":"12232"},{"size":3610,"mtime":1786084511304,"results":"14173","hashOfConfig":"12232"},{"size":2662,"mtime":1786084511304,"results":"14174","hashOfConfig":"12232"},{"size":3854,"mtime":1786084511304,"results":"14175","hashOfConfig":"12232"},{"size":4432,"mtime":1786084511305,"results":"14176","hashOfConfig":"12232"},{"size":5301,"mtime":1786084511305,"results":"14177","hashOfConfig":"12232"},{"size":20711,"mtime":1786084511305,"results":"14178","hashOfConfig":"12232"},{"size":3120,"mtime":1786084511305,"results":"14179","hashOfConfig":"12232"},{"size":2097,"mtime":1786084511305,"results":"14180","hashOfConfig":"12232"},{"size":1523,"mtime":1786084511305,"results":"14181","hashOfConfig":"12232"},{"size":1160,"mtime":1786084511305,"results":"14182","hashOfConfig":"12232"},{"size":1327,"mtime":1786084511305,"results":"14183","hashOfConfig":"12232"},{"size":3726,"mtime":1786084511305,"results":"14184","hashOfConfig":"12232"},{"size":4211,"mtime":1786084511306,"results":"14185","hashOfConfig":"12232"},{"size":5112,"mtime":1786084511306,"results":"14186","hashOfConfig":"12232"},{"size":700,"mtime":1786084511306,"results":"14187","hashOfConfig":"12232"},{"size":4887,"mtime":1786084511306,"results":"14188","hashOfConfig":"12232"},{"size":2802,"mtime":1786084511306,"results":"14189","hashOfConfig":"12232"},{"size":10249,"mtime":1786084511306,"results":"14190","hashOfConfig":"12232"},{"size":7571,"mtime":1786084511306,"results":"14191","hashOfConfig":"12232"},{"size":3517,"mtime":1786084511307,"results":"14192","hashOfConfig":"12232"},{"size":7877,"mtime":1786084511307,"results":"14193","hashOfConfig":"12232"},{"size":10341,"mtime":1786084511307,"results":"14194","hashOfConfig":"12232"},{"size":4730,"mtime":1786084511307,"results":"14195","hashOfConfig":"12232"},{"size":1765,"mtime":1786084511307,"results":"14196","hashOfConfig":"12232"},{"size":1753,"mtime":1786084511307,"results":"14197","hashOfConfig":"12232"},{"size":1705,"mtime":1786084511307,"results":"14198","hashOfConfig":"12232"},{"size":3364,"mtime":1786084511307,"results":"14199","hashOfConfig":"12232"},{"size":1558,"mtime":1786084511308,"results":"14200","hashOfConfig":"12232"},{"size":6245,"mtime":1786084511308,"results":"14201","hashOfConfig":"12232"},{"size":3966,"mtime":1786084511308,"results":"14202","hashOfConfig":"12232"},{"size":5408,"mtime":1786084511308,"results":"14203","hashOfConfig":"12232"},{"size":4363,"mtime":1786084511308,"results":"14204","hashOfConfig":"12232"},{"size":3379,"mtime":1786084511308,"results":"14205","hashOfConfig":"12232"},{"size":6048,"mtime":1786084511308,"results":"14206","hashOfConfig":"12232"},{"size":3011,"mtime":1786084511308,"results":"14207","hashOfConfig":"12232"},{"size":1873,"mtime":1786084511309,"results":"14208","hashOfConfig":"12232"},{"size":1652,"mtime":1786084511309,"results":"14209","hashOfConfig":"12232"},{"size":5626,"mtime":1786084511309,"results":"14210","hashOfConfig":"12232"},{"size":1321,"mtime":1786084511309,"results":"14211","hashOfConfig":"12232"},{"size":4892,"mtime":1786084511309,"results":"14212","hashOfConfig":"12232"},{"size":2981,"mtime":1786084511309,"results":"14213","hashOfConfig":"12232"},{"size":4123,"mtime":1786084511309,"results":"14214","hashOfConfig":"12232"},{"size":5225,"mtime":1786084511309,"results":"14215","hashOfConfig":"12232"},{"size":12661,"mtime":1786084511310,"results":"14216","hashOfConfig":"12232"},{"size":4058,"mtime":1786084511310,"results":"14217","hashOfConfig":"12232"},{"size":2930,"mtime":1786084511310,"results":"14218","hashOfConfig":"12232"},{"size":1092,"mtime":1786084511310,"results":"14219","hashOfConfig":"12232"},{"size":2292,"mtime":1786084511310,"results":"14220","hashOfConfig":"12232"},{"size":3494,"mtime":1786084511310,"results":"14221","hashOfConfig":"12232"},{"size":1251,"mtime":1786084511310,"results":"14222","hashOfConfig":"12232"},{"size":1596,"mtime":1786084511310,"results":"14223","hashOfConfig":"12232"},{"size":1012,"mtime":1786084511311,"results":"14224","hashOfConfig":"12232"},{"size":2108,"mtime":1786084511311,"results":"14225","hashOfConfig":"12232"},{"size":3205,"mtime":1786084511311,"results":"14226","hashOfConfig":"12232"},{"size":1531,"mtime":1786084511311,"results":"14227","hashOfConfig":"12232"},{"size":1267,"mtime":1786084511311,"results":"14228","hashOfConfig":"12232"},{"size":4511,"mtime":1786084511311,"results":"14229","hashOfConfig":"12232"},{"size":2387,"mtime":1786084511310,"results":"14230","hashOfConfig":"12232"},{"size":1843,"mtime":1786084511311,"results":"14231","hashOfConfig":"12232"},{"size":9655,"mtime":1786084511311,"results":"14232","hashOfConfig":"12232"},{"size":2034,"mtime":1786084511312,"results":"14233","hashOfConfig":"12232"},{"size":5044,"mtime":1786084511312,"results":"14234","hashOfConfig":"12232"},{"size":6063,"mtime":1786084511312,"results":"14235","hashOfConfig":"12232"},{"size":1551,"mtime":1786084511312,"results":"14236","hashOfConfig":"12232"},{"size":2264,"mtime":1786084511312,"results":"14237","hashOfConfig":"12232"},{"size":3309,"mtime":1786084511312,"results":"14238","hashOfConfig":"12232"},{"size":5941,"mtime":1786084511312,"results":"14239","hashOfConfig":"12232"},{"size":3866,"mtime":1786084511312,"results":"14240","hashOfConfig":"12232"},{"size":12501,"mtime":1786084511313,"results":"14241","hashOfConfig":"12232"},{"size":3541,"mtime":1786084511313,"results":"14242","hashOfConfig":"12232"},{"size":4411,"mtime":1786084511313,"results":"14243","hashOfConfig":"12232"},{"size":4938,"mtime":1786084511313,"results":"14244","hashOfConfig":"12232"},{"size":4416,"mtime":1786084511313,"results":"14245","hashOfConfig":"12232"},{"size":1701,"mtime":1786084511313,"results":"14246","hashOfConfig":"12232"},{"size":3276,"mtime":1786084511313,"results":"14247","hashOfConfig":"12232"},{"size":2519,"mtime":1786084511314,"results":"14248","hashOfConfig":"12232"},{"size":11138,"mtime":1786084511314,"results":"14249","hashOfConfig":"12232"},{"size":2000,"mtime":1786084511314,"results":"14250","hashOfConfig":"12232"},{"size":4167,"mtime":1786084511314,"results":"14251","hashOfConfig":"12232"},{"size":4509,"mtime":1786084511314,"results":"14252","hashOfConfig":"12232"},{"size":2888,"mtime":1786084511314,"results":"14253","hashOfConfig":"12232"},{"size":3857,"mtime":1786084511314,"results":"14254","hashOfConfig":"12232"},{"size":1813,"mtime":1786084511314,"results":"14255","hashOfConfig":"12232"},{"size":3545,"mtime":1786084511314,"results":"14256","hashOfConfig":"12232"},{"size":10768,"mtime":1786084511315,"results":"14257","hashOfConfig":"12232"},{"size":11858,"mtime":1786084511315,"results":"14258","hashOfConfig":"12232"},{"size":4116,"mtime":1786084511315,"results":"14259","hashOfConfig":"12232"},{"size":5043,"mtime":1786084511315,"results":"14260","hashOfConfig":"12232"},{"size":2574,"mtime":1786084511315,"results":"14261","hashOfConfig":"12232"},{"size":6431,"mtime":1786084511315,"results":"14262","hashOfConfig":"12232"},{"size":4767,"mtime":1786084511315,"results":"14263","hashOfConfig":"12232"},{"size":10723,"mtime":1786084511316,"results":"14264","hashOfConfig":"12232"},{"size":6006,"mtime":1786084511316,"results":"14265","hashOfConfig":"12232"},{"size":2157,"mtime":1786084511316,"results":"14266","hashOfConfig":"12232"},{"size":6758,"mtime":1786084511316,"results":"14267","hashOfConfig":"12232"},{"size":3505,"mtime":1786084511316,"results":"14268","hashOfConfig":"12232"},{"size":4411,"mtime":1786084511316,"results":"14269","hashOfConfig":"12232"},{"size":1469,"mtime":1786084511316,"results":"14270","hashOfConfig":"12232"},{"size":4309,"mtime":1786084511316,"results":"14271","hashOfConfig":"12232"},{"size":1551,"mtime":1786084511316,"results":"14272","hashOfConfig":"12232"},{"size":4150,"mtime":1786084511317,"results":"14273","hashOfConfig":"12232"},{"size":4845,"mtime":1786084511317,"results":"14274","hashOfConfig":"12232"},{"size":4007,"mtime":1786084511317,"results":"14275","hashOfConfig":"12232"},{"size":3428,"mtime":1786084511317,"results":"14276","hashOfConfig":"12232"},{"size":4837,"mtime":1786084511317,"results":"14277","hashOfConfig":"12232"},{"size":1693,"mtime":1786084511317,"results":"14278","hashOfConfig":"12232"},{"size":23274,"mtime":1786084511317,"results":"14279","hashOfConfig":"12232"},{"size":14712,"mtime":1786084511318,"results":"14280","hashOfConfig":"12232"},{"size":9912,"mtime":1786084511318,"results":"14281","hashOfConfig":"12232"},{"size":5828,"mtime":1786084511319,"results":"14282","hashOfConfig":"12232"},{"size":1238,"mtime":1786084511319,"results":"14283","hashOfConfig":"12232"},{"size":1556,"mtime":1786084511319,"results":"14284","hashOfConfig":"12232"},{"size":8541,"mtime":1786084511319,"results":"14285","hashOfConfig":"12232"},{"size":2543,"mtime":1786084511319,"results":"14286","hashOfConfig":"12232"},{"size":4046,"mtime":1786084511319,"results":"14287","hashOfConfig":"12232"},{"size":7570,"mtime":1786084511320,"results":"14288","hashOfConfig":"12232"},{"size":2233,"mtime":1786084511320,"results":"14289","hashOfConfig":"12232"},{"size":1205,"mtime":1786084511320,"results":"14290","hashOfConfig":"12232"},{"size":4050,"mtime":1786084511320,"results":"14291","hashOfConfig":"12232"},{"size":1916,"mtime":1786084511320,"results":"14292","hashOfConfig":"12232"},{"size":3008,"mtime":1786084511320,"results":"14293","hashOfConfig":"12232"},{"size":1118,"mtime":1786084511320,"results":"14294","hashOfConfig":"12232"},{"size":14023,"mtime":1786084511321,"results":"14295","hashOfConfig":"12232"},{"size":2409,"mtime":1786084511321,"results":"14296","hashOfConfig":"12232"},{"size":9281,"mtime":1786084511321,"results":"14297","hashOfConfig":"12232"},{"size":16818,"mtime":1786084511321,"results":"14298","hashOfConfig":"12232"},{"size":804,"mtime":1786084511321,"results":"14299","hashOfConfig":"12232"},{"size":8850,"mtime":1786084511321,"results":"14300","hashOfConfig":"12232"},{"size":10655,"mtime":1786084511321,"results":"14301","hashOfConfig":"12232"},{"size":3254,"mtime":1786084511322,"results":"14302","hashOfConfig":"12232"},{"size":6161,"mtime":1786084511322,"results":"14303","hashOfConfig":"12232"},{"size":3444,"mtime":1786084511322,"results":"14304","hashOfConfig":"12232"},{"size":9607,"mtime":1786084511322,"results":"14305","hashOfConfig":"12232"},{"size":12397,"mtime":1786084511322,"results":"14306","hashOfConfig":"12232"},{"size":1832,"mtime":1786084511323,"results":"14307","hashOfConfig":"12232"},{"size":82336,"mtime":1786084511323,"results":"14308","hashOfConfig":"12232"},{"size":4839,"mtime":1786084511324,"results":"14309","hashOfConfig":"12232"},{"size":4705,"mtime":1786084511324,"results":"14310","hashOfConfig":"12232"},{"size":1703,"mtime":1786084511324,"results":"14311","hashOfConfig":"12232"},{"size":7926,"mtime":1786084511324,"results":"14312","hashOfConfig":"12232"},{"size":1551,"mtime":1786084511325,"results":"14313","hashOfConfig":"12232"},{"size":1547,"mtime":1786084511325,"results":"14314","hashOfConfig":"12232"},{"size":4813,"mtime":1786084511326,"results":"14315","hashOfConfig":"12232"},{"size":8540,"mtime":1786084529128,"results":"14316","hashOfConfig":"12232"},{"size":27448,"mtime":1786084511326,"results":"14317","hashOfConfig":"12232"},{"size":10605,"mtime":1786084511327,"results":"14318","hashOfConfig":"12232"},{"size":6948,"mtime":1786084511327,"results":"14319","hashOfConfig":"12232"},{"size":7800,"mtime":1786084511327,"results":"14320","hashOfConfig":"12232"},{"size":2265,"mtime":1786084511327,"results":"14321","hashOfConfig":"12232"},{"size":5418,"mtime":1786084511327,"results":"14322","hashOfConfig":"12232"},{"size":5249,"mtime":1786084511325,"results":"14323","hashOfConfig":"12232"},{"size":8245,"mtime":1786084511325,"results":"14324","hashOfConfig":"12232"},{"size":4250,"mtime":1786084511325,"results":"14325","hashOfConfig":"12232"},{"size":1750,"mtime":1786084511327,"results":"14326","hashOfConfig":"12232"},{"size":7351,"mtime":1786084511328,"results":"14327","hashOfConfig":"12232"},{"size":1896,"mtime":1786084511328,"results":"14328","hashOfConfig":"12232"},{"size":9273,"mtime":1786084511328,"results":"14329","hashOfConfig":"12232"},{"size":1918,"mtime":1786084511328,"results":"14330","hashOfConfig":"12232"},{"size":2447,"mtime":1786084511329,"results":"14331","hashOfConfig":"12232"},{"size":5387,"mtime":1786084511329,"results":"14332","hashOfConfig":"12232"},{"size":2591,"mtime":1786084511329,"results":"14333","hashOfConfig":"12232"},{"size":5174,"mtime":1786084511329,"results":"14334","hashOfConfig":"12232"},{"size":6032,"mtime":1786084511329,"results":"14335","hashOfConfig":"12232"},{"size":2035,"mtime":1786084511330,"results":"14336","hashOfConfig":"12232"},{"size":4813,"mtime":1786084511330,"results":"14337","hashOfConfig":"12232"},{"size":4015,"mtime":1786084511330,"results":"14338","hashOfConfig":"12232"},{"size":2287,"mtime":1786084511330,"results":"14339","hashOfConfig":"12232"},{"size":3185,"mtime":1786084511330,"results":"14340","hashOfConfig":"12232"},{"size":3665,"mtime":1786084511330,"results":"14341","hashOfConfig":"12232"},{"size":3115,"mtime":1786084511331,"results":"14342","hashOfConfig":"12232"},{"size":992,"mtime":1786084511331,"results":"14343","hashOfConfig":"12232"},{"size":1116,"mtime":1786084511331,"results":"14344","hashOfConfig":"12232"},{"size":2422,"mtime":1786084511331,"results":"14345","hashOfConfig":"12232"},{"size":1321,"mtime":1786084511331,"results":"14346","hashOfConfig":"12232"},{"size":1687,"mtime":1786084511331,"results":"14347","hashOfConfig":"12232"},{"size":680,"mtime":1786084511332,"results":"14348","hashOfConfig":"12232"},{"size":938,"mtime":1786084511332,"results":"14349","hashOfConfig":"12232"},{"size":697,"mtime":1786084511332,"results":"14350","hashOfConfig":"12232"},{"size":839,"mtime":1786084511332,"results":"14351","hashOfConfig":"12232"},{"size":1376,"mtime":1786084511332,"results":"14352","hashOfConfig":"12232"},{"size":1485,"mtime":1786084511332,"results":"14353","hashOfConfig":"12232"},{"size":4511,"mtime":1786084511332,"results":"14354","hashOfConfig":"12232"},{"size":2425,"mtime":1786084511333,"results":"14355","hashOfConfig":"12232"},{"size":5078,"mtime":1786084511333,"results":"14356","hashOfConfig":"12232"},{"size":1092,"mtime":1786084511333,"results":"14357","hashOfConfig":"12232"},{"size":1580,"mtime":1786084511333,"results":"14358","hashOfConfig":"12232"},{"size":12392,"mtime":1786084511333,"results":"14359","hashOfConfig":"12232"},{"size":8000,"mtime":1786084511334,"results":"14360","hashOfConfig":"12232"},{"size":1621,"mtime":1786084511334,"results":"14361","hashOfConfig":"12232"},{"size":4679,"mtime":1786084511334,"results":"14362","hashOfConfig":"12232"},{"size":1943,"mtime":1786084511334,"results":"14363","hashOfConfig":"12232"},{"size":2294,"mtime":1786084511335,"results":"14364","hashOfConfig":"12232"},{"size":2292,"mtime":1786084511335,"results":"14365","hashOfConfig":"12232"},{"size":2381,"mtime":1786084511335,"results":"14366","hashOfConfig":"12232"},{"size":1188,"mtime":1786084511335,"results":"14367","hashOfConfig":"12232"},{"size":6006,"mtime":1786084511336,"results":"14368","hashOfConfig":"12232"},{"size":3393,"mtime":1786084511336,"results":"14369","hashOfConfig":"12232"},{"size":3453,"mtime":1786084511336,"results":"14370","hashOfConfig":"12232"},{"size":2599,"mtime":1786084511336,"results":"14371","hashOfConfig":"12232"},{"size":2832,"mtime":1786084511336,"results":"14372","hashOfConfig":"12232"},{"size":2994,"mtime":1786084511337,"results":"14373","hashOfConfig":"12232"},{"size":2593,"mtime":1786084511337,"results":"14374","hashOfConfig":"12232"},{"size":2437,"mtime":1786084511337,"results":"14375","hashOfConfig":"12232"},{"size":61357,"mtime":1786084511337,"results":"14376","hashOfConfig":"12232"},{"size":11826,"mtime":1786084511337,"results":"14377","hashOfConfig":"12232"},{"size":28857,"mtime":1786084529049,"results":"14378","hashOfConfig":"12232"},{"size":5472,"mtime":1786084511338,"results":"14379","hashOfConfig":"12232"},{"size":1016,"mtime":1786084511339,"results":"14380","hashOfConfig":"12232"},{"size":8055,"mtime":1786084511339,"results":"14381","hashOfConfig":"12232"},{"size":6281,"mtime":1786084511339,"results":"14382","hashOfConfig":"12232"},{"size":28050,"mtime":1786084511340,"results":"14383","hashOfConfig":"12232"},{"size":783,"mtime":1786084511340,"results":"14384","hashOfConfig":"12232"},{"size":3783,"mtime":1786084511340,"results":"14385","hashOfConfig":"12232"},{"size":1770,"mtime":1786084511340,"results":"14386","hashOfConfig":"12232"},{"size":1747,"mtime":1786084511340,"results":"14387","hashOfConfig":"12232"},{"size":2621,"mtime":1786084511341,"results":"14388","hashOfConfig":"12232"},{"size":3134,"mtime":1786084511341,"results":"14389","hashOfConfig":"12232"},{"size":6404,"mtime":1786084511341,"results":"14390","hashOfConfig":"12232"},{"size":3635,"mtime":1786084511341,"results":"14391","hashOfConfig":"12232"},{"size":5937,"mtime":1786084511341,"results":"14392","hashOfConfig":"12232"},{"size":4473,"mtime":1786084511341,"results":"14393","hashOfConfig":"12232"},{"size":4686,"mtime":1786084511342,"results":"14394","hashOfConfig":"12232"},{"size":3385,"mtime":1786084511342,"results":"14395","hashOfConfig":"12232"},{"size":6172,"mtime":1786084511342,"results":"14396","hashOfConfig":"12232"},{"size":2011,"mtime":1786084511342,"results":"14397","hashOfConfig":"12232"},{"size":2178,"mtime":1786084511342,"results":"14398","hashOfConfig":"12232"},{"size":7993,"mtime":1786084511342,"results":"14399","hashOfConfig":"12232"},{"size":7489,"mtime":1786084511342,"results":"14400","hashOfConfig":"12232"},{"size":3303,"mtime":1786084511343,"results":"14401","hashOfConfig":"12232"},{"size":4118,"mtime":1786084511343,"results":"14402","hashOfConfig":"12232"},{"size":454,"mtime":1786084511343,"results":"14403","hashOfConfig":"12232"},{"size":4235,"mtime":1786084511343,"results":"14404","hashOfConfig":"12232"},{"size":1338,"mtime":1786084511343,"results":"14405","hashOfConfig":"12232"},{"size":6146,"mtime":1786084511343,"results":"14406","hashOfConfig":"12232"},{"size":7894,"mtime":1786084511343,"results":"14407","hashOfConfig":"12232"},{"size":2559,"mtime":1786084511344,"results":"14408","hashOfConfig":"12232"},{"size":3728,"mtime":1786084511344,"results":"14409","hashOfConfig":"12232"},{"size":2833,"mtime":1786084511344,"results":"14410","hashOfConfig":"12232"},{"size":16476,"mtime":1786084511344,"results":"14411","hashOfConfig":"12232"},{"size":3616,"mtime":1786084511344,"results":"14412","hashOfConfig":"12232"},{"size":7343,"mtime":1786084511344,"results":"14413","hashOfConfig":"12232"},{"size":3351,"mtime":1786084511344,"results":"14414","hashOfConfig":"12232"},{"size":2629,"mtime":1786084511345,"results":"14415","hashOfConfig":"12232"},{"size":1726,"mtime":1786084511345,"results":"14416","hashOfConfig":"12232"},{"size":4233,"mtime":1786084511345,"results":"14417","hashOfConfig":"12232"},{"size":1734,"mtime":1786084511345,"results":"14418","hashOfConfig":"12232"},{"size":1034,"mtime":1786084511345,"results":"14419","hashOfConfig":"12232"},{"size":5765,"mtime":1786084511345,"results":"14420","hashOfConfig":"12232"},{"size":5808,"mtime":1786084511345,"results":"14421","hashOfConfig":"12232"},{"size":4808,"mtime":1786084511345,"results":"14422","hashOfConfig":"12232"},{"size":1625,"mtime":1786084511346,"results":"14423","hashOfConfig":"12232"},{"size":2293,"mtime":1786084511346,"results":"14424","hashOfConfig":"12232"},{"size":930,"mtime":1786084511346,"results":"14425","hashOfConfig":"12232"},{"size":2059,"mtime":1786084511346,"results":"14426","hashOfConfig":"12232"},{"size":3719,"mtime":1786084511346,"results":"14427","hashOfConfig":"12232"},{"size":4117,"mtime":1786084511346,"results":"14428","hashOfConfig":"12232"},{"size":1278,"mtime":1786084511346,"results":"14429","hashOfConfig":"12232"},{"size":2502,"mtime":1786084511347,"results":"14430","hashOfConfig":"12232"},{"size":1872,"mtime":1786084511347,"results":"14431","hashOfConfig":"12232"},{"size":5410,"mtime":1786084511347,"results":"14432","hashOfConfig":"12232"},{"size":2448,"mtime":1786084511347,"results":"14433","hashOfConfig":"12232"},{"size":11035,"mtime":1786084511347,"results":"14434","hashOfConfig":"12232"},{"size":4408,"mtime":1786084511348,"results":"14435","hashOfConfig":"12232"},{"size":5302,"mtime":1786084511348,"results":"14436","hashOfConfig":"12232"},{"size":5495,"mtime":1786084511348,"results":"14437","hashOfConfig":"12232"},{"size":6412,"mtime":1786084511348,"results":"14438","hashOfConfig":"12232"},{"size":6338,"mtime":1786084511349,"results":"14439","hashOfConfig":"12232"},{"size":3486,"mtime":1786084511349,"results":"14440","hashOfConfig":"12232"},{"size":2810,"mtime":1786084511349,"results":"14441","hashOfConfig":"12232"},{"size":1748,"mtime":1786084511349,"results":"14442","hashOfConfig":"12232"},{"size":3825,"mtime":1786084511349,"results":"14443","hashOfConfig":"12232"},{"size":2410,"mtime":1786084511350,"results":"14444","hashOfConfig":"12232"},{"size":557,"mtime":1786084511350,"results":"14445","hashOfConfig":"12232"},{"size":3433,"mtime":1786084511350,"results":"14446","hashOfConfig":"12232"},{"size":2857,"mtime":1786084511350,"results":"14447","hashOfConfig":"12232"},{"size":2527,"mtime":1786084511350,"results":"14448","hashOfConfig":"12232"},{"size":4182,"mtime":1786084511350,"results":"14449","hashOfConfig":"12232"},{"size":4800,"mtime":1786084511351,"results":"14450","hashOfConfig":"12232"},{"size":2179,"mtime":1786084511351,"results":"14451","hashOfConfig":"12232"},{"size":2198,"mtime":1786084511351,"results":"14452","hashOfConfig":"12232"},{"size":3932,"mtime":1786084511351,"results":"14453","hashOfConfig":"12232"},{"size":2469,"mtime":1786084511351,"results":"14454","hashOfConfig":"12232"},{"size":3978,"mtime":1786084511351,"results":"14455","hashOfConfig":"12232"},{"size":2285,"mtime":1786084511352,"results":"14456","hashOfConfig":"12232"},{"size":2113,"mtime":1786084511352,"results":"14457","hashOfConfig":"12232"},{"size":2092,"mtime":1786084511352,"results":"14458","hashOfConfig":"12232"},{"size":1641,"mtime":1786084511352,"results":"14459","hashOfConfig":"12232"},{"size":2442,"mtime":1786084511352,"results":"14460","hashOfConfig":"12232"},{"size":16075,"mtime":1786084511353,"results":"14461","hashOfConfig":"12232"},{"size":5473,"mtime":1786084511353,"results":"14462","hashOfConfig":"12232"},{"size":9438,"mtime":1786084511353,"results":"14463","hashOfConfig":"12232"},{"size":7403,"mtime":1786084511353,"results":"14464","hashOfConfig":"12232"},{"size":2690,"mtime":1786084511353,"results":"14465","hashOfConfig":"12232"},{"size":2053,"mtime":1786084511353,"results":"14466","hashOfConfig":"12232"},{"size":2351,"mtime":1786084511354,"results":"14467","hashOfConfig":"12232"},{"size":2373,"mtime":1786084511354,"results":"14468","hashOfConfig":"12232"},{"size":1497,"mtime":1786084511354,"results":"14469","hashOfConfig":"12232"},{"size":6574,"mtime":1786084511354,"results":"14470","hashOfConfig":"12232"},{"size":1685,"mtime":1786084511354,"results":"14471","hashOfConfig":"12232"},{"size":10099,"mtime":1786084511354,"results":"14472","hashOfConfig":"12232"},{"size":5590,"mtime":1786084511355,"results":"14473","hashOfConfig":"12232"},{"size":11932,"mtime":1786084511355,"results":"14474","hashOfConfig":"12232"},{"size":2364,"mtime":1786084511355,"results":"14475","hashOfConfig":"12232"},{"size":3810,"mtime":1786084511355,"results":"14476","hashOfConfig":"12232"},{"size":6599,"mtime":1786084511355,"results":"14477","hashOfConfig":"12232"},{"size":674,"mtime":1786084511355,"results":"14478","hashOfConfig":"12232"},{"size":6085,"mtime":1786084511355,"results":"14479","hashOfConfig":"12232"},{"size":2307,"mtime":1786084511356,"results":"14480","hashOfConfig":"12232"},{"size":2997,"mtime":1786084511356,"results":"14481","hashOfConfig":"12232"},{"size":1640,"mtime":1786084511356,"results":"14482","hashOfConfig":"12232"},{"size":8534,"mtime":1786084511356,"results":"14483","hashOfConfig":"12232"},{"size":2183,"mtime":1786084511356,"results":"14484","hashOfConfig":"12232"},{"size":1670,"mtime":1786084511356,"results":"14485","hashOfConfig":"12232"},{"size":5951,"mtime":1786084511357,"results":"14486","hashOfConfig":"12232"},{"size":8827,"mtime":1786084511357,"results":"14487","hashOfConfig":"12232"},{"size":4395,"mtime":1786084511357,"results":"14488","hashOfConfig":"12232"},{"size":8994,"mtime":1786084511357,"results":"14489","hashOfConfig":"12232"},{"size":2370,"mtime":1786084511357,"results":"14490","hashOfConfig":"12232"},{"size":7842,"mtime":1786084511357,"results":"14491","hashOfConfig":"12232"},{"size":5726,"mtime":1786084511358,"results":"14492","hashOfConfig":"12232"},{"size":3069,"mtime":1786084511358,"results":"14493","hashOfConfig":"12232"},{"size":4821,"mtime":1786084511358,"results":"14494","hashOfConfig":"12232"},{"size":1353,"mtime":1786084511358,"results":"14495","hashOfConfig":"12232"},{"size":4938,"mtime":1786084511358,"results":"14496","hashOfConfig":"12232"},{"size":9520,"mtime":1786084511359,"results":"14497","hashOfConfig":"12232"},{"size":10824,"mtime":1786084511359,"results":"14498","hashOfConfig":"12232"},{"size":8051,"mtime":1786084511359,"results":"14499","hashOfConfig":"12232"},{"size":4536,"mtime":1786084511359,"results":"14500","hashOfConfig":"12232"},{"size":10686,"mtime":1786084511359,"results":"14501","hashOfConfig":"12232"},{"size":3561,"mtime":1786084511359,"results":"14502","hashOfConfig":"12232"},{"size":11201,"mtime":1786084511360,"results":"14503","hashOfConfig":"12232"},{"size":7335,"mtime":1786084511360,"results":"14504","hashOfConfig":"12232"},{"size":3583,"mtime":1786084511360,"results":"14505","hashOfConfig":"12232"},{"size":2779,"mtime":1786084511360,"results":"14506","hashOfConfig":"12232"},{"size":1246,"mtime":1786084511360,"results":"14507","hashOfConfig":"12232"},{"size":3529,"mtime":1786084511360,"results":"14508","hashOfConfig":"12232"},{"size":5579,"mtime":1786084511360,"results":"14509","hashOfConfig":"12232"},{"size":7871,"mtime":1786084511361,"results":"14510","hashOfConfig":"12232"},{"size":5292,"mtime":1786084511361,"results":"14511","hashOfConfig":"12232"},{"size":3594,"mtime":1786084511361,"results":"14512","hashOfConfig":"12232"},{"size":7091,"mtime":1786084511361,"results":"14513","hashOfConfig":"12232"},{"size":1790,"mtime":1786084511361,"results":"14514","hashOfConfig":"12232"},{"size":1883,"mtime":1786084511361,"results":"14515","hashOfConfig":"12232"},{"size":5040,"mtime":1786084511362,"results":"14516","hashOfConfig":"12232"},{"size":1723,"mtime":1786084511362,"results":"14517","hashOfConfig":"12232"},{"size":3011,"mtime":1786084511362,"results":"14518","hashOfConfig":"12232"},{"size":2295,"mtime":1786084511362,"results":"14519","hashOfConfig":"12232"},{"size":4482,"mtime":1786084511362,"results":"14520","hashOfConfig":"12232"},{"size":3628,"mtime":1786084511362,"results":"14521","hashOfConfig":"12232"},{"size":5606,"mtime":1786084511362,"results":"14522","hashOfConfig":"12232"},{"size":22976,"mtime":1786084511363,"results":"14523","hashOfConfig":"12232"},{"size":6070,"mtime":1786084511363,"results":"14524","hashOfConfig":"12232"},{"size":1884,"mtime":1786084511363,"results":"14525","hashOfConfig":"12232"},{"size":3073,"mtime":1786084511363,"results":"14526","hashOfConfig":"12232"},{"size":4098,"mtime":1786084511363,"results":"14527","hashOfConfig":"12232"},{"size":1674,"mtime":1786084511363,"results":"14528","hashOfConfig":"12232"},{"size":2913,"mtime":1786084511363,"results":"14529","hashOfConfig":"12232"},{"size":3097,"mtime":1786084511364,"results":"14530","hashOfConfig":"12285"},{"size":4388,"mtime":1786084511364,"results":"14531","hashOfConfig":"12232"},{"size":9071,"mtime":1786084511364,"results":"14532","hashOfConfig":"12232"},{"size":6137,"mtime":1786084511364,"results":"14533","hashOfConfig":"12232"},{"size":2842,"mtime":1786084511364,"results":"14534","hashOfConfig":"12232"},{"size":2242,"mtime":1786084511364,"results":"14535","hashOfConfig":"12232"},{"size":4818,"mtime":1786084511364,"results":"14536","hashOfConfig":"12232"},{"size":7344,"mtime":1786084511365,"results":"14537","hashOfConfig":"12232"},{"size":3220,"mtime":1786084511365,"results":"14538","hashOfConfig":"12232"},{"size":8483,"mtime":1786084511365,"results":"14539","hashOfConfig":"12232"},{"size":5403,"mtime":1786084511365,"results":"14540","hashOfConfig":"12232"},{"size":2811,"mtime":1786084511365,"results":"14541","hashOfConfig":"12232"},{"size":2713,"mtime":1786084511365,"results":"14542","hashOfConfig":"12232"},{"size":2043,"mtime":1786084511365,"results":"14543","hashOfConfig":"12232"},{"size":5935,"mtime":1786084511366,"results":"14544","hashOfConfig":"12232"},{"size":5223,"mtime":1786084511366,"results":"14545","hashOfConfig":"12232"},{"size":8208,"mtime":1786084511366,"results":"14546","hashOfConfig":"12232"},{"size":1760,"mtime":1786084511366,"results":"14547","hashOfConfig":"12232"},{"size":5155,"mtime":1786084511366,"results":"14548","hashOfConfig":"12232"},{"size":6211,"mtime":1786084511366,"results":"14549","hashOfConfig":"12232"},{"size":912,"mtime":1786084511366,"results":"14550","hashOfConfig":"12232"},{"size":12807,"mtime":1786084511367,"results":"14551","hashOfConfig":"12232"},{"size":1991,"mtime":1786084511367,"results":"14552","hashOfConfig":"12232"},{"size":4716,"mtime":1786084511367,"results":"14553","hashOfConfig":"12232"},{"size":2239,"mtime":1786084511367,"results":"14554","hashOfConfig":"12232"},{"size":518,"mtime":1786084511367,"results":"14555","hashOfConfig":"12232"},{"size":3550,"mtime":1786084511367,"results":"14556","hashOfConfig":"12232"},{"size":2642,"mtime":1786084511367,"results":"14557","hashOfConfig":"12232"},{"size":8386,"mtime":1786084511368,"results":"14558","hashOfConfig":"12232"},{"size":8166,"mtime":1786084511368,"results":"14559","hashOfConfig":"12232"},{"size":1609,"mtime":1786084511370,"results":"14560","hashOfConfig":"12232"},{"size":12207,"mtime":1786084511370,"results":"14561","hashOfConfig":"12232"},{"size":1211,"mtime":1786084511370,"results":"14562","hashOfConfig":"12232"},{"size":10620,"mtime":1786084511368,"results":"14563","hashOfConfig":"12232"},{"size":3462,"mtime":1786084511368,"results":"14564","hashOfConfig":"12232"},{"size":7982,"mtime":1786084511368,"results":"14565","hashOfConfig":"12232"},{"size":4390,"mtime":1786084511368,"results":"14566","hashOfConfig":"12232"},{"size":8246,"mtime":1786084511368,"results":"14567","hashOfConfig":"12232"},{"size":6105,"mtime":1786084511369,"results":"14568","hashOfConfig":"12232"},{"size":3136,"mtime":1786084511369,"results":"14569","hashOfConfig":"12232"},{"size":6560,"mtime":1786084511369,"results":"14570","hashOfConfig":"12232"},{"size":15584,"mtime":1786084511369,"results":"14571","hashOfConfig":"12232"},{"size":1783,"mtime":1786084511369,"results":"14572","hashOfConfig":"12232"},{"size":3973,"mtime":1786084511369,"results":"14573","hashOfConfig":"12232"},{"size":4612,"mtime":1786084511370,"results":"14574","hashOfConfig":"12232"},{"size":4866,"mtime":1786084511370,"results":"14575","hashOfConfig":"12232"},{"size":3659,"mtime":1786084511370,"results":"14576","hashOfConfig":"12232"},{"size":9721,"mtime":1786084511371,"results":"14577","hashOfConfig":"12232"},{"size":6164,"mtime":1786084511371,"results":"14578","hashOfConfig":"12232"},{"size":1816,"mtime":1786084511371,"results":"14579","hashOfConfig":"12232"},{"size":9832,"mtime":1786084511377,"results":"14580","hashOfConfig":"12232"},{"size":4890,"mtime":1786084511371,"results":"14581","hashOfConfig":"12232"},{"size":2545,"mtime":1786084511371,"results":"14582","hashOfConfig":"12232"},{"size":4708,"mtime":1786084511371,"results":"14583","hashOfConfig":"12232"},{"size":4203,"mtime":1786084511371,"results":"14584","hashOfConfig":"12232"},{"size":5057,"mtime":1786084511372,"results":"14585","hashOfConfig":"12232"},{"size":7367,"mtime":1786084511372,"results":"14586","hashOfConfig":"12232"},{"size":6677,"mtime":1786084511372,"results":"14587","hashOfConfig":"12232"},{"size":5491,"mtime":1786084511372,"results":"14588","hashOfConfig":"12232"},{"size":7608,"mtime":1786084511372,"results":"14589","hashOfConfig":"12232"},{"size":7942,"mtime":1786084511372,"results":"14590","hashOfConfig":"12232"},{"size":7277,"mtime":1786084511373,"results":"14591","hashOfConfig":"12232"},{"size":8926,"mtime":1786084511373,"results":"14592","hashOfConfig":"12232"},{"size":6828,"mtime":1786084511373,"results":"14593","hashOfConfig":"12232"},{"size":6916,"mtime":1786084511373,"results":"14594","hashOfConfig":"12232"},{"size":6127,"mtime":1786084511373,"results":"14595","hashOfConfig":"12232"},{"size":7099,"mtime":1786084511373,"results":"14596","hashOfConfig":"12232"},{"size":7640,"mtime":1786084511374,"results":"14597","hashOfConfig":"12232"},{"size":2621,"mtime":1786084511374,"results":"14598","hashOfConfig":"12232"},{"size":16278,"mtime":1786084511374,"results":"14599","hashOfConfig":"12232"},{"size":981,"mtime":1786084511374,"results":"14600","hashOfConfig":"12232"},{"size":5332,"mtime":1786084511374,"results":"14601","hashOfConfig":"12232"},{"size":2579,"mtime":1786084511374,"results":"14602","hashOfConfig":"12232"},{"size":3311,"mtime":1786084511374,"results":"14603","hashOfConfig":"12232"},{"size":8585,"mtime":1786084511375,"results":"14604","hashOfConfig":"12232"},{"size":11798,"mtime":1786084511375,"results":"14605","hashOfConfig":"12232"},{"size":8076,"mtime":1786084511375,"results":"14606","hashOfConfig":"12232"},{"size":5198,"mtime":1786084511375,"results":"14607","hashOfConfig":"12232"},{"size":4693,"mtime":1786084511375,"results":"14608","hashOfConfig":"12232"},{"size":6438,"mtime":1786084511375,"results":"14609","hashOfConfig":"12232"},{"size":5980,"mtime":1786084511376,"results":"14610","hashOfConfig":"12232"},{"size":8902,"mtime":1786084511376,"results":"14611","hashOfConfig":"12232"},{"size":6286,"mtime":1786084511376,"results":"14612","hashOfConfig":"12232"},{"size":5766,"mtime":1786084511376,"results":"14613","hashOfConfig":"12232"},{"size":4365,"mtime":1786084511376,"results":"14614","hashOfConfig":"12232"},{"size":8868,"mtime":1786084511376,"results":"14615","hashOfConfig":"12232"},{"size":6091,"mtime":1786084511377,"results":"14616","hashOfConfig":"12232"},{"size":5674,"mtime":1786084511377,"results":"14617","hashOfConfig":"12232"},{"size":4720,"mtime":1786084511377,"results":"14618","hashOfConfig":"12232"},{"size":7551,"mtime":1786084511377,"results":"14619","hashOfConfig":"12232"},{"size":9234,"mtime":1786084511378,"results":"14620","hashOfConfig":"12232"},{"size":6369,"mtime":1786084511378,"results":"14621","hashOfConfig":"12232"},{"size":4975,"mtime":1786084511378,"results":"14622","hashOfConfig":"12232"},{"size":1461,"mtime":1786084511378,"results":"14623","hashOfConfig":"12232"},{"size":4578,"mtime":1786084511378,"results":"14624","hashOfConfig":"12232"},{"size":7049,"mtime":1786084511378,"results":"14625","hashOfConfig":"12232"},{"size":4042,"mtime":1786084511378,"results":"14626","hashOfConfig":"12232"},{"size":23009,"mtime":1786084511378,"results":"14627","hashOfConfig":"12232"},{"size":5419,"mtime":1786084511379,"results":"14628","hashOfConfig":"12232"},{"size":4137,"mtime":1786084511379,"results":"14629","hashOfConfig":"12232"},{"size":2998,"mtime":1786084511379,"results":"14630","hashOfConfig":"12232"},{"size":3595,"mtime":1786084511379,"results":"14631","hashOfConfig":"12232"},{"size":4691,"mtime":1786084511379,"results":"14632","hashOfConfig":"12232"},{"size":3526,"mtime":1786084511379,"results":"14633","hashOfConfig":"12232"},{"size":3765,"mtime":1786084511379,"results":"14634","hashOfConfig":"12232"},{"size":2395,"mtime":1786084511379,"results":"14635","hashOfConfig":"12232"},{"size":3679,"mtime":1786084511380,"results":"14636","hashOfConfig":"12232"},{"size":3147,"mtime":1786084511380,"results":"14637","hashOfConfig":"12232"},{"size":5671,"mtime":1786084511380,"results":"14638","hashOfConfig":"12232"},{"size":7508,"mtime":1786084511380,"results":"14639","hashOfConfig":"12232"},{"size":1826,"mtime":1786084511380,"results":"14640","hashOfConfig":"12232"},{"size":2570,"mtime":1786084511380,"results":"14641","hashOfConfig":"12232"},{"size":1205,"mtime":1786084511380,"results":"14642","hashOfConfig":"12232"},{"size":2260,"mtime":1786084511380,"results":"14643","hashOfConfig":"12232"},{"size":2302,"mtime":1786084511380,"results":"14644","hashOfConfig":"12232"},{"size":8974,"mtime":1786084511381,"results":"14645","hashOfConfig":"12232"},{"size":8213,"mtime":1786084511381,"results":"14646","hashOfConfig":"12232"},{"size":1819,"mtime":1786084511381,"results":"14647","hashOfConfig":"12232"},{"size":6088,"mtime":1786084511381,"results":"14648","hashOfConfig":"12232"},{"size":5551,"mtime":1786084511381,"results":"14649","hashOfConfig":"12232"},{"size":1726,"mtime":1786084511381,"results":"14650","hashOfConfig":"12232"},{"size":602,"mtime":1786084511382,"results":"14651","hashOfConfig":"12232"},{"size":859,"mtime":1786084511382,"results":"14652","hashOfConfig":"12232"},{"size":532,"mtime":1786084511382,"results":"14653","hashOfConfig":"12232"},{"size":822,"mtime":1786084511382,"results":"14654","hashOfConfig":"12232"},{"size":564,"mtime":1786084511382,"results":"14655","hashOfConfig":"12232"},{"size":704,"mtime":1786084511382,"results":"14656","hashOfConfig":"12232"},{"size":543,"mtime":1786084511382,"results":"14657","hashOfConfig":"12232"},{"size":4671,"mtime":1786084511382,"results":"14658","hashOfConfig":"12232"},{"size":2924,"mtime":1786084511382,"results":"14659","hashOfConfig":"12232"},{"size":4011,"mtime":1786084511383,"results":"14660","hashOfConfig":"12232"},{"size":3753,"mtime":1786084511383,"results":"14661","hashOfConfig":"12232"},{"size":2793,"mtime":1786084511383,"results":"14662","hashOfConfig":"12232"},{"size":2489,"mtime":1786084511383,"results":"14663","hashOfConfig":"12232"},{"size":1565,"mtime":1786084511383,"results":"14664","hashOfConfig":"12232"},{"size":3716,"mtime":1786084511383,"results":"14665","hashOfConfig":"12232"},{"size":2025,"mtime":1786084511383,"results":"14666","hashOfConfig":"12232"},{"size":2507,"mtime":1786084511383,"results":"14667","hashOfConfig":"12232"},{"size":3619,"mtime":1786084511383,"results":"14668","hashOfConfig":"12232"},{"size":2368,"mtime":1786084511383,"results":"14669","hashOfConfig":"12232"},{"size":1884,"mtime":1786084511384,"results":"14670","hashOfConfig":"12232"},{"size":3670,"mtime":1786084511384,"results":"14671","hashOfConfig":"12232"},{"size":11628,"mtime":1786084511384,"results":"14672","hashOfConfig":"12232"},{"size":2086,"mtime":1786084511384,"results":"14673","hashOfConfig":"12232"},{"size":1450,"mtime":1786084511384,"results":"14674","hashOfConfig":"12232"},{"size":7441,"mtime":1786084511384,"results":"14675","hashOfConfig":"12232"},{"size":2205,"mtime":1786084511384,"results":"14676","hashOfConfig":"12232"},{"size":3196,"mtime":1786084511385,"results":"14677","hashOfConfig":"12232"},{"size":1899,"mtime":1786084511385,"results":"14678","hashOfConfig":"12285"},{"size":3370,"mtime":1786084511385,"results":"14679","hashOfConfig":"12232"},{"size":3646,"mtime":1786084511385,"results":"14680","hashOfConfig":"12232"},{"size":2201,"mtime":1786084511385,"results":"14681","hashOfConfig":"12232"},{"size":5408,"mtime":1786084511385,"results":"14682","hashOfConfig":"12232"},{"size":1871,"mtime":1786084511385,"results":"14683","hashOfConfig":"12232"},{"size":1488,"mtime":1786084511385,"results":"14684","hashOfConfig":"12232"},{"size":1389,"mtime":1786084511385,"results":"14685","hashOfConfig":"12232"},{"size":9060,"mtime":1786084511386,"results":"14686","hashOfConfig":"12232"},{"size":1500,"mtime":1786084511386,"results":"14687","hashOfConfig":"12232"},{"size":2046,"mtime":1786084511386,"results":"14688","hashOfConfig":"12232"},{"size":1452,"mtime":1786084511386,"results":"14689","hashOfConfig":"12232"},{"size":1039,"mtime":1786084511386,"results":"14690","hashOfConfig":"12232"},{"size":1478,"mtime":1786084511386,"results":"14691","hashOfConfig":"12232"},{"size":6146,"mtime":1786084511386,"results":"14692","hashOfConfig":"12232"},{"size":4833,"mtime":1786084511387,"results":"14693","hashOfConfig":"12232"},{"size":5449,"mtime":1786084511387,"results":"14694","hashOfConfig":"12232"},{"size":3231,"mtime":1786084511387,"results":"14695","hashOfConfig":"12232"},{"size":4938,"mtime":1786084511387,"results":"14696","hashOfConfig":"12232"},{"size":2435,"mtime":1786084511387,"results":"14697","hashOfConfig":"12232"},{"size":7202,"mtime":1786084511387,"results":"14698","hashOfConfig":"12232"},{"size":5456,"mtime":1786084511387,"results":"14699","hashOfConfig":"12232"},{"size":5899,"mtime":1786084511387,"results":"14700","hashOfConfig":"12232"},{"size":5358,"mtime":1786084511388,"results":"14701","hashOfConfig":"12232"},{"size":2376,"mtime":1786084511388,"results":"14702","hashOfConfig":"12232"},{"size":11275,"mtime":1786084511388,"results":"14703","hashOfConfig":"12232"},{"size":1751,"mtime":1786084511388,"results":"14704","hashOfConfig":"12232"},{"size":9412,"mtime":1786084511388,"results":"14705","hashOfConfig":"12232"},{"size":3710,"mtime":1786084511388,"results":"14706","hashOfConfig":"12232"},{"size":1701,"mtime":1786084511388,"results":"14707","hashOfConfig":"12232"},{"size":638,"mtime":1786084511388,"results":"14708","hashOfConfig":"12232"},{"size":6955,"mtime":1786084511389,"results":"14709","hashOfConfig":"12232"},{"size":5358,"mtime":1786084511389,"results":"14710","hashOfConfig":"12232"},{"size":3602,"mtime":1786084511389,"results":"14711","hashOfConfig":"12232"},{"size":4312,"mtime":1786084511389,"results":"14712","hashOfConfig":"12232"},{"size":3203,"mtime":1786084511389,"results":"14713","hashOfConfig":"12232"},{"size":2305,"mtime":1786084511389,"results":"14714","hashOfConfig":"12232"},{"size":2621,"mtime":1786084511389,"results":"14715","hashOfConfig":"12232"},{"size":4705,"mtime":1786084511390,"results":"14716","hashOfConfig":"12232"},{"size":5045,"mtime":1786084511390,"results":"14717","hashOfConfig":"12232"},{"size":2305,"mtime":1786084511390,"results":"14718","hashOfConfig":"12232"},{"size":14799,"mtime":1786084511390,"results":"14719","hashOfConfig":"12232"},{"size":7381,"mtime":1786084511390,"results":"14720","hashOfConfig":"12232"},{"size":1965,"mtime":1786084511390,"results":"14721","hashOfConfig":"12232"},{"size":3687,"mtime":1786084511390,"results":"14722","hashOfConfig":"12232"},{"size":4467,"mtime":1786084511390,"results":"14723","hashOfConfig":"12232"},{"size":6023,"mtime":1786084511391,"results":"14724","hashOfConfig":"12232"},{"size":3208,"mtime":1786084511391,"results":"14725","hashOfConfig":"12232"},{"size":4990,"mtime":1786084511391,"results":"14726","hashOfConfig":"12232"},{"size":2438,"mtime":1786084511391,"results":"14727","hashOfConfig":"12232"},{"size":2833,"mtime":1786084511391,"results":"14728","hashOfConfig":"12232"},{"size":8599,"mtime":1786084511391,"results":"14729","hashOfConfig":"12232"},{"size":1454,"mtime":1786084511391,"results":"14730","hashOfConfig":"12232"},{"size":2907,"mtime":1786084511392,"results":"14731","hashOfConfig":"12232"},{"size":2012,"mtime":1786084511392,"results":"14732","hashOfConfig":"12232"},{"size":2144,"mtime":1786084511392,"results":"14733","hashOfConfig":"12232"},{"size":2200,"mtime":1786084511392,"results":"14734","hashOfConfig":"12232"},{"size":1213,"mtime":1786084511392,"results":"14735","hashOfConfig":"12232"},{"size":2790,"mtime":1786084511392,"results":"14736","hashOfConfig":"12232"},{"size":34625,"mtime":1786084511392,"results":"14737","hashOfConfig":"12232"},{"size":14923,"mtime":1786084511393,"results":"14738","hashOfConfig":"12232"},{"size":4514,"mtime":1786084511393,"results":"14739","hashOfConfig":"12232"},{"size":1132,"mtime":1786084511393,"results":"14740","hashOfConfig":"12232"},{"size":15307,"mtime":1786084511393,"results":"14741","hashOfConfig":"12232"},{"size":5648,"mtime":1786084511393,"results":"14742","hashOfConfig":"12232"},{"size":5289,"mtime":1786084511394,"results":"14743","hashOfConfig":"12232"},{"size":3058,"mtime":1786084511394,"results":"14744","hashOfConfig":"12232"},{"size":4139,"mtime":1786084511394,"results":"14745","hashOfConfig":"12232"},{"size":4503,"mtime":1786084511394,"results":"14746","hashOfConfig":"12232"},{"size":4224,"mtime":1786084511394,"results":"14747","hashOfConfig":"12232"},{"size":2146,"mtime":1786084511394,"results":"14748","hashOfConfig":"12232"},{"size":6251,"mtime":1786084511394,"results":"14749","hashOfConfig":"12232"},{"size":3805,"mtime":1786084511394,"results":"14750","hashOfConfig":"12232"},{"size":4635,"mtime":1786084511395,"results":"14751","hashOfConfig":"12232"},{"size":57297,"mtime":1786084511395,"results":"14752","hashOfConfig":"12232"},{"size":1813,"mtime":1786084511395,"results":"14753","hashOfConfig":"12232"},{"size":2485,"mtime":1786084511395,"results":"14754","hashOfConfig":"12232"},{"size":18722,"mtime":1786084511395,"results":"14755","hashOfConfig":"12232"},{"size":15142,"mtime":1786084511396,"results":"14756","hashOfConfig":"12232"},{"size":2713,"mtime":1786084511396,"results":"14757","hashOfConfig":"12232"},{"size":3042,"mtime":1786084511396,"results":"14758","hashOfConfig":"12232"},{"size":3649,"mtime":1786084511396,"results":"14759","hashOfConfig":"12232"},{"size":3975,"mtime":1786084511396,"results":"14760","hashOfConfig":"12232"},{"size":5339,"mtime":1786084511396,"results":"14761","hashOfConfig":"12232"},{"size":1227,"mtime":1786084511396,"results":"14762","hashOfConfig":"12232"},{"size":1886,"mtime":1786084511396,"results":"14763","hashOfConfig":"12232"},{"size":11490,"mtime":1786084511397,"results":"14764","hashOfConfig":"12232"},{"size":2395,"mtime":1786084511397,"results":"14765","hashOfConfig":"12232"},{"size":2821,"mtime":1786084511397,"results":"14766","hashOfConfig":"12232"},{"size":1806,"mtime":1786084511397,"results":"14767","hashOfConfig":"12232"},{"size":1437,"mtime":1786084511397,"results":"14768","hashOfConfig":"12232"},{"size":19553,"mtime":1786084511397,"results":"14769","hashOfConfig":"12232"},{"size":2949,"mtime":1786084511397,"results":"14770","hashOfConfig":"12232"},{"size":9040,"mtime":1786084511398,"results":"14771","hashOfConfig":"12232"},{"size":5277,"mtime":1786084511398,"results":"14772","hashOfConfig":"12232"},{"size":4204,"mtime":1786084511398,"results":"14773","hashOfConfig":"12232"},{"size":4501,"mtime":1786084511398,"results":"14774","hashOfConfig":"12232"},{"size":3739,"mtime":1786084511398,"results":"14775","hashOfConfig":"12232"},{"size":5792,"mtime":1786084511398,"results":"14776","hashOfConfig":"12232"},{"size":4452,"mtime":1786084511398,"results":"14777","hashOfConfig":"12232"},{"size":8790,"mtime":1786084511399,"results":"14778","hashOfConfig":"12232"},{"size":14055,"mtime":1786084511399,"results":"14779","hashOfConfig":"12232"},{"size":2839,"mtime":1786084511399,"results":"14780","hashOfConfig":"12232"},{"size":4543,"mtime":1786084511399,"results":"14781","hashOfConfig":"12232"},{"size":19232,"mtime":1786084511399,"results":"14782","hashOfConfig":"12232"},{"size":1764,"mtime":1786084511399,"results":"14783","hashOfConfig":"12232"},{"size":2007,"mtime":1786084511399,"results":"14784","hashOfConfig":"12232"},{"size":7258,"mtime":1786084511400,"results":"14785","hashOfConfig":"12232"},{"size":1743,"mtime":1786084511400,"results":"14786","hashOfConfig":"12232"},{"size":4224,"mtime":1786084511400,"results":"14787","hashOfConfig":"12232"},{"size":3692,"mtime":1786084511400,"results":"14788","hashOfConfig":"12232"},{"size":2959,"mtime":1786084511400,"results":"14789","hashOfConfig":"12232"},{"size":3818,"mtime":1786084511400,"results":"14790","hashOfConfig":"12232"},{"size":2828,"mtime":1786084511400,"results":"14791","hashOfConfig":"12232"},{"size":4595,"mtime":1786084511400,"results":"14792","hashOfConfig":"12232"},{"size":1803,"mtime":1786084511401,"results":"14793","hashOfConfig":"12232"},{"size":3773,"mtime":1786084511401,"results":"14794","hashOfConfig":"12232"},{"size":3666,"mtime":1786084511401,"results":"14795","hashOfConfig":"12232"},{"size":2602,"mtime":1786084511401,"results":"14796","hashOfConfig":"12232"},{"size":2849,"mtime":1786084511401,"results":"14797","hashOfConfig":"12232"},{"size":5418,"mtime":1786084511401,"results":"14798","hashOfConfig":"12232"},{"size":1011,"mtime":1786084511401,"results":"14799","hashOfConfig":"12232"},{"size":1321,"mtime":1786084511401,"results":"14800","hashOfConfig":"12232"},{"size":7164,"mtime":1786084511402,"results":"14801","hashOfConfig":"12232"},{"size":2024,"mtime":1786084511402,"results":"14802","hashOfConfig":"12232"},{"size":2420,"mtime":1786084511402,"results":"14803","hashOfConfig":"12232"},{"size":2728,"mtime":1786084511402,"results":"14804","hashOfConfig":"12232"},{"size":12693,"mtime":1786084511402,"results":"14805","hashOfConfig":"12232"},{"size":4859,"mtime":1786084511402,"results":"14806","hashOfConfig":"12232"},{"size":2185,"mtime":1786084511402,"results":"14807","hashOfConfig":"12232"},{"size":1588,"mtime":1786084511403,"results":"14808","hashOfConfig":"12232"},{"size":3346,"mtime":1786084511403,"results":"14809","hashOfConfig":"12232"},{"size":1053,"mtime":1786084511403,"results":"14810","hashOfConfig":"12232"},{"size":1097,"mtime":1786084511403,"results":"14811","hashOfConfig":"12232"},{"size":2853,"mtime":1786084511403,"results":"14812","hashOfConfig":"12232"},{"size":3552,"mtime":1786084511403,"results":"14813","hashOfConfig":"12232"},{"size":10064,"mtime":1786084511403,"results":"14814","hashOfConfig":"12232"},{"size":1057,"mtime":1786084511403,"results":"14815","hashOfConfig":"12232"},{"size":5430,"mtime":1786084511403,"results":"14816","hashOfConfig":"12232"},{"size":3303,"mtime":1786084511404,"results":"14817","hashOfConfig":"12232"},{"size":9912,"mtime":1786084511404,"results":"14818","hashOfConfig":"12232"},{"size":1433,"mtime":1786084511404,"results":"14819","hashOfConfig":"12232"},{"size":10522,"mtime":1786084511404,"results":"14820","hashOfConfig":"12232"},{"size":2149,"mtime":1786084511404,"results":"14821","hashOfConfig":"12232"},{"size":1376,"mtime":1786084511404,"results":"14822","hashOfConfig":"12232"},{"size":1971,"mtime":1786084511404,"results":"14823","hashOfConfig":"12232"},{"size":3466,"mtime":1786084511404,"results":"14824","hashOfConfig":"12232"},{"size":5473,"mtime":1786084511404,"results":"14825","hashOfConfig":"12232"},{"size":3236,"mtime":1786084511405,"results":"14826","hashOfConfig":"12232"},{"size":1805,"mtime":1786084511405,"results":"14827","hashOfConfig":"12232"},{"size":3431,"mtime":1786084511405,"results":"14828","hashOfConfig":"12232"},{"size":7275,"mtime":1786084511405,"results":"14829","hashOfConfig":"12232"},{"size":1198,"mtime":1786084511405,"results":"14830","hashOfConfig":"12232"},{"size":1440,"mtime":1786084511405,"results":"14831","hashOfConfig":"12232"},{"size":2619,"mtime":1786084511405,"results":"14832","hashOfConfig":"12232"},{"size":6629,"mtime":1786084511405,"results":"14833","hashOfConfig":"12232"},{"size":9550,"mtime":1786084511406,"results":"14834","hashOfConfig":"12232"},{"size":3038,"mtime":1786084511406,"results":"14835","hashOfConfig":"12232"},{"size":1595,"mtime":1786084511406,"results":"14836","hashOfConfig":"12232"},{"size":4304,"mtime":1786084511406,"results":"14837","hashOfConfig":"12232"},{"size":3578,"mtime":1786084511406,"results":"14838","hashOfConfig":"12232"},{"size":6596,"mtime":1786084511406,"results":"14839","hashOfConfig":"12232"},{"size":2552,"mtime":1786084511406,"results":"14840","hashOfConfig":"12232"},{"size":3565,"mtime":1786084511406,"results":"14841","hashOfConfig":"12232"},{"size":1860,"mtime":1786084511407,"results":"14842","hashOfConfig":"12232"},{"size":1245,"mtime":1786084511407,"results":"14843","hashOfConfig":"12232"},{"size":947,"mtime":1786084511407,"results":"14844","hashOfConfig":"12232"},{"size":3423,"mtime":1786084511407,"results":"14845","hashOfConfig":"12232"},{"size":2478,"mtime":1786084511407,"results":"14846","hashOfConfig":"12232"},{"size":28925,"mtime":1786084511407,"results":"14847","hashOfConfig":"12232"},{"size":14337,"mtime":1786084511408,"results":"14848","hashOfConfig":"12232"},{"size":14763,"mtime":1786084511408,"results":"14849","hashOfConfig":"12232"},{"size":4117,"mtime":1786084511408,"results":"14850","hashOfConfig":"12232"},{"size":8070,"mtime":1786084511408,"results":"14851","hashOfConfig":"12232"},{"size":1909,"mtime":1786084511408,"results":"14852","hashOfConfig":"12232"},{"size":5560,"mtime":1786084511408,"results":"14853","hashOfConfig":"12232"},{"size":7088,"mtime":1786084511408,"results":"14854","hashOfConfig":"12232"},{"size":7971,"mtime":1786084511409,"results":"14855","hashOfConfig":"12232"},{"size":2856,"mtime":1786084511409,"results":"14856","hashOfConfig":"12232"},{"size":6191,"mtime":1786084511409,"results":"14857","hashOfConfig":"12232"},{"size":18123,"mtime":1786084511409,"results":"14858","hashOfConfig":"12232"},{"size":3671,"mtime":1786084511409,"results":"14859","hashOfConfig":"12232"},{"size":11755,"mtime":1786084511409,"results":"14860","hashOfConfig":"12232"},{"size":7170,"mtime":1786084511410,"results":"14861","hashOfConfig":"12232"},{"size":16805,"mtime":1786084511410,"results":"14862","hashOfConfig":"12232"},{"size":7854,"mtime":1786084511410,"results":"14863","hashOfConfig":"12232"},{"size":4828,"mtime":1786084511410,"results":"14864","hashOfConfig":"12232"},{"size":7132,"mtime":1786084511410,"results":"14865","hashOfConfig":"12232"},{"size":2276,"mtime":1786084511410,"results":"14866","hashOfConfig":"12232"},{"size":9833,"mtime":1786084511410,"results":"14867","hashOfConfig":"12232"},{"size":12013,"mtime":1786084511411,"results":"14868","hashOfConfig":"8189"},{"size":2844,"mtime":1786084511411,"results":"14869","hashOfConfig":"12232"},{"size":1066,"mtime":1786084511411,"results":"14870","hashOfConfig":"12232"},{"size":7721,"mtime":1786084511411,"results":"14871","hashOfConfig":"12232"},{"size":1371,"mtime":1786084511411,"results":"14872","hashOfConfig":"12232"},{"size":1821,"mtime":1786084511411,"results":"14873","hashOfConfig":"12232"},{"size":1453,"mtime":1786084511411,"results":"14874","hashOfConfig":"12232"},{"size":1218,"mtime":1786084511411,"results":"14875","hashOfConfig":"12232"},{"size":2402,"mtime":1786084511412,"results":"14876","hashOfConfig":"12232"},{"size":1986,"mtime":1786084511412,"results":"14877","hashOfConfig":"12232"},{"size":3766,"mtime":1786084511412,"results":"14878","hashOfConfig":"12232"},{"size":4211,"mtime":1786084511412,"results":"14879","hashOfConfig":"12232"},{"size":5384,"mtime":1786084511412,"results":"14880","hashOfConfig":"12232"},{"size":4205,"mtime":1786084511412,"results":"14881","hashOfConfig":"12232"},{"size":2557,"mtime":1786084511412,"results":"14882","hashOfConfig":"12232"},{"size":2386,"mtime":1786084511412,"results":"14883","hashOfConfig":"12232"},{"size":8535,"mtime":1786084511413,"results":"14884","hashOfConfig":"12232"},{"size":2441,"mtime":1786084511413,"results":"14885","hashOfConfig":"12232"},{"size":2505,"mtime":1786084511413,"results":"14886","hashOfConfig":"12232"},{"size":2926,"mtime":1786084511413,"results":"14887","hashOfConfig":"12232"},{"size":4174,"mtime":1786084511413,"results":"14888","hashOfConfig":"12232"},{"size":7486,"mtime":1786084511413,"results":"14889","hashOfConfig":"12232"},{"size":6829,"mtime":1786084511413,"results":"14890","hashOfConfig":"12232"},{"size":3143,"mtime":1786084511413,"results":"14891","hashOfConfig":"12232"},{"size":2992,"mtime":1786084511414,"results":"14892","hashOfConfig":"12232"},{"size":1772,"mtime":1786084511414,"results":"14893","hashOfConfig":"12232"},{"size":2358,"mtime":1786084511414,"results":"14894","hashOfConfig":"12232"},{"size":4464,"mtime":1786084511414,"results":"14895","hashOfConfig":"12232"},{"size":1981,"mtime":1786084511414,"results":"14896","hashOfConfig":"12232"},{"size":2754,"mtime":1786084511414,"results":"14897","hashOfConfig":"12232"},{"size":3312,"mtime":1786084511414,"results":"14898","hashOfConfig":"12232"},{"size":4477,"mtime":1786084511414,"results":"14899","hashOfConfig":"12232"},{"size":4348,"mtime":1786084511415,"results":"14900","hashOfConfig":"12232"},{"size":557,"mtime":1786084511415,"results":"14901","hashOfConfig":"12232"},{"size":4703,"mtime":1786084511415,"results":"14902","hashOfConfig":"12232"},{"size":1625,"mtime":1786084511415,"results":"14903","hashOfConfig":"12232"},{"size":5420,"mtime":1786084511415,"results":"14904","hashOfConfig":"12232"},{"size":3484,"mtime":1786084511415,"results":"14905","hashOfConfig":"12232"},{"size":25849,"mtime":1786084511415,"results":"14906","hashOfConfig":"12232"},{"size":1161,"mtime":1786084511416,"results":"14907","hashOfConfig":"12232"},{"size":2454,"mtime":1786084511416,"results":"14908","hashOfConfig":"12232"},{"size":7045,"mtime":1786084511416,"results":"14909","hashOfConfig":"12232"},{"size":7829,"mtime":1786084511416,"results":"14910","hashOfConfig":"12232"},{"size":1287,"mtime":1786084511416,"results":"14911","hashOfConfig":"12232"},{"size":14506,"mtime":1786084511416,"results":"14912","hashOfConfig":"12232"},{"size":6805,"mtime":1786084511416,"results":"14913","hashOfConfig":"12232"},{"size":9248,"mtime":1786084511416,"results":"14914","hashOfConfig":"12232"},{"size":14281,"mtime":1786084511417,"results":"14915","hashOfConfig":"12232"},{"size":1843,"mtime":1786084511417,"results":"14916","hashOfConfig":"12232"},{"size":7969,"mtime":1786084511417,"results":"14917","hashOfConfig":"12232"},{"size":3999,"mtime":1786084511417,"results":"14918","hashOfConfig":"12232"},{"size":2103,"mtime":1786084511417,"results":"14919","hashOfConfig":"12232"},{"size":5256,"mtime":1786084511417,"results":"14920","hashOfConfig":"12232"},{"size":8613,"mtime":1786084511417,"results":"14921","hashOfConfig":"12232"},{"size":3522,"mtime":1786084511418,"results":"14922","hashOfConfig":"12232"},{"size":7858,"mtime":1786084511418,"results":"14923","hashOfConfig":"12232"},{"size":13384,"mtime":1786084511418,"results":"14924","hashOfConfig":"12232"},{"size":3509,"mtime":1786084511418,"results":"14925","hashOfConfig":"12232"},{"size":4816,"mtime":1786084511418,"results":"14926","hashOfConfig":"12232"},{"size":4963,"mtime":1786084511418,"results":"14927","hashOfConfig":"12232"},{"size":7218,"mtime":1786084511418,"results":"14928","hashOfConfig":"12232"},{"size":6603,"mtime":1786084511419,"results":"14929","hashOfConfig":"12232"},{"size":2834,"mtime":1786084511419,"results":"14930","hashOfConfig":"12232"},{"size":6478,"mtime":1786084511419,"results":"14931","hashOfConfig":"12232"},{"size":2058,"mtime":1786084511419,"results":"14932","hashOfConfig":"12232"},{"size":6898,"mtime":1786084511419,"results":"14933","hashOfConfig":"12232"},{"size":6546,"mtime":1786084511419,"results":"14934","hashOfConfig":"12232"},{"size":1951,"mtime":1786084511419,"results":"14935","hashOfConfig":"12232"},{"size":7147,"mtime":1786084511419,"results":"14936","hashOfConfig":"12232"},{"size":1849,"mtime":1786084511419,"results":"14937","hashOfConfig":"12232"},{"size":6722,"mtime":1786084511420,"results":"14938","hashOfConfig":"12232"},{"size":2294,"mtime":1786084511420,"results":"14939","hashOfConfig":"12232"},{"size":2864,"mtime":1786084511420,"results":"14940","hashOfConfig":"12232"},{"size":10387,"mtime":1786084511420,"results":"14941","hashOfConfig":"12232"},{"size":1420,"mtime":1786084511420,"results":"14942","hashOfConfig":"12232"},{"size":4640,"mtime":1786084511420,"results":"14943","hashOfConfig":"12232"},{"size":1904,"mtime":1786084511420,"results":"14944","hashOfConfig":"12232"},{"size":2887,"mtime":1786084511420,"results":"14945","hashOfConfig":"12232"},{"size":6065,"mtime":1786084511420,"results":"14946","hashOfConfig":"12232"},{"size":4091,"mtime":1786084511420,"results":"14947","hashOfConfig":"12232"},{"size":6110,"mtime":1786084511421,"results":"14948","hashOfConfig":"12232"},{"size":1517,"mtime":1786084511421,"results":"14949","hashOfConfig":"12232"},{"size":1603,"mtime":1786084511421,"results":"14950","hashOfConfig":"12232"},{"size":1903,"mtime":1786084511421,"results":"14951","hashOfConfig":"12232"},{"size":1612,"mtime":1786084511421,"results":"14952","hashOfConfig":"12232"},{"size":1837,"mtime":1786084511421,"results":"14953","hashOfConfig":"12232"},{"size":5762,"mtime":1786084511421,"results":"14954","hashOfConfig":"12232"},{"size":42635,"mtime":1786084511421,"results":"14955","hashOfConfig":"12232"},{"size":7857,"mtime":1786084511422,"results":"14956","hashOfConfig":"12232"},{"size":2166,"mtime":1786084511422,"results":"14957","hashOfConfig":"12232"},{"size":3723,"mtime":1786084511422,"results":"14958","hashOfConfig":"12232"},{"size":7151,"mtime":1786084511422,"results":"14959","hashOfConfig":"12232"},{"size":6987,"mtime":1786084511422,"results":"14960","hashOfConfig":"12232"},{"size":8946,"mtime":1786084511422,"results":"14961","hashOfConfig":"12232"},{"size":3515,"mtime":1786084511422,"results":"14962","hashOfConfig":"12232"},{"size":13487,"mtime":1786084511422,"results":"14963","hashOfConfig":"12232"},{"size":14667,"mtime":1786084511423,"results":"14964","hashOfConfig":"12232"},{"size":19943,"mtime":1786084511423,"results":"14965","hashOfConfig":"12232"},{"size":27726,"mtime":1786084511423,"results":"14966","hashOfConfig":"12232"},{"size":3097,"mtime":1786084511423,"results":"14967","hashOfConfig":"12232"},{"size":1770,"mtime":1786084511423,"results":"14968","hashOfConfig":"12232"},{"size":1759,"mtime":1786084511423,"results":"14969","hashOfConfig":"12232"},{"size":3383,"mtime":1786084511423,"results":"14970","hashOfConfig":"12232"},{"size":9622,"mtime":1786084511424,"results":"14971","hashOfConfig":"12232"},{"size":3745,"mtime":1786084511424,"results":"14972","hashOfConfig":"12232"},{"size":10733,"mtime":1786084511424,"results":"14973","hashOfConfig":"12232"},{"size":6963,"mtime":1786084511424,"results":"14974","hashOfConfig":"12232"},{"size":2763,"mtime":1786084511425,"results":"14975","hashOfConfig":"12232"},{"size":1602,"mtime":1786084511425,"results":"14976","hashOfConfig":"12232"},{"size":8307,"mtime":1786084511425,"results":"14977","hashOfConfig":"12232"},{"size":2803,"mtime":1786084511425,"results":"14978","hashOfConfig":"12232"},{"size":3689,"mtime":1786084511425,"results":"14979","hashOfConfig":"12232"},{"size":4073,"mtime":1786084511425,"results":"14980","hashOfConfig":"12232"},{"size":1238,"mtime":1786084511425,"results":"14981","hashOfConfig":"12232"},{"size":2915,"mtime":1786084511425,"results":"14982","hashOfConfig":"12232"},{"size":16415,"mtime":1786084511426,"results":"14983","hashOfConfig":"12232"},{"size":1595,"mtime":1786084511426,"results":"14984","hashOfConfig":"12232"},{"size":21249,"mtime":1786084511426,"results":"14985","hashOfConfig":"12232"},{"size":2489,"mtime":1786084511426,"results":"14986","hashOfConfig":"12232"},{"size":2804,"mtime":1786084511426,"results":"14987","hashOfConfig":"12232"},{"size":6458,"mtime":1786084511426,"results":"14988","hashOfConfig":"12232"},{"size":6203,"mtime":1786084511427,"results":"14989","hashOfConfig":"12232"},{"size":2288,"mtime":1786084511427,"results":"14990","hashOfConfig":"12232"},{"size":8844,"mtime":1786084511427,"results":"14991","hashOfConfig":"12232"},{"size":1678,"mtime":1786084511427,"results":"14992","hashOfConfig":"12232"},{"size":4906,"mtime":1786084511427,"results":"14993","hashOfConfig":"12232"},{"size":5624,"mtime":1786084511427,"results":"14994","hashOfConfig":"12232"},{"size":1835,"mtime":1786084511427,"results":"14995","hashOfConfig":"12232"},{"size":6044,"mtime":1786084511427,"results":"14996","hashOfConfig":"12232"},{"size":5946,"mtime":1786084511427,"results":"14997","hashOfConfig":"12232"},{"size":3058,"mtime":1786084511428,"results":"14998","hashOfConfig":"12232"},{"size":2057,"mtime":1786084511428,"results":"14999","hashOfConfig":"12232"},{"size":5051,"mtime":1786084511428,"results":"15000","hashOfConfig":"12232"},{"size":3061,"mtime":1786084511428,"results":"15001","hashOfConfig":"12232"},{"size":1698,"mtime":1786084511428,"results":"15002","hashOfConfig":"12232"},{"size":4244,"mtime":1786084511428,"results":"15003","hashOfConfig":"12232"},{"size":13598,"mtime":1786084511428,"results":"15004","hashOfConfig":"12232"},{"size":8125,"mtime":1786084511428,"results":"15005","hashOfConfig":"12232"},{"size":14102,"mtime":1786084511429,"results":"15006","hashOfConfig":"12232"},{"size":5896,"mtime":1786084511429,"results":"15007","hashOfConfig":"12232"},{"size":12415,"mtime":1786084511429,"results":"15008","hashOfConfig":"12232"},{"size":3018,"mtime":1786084511429,"results":"15009","hashOfConfig":"12232"},{"size":3415,"mtime":1786084511429,"results":"15010","hashOfConfig":"12232"},{"size":2639,"mtime":1786084511429,"results":"15011","hashOfConfig":"12232"},{"size":1617,"mtime":1786084511429,"results":"15012","hashOfConfig":"12232"},{"size":1652,"mtime":1786084511430,"results":"15013","hashOfConfig":"12232"},{"size":3276,"mtime":1786084511430,"results":"15014","hashOfConfig":"12232"},{"size":2579,"mtime":1786084511430,"results":"15015","hashOfConfig":"12232"},{"size":3350,"mtime":1786084511430,"results":"15016","hashOfConfig":"12232"},{"size":2252,"mtime":1786084511430,"results":"15017","hashOfConfig":"12232"},{"size":2765,"mtime":1786084511430,"results":"15018","hashOfConfig":"12232"},{"size":3709,"mtime":1786084511430,"results":"15019","hashOfConfig":"12232"},{"size":5218,"mtime":1786084511430,"results":"15020","hashOfConfig":"12232"},{"size":819,"mtime":1786084511430,"results":"15021","hashOfConfig":"12232"},{"size":8063,"mtime":1786084511431,"results":"15022","hashOfConfig":"12232"},{"size":1687,"mtime":1786084511431,"results":"15023","hashOfConfig":"12232"},{"size":2390,"mtime":1786084511431,"results":"15024","hashOfConfig":"12232"},{"size":2423,"mtime":1786084511431,"results":"15025","hashOfConfig":"12232"},{"size":1203,"mtime":1786084511431,"results":"15026","hashOfConfig":"12232"},{"size":2021,"mtime":1786084511431,"results":"15027","hashOfConfig":"12232"},{"size":3708,"mtime":1786084511431,"results":"15028","hashOfConfig":"12232"},{"size":4530,"mtime":1786084511431,"results":"15029","hashOfConfig":"12232"},{"size":2788,"mtime":1786084511431,"results":"15030","hashOfConfig":"12232"},{"size":8636,"mtime":1786084511432,"results":"15031","hashOfConfig":"12232"},{"size":5067,"mtime":1786084511432,"results":"15032","hashOfConfig":"12232"},{"size":4906,"mtime":1786084511432,"results":"15033","hashOfConfig":"12232"},{"size":1553,"mtime":1786084511432,"results":"15034","hashOfConfig":"12232"},{"size":3284,"mtime":1786084511432,"results":"15035","hashOfConfig":"12232"},{"size":4860,"mtime":1786084511432,"results":"15036","hashOfConfig":"12232"},{"size":1060,"mtime":1786084511432,"results":"15037","hashOfConfig":"12232"},{"size":3002,"mtime":1786084511433,"results":"15038","hashOfConfig":"12232"},{"size":10717,"mtime":1786084511433,"results":"15039","hashOfConfig":"12232"},{"size":2682,"mtime":1786084511433,"results":"15040","hashOfConfig":"12232"},{"size":2824,"mtime":1786084511433,"results":"15041","hashOfConfig":"12232"},{"size":2901,"mtime":1786084511433,"results":"15042","hashOfConfig":"12232"},{"size":4174,"mtime":1786084511433,"results":"15043","hashOfConfig":"12232"},{"size":3070,"mtime":1786084511433,"results":"15044","hashOfConfig":"12232"},{"size":742,"mtime":1786084511433,"results":"15045","hashOfConfig":"12232"},{"size":6630,"mtime":1786084511434,"results":"15046","hashOfConfig":"12232"},{"size":2872,"mtime":1786084511434,"results":"15047","hashOfConfig":"12232"},{"size":4266,"mtime":1786084511434,"results":"15048","hashOfConfig":"12232"},{"size":2120,"mtime":1786084511434,"results":"15049","hashOfConfig":"12232"},{"size":636,"mtime":1786084511434,"results":"15050","hashOfConfig":"12232"},{"size":2538,"mtime":1786084511434,"results":"15051","hashOfConfig":"12232"},{"size":7065,"mtime":1786084511434,"results":"15052","hashOfConfig":"12232"},{"size":2960,"mtime":1786084511434,"results":"15053","hashOfConfig":"12232"},{"size":4126,"mtime":1786084511435,"results":"15054","hashOfConfig":"12232"},{"size":4699,"mtime":1786084511435,"results":"15055","hashOfConfig":"12232"},{"size":2944,"mtime":1786084511435,"results":"15056","hashOfConfig":"12232"},{"size":4787,"mtime":1786084511435,"results":"15057","hashOfConfig":"12232"},{"size":6032,"mtime":1786084511435,"results":"15058","hashOfConfig":"12232"},{"size":2039,"mtime":1786084511435,"results":"15059","hashOfConfig":"12232"},{"size":4913,"mtime":1786084511435,"results":"15060","hashOfConfig":"12232"},{"size":3812,"mtime":1786084511435,"results":"15061","hashOfConfig":"12232"},{"size":7528,"mtime":1786084511436,"results":"15062","hashOfConfig":"12232"},{"size":2397,"mtime":1786084511436,"results":"15063","hashOfConfig":"12232"},{"size":1225,"mtime":1786084511436,"results":"15064","hashOfConfig":"12232"},{"size":944,"mtime":1786084511436,"results":"15065","hashOfConfig":"12232"},{"size":1318,"mtime":1786084511436,"results":"15066","hashOfConfig":"12232"},{"size":3258,"mtime":1786084511436,"results":"15067","hashOfConfig":"12232"},{"size":2546,"mtime":1786084511436,"results":"15068","hashOfConfig":"12232"},{"size":3103,"mtime":1786084511436,"results":"15069","hashOfConfig":"12232"},{"size":3612,"mtime":1786084511436,"results":"15070","hashOfConfig":"12232"},{"size":4007,"mtime":1786084511436,"results":"15071","hashOfConfig":"12232"},{"size":5261,"mtime":1786084511437,"results":"15072","hashOfConfig":"12232"},{"size":4155,"mtime":1786084511437,"results":"15073","hashOfConfig":"12232"},{"size":7520,"mtime":1786084529049,"results":"15074","hashOfConfig":"12232"},{"size":13128,"mtime":1786084511437,"results":"15075","hashOfConfig":"12232"},{"size":3669,"mtime":1786084511437,"results":"15076","hashOfConfig":"12232"},{"size":4638,"mtime":1786084511437,"results":"15077","hashOfConfig":"12232"},{"size":884,"mtime":1786084511437,"results":"15078","hashOfConfig":"12232"},{"size":14448,"mtime":1786084511437,"results":"15079","hashOfConfig":"12232"},{"size":2639,"mtime":1786084511438,"results":"15080","hashOfConfig":"12232"},{"size":5238,"mtime":1786084511438,"results":"15081","hashOfConfig":"12232"},{"size":3915,"mtime":1786084511438,"results":"15082","hashOfConfig":"12232"},{"size":10275,"mtime":1786084511438,"results":"15083","hashOfConfig":"12232"},{"size":5402,"mtime":1786084511438,"results":"15084","hashOfConfig":"12232"},{"size":4932,"mtime":1786084511438,"results":"15085","hashOfConfig":"12232"},{"size":21649,"mtime":1786084511439,"results":"15086","hashOfConfig":"12232"},{"size":7250,"mtime":1786084511439,"results":"15087","hashOfConfig":"12232"},{"size":3949,"mtime":1786084511439,"results":"15088","hashOfConfig":"12232"},{"size":15649,"mtime":1786084511439,"results":"15089","hashOfConfig":"12232"},{"size":6312,"mtime":1786084511439,"results":"15090","hashOfConfig":"12232"},{"size":62729,"mtime":1786086084025,"results":"15091","hashOfConfig":"12232"},{"size":2779,"mtime":1786084511439,"results":"15092","hashOfConfig":"12232"},{"size":4559,"mtime":1786084511439,"results":"15093","hashOfConfig":"12232"},{"size":5934,"mtime":1786084511440,"results":"15094","hashOfConfig":"12232"},{"size":1758,"mtime":1786084511440,"results":"15095","hashOfConfig":"12232"},{"size":9373,"mtime":1786084511440,"results":"15096","hashOfConfig":"12232"},{"size":2548,"mtime":1786084511440,"results":"15097","hashOfConfig":"12232"},{"size":11946,"mtime":1786084511440,"results":"15098","hashOfConfig":"12232"},{"size":2946,"mtime":1786084511440,"results":"15099","hashOfConfig":"12232"},{"size":8705,"mtime":1786084511440,"results":"15100","hashOfConfig":"12232"},{"size":4586,"mtime":1786084511440,"results":"15101","hashOfConfig":"12232"},{"size":1611,"mtime":1786084511441,"results":"15102","hashOfConfig":"12232"},{"size":10567,"mtime":1786084511441,"results":"15103","hashOfConfig":"12232"},{"size":11114,"mtime":1786084511441,"results":"15104","hashOfConfig":"12232"},{"size":1283,"mtime":1786084511441,"results":"15105","hashOfConfig":"12232"},{"size":4323,"mtime":1786084511441,"results":"15106","hashOfConfig":"12232"},{"size":6284,"mtime":1786084511441,"results":"15107","hashOfConfig":"12232"},{"size":680,"mtime":1786084511441,"results":"15108","hashOfConfig":"12232"},{"size":930,"mtime":1786084511441,"results":"15109","hashOfConfig":"12232"},{"size":2403,"mtime":1786084511442,"results":"15110","hashOfConfig":"12232"},{"size":2867,"mtime":1786084511442,"results":"15111","hashOfConfig":"12232"},{"size":2517,"mtime":1786084511442,"results":"15112","hashOfConfig":"12232"},{"size":1810,"mtime":1786084511442,"results":"15113","hashOfConfig":"12232"},{"size":3380,"mtime":1786084511442,"results":"15114","hashOfConfig":"12232"},{"size":1347,"mtime":1786084511442,"results":"15115","hashOfConfig":"12232"},{"size":2202,"mtime":1786084511442,"results":"15116","hashOfConfig":"12232"},{"size":1255,"mtime":1786084511442,"results":"15117","hashOfConfig":"12232"},{"size":2800,"mtime":1786084511442,"results":"15118","hashOfConfig":"12232"},{"size":4890,"mtime":1786084511443,"results":"15119","hashOfConfig":"12232"},{"size":2258,"mtime":1786084511443,"results":"15120","hashOfConfig":"12232"},{"size":6373,"mtime":1786084511443,"results":"15121","hashOfConfig":"12232"},{"size":16702,"mtime":1786084511443,"results":"15122","hashOfConfig":"12232"},{"size":3985,"mtime":1786084511443,"results":"15123","hashOfConfig":"12232"},{"size":859,"mtime":1786084511443,"results":"15124","hashOfConfig":"12232"},{"size":1871,"mtime":1786084511443,"results":"15125","hashOfConfig":"12232"},{"size":3760,"mtime":1786084511444,"results":"15126","hashOfConfig":"12232"},{"size":7280,"mtime":1786084511444,"results":"15127","hashOfConfig":"12232"},{"size":784,"mtime":1786084511444,"results":"15128","hashOfConfig":"12232"},{"size":3232,"mtime":1786084511444,"results":"15129","hashOfConfig":"12232"},{"size":4989,"mtime":1786084511444,"results":"15130","hashOfConfig":"12232"},{"size":1369,"mtime":1786084511444,"results":"15131","hashOfConfig":"12232"},{"size":2912,"mtime":1786084511444,"results":"15132","hashOfConfig":"12232"},{"size":9331,"mtime":1786084511445,"results":"15133","hashOfConfig":"12232"},{"size":6723,"mtime":1786084511445,"results":"15134","hashOfConfig":"12232"},{"size":1476,"mtime":1786084511445,"results":"15135","hashOfConfig":"12232"},{"size":1153,"mtime":1786084511445,"results":"15136","hashOfConfig":"12232"},{"size":973,"mtime":1786084511445,"results":"15137","hashOfConfig":"12232"},{"size":3515,"mtime":1786084511445,"results":"15138","hashOfConfig":"12232"},{"size":7795,"mtime":1786084511445,"results":"15139","hashOfConfig":"12232"},{"size":2332,"mtime":1786084511446,"results":"15140","hashOfConfig":"12232"},{"size":12393,"mtime":1786084511446,"results":"15141","hashOfConfig":"12232"},{"size":2449,"mtime":1786084511446,"results":"15142","hashOfConfig":"12232"},{"size":7909,"mtime":1786084511446,"results":"15143","hashOfConfig":"12232"},{"size":3438,"mtime":1786084511446,"results":"15144","hashOfConfig":"12232"},{"size":3785,"mtime":1786084511446,"results":"15145","hashOfConfig":"12232"},{"size":111240,"mtime":1786084511447,"results":"15146","hashOfConfig":"12232"},{"size":2281,"mtime":1786084511447,"results":"15147","hashOfConfig":"12232"},{"size":1904,"mtime":1786084511447,"results":"15148","hashOfConfig":"12232"},{"size":4144,"mtime":1786084511447,"results":"15149","hashOfConfig":"12232"},{"size":2922,"mtime":1786084511448,"results":"15150","hashOfConfig":"12232"},{"size":603,"mtime":1786084511448,"results":"15151","hashOfConfig":"12232"},{"size":14488,"mtime":1786084511448,"results":"15152","hashOfConfig":"12232"},{"size":4159,"mtime":1786084511448,"results":"15153","hashOfConfig":"12232"},{"size":3520,"mtime":1786084511448,"results":"15154","hashOfConfig":"12232"},{"size":6069,"mtime":1786084511448,"results":"15155","hashOfConfig":"12232"},{"size":4840,"mtime":1786084511448,"results":"15156","hashOfConfig":"12232"},{"size":5188,"mtime":1786084511449,"results":"15157","hashOfConfig":"12232"},{"size":6428,"mtime":1786084511449,"results":"15158","hashOfConfig":"12232"},{"size":3509,"mtime":1786084511449,"results":"15159","hashOfConfig":"12232"},{"size":9040,"mtime":1786084511449,"results":"15160","hashOfConfig":"12232"},{"size":42111,"mtime":1786084511450,"results":"15161","hashOfConfig":"12232"},{"size":13081,"mtime":1786084511450,"results":"15162","hashOfConfig":"12232"},{"size":1234,"mtime":1786084511450,"results":"15163","hashOfConfig":"12232"},{"size":10220,"mtime":1786084511450,"results":"15164","hashOfConfig":"12232"},{"size":8148,"mtime":1786084511450,"results":"15165","hashOfConfig":"12232"},{"size":5217,"mtime":1786084511450,"results":"15166","hashOfConfig":"12232"},{"size":2219,"mtime":1786084511451,"results":"15167","hashOfConfig":"12232"},{"size":3794,"mtime":1786084511451,"results":"15168","hashOfConfig":"12232"},{"size":4553,"mtime":1786084511451,"results":"15169","hashOfConfig":"12232"},{"size":2973,"mtime":1786084511451,"results":"15170","hashOfConfig":"12232"},{"size":8086,"mtime":1786084511451,"results":"15171","hashOfConfig":"12232"},{"size":13541,"mtime":1786084511451,"results":"15172","hashOfConfig":"12232"},{"size":989,"mtime":1786084511451,"results":"15173","hashOfConfig":"12232"},{"size":6524,"mtime":1786084511452,"results":"15174","hashOfConfig":"12232"},{"size":1780,"mtime":1786084511452,"results":"15175","hashOfConfig":"12232"},{"size":2577,"mtime":1786084511452,"results":"15176","hashOfConfig":"12232"},{"size":8257,"mtime":1786084511452,"results":"15177","hashOfConfig":"12232"},{"size":1187,"mtime":1786084511452,"results":"15178","hashOfConfig":"12232"},{"size":1753,"mtime":1786084511452,"results":"15179","hashOfConfig":"12232"},{"size":2906,"mtime":1786084511452,"results":"15180","hashOfConfig":"12232"},{"size":861,"mtime":1786084511452,"results":"15181","hashOfConfig":"12232"},{"size":2696,"mtime":1786084511452,"results":"15182","hashOfConfig":"12232"},{"size":1130,"mtime":1786084511453,"results":"15183","hashOfConfig":"12232"},{"size":1271,"mtime":1786084511453,"results":"15184","hashOfConfig":"12232"},{"size":7564,"mtime":1786084511453,"results":"15185","hashOfConfig":"12232"},{"size":6976,"mtime":1786084511453,"results":"15186","hashOfConfig":"12232"},{"size":3646,"mtime":1786084511453,"results":"15187","hashOfConfig":"12232"},{"size":1179,"mtime":1786084511453,"results":"15188","hashOfConfig":"12232"},{"size":2648,"mtime":1786084511453,"results":"15189","hashOfConfig":"12232"},{"size":1408,"mtime":1786084511453,"results":"15190","hashOfConfig":"12232"},{"size":3176,"mtime":1786084511454,"results":"15191","hashOfConfig":"12232"},{"size":2421,"mtime":1786084511454,"results":"15192","hashOfConfig":"12232"},{"size":25839,"mtime":1786084511454,"results":"15193","hashOfConfig":"12232"},{"size":1217,"mtime":1786084511454,"results":"15194","hashOfConfig":"12232"},{"size":3649,"mtime":1786084511454,"results":"15195","hashOfConfig":"12232"},{"size":8814,"mtime":1786084511454,"results":"15196","hashOfConfig":"12232"},{"size":4604,"mtime":1786084511455,"results":"15197","hashOfConfig":"12232"},{"size":7909,"mtime":1786084511455,"results":"15198","hashOfConfig":"12232"},{"size":6328,"mtime":1786084511455,"results":"15199","hashOfConfig":"12232"},{"size":6739,"mtime":1786084511455,"results":"15200","hashOfConfig":"12232"},{"size":13522,"mtime":1786084511455,"results":"15201","hashOfConfig":"12232"},{"size":3247,"mtime":1786084511455,"results":"15202","hashOfConfig":"12232"},{"size":20643,"mtime":1786084511455,"results":"15203","hashOfConfig":"12232"},{"size":3361,"mtime":1786084511456,"results":"15204","hashOfConfig":"12232"},{"size":1608,"mtime":1786084511456,"results":"15205","hashOfConfig":"12232"},{"size":3471,"mtime":1786084511456,"results":"15206","hashOfConfig":"12232"},{"size":5654,"mtime":1786084511456,"results":"15207","hashOfConfig":"12232"},{"size":14701,"mtime":1786084511456,"results":"15208","hashOfConfig":"12232"},{"size":1252,"mtime":1786084511456,"results":"15209","hashOfConfig":"12232"},{"size":1324,"mtime":1786084511456,"results":"15210","hashOfConfig":"12232"},{"size":2580,"mtime":1786084511456,"results":"15211","hashOfConfig":"12232"},{"size":3224,"mtime":1786084511457,"results":"15212","hashOfConfig":"12232"},{"size":1863,"mtime":1786084511457,"results":"15213","hashOfConfig":"12232"},{"size":1908,"mtime":1786084511457,"results":"15214","hashOfConfig":"12232"},{"size":3852,"mtime":1786084511457,"results":"15215","hashOfConfig":"12232"},{"size":975,"mtime":1786084511457,"results":"15216","hashOfConfig":"12232"},{"size":8029,"mtime":1786084511457,"results":"15217","hashOfConfig":"12232"},{"size":1038,"mtime":1786084511457,"results":"15218","hashOfConfig":"12232"},{"size":3782,"mtime":1786084511457,"results":"15219","hashOfConfig":"12232"},{"size":3188,"mtime":1786084511457,"results":"15220","hashOfConfig":"12232"},{"size":10950,"mtime":1786084511458,"results":"15221","hashOfConfig":"12232"},{"size":9141,"mtime":1786084511458,"results":"15222","hashOfConfig":"12232"},{"size":3089,"mtime":1786084511458,"results":"15223","hashOfConfig":"12232"},{"size":2087,"mtime":1786084511458,"results":"15224","hashOfConfig":"12232"},{"size":5146,"mtime":1786084511458,"results":"15225","hashOfConfig":"12232"},{"size":1264,"mtime":1786084511458,"results":"15226","hashOfConfig":"12232"},{"size":1084,"mtime":1786084511458,"results":"15227","hashOfConfig":"12232"},{"size":3191,"mtime":1786084511459,"results":"15228","hashOfConfig":"12232"},{"size":5393,"mtime":1786084511459,"results":"15229","hashOfConfig":"12232"},{"size":20738,"mtime":1786084511459,"results":"15230","hashOfConfig":"12232"},{"size":615,"mtime":1786084511459,"results":"15231","hashOfConfig":"12232"},{"size":15361,"mtime":1786084511459,"results":"15232","hashOfConfig":"12232"},{"size":8208,"mtime":1786084511460,"results":"15233","hashOfConfig":"12232"},{"size":1556,"mtime":1786084511460,"results":"15234","hashOfConfig":"12232"},{"size":2848,"mtime":1786084511460,"results":"15235","hashOfConfig":"12232"},{"size":3495,"mtime":1786084511460,"results":"15236","hashOfConfig":"12232"},{"size":6027,"mtime":1786084511460,"results":"15237","hashOfConfig":"12232"},{"size":5163,"mtime":1786084511460,"results":"15238","hashOfConfig":"12232"},{"size":4298,"mtime":1786084511460,"results":"15239","hashOfConfig":"12232"},{"size":7622,"mtime":1786084511460,"results":"15240","hashOfConfig":"12232"},{"size":9400,"mtime":1786084511461,"results":"15241","hashOfConfig":"12232"},{"size":5347,"mtime":1786084511461,"results":"15242","hashOfConfig":"12232"},{"size":12210,"mtime":1786084511461,"results":"15243","hashOfConfig":"12232"},{"size":4117,"mtime":1786084511461,"results":"15244","hashOfConfig":"12232"},{"size":3245,"mtime":1786084511461,"results":"15245","hashOfConfig":"12232"},{"size":2491,"mtime":1786084511461,"results":"15246","hashOfConfig":"12232"},{"size":1734,"mtime":1786084511461,"results":"15247","hashOfConfig":"12232"},{"size":2724,"mtime":1786084511461,"results":"15248","hashOfConfig":"12232"},{"size":1334,"mtime":1786084511462,"results":"15249","hashOfConfig":"12232"},{"size":1764,"mtime":1786084511462,"results":"15250","hashOfConfig":"12232"},{"size":8185,"mtime":1786084511462,"results":"15251","hashOfConfig":"12232"},{"size":5300,"mtime":1786084511462,"results":"15252","hashOfConfig":"12232"},{"size":5591,"mtime":1786084511462,"results":"15253","hashOfConfig":"12232"},{"size":2315,"mtime":1786084511462,"results":"15254","hashOfConfig":"12232"},{"size":14758,"mtime":1786084511462,"results":"15255","hashOfConfig":"12232"},{"size":3405,"mtime":1786084511463,"results":"15256","hashOfConfig":"12232"},{"size":10704,"mtime":1786084511463,"results":"15257","hashOfConfig":"12232"},{"size":16293,"mtime":1786084511463,"results":"15258","hashOfConfig":"12232"},{"size":577,"mtime":1786084511463,"results":"15259","hashOfConfig":"12232"},{"size":8025,"mtime":1786084511463,"results":"15260","hashOfConfig":"12232"},{"size":1409,"mtime":1786084511463,"results":"15261","hashOfConfig":"12232"},{"size":3799,"mtime":1786084511463,"results":"15262","hashOfConfig":"12232"},{"size":6226,"mtime":1786084511463,"results":"15263","hashOfConfig":"12232"},{"size":5780,"mtime":1786084511464,"results":"15264","hashOfConfig":"12232"},{"size":4671,"mtime":1786084511464,"results":"15265","hashOfConfig":"12232"},{"size":9029,"mtime":1786084511464,"results":"15266","hashOfConfig":"12232"},{"size":6446,"mtime":1786084511464,"results":"15267","hashOfConfig":"12232"},{"size":1291,"mtime":1786084511464,"results":"15268","hashOfConfig":"12232"},{"size":11685,"mtime":1786084511464,"results":"15269","hashOfConfig":"12232"},{"size":3453,"mtime":1786084511465,"results":"15270","hashOfConfig":"12232"},{"size":9184,"mtime":1786084511465,"results":"15271","hashOfConfig":"12232"},{"size":6946,"mtime":1786084511465,"results":"15272","hashOfConfig":"12232"},{"size":7312,"mtime":1786084511465,"results":"15273","hashOfConfig":"12232"},{"size":8636,"mtime":1786084511465,"results":"15274","hashOfConfig":"12232"},{"size":11662,"mtime":1786084511465,"results":"15275","hashOfConfig":"12232"},{"size":3306,"mtime":1786084511465,"results":"15276","hashOfConfig":"12232"},{"size":6442,"mtime":1786084511465,"results":"15277","hashOfConfig":"12232"},{"size":16685,"mtime":1786084511466,"results":"15278","hashOfConfig":"12232"},{"size":10685,"mtime":1786084511466,"results":"15279","hashOfConfig":"12232"},{"size":7174,"mtime":1786084511466,"results":"15280","hashOfConfig":"12232"},{"size":8105,"mtime":1786084511466,"results":"15281","hashOfConfig":"12232"},{"size":16375,"mtime":1786084511466,"results":"15282","hashOfConfig":"12232"},{"size":11801,"mtime":1786084511467,"results":"15283","hashOfConfig":"12232"},{"size":4206,"mtime":1786084511467,"results":"15284","hashOfConfig":"12232"},{"size":8862,"mtime":1786084511467,"results":"15285","hashOfConfig":"12232"},{"size":7722,"mtime":1786084511467,"results":"15286","hashOfConfig":"12232"},{"size":6320,"mtime":1786084511467,"results":"15287","hashOfConfig":"12232"},{"size":10066,"mtime":1786084511467,"results":"15288","hashOfConfig":"12232"},{"size":21777,"mtime":1786084511468,"results":"15289","hashOfConfig":"12232"},{"size":3242,"mtime":1786084511468,"results":"15290","hashOfConfig":"12232"},{"size":6933,"mtime":1786084511468,"results":"15291","hashOfConfig":"12232"},{"size":7945,"mtime":1786084511468,"results":"15292","hashOfConfig":"12232"},{"size":2891,"mtime":1786084511468,"results":"15293","hashOfConfig":"12232"},{"size":5127,"mtime":1786084511468,"results":"15294","hashOfConfig":"12232"},{"size":1819,"mtime":1786084511468,"results":"15295","hashOfConfig":"12232"},{"size":3829,"mtime":1786084511468,"results":"15296","hashOfConfig":"12232"},{"size":7900,"mtime":1786084511469,"results":"15297","hashOfConfig":"12232"},{"size":8143,"mtime":1786084511469,"results":"15298","hashOfConfig":"12232"},{"size":9677,"mtime":1786084511469,"results":"15299","hashOfConfig":"12232"},{"size":5502,"mtime":1786084511469,"results":"15300","hashOfConfig":"12232"},{"size":11385,"mtime":1786084511469,"results":"15301","hashOfConfig":"12232"},{"size":1949,"mtime":1786084511469,"results":"15302","hashOfConfig":"12232"},{"size":6695,"mtime":1786084511470,"results":"15303","hashOfConfig":"12232"},{"size":8407,"mtime":1786084511470,"results":"15304","hashOfConfig":"12232"},{"size":7015,"mtime":1786084511470,"results":"15305","hashOfConfig":"12232"},{"size":8702,"mtime":1786084511470,"results":"15306","hashOfConfig":"12232"},{"size":10103,"mtime":1786084511470,"results":"15307","hashOfConfig":"12232"},{"size":7425,"mtime":1786084511470,"results":"15308","hashOfConfig":"12232"},{"size":4168,"mtime":1786084511470,"results":"15309","hashOfConfig":"12232"},{"size":12678,"mtime":1786084511471,"results":"15310","hashOfConfig":"12232"},{"size":5154,"mtime":1786084511471,"results":"15311","hashOfConfig":"12232"},{"size":9669,"mtime":1786084511471,"results":"15312","hashOfConfig":"12232"},{"size":775,"mtime":1786084511471,"results":"15313","hashOfConfig":"12232"},{"size":6099,"mtime":1786084511471,"results":"15314","hashOfConfig":"12232"},{"size":20776,"mtime":1786084511472,"results":"15315","hashOfConfig":"12232"},{"size":9716,"mtime":1786084511472,"results":"15316","hashOfConfig":"12232"},{"size":6510,"mtime":1786084511472,"results":"15317","hashOfConfig":"12232"},{"size":11406,"mtime":1786084511472,"results":"15318","hashOfConfig":"12232"},{"size":6179,"mtime":1786084511473,"results":"15319","hashOfConfig":"12232"},{"size":4630,"mtime":1786084511473,"results":"15320","hashOfConfig":"12232"},{"size":6181,"mtime":1786084511473,"results":"15321","hashOfConfig":"12232"},{"size":9706,"mtime":1786084511473,"results":"15322","hashOfConfig":"12232"},{"size":2056,"mtime":1786084511473,"results":"15323","hashOfConfig":"12232"},{"size":3622,"mtime":1786084511473,"results":"15324","hashOfConfig":"12232"},{"size":8028,"mtime":1786084511473,"results":"15325","hashOfConfig":"12232"},{"size":9235,"mtime":1786084511473,"results":"15326","hashOfConfig":"12232"},{"size":9325,"mtime":1786084511474,"results":"15327","hashOfConfig":"12232"},{"size":4909,"mtime":1786084511474,"results":"15328","hashOfConfig":"12232"},{"size":3120,"mtime":1786084511474,"results":"15329","hashOfConfig":"12232"},{"size":3079,"mtime":1786084511474,"results":"15330","hashOfConfig":"12232"},{"size":4643,"mtime":1786084511474,"results":"15331","hashOfConfig":"12232"},{"size":9949,"mtime":1786084511474,"results":"15332","hashOfConfig":"12232"},{"size":21489,"mtime":1786084511475,"results":"15333","hashOfConfig":"12232"},{"size":7461,"mtime":1786084511475,"results":"15334","hashOfConfig":"12232"},{"size":2231,"mtime":1786084511475,"results":"15335","hashOfConfig":"12232"},{"size":9230,"mtime":1786084511475,"results":"15336","hashOfConfig":"12232"},{"size":2694,"mtime":1786084511475,"results":"15337","hashOfConfig":"12232"},{"size":28780,"mtime":1786084511475,"results":"15338","hashOfConfig":"12232"},{"size":12006,"mtime":1786084511476,"results":"15339","hashOfConfig":"12232"},{"size":26510,"mtime":1786084511476,"results":"15340","hashOfConfig":"12232"},{"size":1645,"mtime":1786084511476,"results":"15341","hashOfConfig":"12232"},{"size":4406,"mtime":1786084511476,"results":"15342","hashOfConfig":"12232"},{"size":4369,"mtime":1786084511476,"results":"15343","hashOfConfig":"12232"},{"size":5414,"mtime":1786084511476,"results":"15344","hashOfConfig":"12232"},{"size":4151,"mtime":1786084511477,"results":"15345","hashOfConfig":"12232"},{"size":1680,"mtime":1786084511477,"results":"15346","hashOfConfig":"12232"},{"size":1692,"mtime":1786084511477,"results":"15347","hashOfConfig":"12232"},{"size":3181,"mtime":1786084511477,"results":"15348","hashOfConfig":"12232"},{"size":3390,"mtime":1786084511477,"results":"15349","hashOfConfig":"12232"},{"size":7025,"mtime":1786084511477,"results":"15350","hashOfConfig":"12232"},{"size":5934,"mtime":1786084511478,"results":"15351","hashOfConfig":"12232"},{"size":4331,"mtime":1786084511478,"results":"15352","hashOfConfig":"12232"},{"size":2714,"mtime":1786084511478,"results":"15353","hashOfConfig":"12232"},{"size":612,"mtime":1786084511478,"results":"15354","hashOfConfig":"12232"},{"size":685,"mtime":1786084511478,"results":"15355","hashOfConfig":"12285"},{"size":3244,"mtime":1786084511478,"results":"15356","hashOfConfig":"12232"},{"size":31983,"mtime":1786084511478,"results":"15357","hashOfConfig":"12232"},{"size":2357,"mtime":1786084511478,"results":"15358","hashOfConfig":"12232"},{"size":2969,"mtime":1786084511479,"results":"15359","hashOfConfig":"12232"},{"size":3346,"mtime":1786084511479,"results":"15360","hashOfConfig":"12232"},{"size":5016,"mtime":1786084511479,"results":"15361","hashOfConfig":"12232"},{"size":3414,"mtime":1786084511479,"results":"15362","hashOfConfig":"12232"},{"size":8667,"mtime":1786084511479,"results":"15363","hashOfConfig":"12232"},{"size":5396,"mtime":1786084511479,"results":"15364","hashOfConfig":"12232"},{"size":1640,"mtime":1786084511479,"results":"15365","hashOfConfig":"12232"},{"size":5798,"mtime":1786084511480,"results":"15366","hashOfConfig":"12232"},{"size":1689,"mtime":1786084511480,"results":"15367","hashOfConfig":"12232"},{"size":2247,"mtime":1786084511480,"results":"15368","hashOfConfig":"12232"},{"size":6002,"mtime":1786084511480,"results":"15369","hashOfConfig":"12232"},{"size":8758,"mtime":1786084511480,"results":"15370","hashOfConfig":"12232"},{"size":4791,"mtime":1786084511480,"results":"15371","hashOfConfig":"12232"},{"size":5134,"mtime":1786084511480,"results":"15372","hashOfConfig":"12232"},{"size":10826,"mtime":1786084511480,"results":"15373","hashOfConfig":"12232"},{"size":3873,"mtime":1786084511480,"results":"15374","hashOfConfig":"12232"},{"size":3240,"mtime":1786084511481,"results":"15375","hashOfConfig":"12232"},{"size":2646,"mtime":1786084511481,"results":"15376","hashOfConfig":"12232"},{"size":3082,"mtime":1786084511481,"results":"15377","hashOfConfig":"12232"},{"size":4562,"mtime":1786084511481,"results":"15378","hashOfConfig":"12232"},{"size":2091,"mtime":1786084511481,"results":"15379","hashOfConfig":"12232"},{"size":3050,"mtime":1786084511481,"results":"15380","hashOfConfig":"12232"},{"size":11552,"mtime":1786084511481,"results":"15381","hashOfConfig":"12232"},{"size":1010,"mtime":1786084511481,"results":"15382","hashOfConfig":"12232"},{"size":2137,"mtime":1786084511482,"results":"15383","hashOfConfig":"12232"},{"size":8513,"mtime":1786084511482,"results":"15384","hashOfConfig":"12232"},{"size":4405,"mtime":1786084511482,"results":"15385","hashOfConfig":"12232"},{"size":11552,"mtime":1786084511482,"results":"15386","hashOfConfig":"12232"},{"size":5931,"mtime":1786084511482,"results":"15387","hashOfConfig":"12232"},{"size":971,"mtime":1786084511482,"results":"15388","hashOfConfig":"12232"},{"size":2087,"mtime":1786084511482,"results":"15389","hashOfConfig":"12232"},{"size":4874,"mtime":1786084511483,"results":"15390","hashOfConfig":"12232"},{"size":1996,"mtime":1786084511483,"results":"15391","hashOfConfig":"12232"},{"size":1675,"mtime":1786084511483,"results":"15392","hashOfConfig":"12232"},{"size":6239,"mtime":1786084511483,"results":"15393","hashOfConfig":"12232"},{"size":4913,"mtime":1786084511483,"results":"15394","hashOfConfig":"12232"},{"size":4281,"mtime":1786084511483,"results":"15395","hashOfConfig":"12232"},{"size":4931,"mtime":1786084511483,"results":"15396","hashOfConfig":"12232"},{"size":1847,"mtime":1786084511483,"results":"15397","hashOfConfig":"12232"},{"size":2651,"mtime":1786084511484,"results":"15398","hashOfConfig":"12232"},{"size":1155,"mtime":1786084511484,"results":"15399","hashOfConfig":"12232"},{"size":3507,"mtime":1786084511484,"results":"15400","hashOfConfig":"12232"},{"size":4452,"mtime":1786084511484,"results":"15401","hashOfConfig":"12232"},{"size":4215,"mtime":1786084511484,"results":"15402","hashOfConfig":"12232"},{"size":2818,"mtime":1786084511484,"results":"15403","hashOfConfig":"12232"},{"size":2391,"mtime":1786084511484,"results":"15404","hashOfConfig":"12232"},{"size":7485,"mtime":1786084511484,"results":"15405","hashOfConfig":"12232"},{"size":3464,"mtime":1786084511484,"results":"15406","hashOfConfig":"12232"},{"size":5934,"mtime":1786084511485,"results":"15407","hashOfConfig":"12232"},{"size":5438,"mtime":1786084511485,"results":"15408","hashOfConfig":"12232"},{"size":8049,"mtime":1786084511485,"results":"15409","hashOfConfig":"12232"},{"size":1247,"mtime":1786084511485,"results":"15410","hashOfConfig":"12232"},{"size":6375,"mtime":1786084511485,"results":"15411","hashOfConfig":"12232"},{"size":1526,"mtime":1786084511485,"results":"15412","hashOfConfig":"12232"},{"size":8217,"mtime":1786084511485,"results":"15413","hashOfConfig":"12232"},{"size":2183,"mtime":1786084511485,"results":"15414","hashOfConfig":"12232"},{"size":4207,"mtime":1786084511486,"results":"15415","hashOfConfig":"12232"},{"size":2651,"mtime":1786084511486,"results":"15416","hashOfConfig":"12232"},{"size":1979,"mtime":1786084511486,"results":"15417","hashOfConfig":"12232"},{"size":674,"mtime":1786084511486,"results":"15418","hashOfConfig":"12232"},{"size":5146,"mtime":1786084511486,"results":"15419","hashOfConfig":"12232"},{"size":1693,"mtime":1786084511486,"results":"15420","hashOfConfig":"12232"},{"size":1682,"mtime":1786084511486,"results":"15421","hashOfConfig":"12232"},{"size":2893,"mtime":1786084511487,"results":"15422","hashOfConfig":"12232"},{"size":3184,"mtime":1786084511487,"results":"15423","hashOfConfig":"12232"},{"size":2342,"mtime":1786084511487,"results":"15424","hashOfConfig":"12232"},{"size":2834,"mtime":1786084511487,"results":"15425","hashOfConfig":"12232"},{"size":4137,"mtime":1786084511487,"results":"15426","hashOfConfig":"12232"},{"size":3453,"mtime":1786084511487,"results":"15427","hashOfConfig":"12232"},{"size":1435,"mtime":1786084511487,"results":"15428","hashOfConfig":"12232"},{"size":1890,"mtime":1786084511487,"results":"15429","hashOfConfig":"12232"},{"size":4331,"mtime":1786084511488,"results":"15430","hashOfConfig":"12232"},{"size":7615,"mtime":1786084511488,"results":"15431","hashOfConfig":"12232"},{"size":6753,"mtime":1786084511488,"results":"15432","hashOfConfig":"12232"},{"size":3614,"mtime":1786084511488,"results":"15433","hashOfConfig":"12232"},{"size":6845,"mtime":1786084511488,"results":"15434","hashOfConfig":"12232"},{"size":2267,"mtime":1786084511488,"results":"15435","hashOfConfig":"12232"},{"size":4609,"mtime":1786084511488,"results":"15436","hashOfConfig":"12232"},{"size":27693,"mtime":1786084511489,"results":"15437","hashOfConfig":"12232"},{"size":2541,"mtime":1786084511489,"results":"15438","hashOfConfig":"12232"},{"size":4748,"mtime":1786084511489,"results":"15439","hashOfConfig":"12232"},{"size":2069,"mtime":1786084511489,"results":"15440","hashOfConfig":"12232"},{"size":4545,"mtime":1786084511489,"results":"15441","hashOfConfig":"12232"},{"size":3589,"mtime":1786084511489,"results":"15442","hashOfConfig":"12232"},{"size":1421,"mtime":1786084511489,"results":"15443","hashOfConfig":"12232"},{"size":2806,"mtime":1786084511489,"results":"15444","hashOfConfig":"12232"},{"size":5362,"mtime":1786084511490,"results":"15445","hashOfConfig":"12232"},{"size":8253,"mtime":1786084511490,"results":"15446","hashOfConfig":"12232"},{"size":1505,"mtime":1786084511490,"results":"15447","hashOfConfig":"12232"},{"size":4003,"mtime":1786084511490,"results":"15448","hashOfConfig":"12232"},{"size":6241,"mtime":1786084511490,"results":"15449","hashOfConfig":"12232"},{"size":2984,"mtime":1786084511490,"results":"15450","hashOfConfig":"12232"},{"size":3654,"mtime":1786084511490,"results":"15451","hashOfConfig":"12232"},{"size":5830,"mtime":1786084511490,"results":"15452","hashOfConfig":"12232"},{"size":3352,"mtime":1786084511490,"results":"15453","hashOfConfig":"12232"},{"size":6525,"mtime":1786084511491,"results":"15454","hashOfConfig":"12232"},{"size":2400,"mtime":1786084511491,"results":"15455","hashOfConfig":"12232"},{"size":2672,"mtime":1786084511491,"results":"15456","hashOfConfig":"12232"},{"size":3976,"mtime":1786084511491,"results":"15457","hashOfConfig":"12232"},{"size":1583,"mtime":1786084511491,"results":"15458","hashOfConfig":"12232"},{"size":1991,"mtime":1786084511491,"results":"15459","hashOfConfig":"12232"},{"size":1972,"mtime":1786084511491,"results":"15460","hashOfConfig":"12232"},{"size":1851,"mtime":1786084511491,"results":"15461","hashOfConfig":"12232"},{"size":1443,"mtime":1786084511491,"results":"15462","hashOfConfig":"12232"},{"size":5042,"mtime":1786084511491,"results":"15463","hashOfConfig":"12232"},{"size":2661,"mtime":1786084511492,"results":"15464","hashOfConfig":"12232"},{"size":2954,"mtime":1786084511492,"results":"15465","hashOfConfig":"12232"},{"size":2150,"mtime":1786084511492,"results":"15466","hashOfConfig":"12232"},{"size":884,"mtime":1786084511492,"results":"15467","hashOfConfig":"12232"},{"size":6874,"mtime":1786084511492,"results":"15468","hashOfConfig":"12232"},{"size":10243,"mtime":1786084511492,"results":"15469","hashOfConfig":"12232"},{"size":5940,"mtime":1786084511492,"results":"15470","hashOfConfig":"12232"},{"size":4177,"mtime":1786084511492,"results":"15471","hashOfConfig":"12232"},{"size":3096,"mtime":1786084511492,"results":"15472","hashOfConfig":"12232"},{"size":2413,"mtime":1786084511492,"results":"15473","hashOfConfig":"12232"},{"size":34450,"mtime":1786084511493,"results":"15474","hashOfConfig":"12232"},{"size":1802,"mtime":1786084511493,"results":"15475","hashOfConfig":"12232"},{"size":9788,"mtime":1786084511493,"results":"15476","hashOfConfig":"12232"},{"size":2471,"mtime":1786084511493,"results":"15477","hashOfConfig":"12232"},{"size":2822,"mtime":1786084511493,"results":"15478","hashOfConfig":"12232"},{"size":5902,"mtime":1786084511493,"results":"15479","hashOfConfig":"12232"},{"size":7188,"mtime":1786084511494,"results":"15480","hashOfConfig":"12232"},{"size":2235,"mtime":1786084511494,"results":"15481","hashOfConfig":"12232"},{"size":5789,"mtime":1786084511494,"results":"15482","hashOfConfig":"12232"},{"size":11829,"mtime":1786084529050,"results":"15483","hashOfConfig":"12232"},{"size":2862,"mtime":1786084511494,"results":"15484","hashOfConfig":"12232"},{"size":15544,"mtime":1786084511494,"results":"15485","hashOfConfig":"12232"},{"size":2164,"mtime":1786084511495,"results":"15486","hashOfConfig":"12232"},{"size":7158,"mtime":1786084511495,"results":"15487","hashOfConfig":"12232"},{"size":2735,"mtime":1786084511495,"results":"15488","hashOfConfig":"12232"},{"size":2809,"mtime":1786084511495,"results":"15489","hashOfConfig":"12232"},{"size":7571,"mtime":1786084511495,"results":"15490","hashOfConfig":"12232"},{"size":5674,"mtime":1786084511495,"results":"15491","hashOfConfig":"12232"},{"size":2437,"mtime":1786084511495,"results":"15492","hashOfConfig":"12232"},{"size":1628,"mtime":1786084511495,"results":"15493","hashOfConfig":"12232"},{"size":4792,"mtime":1786084511496,"results":"15494","hashOfConfig":"12232"},{"size":4115,"mtime":1786084511496,"results":"15495","hashOfConfig":"12232"},{"size":3382,"mtime":1786084511496,"results":"15496","hashOfConfig":"12232"},{"size":5598,"mtime":1786084511496,"results":"15497","hashOfConfig":"12232"},{"size":22882,"mtime":1786084511496,"results":"15498","hashOfConfig":"12232"},{"size":27257,"mtime":1786084511496,"results":"15499","hashOfConfig":"12232"},{"size":4987,"mtime":1786084511497,"results":"15500","hashOfConfig":"12232"},{"size":7715,"mtime":1786084511497,"results":"15501","hashOfConfig":"12232"},{"size":3180,"mtime":1786084511497,"results":"15502","hashOfConfig":"12285"},{"size":8964,"mtime":1786084511497,"results":"15503","hashOfConfig":"12232"},{"size":13939,"mtime":1786084511497,"results":"15504","hashOfConfig":"12285"},{"size":8720,"mtime":1786084511497,"results":"15505","hashOfConfig":"12232"},{"size":4233,"mtime":1786084511497,"results":"15506","hashOfConfig":"12232"},{"size":2332,"mtime":1786084511498,"results":"15507","hashOfConfig":"12232"},{"size":8840,"mtime":1786084511498,"results":"15508","hashOfConfig":"12232"},{"size":2237,"mtime":1786084511498,"results":"15509","hashOfConfig":"12232"},{"size":2493,"mtime":1786084511498,"results":"15510","hashOfConfig":"12232"},{"size":7140,"mtime":1786084511498,"results":"15511","hashOfConfig":"12232"},{"size":7664,"mtime":1786084511498,"results":"15512","hashOfConfig":"12232"},{"size":43309,"mtime":1786084511499,"results":"15513","hashOfConfig":"12232"},{"size":3874,"mtime":1786084511499,"results":"15514","hashOfConfig":"12232"},{"size":10721,"mtime":1786084511499,"results":"15515","hashOfConfig":"12232"},{"size":1565,"mtime":1786084511499,"results":"15516","hashOfConfig":"12232"},{"size":2353,"mtime":1786084511499,"results":"15517","hashOfConfig":"12232"},{"size":1987,"mtime":1786084511499,"results":"15518","hashOfConfig":"12232"},{"size":4823,"mtime":1786084511499,"results":"15519","hashOfConfig":"12232"},{"size":1401,"mtime":1786084511499,"results":"15520","hashOfConfig":"12232"},{"size":2538,"mtime":1786084511500,"results":"15521","hashOfConfig":"12232"},{"size":5556,"mtime":1786084511500,"results":"15522","hashOfConfig":"12232"},{"size":2092,"mtime":1786084511500,"results":"15523","hashOfConfig":"12232"},{"size":880,"mtime":1786084511500,"results":"15524","hashOfConfig":"12232"},{"size":13098,"mtime":1786084511500,"results":"15525","hashOfConfig":"12232"},{"size":7831,"mtime":1786084511500,"results":"15526","hashOfConfig":"12232"},{"size":2230,"mtime":1786084511500,"results":"15527","hashOfConfig":"12232"},{"size":3791,"mtime":1786084511500,"results":"15528","hashOfConfig":"12232"},{"size":9236,"mtime":1786084511501,"results":"15529","hashOfConfig":"12232"},{"size":8366,"mtime":1786084511501,"results":"15530","hashOfConfig":"12232"},{"size":3695,"mtime":1786084511501,"results":"15531","hashOfConfig":"12232"},{"size":3422,"mtime":1786084511501,"results":"15532","hashOfConfig":"12232"},{"size":7994,"mtime":1786084511501,"results":"15533","hashOfConfig":"12232"},{"size":2579,"mtime":1786084511501,"results":"15534","hashOfConfig":"12232"},{"size":1962,"mtime":1786084511501,"results":"15535","hashOfConfig":"12232"},{"size":1831,"mtime":1786084511501,"results":"15536","hashOfConfig":"12232"},{"size":4393,"mtime":1786084511501,"results":"15537","hashOfConfig":"12232"},{"size":6235,"mtime":1786084511502,"results":"15538","hashOfConfig":"12232"},{"size":2119,"mtime":1786084511502,"results":"15539","hashOfConfig":"12232"},{"size":3678,"mtime":1786084511502,"results":"15540","hashOfConfig":"12232"},{"size":1938,"mtime":1786084511503,"results":"15541","hashOfConfig":"12232"},{"size":2106,"mtime":1786084511503,"results":"15542","hashOfConfig":"12232"},{"size":1639,"mtime":1786084511503,"results":"15543","hashOfConfig":"12232"},{"size":1836,"mtime":1786084511503,"results":"15544","hashOfConfig":"12232"},{"size":3204,"mtime":1786084511502,"results":"15545","hashOfConfig":"12232"},{"size":3886,"mtime":1786084511502,"results":"15546","hashOfConfig":"12232"},{"size":1631,"mtime":1786084511502,"results":"15547","hashOfConfig":"12232"},{"size":3261,"mtime":1786084511503,"results":"15548","hashOfConfig":"12232"},{"size":3234,"mtime":1786084511503,"results":"15549","hashOfConfig":"12232"},{"size":5768,"mtime":1786084511503,"results":"15550","hashOfConfig":"12232"},{"size":3011,"mtime":1786084511503,"results":"15551","hashOfConfig":"12232"},{"size":612,"mtime":1786084511503,"results":"15552","hashOfConfig":"12232"},{"size":6827,"mtime":1786084511504,"results":"15553","hashOfConfig":"12232"},{"size":5616,"mtime":1786084511504,"results":"15554","hashOfConfig":"12232"},{"size":8842,"mtime":1786084511504,"results":"15555","hashOfConfig":"12232"},{"size":5496,"mtime":1786084511504,"results":"15556","hashOfConfig":"12232"},{"size":3557,"mtime":1786084511504,"results":"15557","hashOfConfig":"12232"},{"size":32536,"mtime":1786084511504,"results":"15558","hashOfConfig":"12232"},{"size":3253,"mtime":1786084511504,"results":"15559","hashOfConfig":"12232"},{"size":4686,"mtime":1786084511505,"results":"15560","hashOfConfig":"12232"},{"size":2191,"mtime":1786084511505,"results":"15561","hashOfConfig":"12232"},{"size":17448,"mtime":1786084511505,"results":"15562","hashOfConfig":"12232"},{"size":14087,"mtime":1786084511505,"results":"15563","hashOfConfig":"12232"},{"size":978,"mtime":1786084511505,"results":"15564","hashOfConfig":"12232"},{"size":8487,"mtime":1786084511505,"results":"15565","hashOfConfig":"12232"},{"size":3612,"mtime":1786084511505,"results":"15566","hashOfConfig":"12232"},{"size":2453,"mtime":1786084511506,"results":"15567","hashOfConfig":"12232"},{"size":2679,"mtime":1786084511506,"results":"15568","hashOfConfig":"12232"},{"size":2035,"mtime":1786084511506,"results":"15569","hashOfConfig":"12232"},{"size":1584,"mtime":1786084511506,"results":"15570","hashOfConfig":"12232"},{"size":3509,"mtime":1786084511507,"results":"15571","hashOfConfig":"12232"},{"size":6614,"mtime":1786084511507,"results":"15572","hashOfConfig":"12232"},{"size":7534,"mtime":1786084511507,"results":"15573","hashOfConfig":"12232"},{"size":1614,"mtime":1786084511507,"results":"15574","hashOfConfig":"12232"},{"size":3874,"mtime":1786084511507,"results":"15575","hashOfConfig":"12232"},{"size":3642,"mtime":1786084511506,"results":"15576","hashOfConfig":"12232"},{"size":9684,"mtime":1786084511506,"results":"15577","hashOfConfig":"12232"},{"size":951,"mtime":1786084511506,"results":"15578","hashOfConfig":"12232"},{"size":9623,"mtime":1786084511507,"results":"15579","hashOfConfig":"12232"},{"size":4680,"mtime":1786084511507,"results":"15580","hashOfConfig":"12232"},{"size":1323,"mtime":1786084511507,"results":"15581","hashOfConfig":"12232"},{"size":6838,"mtime":1786084511508,"results":"15582","hashOfConfig":"12232"},{"size":2362,"mtime":1786084511508,"results":"15583","hashOfConfig":"12232"},{"size":878,"mtime":1786084511508,"results":"15584","hashOfConfig":"12232"},{"size":6527,"mtime":1786084511508,"results":"15585","hashOfConfig":"12232"},{"size":10385,"mtime":1786084511508,"results":"15586","hashOfConfig":"12232"},{"size":5973,"mtime":1786084511508,"results":"15587","hashOfConfig":"12232"},{"size":1493,"mtime":1786084511509,"results":"15588","hashOfConfig":"12232"},{"size":11038,"mtime":1786084511509,"results":"15589","hashOfConfig":"12232"},{"size":7041,"mtime":1786084511509,"results":"15590","hashOfConfig":"12232"},{"size":3483,"mtime":1786084511509,"results":"15591","hashOfConfig":"12232"},{"size":702,"mtime":1786084511509,"results":"15592","hashOfConfig":"12232"},{"size":3842,"mtime":1786084511509,"results":"15593","hashOfConfig":"12232"},{"size":3510,"mtime":1786084511509,"results":"15594","hashOfConfig":"12232"},{"size":3436,"mtime":1786084511509,"results":"15595","hashOfConfig":"12232"},{"size":3499,"mtime":1786084511510,"results":"15596","hashOfConfig":"12232"},{"size":4093,"mtime":1786084511510,"results":"15597","hashOfConfig":"12232"},{"size":3028,"mtime":1786084511510,"results":"15598","hashOfConfig":"12232"},{"size":3358,"mtime":1786084511510,"results":"15599","hashOfConfig":"12232"},{"size":2970,"mtime":1786084511510,"results":"15600","hashOfConfig":"12232"},{"size":2142,"mtime":1786084511510,"results":"15601","hashOfConfig":"12232"},{"size":5118,"mtime":1786084511510,"results":"15602","hashOfConfig":"12232"},{"size":4682,"mtime":1786084511510,"results":"15603","hashOfConfig":"12232"},{"size":3426,"mtime":1786084511510,"results":"15604","hashOfConfig":"12232"},{"size":5143,"mtime":1786084511511,"results":"15605","hashOfConfig":"12232"},{"size":1821,"mtime":1786084511511,"results":"15606","hashOfConfig":"12232"},{"size":763,"mtime":1786084511511,"results":"15607","hashOfConfig":"12232"},{"size":5121,"mtime":1786084511511,"results":"15608","hashOfConfig":"12232"},{"size":3880,"mtime":1786084511511,"results":"15609","hashOfConfig":"12232"},{"size":9729,"mtime":1786084511512,"results":"15610","hashOfConfig":"12232"},{"size":1058,"mtime":1786084511512,"results":"15611","hashOfConfig":"12232"},{"size":3152,"mtime":1786084511512,"results":"15612","hashOfConfig":"12232"},{"size":13180,"mtime":1786084511512,"results":"15613","hashOfConfig":"12232"},{"size":14474,"mtime":1786084511512,"results":"15614","hashOfConfig":"12232"},{"size":8979,"mtime":1786084511512,"results":"15615","hashOfConfig":"12232"},{"size":6275,"mtime":1786084511512,"results":"15616","hashOfConfig":"12232"},{"size":22311,"mtime":1786084511513,"results":"15617","hashOfConfig":"12232"},{"size":4075,"mtime":1786084511513,"results":"15618","hashOfConfig":"12232"},{"size":12898,"mtime":1786084511513,"results":"15619","hashOfConfig":"12232"},{"size":9941,"mtime":1786084511513,"results":"15620","hashOfConfig":"12232"},{"size":4117,"mtime":1786084511513,"results":"15621","hashOfConfig":"12232"},{"size":4353,"mtime":1786084511513,"results":"15622","hashOfConfig":"12232"},{"size":5690,"mtime":1786084511514,"results":"15623","hashOfConfig":"12232"},{"size":3995,"mtime":1786084511514,"results":"15624","hashOfConfig":"12232"},{"size":4956,"mtime":1786084511514,"results":"15625","hashOfConfig":"12232"},{"size":4644,"mtime":1786084511514,"results":"15626","hashOfConfig":"12232"},{"size":7099,"mtime":1786084511514,"results":"15627","hashOfConfig":"12232"},{"size":3535,"mtime":1786084511514,"results":"15628","hashOfConfig":"12232"},{"size":7837,"mtime":1786084511514,"results":"15629","hashOfConfig":"12232"},{"size":9670,"mtime":1786084511515,"results":"15630","hashOfConfig":"12232"},{"size":7024,"mtime":1786084511515,"results":"15631","hashOfConfig":"12232"},{"size":6967,"mtime":1786084511515,"results":"15632","hashOfConfig":"12232"},{"size":3127,"mtime":1786084511515,"results":"15633","hashOfConfig":"12232"},{"size":18647,"mtime":1786084511511,"results":"15634","hashOfConfig":"12232"},{"size":12449,"mtime":1786084511515,"results":"15635","hashOfConfig":"12232"},{"size":18941,"mtime":1786084511516,"results":"15636","hashOfConfig":"12232"},{"size":5794,"mtime":1786084511516,"results":"15637","hashOfConfig":"12232"},{"size":12763,"mtime":1786084511516,"results":"15638","hashOfConfig":"12232"},{"size":8187,"mtime":1786084511516,"results":"15639","hashOfConfig":"12232"},{"size":14157,"mtime":1786084511516,"results":"15640","hashOfConfig":"12232"},{"size":12809,"mtime":1786084511518,"results":"15641","hashOfConfig":"12232"},{"size":3311,"mtime":1786084511518,"results":"15642","hashOfConfig":"12232"},{"size":9211,"mtime":1786084511517,"results":"15643","hashOfConfig":"12232"},{"size":5983,"mtime":1786084511517,"results":"15644","hashOfConfig":"12232"},{"size":11906,"mtime":1786084511517,"results":"15645","hashOfConfig":"12232"},{"size":2835,"mtime":1786084511517,"results":"15646","hashOfConfig":"12232"},{"size":5959,"mtime":1786084511517,"results":"15647","hashOfConfig":"12232"},{"size":2235,"mtime":1786084511517,"results":"15648","hashOfConfig":"12232"},{"size":4410,"mtime":1786084511517,"results":"15649","hashOfConfig":"12232"},{"size":1940,"mtime":1786084511518,"results":"15650","hashOfConfig":"12285"},{"size":1175,"mtime":1786084511519,"results":"15651","hashOfConfig":"12232"},{"size":2313,"mtime":1786084511519,"results":"15652","hashOfConfig":"12232"},{"size":2911,"mtime":1786084511519,"results":"15653","hashOfConfig":"12232"},{"size":3934,"mtime":1786084511519,"results":"15654","hashOfConfig":"8189"},{"size":7135,"mtime":1786084511519,"results":"15655","hashOfConfig":"8189"},{"size":14366,"mtime":1786084511519,"results":"15656","hashOfConfig":"8189"},{"size":8074,"mtime":1786084511519,"results":"15657","hashOfConfig":"12232"},{"size":4529,"mtime":1786084511520,"results":"15658","hashOfConfig":"12232"},{"size":3674,"mtime":1786084511518,"results":"15659","hashOfConfig":"12232"},{"size":2061,"mtime":1786084511518,"results":"15660","hashOfConfig":"8189"},{"size":5081,"mtime":1786084511518,"results":"15661","hashOfConfig":"12232"},{"size":2568,"mtime":1786084511520,"results":"15662","hashOfConfig":"12232"},{"size":1536,"mtime":1786084511520,"results":"15663","hashOfConfig":"12232"},{"size":1456,"mtime":1786084511520,"results":"15664","hashOfConfig":"12232"},{"size":3515,"mtime":1786084511520,"results":"15665","hashOfConfig":"12232"},{"size":6315,"mtime":1786084511520,"results":"15666","hashOfConfig":"12232"},{"size":1490,"mtime":1786084511521,"results":"15667","hashOfConfig":"12232"},{"size":4018,"mtime":1786084511521,"results":"15668","hashOfConfig":"12232"},{"size":1661,"mtime":1786084511521,"results":"15669","hashOfConfig":"12232"},{"size":3595,"mtime":1786084511521,"results":"15670","hashOfConfig":"12232"},{"size":1181,"mtime":1786084511521,"results":"15671","hashOfConfig":"12232"},{"size":3020,"mtime":1786084511521,"results":"15672","hashOfConfig":"12232"},{"size":3092,"mtime":1786084511521,"results":"15673","hashOfConfig":"12232"},{"size":6363,"mtime":1786084511521,"results":"15674","hashOfConfig":"12232"},{"size":4056,"mtime":1786084511522,"results":"15675","hashOfConfig":"12232"},{"size":5263,"mtime":1786084511522,"results":"15676","hashOfConfig":"12232"},{"size":6506,"mtime":1786084511522,"results":"15677","hashOfConfig":"12232"},{"size":4187,"mtime":1786084511522,"results":"15678","hashOfConfig":"12232"},{"size":2026,"mtime":1786084511522,"results":"15679","hashOfConfig":"12232"},{"size":18859,"mtime":1786084511522,"results":"15680","hashOfConfig":"12232"},{"size":11498,"mtime":1786084511523,"results":"15681","hashOfConfig":"12232"},{"size":4973,"mtime":1786084511523,"results":"15682","hashOfConfig":"12232"},{"size":8207,"mtime":1786084511523,"results":"15683","hashOfConfig":"12232"},{"size":9765,"mtime":1786084511523,"results":"15684","hashOfConfig":"12232"},{"size":759,"mtime":1786084511523,"results":"15685","hashOfConfig":"12232"},{"size":13015,"mtime":1786084511523,"results":"15686","hashOfConfig":"12232"},{"size":3026,"mtime":1786084511523,"results":"15687","hashOfConfig":"12232"},{"size":5899,"mtime":1786084511524,"results":"15688","hashOfConfig":"12232"},{"size":1396,"mtime":1786084511524,"results":"15689","hashOfConfig":"12232"},{"size":9784,"mtime":1786084511524,"results":"15690","hashOfConfig":"12232"},{"size":8856,"mtime":1786084511524,"results":"15691","hashOfConfig":"12232"},{"size":5938,"mtime":1786084511524,"results":"15692","hashOfConfig":"12232"},{"size":794,"mtime":1786084511524,"results":"15693","hashOfConfig":"12232"},{"size":696,"mtime":1786084511524,"results":"15694","hashOfConfig":"12232"},{"size":1499,"mtime":1786084511524,"results":"15695","hashOfConfig":"12232"},{"size":1664,"mtime":1786084511524,"results":"15696","hashOfConfig":"12232"},{"size":2664,"mtime":1786084511525,"results":"15697","hashOfConfig":"12232"},{"size":15464,"mtime":1786084511525,"results":"15698","hashOfConfig":"12232"},{"size":2413,"mtime":1786084511525,"results":"15699","hashOfConfig":"12232"},{"size":5298,"mtime":1786084511525,"results":"15700","hashOfConfig":"12232"},{"size":13156,"mtime":1786084511525,"results":"15701","hashOfConfig":"12232"},{"size":5560,"mtime":1786084511525,"results":"15702","hashOfConfig":"12232"},{"size":4895,"mtime":1786084511525,"results":"15703","hashOfConfig":"12232"},{"size":3862,"mtime":1786084511526,"results":"15704","hashOfConfig":"12232"},{"size":1755,"mtime":1786084511526,"results":"15705","hashOfConfig":"12232"},{"size":10062,"mtime":1786084511526,"results":"15706","hashOfConfig":"12232"},{"size":11833,"mtime":1786084511526,"results":"15707","hashOfConfig":"12232"},{"size":9259,"mtime":1786084511526,"results":"15708","hashOfConfig":"12232"},{"size":2757,"mtime":1786084511526,"results":"15709","hashOfConfig":"12232"},{"size":1606,"mtime":1786084511526,"results":"15710","hashOfConfig":"12232"},{"size":55158,"mtime":1786084511527,"results":"15711","hashOfConfig":"12232"},{"size":6406,"mtime":1786084511527,"results":"15712","hashOfConfig":"12232"},{"size":5539,"mtime":1786084511527,"results":"15713","hashOfConfig":"12232"},{"size":4260,"mtime":1786084511527,"results":"15714","hashOfConfig":"12232"},{"size":8371,"mtime":1786084511528,"results":"15715","hashOfConfig":"12232"},{"size":3344,"mtime":1786084511528,"results":"15716","hashOfConfig":"12232"},{"size":7703,"mtime":1786084511528,"results":"15717","hashOfConfig":"12232"},{"size":17102,"mtime":1786084511528,"results":"15718","hashOfConfig":"12232"},{"size":2699,"mtime":1786084511528,"results":"15719","hashOfConfig":"12232"},{"size":2850,"mtime":1786084511528,"results":"15720","hashOfConfig":"12232"},{"size":8567,"mtime":1786084511528,"results":"15721","hashOfConfig":"12232"},{"size":3974,"mtime":1786084511529,"results":"15722","hashOfConfig":"12232"},{"size":2042,"mtime":1786084511529,"results":"15723","hashOfConfig":"12285"},{"size":9906,"mtime":1786084511529,"results":"15724","hashOfConfig":"12232"},{"size":1274,"mtime":1786084511529,"results":"15725","hashOfConfig":"12232"},{"size":1110,"mtime":1786084511529,"results":"15726","hashOfConfig":"12232"},{"size":2690,"mtime":1786084511529,"results":"15727","hashOfConfig":"12232"},{"size":4216,"mtime":1786084511529,"results":"15728","hashOfConfig":"12232"},{"size":2071,"mtime":1786084511530,"results":"15729","hashOfConfig":"12232"},{"size":4490,"mtime":1786084511530,"results":"15730","hashOfConfig":"12232"},{"size":4157,"mtime":1786084511530,"results":"15731","hashOfConfig":"12232"},{"size":2651,"mtime":1786084511530,"results":"15732","hashOfConfig":"12232"},{"size":5577,"mtime":1786084511530,"results":"15733","hashOfConfig":"12232"},{"size":4886,"mtime":1786084511530,"results":"15734","hashOfConfig":"12232"},{"size":1918,"mtime":1786084511530,"results":"15735","hashOfConfig":"12232"},{"size":2058,"mtime":1786084511530,"results":"15736","hashOfConfig":"12232"},{"size":1780,"mtime":1786084511531,"results":"15737","hashOfConfig":"12232"},{"size":24511,"mtime":1786084511531,"results":"15738","hashOfConfig":"12232"},{"size":2149,"mtime":1786084511531,"results":"15739","hashOfConfig":"12232"},{"size":4036,"mtime":1786084511531,"results":"15740","hashOfConfig":"12232"},{"size":15407,"mtime":1786084511532,"results":"15741","hashOfConfig":"12232"},{"size":4252,"mtime":1786084511532,"results":"15742","hashOfConfig":"12232"},{"size":2763,"mtime":1786084511532,"results":"15743","hashOfConfig":"12232"},{"size":7308,"mtime":1786084511532,"results":"15744","hashOfConfig":"12232"},{"size":3761,"mtime":1786084511533,"results":"15745","hashOfConfig":"12232"},{"size":8803,"mtime":1786084511533,"results":"15746","hashOfConfig":"12232"},{"size":21933,"mtime":1786084511533,"results":"15747","hashOfConfig":"12232"},{"size":10202,"mtime":1786084511534,"results":"15748","hashOfConfig":"12232"},{"size":4069,"mtime":1786084511534,"results":"15749","hashOfConfig":"12232"},{"size":8515,"mtime":1786084511534,"results":"15750","hashOfConfig":"12232"},{"size":15917,"mtime":1786084511534,"results":"15751","hashOfConfig":"12232"},{"size":77813,"mtime":1786084511536,"results":"15752","hashOfConfig":"12232"},{"size":9094,"mtime":1786084511536,"results":"15753","hashOfConfig":"12232"},{"size":4933,"mtime":1786084511536,"results":"15754","hashOfConfig":"12232"},{"size":11950,"mtime":1786084511536,"results":"15755","hashOfConfig":"12232"},{"size":1269,"mtime":1786084511537,"results":"15756","hashOfConfig":"12232"},{"size":21182,"mtime":1786084511537,"results":"15757","hashOfConfig":"12232"},{"size":6165,"mtime":1786084511537,"results":"15758","hashOfConfig":"12232"},{"size":3038,"mtime":1786084511537,"results":"15759","hashOfConfig":"12232"},{"size":5022,"mtime":1786084511538,"results":"15760","hashOfConfig":"12232"},{"size":1717,"mtime":1786084511538,"results":"15761","hashOfConfig":"12232"},{"size":6092,"mtime":1786084511538,"results":"15762","hashOfConfig":"12232"},{"size":3112,"mtime":1786084511538,"results":"15763","hashOfConfig":"12232"},{"size":2234,"mtime":1786084511538,"results":"15764","hashOfConfig":"12232"},{"size":6195,"mtime":1786084511539,"results":"15765","hashOfConfig":"12232"},{"size":4395,"mtime":1786084511539,"results":"15766","hashOfConfig":"12232"},{"size":4804,"mtime":1786084511539,"results":"15767","hashOfConfig":"12232"},{"size":6989,"mtime":1786084511539,"results":"15768","hashOfConfig":"12232"},{"size":2222,"mtime":1786084511540,"results":"15769","hashOfConfig":"12232"},{"size":6450,"mtime":1786084511540,"results":"15770","hashOfConfig":"12232"},{"size":15803,"mtime":1786084511540,"results":"15771","hashOfConfig":"12232"},{"size":6087,"mtime":1786084511540,"results":"15772","hashOfConfig":"12232"},{"size":387,"mtime":1786084511541,"results":"15773","hashOfConfig":"12232"},{"size":3398,"mtime":1786084511541,"results":"15774","hashOfConfig":"12232"},{"size":1453,"mtime":1786084511541,"results":"15775","hashOfConfig":"12232"},{"size":3372,"mtime":1786084511541,"results":"15776","hashOfConfig":"12232"},{"size":5902,"mtime":1786084511542,"results":"15777","hashOfConfig":"12232"},{"size":3539,"mtime":1786084511542,"results":"15778","hashOfConfig":"12232"},{"size":5719,"mtime":1786084511542,"results":"15779","hashOfConfig":"12232"},{"size":4435,"mtime":1786084511542,"results":"15780","hashOfConfig":"12232"},{"size":24304,"mtime":1786084511543,"results":"15781","hashOfConfig":"12232"},{"size":2038,"mtime":1786084511543,"results":"15782","hashOfConfig":"12232"},{"size":3833,"mtime":1786084511543,"results":"15783","hashOfConfig":"12232"},{"size":5535,"mtime":1786084511543,"results":"15784","hashOfConfig":"12232"},{"size":6622,"mtime":1786084511544,"results":"15785","hashOfConfig":"12232"},{"size":5399,"mtime":1786084511544,"results":"15786","hashOfConfig":"12232"},{"size":6449,"mtime":1786084511544,"results":"15787","hashOfConfig":"12232"},{"size":2387,"mtime":1786084511544,"results":"15788","hashOfConfig":"12232"},{"size":2549,"mtime":1786084511545,"results":"15789","hashOfConfig":"12232"},{"size":4072,"mtime":1786084511545,"results":"15790","hashOfConfig":"12232"},{"size":1035,"mtime":1786084511545,"results":"15791","hashOfConfig":"12232"},{"size":3487,"mtime":1786084511545,"results":"15792","hashOfConfig":"12232"},{"size":1416,"mtime":1786084511545,"results":"15793","hashOfConfig":"12232"},{"size":1782,"mtime":1786084511545,"results":"15794","hashOfConfig":"12232"},{"size":6707,"mtime":1786084511545,"results":"15795","hashOfConfig":"12232"},{"size":5393,"mtime":1786084511546,"results":"15796","hashOfConfig":"12232"},{"size":7615,"mtime":1786084511546,"results":"15797","hashOfConfig":"12232"},{"size":7555,"mtime":1786084511546,"results":"15798","hashOfConfig":"12232"},{"size":7177,"mtime":1786084511546,"results":"15799","hashOfConfig":"12232"},{"size":3249,"mtime":1786084511546,"results":"15800","hashOfConfig":"12232"},{"size":3396,"mtime":1786084511546,"results":"15801","hashOfConfig":"12232"},{"size":13254,"mtime":1786084511547,"results":"15802","hashOfConfig":"12232"},{"size":1664,"mtime":1786084511547,"results":"15803","hashOfConfig":"12232"},{"size":8784,"mtime":1786084511547,"results":"15804","hashOfConfig":"12232"},{"size":4175,"mtime":1786084511547,"results":"15805","hashOfConfig":"12232"},{"size":7722,"mtime":1786084511547,"results":"15806","hashOfConfig":"12232"},{"size":3262,"mtime":1786084511547,"results":"15807","hashOfConfig":"12232"},{"size":5593,"mtime":1786084511548,"results":"15808","hashOfConfig":"12232"},{"size":3146,"mtime":1786084511548,"results":"15809","hashOfConfig":"12232"},{"size":5137,"mtime":1786084511548,"results":"15810","hashOfConfig":"12232"},{"size":1413,"mtime":1786084511548,"results":"15811","hashOfConfig":"12232"},{"size":8529,"mtime":1786084511548,"results":"15812","hashOfConfig":"12232"},{"size":464,"mtime":1786084511548,"results":"15813","hashOfConfig":"12232"},{"size":3796,"mtime":1786084511548,"results":"15814","hashOfConfig":"12232"},{"size":4458,"mtime":1786084511548,"results":"15815","hashOfConfig":"12232"},{"size":8059,"mtime":1786084511549,"results":"15816","hashOfConfig":"12232"},{"size":1320,"mtime":1786084511549,"results":"15817","hashOfConfig":"12232"},{"size":8178,"mtime":1786084511549,"results":"15818","hashOfConfig":"12232"},{"size":2255,"mtime":1786084511549,"results":"15819","hashOfConfig":"12232"},{"size":4386,"mtime":1786084511549,"results":"15820","hashOfConfig":"12232"},{"size":2900,"mtime":1786084511549,"results":"15821","hashOfConfig":"12232"},{"size":3281,"mtime":1786084511550,"results":"15822","hashOfConfig":"12232"},{"size":2959,"mtime":1786084511550,"results":"15823","hashOfConfig":"12232"},{"size":2854,"mtime":1786084511550,"results":"15824","hashOfConfig":"12232"},{"size":3571,"mtime":1786084511550,"results":"15825","hashOfConfig":"12232"},{"size":4150,"mtime":1786084511550,"results":"15826","hashOfConfig":"12232"},{"size":1966,"mtime":1786084511550,"results":"15827","hashOfConfig":"12232"},{"size":2682,"mtime":1786084511551,"results":"15828","hashOfConfig":"12232"},{"size":3738,"mtime":1786084511551,"results":"15829","hashOfConfig":"12232"},{"size":1788,"mtime":1786084511551,"results":"15830","hashOfConfig":"12232"},{"size":1442,"mtime":1786084511551,"results":"15831","hashOfConfig":"12232"},{"size":2169,"mtime":1786084511551,"results":"15832","hashOfConfig":"12232"},{"size":7982,"mtime":1786084511551,"results":"15833","hashOfConfig":"12232"},{"size":2845,"mtime":1786084511551,"results":"15834","hashOfConfig":"12232"},{"size":1861,"mtime":1786084511551,"results":"15835","hashOfConfig":"12232"},{"size":2451,"mtime":1786084511552,"results":"15836","hashOfConfig":"12232"},{"size":2800,"mtime":1786084511552,"results":"15837","hashOfConfig":"12232"},{"size":3022,"mtime":1786084511552,"results":"15838","hashOfConfig":"12232"},{"size":13390,"mtime":1786084511552,"results":"15839","hashOfConfig":"12232"},{"size":5257,"mtime":1786084511552,"results":"15840","hashOfConfig":"12232"},{"size":5201,"mtime":1786084511552,"results":"15841","hashOfConfig":"12232"},{"size":1645,"mtime":1786084511552,"results":"15842","hashOfConfig":"12232"},{"size":3517,"mtime":1786084511553,"results":"15843","hashOfConfig":"12232"},{"size":1786,"mtime":1786084511553,"results":"15844","hashOfConfig":"12232"},{"size":2391,"mtime":1786084511553,"results":"15845","hashOfConfig":"12232"},{"size":1999,"mtime":1786084511553,"results":"15846","hashOfConfig":"12232"},{"size":1252,"mtime":1786084511553,"results":"15847","hashOfConfig":"12232"},{"size":5770,"mtime":1786084511553,"results":"15848","hashOfConfig":"12232"},{"size":2274,"mtime":1786084511553,"results":"15849","hashOfConfig":"12285"},{"size":6317,"mtime":1786084511554,"results":"15850","hashOfConfig":"12232"},{"size":3853,"mtime":1786084511554,"results":"15851","hashOfConfig":"12232"},{"size":3993,"mtime":1786084511554,"results":"15852","hashOfConfig":"12232"},{"size":2520,"mtime":1786084511554,"results":"15853","hashOfConfig":"12232"},{"size":6316,"mtime":1786084511554,"results":"15854","hashOfConfig":"12232"},{"size":2853,"mtime":1786084511554,"results":"15855","hashOfConfig":"12232"},{"size":20161,"mtime":1786084511554,"results":"15856","hashOfConfig":"12232"},{"size":8205,"mtime":1786084511555,"results":"15857","hashOfConfig":"12232"},{"size":13593,"mtime":1786084511555,"results":"15858","hashOfConfig":"12232"},{"size":3950,"mtime":1786084511555,"results":"15859","hashOfConfig":"12232"},{"size":4910,"mtime":1786084511555,"results":"15860","hashOfConfig":"12232"},{"size":5771,"mtime":1786084511555,"results":"15861","hashOfConfig":"12232"},{"size":8131,"mtime":1786084511555,"results":"15862","hashOfConfig":"12232"},{"size":3857,"mtime":1786084511556,"results":"15863","hashOfConfig":"12232"},{"size":20105,"mtime":1786084511556,"results":"15864","hashOfConfig":"12232"},{"size":44296,"mtime":1786084511556,"results":"15865","hashOfConfig":"12232"},{"size":6034,"mtime":1786084511556,"results":"15866","hashOfConfig":"12232"},{"size":5088,"mtime":1786084511557,"results":"15867","hashOfConfig":"12232"},{"size":6424,"mtime":1786084511557,"results":"15868","hashOfConfig":"12232"},{"size":2325,"mtime":1786084511557,"results":"15869","hashOfConfig":"12232"},{"size":2218,"mtime":1786084511557,"results":"15870","hashOfConfig":"12232"},{"size":4904,"mtime":1786084511557,"results":"15871","hashOfConfig":"12232"},{"size":4344,"mtime":1786084511557,"results":"15872","hashOfConfig":"12232"},{"size":6685,"mtime":1786084511557,"results":"15873","hashOfConfig":"12232"},{"size":15529,"mtime":1786084511558,"results":"15874","hashOfConfig":"12285"},{"size":3561,"mtime":1786084511558,"results":"15875","hashOfConfig":"12232"},{"size":2629,"mtime":1786084511558,"results":"15876","hashOfConfig":"12232"},{"size":5650,"mtime":1786084511558,"results":"15877","hashOfConfig":"12232"},{"size":2833,"mtime":1786084511558,"results":"15878","hashOfConfig":"12232"},{"size":2977,"mtime":1786084511558,"results":"15879","hashOfConfig":"12232"},{"size":3721,"mtime":1786084511558,"results":"15880","hashOfConfig":"12232"},{"size":1715,"mtime":1786084511558,"results":"15881","hashOfConfig":"12232"},{"size":1134,"mtime":1786084511559,"results":"15882","hashOfConfig":"12232"},{"size":3924,"mtime":1786084511559,"results":"15883","hashOfConfig":"12232"},{"size":2666,"mtime":1786084511559,"results":"15884","hashOfConfig":"12232"},{"size":3685,"mtime":1786084511559,"results":"15885","hashOfConfig":"12232"},{"size":3451,"mtime":1786084511559,"results":"15886","hashOfConfig":"12232"},{"size":4348,"mtime":1786084511559,"results":"15887","hashOfConfig":"12232"},{"size":8496,"mtime":1786084511559,"results":"15888","hashOfConfig":"12232"},{"size":4806,"mtime":1786084511560,"results":"15889","hashOfConfig":"12232"},{"size":3334,"mtime":1786084511560,"results":"15890","hashOfConfig":"12232"},{"size":2578,"mtime":1786084511560,"results":"15891","hashOfConfig":"12232"},{"size":3336,"mtime":1786084511560,"results":"15892","hashOfConfig":"12232"},{"size":9890,"mtime":1786084511560,"results":"15893","hashOfConfig":"12232"},{"size":5116,"mtime":1786084511560,"results":"15894","hashOfConfig":"12232"},{"size":16863,"mtime":1786084511561,"results":"15895","hashOfConfig":"12232"},{"size":1413,"mtime":1786084511561,"results":"15896","hashOfConfig":"12232"},{"size":4292,"mtime":1786084511561,"results":"15897","hashOfConfig":"12232"},{"size":9427,"mtime":1786084511561,"results":"15898","hashOfConfig":"12232"},{"size":2357,"mtime":1786084511561,"results":"15899","hashOfConfig":"12232"},{"size":11540,"mtime":1786084511561,"results":"15900","hashOfConfig":"12232"},{"size":13235,"mtime":1786084511561,"results":"15901","hashOfConfig":"12232"},{"size":15961,"mtime":1786084511562,"results":"15902","hashOfConfig":"12232"},{"size":7942,"mtime":1786084511562,"results":"15903","hashOfConfig":"12232"},{"size":2760,"mtime":1786084511562,"results":"15904","hashOfConfig":"12232"},{"size":13197,"mtime":1786084511562,"results":"15905","hashOfConfig":"12232"},{"size":658,"mtime":1786084511563,"results":"15906","hashOfConfig":"12232"},{"size":5879,"mtime":1786084511563,"results":"15907","hashOfConfig":"8189"},{"size":19684,"mtime":1786084511563,"results":"15908","hashOfConfig":"8189"},{"size":11249,"mtime":1786084511563,"results":"15909","hashOfConfig":"8189"},{"size":7462,"mtime":1786084511563,"results":"15910","hashOfConfig":"12232"},{"size":7401,"mtime":1786084511563,"results":"15911","hashOfConfig":"12232"},{"size":11967,"mtime":1786084511564,"results":"15912","hashOfConfig":"8189"},{"size":17295,"mtime":1786084511564,"results":"15913","hashOfConfig":"8189"},{"size":11105,"mtime":1786084511564,"results":"15914","hashOfConfig":"8189"},{"size":12939,"mtime":1786084511564,"results":"15915","hashOfConfig":"8189"},{"size":12077,"mtime":1786084511564,"results":"15916","hashOfConfig":"8189"},{"size":12120,"mtime":1786084511565,"results":"15917","hashOfConfig":"8189"},{"size":15685,"mtime":1786084511565,"results":"15918","hashOfConfig":"12232"},{"size":13002,"mtime":1786084511565,"results":"15919","hashOfConfig":"8189"},{"size":15788,"mtime":1786084511565,"results":"15920","hashOfConfig":"8189"},{"size":31326,"mtime":1786084511565,"results":"15921","hashOfConfig":"8189"},{"size":10241,"mtime":1786084511566,"results":"15922","hashOfConfig":"8189"},{"size":3598,"mtime":1786084511566,"results":"15923","hashOfConfig":"12232"},{"size":4760,"mtime":1786084511566,"results":"15924","hashOfConfig":"12232"},{"size":2716,"mtime":1786084511566,"results":"15925","hashOfConfig":"12232"},{"size":3113,"mtime":1786084511566,"results":"15926","hashOfConfig":"12232"},{"size":4684,"mtime":1786084511566,"results":"15927","hashOfConfig":"12232"},{"size":29575,"mtime":1786084511567,"results":"15928","hashOfConfig":"12232"},{"size":2188,"mtime":1786084511567,"results":"15929","hashOfConfig":"12232"},{"size":2074,"mtime":1786084511567,"results":"15930","hashOfConfig":"12232"},{"size":1986,"mtime":1786084511567,"results":"15931","hashOfConfig":"12232"},{"size":8443,"mtime":1786084511567,"results":"15932","hashOfConfig":"12232"},{"size":1866,"mtime":1786084511567,"results":"15933","hashOfConfig":"12232"},{"size":5893,"mtime":1786084511567,"results":"15934","hashOfConfig":"12232"},{"size":38310,"mtime":1786084511568,"results":"15935","hashOfConfig":"12232"},{"size":787,"mtime":1786084511568,"results":"15936","hashOfConfig":"12232"},{"size":24959,"mtime":1786084511568,"results":"15937","hashOfConfig":"12232"},{"size":5494,"mtime":1786084511568,"results":"15938","hashOfConfig":"12232"},{"size":1657,"mtime":1786084511568,"results":"15939","hashOfConfig":"12232"},{"size":8635,"mtime":1786084511569,"results":"15940","hashOfConfig":"12232"},{"size":57546,"mtime":1786084511569,"results":"15941","hashOfConfig":"12232"},{"size":41991,"mtime":1786084511569,"results":"15942","hashOfConfig":"12232"},{"size":3227,"mtime":1786084511569,"results":"15943","hashOfConfig":"12232"},{"size":3291,"mtime":1786084511569,"results":"15944","hashOfConfig":"12232"},{"size":2134,"mtime":1786084511569,"results":"15945","hashOfConfig":"12232"},{"size":12968,"mtime":1786084511570,"results":"15946","hashOfConfig":"12232"},{"size":1071,"mtime":1786084511570,"results":"15947","hashOfConfig":"12232"},{"size":7912,"mtime":1786084511570,"results":"15948","hashOfConfig":"12232"},{"size":4655,"mtime":1786084511570,"results":"15949","hashOfConfig":"12232"},{"size":37767,"mtime":1786084511570,"results":"15950","hashOfConfig":"12232"},{"size":2927,"mtime":1786084511571,"results":"15951","hashOfConfig":"12232"},{"size":9479,"mtime":1786084511571,"results":"15952","hashOfConfig":"12232"},{"size":8230,"mtime":1786084511571,"results":"15953","hashOfConfig":"12232"},{"size":15255,"mtime":1786084511571,"results":"15954","hashOfConfig":"12232"},{"size":22451,"mtime":1786084511571,"results":"15955","hashOfConfig":"12232"},{"size":4118,"mtime":1786084511572,"results":"15956","hashOfConfig":"12232"},{"size":18479,"mtime":1786084511572,"results":"15957","hashOfConfig":"12232"},{"size":4349,"mtime":1786084511572,"results":"15958","hashOfConfig":"12232"},{"size":961,"mtime":1786084511572,"results":"15959","hashOfConfig":"12232"},{"size":1302,"mtime":1786084511572,"results":"15960","hashOfConfig":"12232"},{"size":1120,"mtime":1786084511572,"results":"15961","hashOfConfig":"12232"},{"size":7290,"mtime":1786084511572,"results":"15962","hashOfConfig":"12232"},{"size":13834,"mtime":1786084511572,"results":"15963","hashOfConfig":"12232"},{"size":5283,"mtime":1786084511573,"results":"15964","hashOfConfig":"12232"},{"size":4695,"mtime":1786084511573,"results":"15965","hashOfConfig":"12232"},{"size":1802,"mtime":1786084511573,"results":"15966","hashOfConfig":"12232"},{"size":2787,"mtime":1786084511573,"results":"15967","hashOfConfig":"12232"},{"size":3252,"mtime":1786084511573,"results":"15968","hashOfConfig":"12232"},{"size":4443,"mtime":1786084511573,"results":"15969","hashOfConfig":"12232"},{"size":8375,"mtime":1786084511573,"results":"15970","hashOfConfig":"12232"},{"size":4060,"mtime":1786084511573,"results":"15971","hashOfConfig":"12232"},{"size":3379,"mtime":1786084511574,"results":"15972","hashOfConfig":"12232"},{"size":5195,"mtime":1786084511574,"results":"15973","hashOfConfig":"12232"},{"size":5883,"mtime":1786084511574,"results":"15974","hashOfConfig":"12232"},{"size":5354,"mtime":1786084511574,"results":"15975","hashOfConfig":"12232"},{"size":3832,"mtime":1786084511574,"results":"15976","hashOfConfig":"12232"},{"size":2956,"mtime":1786084511574,"results":"15977","hashOfConfig":"12232"},{"size":5645,"mtime":1786084511574,"results":"15978","hashOfConfig":"12232"},{"size":2667,"mtime":1786084511574,"results":"15979","hashOfConfig":"12232"},{"size":6516,"mtime":1786084511575,"results":"15980","hashOfConfig":"8189"},{"size":1535,"mtime":1786084511575,"results":"15981","hashOfConfig":"8189"},{"size":2959,"mtime":1786084511575,"results":"15982","hashOfConfig":"8189"},{"size":6595,"mtime":1786084511575,"results":"15983","hashOfConfig":"8189"},{"size":9705,"mtime":1786084511575,"results":"15984","hashOfConfig":"8189"},{"size":16726,"mtime":1786084511575,"results":"15985","hashOfConfig":"8189"},{"size":4782,"mtime":1786084511576,"results":"15986","hashOfConfig":"8189"},{"size":4554,"mtime":1786084511576,"results":"15987","hashOfConfig":"8189"},{"size":7649,"mtime":1786084511576,"results":"15988","hashOfConfig":"8189"},{"size":6136,"mtime":1786084511576,"results":"15989","hashOfConfig":"8189"},{"size":3387,"mtime":1786084511576,"results":"15990","hashOfConfig":"8189"},{"size":2181,"mtime":1786084511576,"results":"15991","hashOfConfig":"8189"},{"size":2154,"mtime":1786084511576,"results":"15992","hashOfConfig":"8189"},{"size":6110,"mtime":1786084511576,"results":"15993","hashOfConfig":"8189"},{"size":5340,"mtime":1786084511576,"results":"15994","hashOfConfig":"8189"},{"size":1348,"mtime":1786084511577,"results":"15995","hashOfConfig":"8189"},{"size":9877,"mtime":1786084511577,"results":"15996","hashOfConfig":"8189"},{"size":3419,"mtime":1786084511577,"results":"15997","hashOfConfig":"12232"},{"size":6041,"mtime":1786084511577,"results":"15998","hashOfConfig":"8189"},{"size":4597,"mtime":1786084511577,"results":"15999","hashOfConfig":"8189"},{"size":4136,"mtime":1786084511577,"results":"16000","hashOfConfig":"8189"},{"size":6613,"mtime":1786084511577,"results":"16001","hashOfConfig":"8189"},{"size":2949,"mtime":1786084511577,"results":"16002","hashOfConfig":"8189"},{"size":11821,"mtime":1786084511578,"results":"16003","hashOfConfig":"8189"},{"size":6652,"mtime":1786084511578,"results":"16004","hashOfConfig":"8189"},{"size":3522,"mtime":1786084511578,"results":"16005","hashOfConfig":"8189"},{"size":3716,"mtime":1786084511578,"results":"16006","hashOfConfig":"8189"},{"size":4158,"mtime":1786084511578,"results":"16007","hashOfConfig":"8189"},{"size":3783,"mtime":1786084511578,"results":"16008","hashOfConfig":"8189"},{"size":5842,"mtime":1786084511578,"results":"16009","hashOfConfig":"8189"},{"size":4312,"mtime":1786084511578,"results":"16010","hashOfConfig":"8189"},{"size":4391,"mtime":1786084511578,"results":"16011","hashOfConfig":"8189"},{"size":1531,"mtime":1786084511579,"results":"16012","hashOfConfig":"8189"},{"size":5665,"mtime":1786084511579,"results":"16013","hashOfConfig":"8189"},{"size":2977,"mtime":1786084511579,"results":"16014","hashOfConfig":"8189"},{"size":2887,"mtime":1786084511579,"results":"16015","hashOfConfig":"8189"},{"size":3488,"mtime":1786084511579,"results":"16016","hashOfConfig":"8189"},{"size":2927,"mtime":1786084511579,"results":"16017","hashOfConfig":"8189"},{"size":4161,"mtime":1786084511579,"results":"16018","hashOfConfig":"12232"},{"size":4951,"mtime":1786084511580,"results":"16019","hashOfConfig":"12232"},{"size":12938,"mtime":1786084511580,"results":"16020","hashOfConfig":"12232"},{"size":8393,"mtime":1786084511580,"results":"16021","hashOfConfig":"8189"},{"size":2194,"mtime":1786084511580,"results":"16022","hashOfConfig":"8189"},{"size":373,"mtime":1786084511580,"results":"16023","hashOfConfig":"8189"},{"size":3806,"mtime":1786084511581,"results":"16024","hashOfConfig":"8189"},{"size":4394,"mtime":1786084511581,"results":"16025","hashOfConfig":"8189"},{"size":5676,"mtime":1786084511581,"results":"16026","hashOfConfig":"8189"},{"size":5848,"mtime":1786084511581,"results":"16027","hashOfConfig":"8189"},{"size":4808,"mtime":1786084511581,"results":"16028","hashOfConfig":"8189"},{"size":4912,"mtime":1786084511581,"results":"16029","hashOfConfig":"8189"},{"size":4052,"mtime":1786084511582,"results":"16030","hashOfConfig":"8189"},{"size":4645,"mtime":1786084511582,"results":"16031","hashOfConfig":"8189"},{"size":3602,"mtime":1786084511582,"results":"16032","hashOfConfig":"12232"},{"size":3500,"mtime":1786084511582,"results":"16033","hashOfConfig":"8189"},{"size":4887,"mtime":1786084511582,"results":"16034","hashOfConfig":"8189"},{"size":5180,"mtime":1786084511583,"results":"16035","hashOfConfig":"8189"},{"size":2033,"mtime":1786084511583,"results":"16036","hashOfConfig":"8189"},{"size":7341,"mtime":1786084511583,"results":"16037","hashOfConfig":"8189"},{"size":7968,"mtime":1786084511583,"results":"16038","hashOfConfig":"12232"},{"size":5668,"mtime":1786084511583,"results":"16039","hashOfConfig":"8189"},{"size":6605,"mtime":1786084511584,"results":"16040","hashOfConfig":"8189"},{"size":7136,"mtime":1786084511584,"results":"16041","hashOfConfig":"8189"},{"size":7280,"mtime":1786084511584,"results":"16042","hashOfConfig":"8189"},{"size":5631,"mtime":1786084511584,"results":"16043","hashOfConfig":"8189"},{"size":2167,"mtime":1786084511584,"results":"16044","hashOfConfig":"8189"},{"size":5653,"mtime":1786084511584,"results":"16045","hashOfConfig":"8189"},{"size":5854,"mtime":1786084511585,"results":"16046","hashOfConfig":"8189"},{"size":3665,"mtime":1786084511585,"results":"16047","hashOfConfig":"8189"},{"size":2814,"mtime":1786084511585,"results":"16048","hashOfConfig":"8189"},{"size":7308,"mtime":1786084511585,"results":"16049","hashOfConfig":"8189"},{"size":5763,"mtime":1786084511585,"results":"16050","hashOfConfig":"8189"},{"size":4115,"mtime":1786084511586,"results":"16051","hashOfConfig":"8189"},{"size":2815,"mtime":1786084511586,"results":"16052","hashOfConfig":"8189"},{"size":4456,"mtime":1786084511586,"results":"16053","hashOfConfig":"8189"},{"size":1076,"mtime":1786084511586,"results":"16054","hashOfConfig":"8189"},{"size":2372,"mtime":1786084511586,"results":"16055","hashOfConfig":"12232"},{"size":7910,"mtime":1786084511586,"results":"16056","hashOfConfig":"8189"},{"size":9943,"mtime":1786084511587,"results":"16057","hashOfConfig":"8189"},{"size":6358,"mtime":1786084511587,"results":"16058","hashOfConfig":"8189"},{"size":7050,"mtime":1786084511587,"results":"16059","hashOfConfig":"8189"},{"size":7175,"mtime":1786084511587,"results":"16060","hashOfConfig":"8189"},{"size":8346,"mtime":1786084511587,"results":"16061","hashOfConfig":"8189"},{"size":17447,"mtime":1786084511588,"results":"16062","hashOfConfig":"8189"},{"size":4771,"mtime":1786084511588,"results":"16063","hashOfConfig":"8189"},{"size":386,"mtime":1786084511588,"results":"16064","hashOfConfig":"8189"},{"size":1069,"mtime":1786084511588,"results":"16065","hashOfConfig":"8189"},{"size":6745,"mtime":1786084511588,"results":"16066","hashOfConfig":"12232"},{"size":2672,"mtime":1786084511588,"results":"16067","hashOfConfig":"8189"},{"size":11131,"mtime":1786084511589,"results":"16068","hashOfConfig":"8189"},{"size":11993,"mtime":1786084511589,"results":"16069","hashOfConfig":"8189"},{"size":8551,"mtime":1786084511589,"results":"16070","hashOfConfig":"8189"},{"size":1095,"mtime":1786084511589,"results":"16071","hashOfConfig":"8189"},{"size":15878,"mtime":1786084511590,"results":"16072","hashOfConfig":"8189"},{"size":3953,"mtime":1786084511590,"results":"16073","hashOfConfig":"8189"},{"size":2107,"mtime":1786084511590,"results":"16074","hashOfConfig":"8189"},{"size":5040,"mtime":1786084511590,"results":"16075","hashOfConfig":"8189"},{"size":2867,"mtime":1786084511590,"results":"16076","hashOfConfig":"8189"},{"size":4195,"mtime":1786084511590,"results":"16077","hashOfConfig":"8189"},{"size":2532,"mtime":1786084511591,"results":"16078","hashOfConfig":"8189"},{"size":2627,"mtime":1786084511591,"results":"16079","hashOfConfig":"8189"},{"size":4936,"mtime":1786084511591,"results":"16080","hashOfConfig":"8189"},{"size":2140,"mtime":1786084511591,"results":"16081","hashOfConfig":"12232"},{"size":1853,"mtime":1786084511592,"results":"16082","hashOfConfig":"12232"},{"size":384,"mtime":1786084511592,"results":"16083","hashOfConfig":"8189"},{"size":3523,"mtime":1786084511592,"results":"16084","hashOfConfig":"8189"},{"size":2520,"mtime":1786084511592,"results":"16085","hashOfConfig":"8189"},{"size":4087,"mtime":1786084511592,"results":"16086","hashOfConfig":"8189"},{"size":2572,"mtime":1786084511592,"results":"16087","hashOfConfig":"12232"},{"size":1341,"mtime":1786084511592,"results":"16088","hashOfConfig":"8189"},{"size":501,"mtime":1786084511593,"results":"16089","hashOfConfig":"8189"},{"size":6662,"mtime":1786084511593,"results":"16090","hashOfConfig":"8189"},{"size":5376,"mtime":1786084511593,"results":"16091","hashOfConfig":"8189"},{"size":10553,"mtime":1786084511593,"results":"16092","hashOfConfig":"8189"},{"size":4985,"mtime":1786084511593,"results":"16093","hashOfConfig":"8189"},{"size":2235,"mtime":1786084511593,"results":"16094","hashOfConfig":"8189"},{"size":3725,"mtime":1786084511594,"results":"16095","hashOfConfig":"8189"},{"size":8780,"mtime":1786084511594,"results":"16096","hashOfConfig":"8189"},{"size":3624,"mtime":1786084511594,"results":"16097","hashOfConfig":"8189"},{"size":6853,"mtime":1786084511594,"results":"16098","hashOfConfig":"8189"},{"size":7092,"mtime":1786084511594,"results":"16099","hashOfConfig":"8189"},{"size":9712,"mtime":1786084511595,"results":"16100","hashOfConfig":"8189"},{"size":3983,"mtime":1786084511595,"results":"16101","hashOfConfig":"8189"},{"size":7553,"mtime":1786084511595,"results":"16102","hashOfConfig":"8189"},{"size":2659,"mtime":1786084511595,"results":"16103","hashOfConfig":"8189"},{"size":2993,"mtime":1786084511595,"results":"16104","hashOfConfig":"8189"},{"size":3222,"mtime":1786084511596,"results":"16105","hashOfConfig":"8189"},{"size":10162,"mtime":1786084511596,"results":"16106","hashOfConfig":"8189"},{"size":3751,"mtime":1786084511596,"results":"16107","hashOfConfig":"8189"},{"size":5297,"mtime":1786084511596,"results":"16108","hashOfConfig":"8189"},{"size":2941,"mtime":1786084511596,"results":"16109","hashOfConfig":"8189"},{"size":1204,"mtime":1786084511597,"results":"16110","hashOfConfig":"8189"},{"size":1848,"mtime":1786084511597,"results":"16111","hashOfConfig":"8189"},{"size":10653,"mtime":1786084511597,"results":"16112","hashOfConfig":"8189"},{"size":10204,"mtime":1786084511597,"results":"16113","hashOfConfig":"8189"},{"size":10254,"mtime":1786084511597,"results":"16114","hashOfConfig":"8189"},{"size":4831,"mtime":1786084511598,"results":"16115","hashOfConfig":"8189"},{"size":9050,"mtime":1786084511598,"results":"16116","hashOfConfig":"8189"},{"size":7296,"mtime":1786084511598,"results":"16117","hashOfConfig":"8189"},{"size":5754,"mtime":1786084511598,"results":"16118","hashOfConfig":"8189"},{"size":5674,"mtime":1786084511598,"results":"16119","hashOfConfig":"8189"},{"size":5426,"mtime":1786084511599,"results":"16120","hashOfConfig":"8189"},{"size":6817,"mtime":1786084511599,"results":"16121","hashOfConfig":"8189"},{"size":5776,"mtime":1786084511599,"results":"16122","hashOfConfig":"8189"},{"size":10125,"mtime":1786084511599,"results":"16123","hashOfConfig":"8189"},{"size":7730,"mtime":1786084511599,"results":"16124","hashOfConfig":"8189"},{"size":3442,"mtime":1786084511600,"results":"16125","hashOfConfig":"8189"},{"size":5800,"mtime":1786084511600,"results":"16126","hashOfConfig":"8189"},{"size":4783,"mtime":1786084511600,"results":"16127","hashOfConfig":"8189"},{"size":1235,"mtime":1786084511600,"results":"16128","hashOfConfig":"8189"},{"size":3377,"mtime":1786084511600,"results":"16129","hashOfConfig":"8189"},{"size":2118,"mtime":1786084511600,"results":"16130","hashOfConfig":"8189"},{"size":4281,"mtime":1786084511601,"results":"16131","hashOfConfig":"8189"},{"size":4188,"mtime":1786084511601,"results":"16132","hashOfConfig":"8189"},{"size":10955,"mtime":1786084511601,"results":"16133","hashOfConfig":"8189"},{"size":3435,"mtime":1786084511601,"results":"16134","hashOfConfig":"8189"},{"size":3078,"mtime":1786084511601,"results":"16135","hashOfConfig":"8189"},{"size":4422,"mtime":1786084511601,"results":"16136","hashOfConfig":"8189"},{"size":5819,"mtime":1786084511602,"results":"16137","hashOfConfig":"8189"},{"size":11232,"mtime":1786084511602,"results":"16138","hashOfConfig":"8189"},{"size":1422,"mtime":1786084511602,"results":"16139","hashOfConfig":"8189"},{"size":2045,"mtime":1786084511602,"results":"16140","hashOfConfig":"12232"},{"size":2832,"mtime":1786084511602,"results":"16141","hashOfConfig":"8189"},{"size":6707,"mtime":1786084511603,"results":"16142","hashOfConfig":"8189"},{"size":9162,"mtime":1786084511603,"results":"16143","hashOfConfig":"8189"},{"size":11785,"mtime":1786084511603,"results":"16144","hashOfConfig":"8189"},{"size":9460,"mtime":1786084511603,"results":"16145","hashOfConfig":"8189"},{"size":1574,"mtime":1786084511603,"results":"16146","hashOfConfig":"8189"},{"size":4114,"mtime":1786084511604,"results":"16147","hashOfConfig":"8189"},{"size":6087,"mtime":1786084511604,"results":"16148","hashOfConfig":"8189"},{"size":4720,"mtime":1786084511604,"results":"16149","hashOfConfig":"8189"},{"size":6857,"mtime":1786084511604,"results":"16150","hashOfConfig":"8189"},{"size":3572,"mtime":1786084511604,"results":"16151","hashOfConfig":"8189"},{"size":5261,"mtime":1786084511604,"results":"16152","hashOfConfig":"8189"},{"size":11235,"mtime":1786084511604,"results":"16153","hashOfConfig":"8189"},{"size":4857,"mtime":1786084511605,"results":"16154","hashOfConfig":"8189"},{"size":7917,"mtime":1786084511605,"results":"16155","hashOfConfig":"8189"},{"size":8638,"mtime":1786084511605,"results":"16156","hashOfConfig":"8189"},{"size":10856,"mtime":1786084511605,"results":"16157","hashOfConfig":"8189"},{"size":9973,"mtime":1786084511605,"results":"16158","hashOfConfig":"8189"},{"size":9538,"mtime":1786084511605,"results":"16159","hashOfConfig":"8189"},{"size":2943,"mtime":1786084511606,"results":"16160","hashOfConfig":"8189"},{"size":5523,"mtime":1786084511606,"results":"16161","hashOfConfig":"8189"},{"size":3859,"mtime":1786084511606,"results":"16162","hashOfConfig":"12232"},{"size":1874,"mtime":1786084511606,"results":"16163","hashOfConfig":"8189"},{"size":5188,"mtime":1786084511606,"results":"16164","hashOfConfig":"8189"},{"size":3069,"mtime":1786084511606,"results":"16165","hashOfConfig":"8189"},{"size":2476,"mtime":1786084511606,"results":"16166","hashOfConfig":"8189"},{"size":1872,"mtime":1786084511606,"results":"16167","hashOfConfig":"8189"},{"size":1381,"mtime":1786084511606,"results":"16168","hashOfConfig":"8189"},{"size":3319,"mtime":1786084511606,"results":"16169","hashOfConfig":"8189"},{"size":4343,"mtime":1786084511607,"results":"16170","hashOfConfig":"8189"},{"size":2934,"mtime":1786084511607,"results":"16171","hashOfConfig":"8189"},{"size":2076,"mtime":1786084511607,"results":"16172","hashOfConfig":"8189"},{"size":3450,"mtime":1786084511607,"results":"16173","hashOfConfig":"8189"},{"size":6875,"mtime":1786084511607,"results":"16174","hashOfConfig":"8189"},{"size":5521,"mtime":1786084511607,"results":"16175","hashOfConfig":"8189"},{"size":4819,"mtime":1786084511607,"results":"16176","hashOfConfig":"8189"},{"size":7618,"mtime":1786084511608,"results":"16177","hashOfConfig":"8189"},{"size":9240,"mtime":1786084511608,"results":"16178","hashOfConfig":"8189"},{"size":3081,"mtime":1786084511608,"results":"16179","hashOfConfig":"8189"},{"size":4534,"mtime":1786084511608,"results":"16180","hashOfConfig":"8189"},{"size":8959,"mtime":1786084511608,"results":"16181","hashOfConfig":"8189"},{"size":9238,"mtime":1786084511608,"results":"16182","hashOfConfig":"8189"},{"size":5785,"mtime":1786084511608,"results":"16183","hashOfConfig":"8189"},{"size":9495,"mtime":1786084511608,"results":"16184","hashOfConfig":"8189"},{"size":6334,"mtime":1786084511609,"results":"16185","hashOfConfig":"8189"},{"size":4111,"mtime":1786084511609,"results":"16186","hashOfConfig":"8189"},{"size":2310,"mtime":1786084511609,"results":"16187","hashOfConfig":"8189"},{"size":6925,"mtime":1786084511609,"results":"16188","hashOfConfig":"8189"},{"size":5222,"mtime":1786084511609,"results":"16189","hashOfConfig":"8189"},{"size":3473,"mtime":1786084511609,"results":"16190","hashOfConfig":"8189"},{"size":4882,"mtime":1786084511574,"results":"16191","hashOfConfig":"12232"},{"size":8202,"mtime":1786084511609,"results":"16192","hashOfConfig":"12232"},{"size":1749,"mtime":1786084511609,"results":"16193","hashOfConfig":"12232"},{"size":4918,"mtime":1786084511609,"results":"16194","hashOfConfig":"12232"},{"size":4596,"mtime":1786084511610,"results":"16195","hashOfConfig":"12232"},{"size":887,"mtime":1786084511610,"results":"16196","hashOfConfig":"12232"},{"size":4131,"mtime":1786084511610,"results":"16197","hashOfConfig":"12232"},{"size":1650,"mtime":1786084511610,"results":"16198","hashOfConfig":"12232"},{"size":2329,"mtime":1786084511610,"results":"16199","hashOfConfig":"12232"},{"size":1682,"mtime":1786084511610,"results":"16200","hashOfConfig":"12232"},{"size":4844,"mtime":1786084511615,"results":"16201","hashOfConfig":"12232"},{"size":12872,"mtime":1786084511610,"results":"16202","hashOfConfig":"12232"},{"size":1221,"mtime":1786084511610,"results":"16203","hashOfConfig":"12232"},{"size":2967,"mtime":1786084511610,"results":"16204","hashOfConfig":"12232"},{"size":3181,"mtime":1786084511611,"results":"16205","hashOfConfig":"12232"},{"size":23562,"mtime":1786084511611,"results":"16206","hashOfConfig":"12232"},{"size":19396,"mtime":1786084511611,"results":"16207","hashOfConfig":"12232"},{"size":2412,"mtime":1786084511611,"results":"16208","hashOfConfig":"12232"},{"size":2236,"mtime":1786084511611,"results":"16209","hashOfConfig":"12232"},{"size":5005,"mtime":1786084511611,"results":"16210","hashOfConfig":"12232"},{"size":5396,"mtime":1786084511611,"results":"16211","hashOfConfig":"12232"},{"size":2771,"mtime":1786084511611,"results":"16212","hashOfConfig":"12232"},{"size":2781,"mtime":1786084511612,"results":"16213","hashOfConfig":"12232"},{"size":4163,"mtime":1786084511612,"results":"16214","hashOfConfig":"12232"},{"size":1539,"mtime":1786084511612,"results":"16215","hashOfConfig":"12232"},{"size":12235,"mtime":1786084511612,"results":"16216","hashOfConfig":"12232"},{"size":3347,"mtime":1786084511612,"results":"16217","hashOfConfig":"12232"},{"size":2546,"mtime":1786084511612,"results":"16218","hashOfConfig":"12232"},{"size":1548,"mtime":1786084511612,"results":"16219","hashOfConfig":"12232"},{"size":5240,"mtime":1786084511612,"results":"16220","hashOfConfig":"12232"},{"size":11906,"mtime":1786084511613,"results":"16221","hashOfConfig":"12232"},{"size":5173,"mtime":1786084511613,"results":"16222","hashOfConfig":"12232"},{"size":13149,"mtime":1786084511613,"results":"16223","hashOfConfig":"12232"},{"size":2263,"mtime":1786084511613,"results":"16224","hashOfConfig":"12232"},{"size":2811,"mtime":1786084511613,"results":"16225","hashOfConfig":"12232"},{"size":929,"mtime":1786084511613,"results":"16226","hashOfConfig":"12232"},{"size":4036,"mtime":1786084511613,"results":"16227","hashOfConfig":"12232"},{"size":5858,"mtime":1786084511613,"results":"16228","hashOfConfig":"12232"},{"size":2423,"mtime":1786084511613,"results":"16229","hashOfConfig":"12232"},{"size":2385,"mtime":1786084511614,"results":"16230","hashOfConfig":"12232"},{"size":2256,"mtime":1786084511614,"results":"16231","hashOfConfig":"12232"},{"size":2693,"mtime":1786084511614,"results":"16232","hashOfConfig":"12232"},{"size":3236,"mtime":1786084511614,"results":"16233","hashOfConfig":"12232"},{"size":5194,"mtime":1786084511614,"results":"16234","hashOfConfig":"12232"},{"size":49189,"mtime":1786084511614,"results":"16235","hashOfConfig":"12232"},{"size":7479,"mtime":1786084511614,"results":"16236","hashOfConfig":"12232"},{"size":13147,"mtime":1786084511615,"results":"16237","hashOfConfig":"12232"},{"size":2944,"mtime":1786084511615,"results":"16238","hashOfConfig":"12232"},{"size":2594,"mtime":1786084511615,"results":"16239","hashOfConfig":"12232"},{"size":2790,"mtime":1786084511615,"results":"16240","hashOfConfig":"12232"},{"size":5102,"mtime":1786084511615,"results":"16241","hashOfConfig":"12232"},{"size":3071,"mtime":1786084511615,"results":"16242","hashOfConfig":"12232"},{"size":5064,"mtime":1786084511616,"results":"16243","hashOfConfig":"12232"},{"size":2984,"mtime":1786084511616,"results":"16244","hashOfConfig":"12232"},{"size":3646,"mtime":1786084511616,"results":"16245","hashOfConfig":"12232"},{"size":2527,"mtime":1786084511616,"results":"16246","hashOfConfig":"12232"},{"size":3037,"mtime":1786084511616,"results":"16247","hashOfConfig":"12232"},{"size":3448,"mtime":1786084511616,"results":"16248","hashOfConfig":"12232"},{"size":4195,"mtime":1786084511616,"results":"16249","hashOfConfig":"12232"},{"size":5910,"mtime":1786084511616,"results":"16250","hashOfConfig":"12232"},{"size":6329,"mtime":1786084511616,"results":"16251","hashOfConfig":"12232"},{"size":3884,"mtime":1786084511616,"results":"16252","hashOfConfig":"12232"},{"size":8535,"mtime":1786084511617,"results":"16253","hashOfConfig":"12232"},{"size":4988,"mtime":1786084511617,"results":"16254","hashOfConfig":"12232"},{"size":3417,"mtime":1786084511617,"results":"16255","hashOfConfig":"12232"},{"size":10054,"mtime":1786084511617,"results":"16256","hashOfConfig":"12232"},{"size":3579,"mtime":1786084511617,"results":"16257","hashOfConfig":"12232"},{"size":2459,"mtime":1786084511617,"results":"16258","hashOfConfig":"12232"},{"size":1855,"mtime":1786084511617,"results":"16259","hashOfConfig":"12232"},{"size":3123,"mtime":1786084511617,"results":"16260","hashOfConfig":"12232"},{"size":1292,"mtime":1786084511617,"results":"16261","hashOfConfig":"12232"},{"size":14494,"mtime":1786084511618,"results":"16262","hashOfConfig":"12232"},{"size":6431,"mtime":1786084511618,"results":"16263","hashOfConfig":"12232"},{"size":1481,"mtime":1786084511618,"results":"16264","hashOfConfig":"12232"},{"size":1341,"mtime":1786084511618,"results":"16265","hashOfConfig":"12232"},{"size":1861,"mtime":1786084511618,"results":"16266","hashOfConfig":"12232"},{"size":2330,"mtime":1786084511618,"results":"16267","hashOfConfig":"12232"},{"size":3139,"mtime":1786084511618,"results":"16268","hashOfConfig":"12232"},{"size":3809,"mtime":1786084511618,"results":"16269","hashOfConfig":"12232"},{"size":1757,"mtime":1786084511618,"results":"16270","hashOfConfig":"12232"},{"size":2964,"mtime":1786084511618,"results":"16271","hashOfConfig":"12232"},{"size":2190,"mtime":1786084511619,"results":"16272","hashOfConfig":"12232"},{"size":3025,"mtime":1786084511619,"results":"16273","hashOfConfig":"12232"},{"size":5508,"mtime":1786084511619,"results":"16274","hashOfConfig":"12232"},{"size":11310,"mtime":1786084511619,"results":"16275","hashOfConfig":"12232"},{"size":4297,"mtime":1786084511619,"results":"16276","hashOfConfig":"12232"},{"size":2182,"mtime":1786084511619,"results":"16277","hashOfConfig":"12232"},{"size":3602,"mtime":1786084511619,"results":"16278","hashOfConfig":"12232"},{"size":3517,"mtime":1786084511619,"results":"16279","hashOfConfig":"12232"},{"size":5042,"mtime":1786084511619,"results":"16280","hashOfConfig":"12232"},{"size":1895,"mtime":1786084511620,"results":"16281","hashOfConfig":"12232"},{"size":7789,"mtime":1786084511620,"results":"16282","hashOfConfig":"12232"},{"size":3027,"mtime":1786084511620,"results":"16283","hashOfConfig":"12232"},{"size":1499,"mtime":1786084511620,"results":"16284","hashOfConfig":"12232"},{"size":12584,"mtime":1786084511620,"results":"16285","hashOfConfig":"12232"},{"size":2461,"mtime":1786084511620,"results":"16286","hashOfConfig":"12232"},{"size":4144,"mtime":1786084511620,"results":"16287","hashOfConfig":"12232"},{"size":6415,"mtime":1786088242944,"results":"16288","hashOfConfig":"12232"},{"size":6945,"mtime":1786084511620,"results":"16289","hashOfConfig":"12232"},{"size":1374,"mtime":1786084511620,"results":"16290","hashOfConfig":"12232"},{"size":4613,"mtime":1786084511621,"results":"16291","hashOfConfig":"12232"},{"size":1834,"mtime":1786084511621,"results":"16292","hashOfConfig":"12232"},{"size":6967,"mtime":1786084511621,"results":"16293","hashOfConfig":"12232"},{"size":17591,"mtime":1786084511621,"results":"16294","hashOfConfig":"12232"},{"size":11104,"mtime":1786084511621,"results":"16295","hashOfConfig":"12232"},{"size":7458,"mtime":1786084511621,"results":"16296","hashOfConfig":"12232"},{"size":9463,"mtime":1786084511621,"results":"16297","hashOfConfig":"12232"},{"size":7869,"mtime":1786084511622,"results":"16298","hashOfConfig":"12232"},{"size":6821,"mtime":1786084511622,"results":"16299","hashOfConfig":"12232"},{"size":8024,"mtime":1786084511622,"results":"16300","hashOfConfig":"12232"},{"size":3955,"mtime":1786084511622,"results":"16301","hashOfConfig":"12232"},{"size":790,"mtime":1786084511622,"results":"16302","hashOfConfig":"12232"},{"size":4840,"mtime":1786084529051,"results":"16303","hashOfConfig":"12232"},{"size":3265,"mtime":1786084511622,"results":"16304","hashOfConfig":"12232"},{"size":2701,"mtime":1786084511622,"results":"16305","hashOfConfig":"12232"},{"size":3931,"mtime":1786084511623,"results":"16306","hashOfConfig":"12232"},{"size":3801,"mtime":1786084511623,"results":"16307","hashOfConfig":"12232"},{"size":3937,"mtime":1786084511623,"results":"16308","hashOfConfig":"12232"},{"size":5674,"mtime":1786084511623,"results":"16309","hashOfConfig":"12232"},{"size":3689,"mtime":1786084511623,"results":"16310","hashOfConfig":"12232"},{"size":4158,"mtime":1786084511623,"results":"16311","hashOfConfig":"12232"},{"size":2071,"mtime":1786084511623,"results":"16312","hashOfConfig":"12232"},{"size":6797,"mtime":1786084511623,"results":"16313","hashOfConfig":"12232"},{"size":6000,"mtime":1786084511623,"results":"16314","hashOfConfig":"12232"},{"size":46093,"mtime":1786084511624,"results":"16315","hashOfConfig":"12232"},{"size":1947,"mtime":1786084511624,"results":"16316","hashOfConfig":"12232"},{"size":3002,"mtime":1786084511624,"results":"16317","hashOfConfig":"12232"},{"size":2827,"mtime":1786084511624,"results":"16318","hashOfConfig":"12285"},{"size":5862,"mtime":1786084511624,"results":"16319","hashOfConfig":"12232"},{"size":31230,"mtime":1786084511624,"results":"16320","hashOfConfig":"12232"},{"size":4998,"mtime":1786084511625,"results":"16321","hashOfConfig":"12232"},{"size":1724,"mtime":1786084511625,"results":"16322","hashOfConfig":"12232"},{"size":4408,"mtime":1786084511625,"results":"16323","hashOfConfig":"12232"},{"size":5155,"mtime":1786084511625,"results":"16324","hashOfConfig":"12232"},{"size":5222,"mtime":1786084511625,"results":"16325","hashOfConfig":"12232"},{"size":5187,"mtime":1786084511625,"results":"16326","hashOfConfig":"12232"},{"size":9204,"mtime":1786084511625,"results":"16327","hashOfConfig":"12232"},{"size":2593,"mtime":1786084511625,"results":"16328","hashOfConfig":"12232"},{"size":11526,"mtime":1786084511625,"results":"16329","hashOfConfig":"12232"},{"size":6396,"mtime":1786084511626,"results":"16330","hashOfConfig":"12232"},{"size":5390,"mtime":1786084511626,"results":"16331","hashOfConfig":"12232"},{"size":1779,"mtime":1786084511626,"results":"16332","hashOfConfig":"12232"},{"size":13321,"mtime":1786084511626,"results":"16333","hashOfConfig":"12232"},{"size":1134,"mtime":1786084511626,"results":"16334","hashOfConfig":"12232"},{"size":6047,"mtime":1786084511626,"results":"16335","hashOfConfig":"12232"},{"size":2440,"mtime":1786084511626,"results":"16336","hashOfConfig":"12232"},{"size":9258,"mtime":1786084511626,"results":"16337","hashOfConfig":"12232"},{"size":32061,"mtime":1786084511626,"results":"16338","hashOfConfig":"12232"},{"size":2365,"mtime":1786084511627,"results":"16339","hashOfConfig":"12232"},{"size":3591,"mtime":1786084511627,"results":"16340","hashOfConfig":"12232"},{"size":1569,"mtime":1786084511627,"results":"16341","hashOfConfig":"12232"},{"size":1169,"mtime":1786084511627,"results":"16342","hashOfConfig":"12232"},{"size":1694,"mtime":1786084511627,"results":"16343","hashOfConfig":"12232"},{"size":583,"mtime":1786084511627,"results":"16344","hashOfConfig":"12232"},{"size":2720,"mtime":1786084511627,"results":"16345","hashOfConfig":"12232"},{"size":2663,"mtime":1786084511627,"results":"16346","hashOfConfig":"12232"},{"size":2127,"mtime":1786084511627,"results":"16347","hashOfConfig":"12232"},{"size":4649,"mtime":1786084511627,"results":"16348","hashOfConfig":"12232"},{"size":3278,"mtime":1786084511627,"results":"16349","hashOfConfig":"12232"},{"size":13596,"mtime":1786084511628,"results":"16350","hashOfConfig":"12232"},{"size":2464,"mtime":1786084511628,"results":"16351","hashOfConfig":"12232"},{"size":4174,"mtime":1786084511628,"results":"16352","hashOfConfig":"12232"},{"size":6661,"mtime":1786084511628,"results":"16353","hashOfConfig":"12232"},{"size":2063,"mtime":1786084511628,"results":"16354","hashOfConfig":"12232"},{"size":3109,"mtime":1786084511628,"results":"16355","hashOfConfig":"12232"},{"size":13631,"mtime":1786084511628,"results":"16356","hashOfConfig":"12232"},{"size":3917,"mtime":1786084511628,"results":"16357","hashOfConfig":"12232"},{"size":13110,"mtime":1786084511628,"results":"16358","hashOfConfig":"12232"},{"size":6459,"mtime":1786084511629,"results":"16359","hashOfConfig":"12232"},{"size":4859,"mtime":1786084511629,"results":"16360","hashOfConfig":"12232"},{"size":5026,"mtime":1786084511629,"results":"16361","hashOfConfig":"12232"},{"size":2038,"mtime":1786084511629,"results":"16362","hashOfConfig":"12232"},{"size":8772,"mtime":1786084511629,"results":"16363","hashOfConfig":"12232"},{"size":19985,"mtime":1786084511629,"results":"16364","hashOfConfig":"12232"},{"size":4974,"mtime":1786084511629,"results":"16365","hashOfConfig":"12232"},{"size":3963,"mtime":1786084511629,"results":"16366","hashOfConfig":"12232"},{"size":4076,"mtime":1786084511629,"results":"16367","hashOfConfig":"12232"},{"size":9975,"mtime":1786084511630,"results":"16368","hashOfConfig":"12232"},{"size":2366,"mtime":1786084511630,"results":"16369","hashOfConfig":"12232"},{"size":2138,"mtime":1786084511630,"results":"16370","hashOfConfig":"12232"},{"size":2195,"mtime":1786084511630,"results":"16371","hashOfConfig":"12232"},{"size":2173,"mtime":1786084511630,"results":"16372","hashOfConfig":"12232"},{"size":7759,"mtime":1786084511630,"results":"16373","hashOfConfig":"12232"},{"size":1414,"mtime":1786084511630,"results":"16374","hashOfConfig":"12232"},{"size":8720,"mtime":1786084511630,"results":"16375","hashOfConfig":"12232"},{"size":1407,"mtime":1786084511631,"results":"16376","hashOfConfig":"12232"},{"size":2791,"mtime":1786084511631,"results":"16377","hashOfConfig":"12232"},{"size":1808,"mtime":1786084511631,"results":"16378","hashOfConfig":"12232"},{"size":2801,"mtime":1786084511631,"results":"16379","hashOfConfig":"12232"},{"size":17117,"mtime":1786084511631,"results":"16380","hashOfConfig":"12232"},{"size":9082,"mtime":1786084511631,"results":"16381","hashOfConfig":"12232"},{"size":4911,"mtime":1786084511631,"results":"16382","hashOfConfig":"12232"},{"size":2560,"mtime":1786084511631,"results":"16383","hashOfConfig":"12232"},{"size":1697,"mtime":1786084511632,"results":"16384","hashOfConfig":"8189"},{"size":1300,"mtime":1786084511632,"results":"16385","hashOfConfig":"8189"},{"filePath":"16386","messages":"16387","suppressedMessages":"16388","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"pvwjgk",{"filePath":"16389","messages":"16390","suppressedMessages":"16391","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16392","messages":"16393","suppressedMessages":"16394","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16395","messages":"16396","suppressedMessages":"16397","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16398","messages":"16399","suppressedMessages":"16400","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16401","messages":"16402","suppressedMessages":"16403","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16404","messages":"16405","suppressedMessages":"16406","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16407","messages":"16408","suppressedMessages":"16409","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16410","messages":"16411","suppressedMessages":"16412","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16413","messages":"16414","suppressedMessages":"16415","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16416","messages":"16417","suppressedMessages":"16418","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16419","messages":"16420","suppressedMessages":"16421","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16422","messages":"16423","suppressedMessages":"16424","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16425","messages":"16426","suppressedMessages":"16427","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16428","messages":"16429","suppressedMessages":"16430","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16431","messages":"16432","suppressedMessages":"16433","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16434","messages":"16435","suppressedMessages":"16436","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16437","messages":"16438","suppressedMessages":"16439","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16440","messages":"16441","suppressedMessages":"16442","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16443","messages":"16444","suppressedMessages":"16445","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16446","messages":"16447","suppressedMessages":"16448","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16449","messages":"16450","suppressedMessages":"16451","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16452","messages":"16453","suppressedMessages":"16454","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16455","messages":"16456","suppressedMessages":"16457","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16458","messages":"16459","suppressedMessages":"16460","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16461","messages":"16462","suppressedMessages":"16463","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16464","messages":"16465","suppressedMessages":"16466","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"jf3292",{"filePath":"16467","messages":"16468","suppressedMessages":"16469","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16470","messages":"16471","suppressedMessages":"16472","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16473","messages":"16474","suppressedMessages":"16475","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16476","messages":"16477","suppressedMessages":"16478","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16479","messages":"16480","suppressedMessages":"16481","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16482","messages":"16483","suppressedMessages":"16484","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16485","messages":"16486","suppressedMessages":"16487","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16488","messages":"16489","suppressedMessages":"16490","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16491","messages":"16492","suppressedMessages":"16493","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16494","messages":"16495","suppressedMessages":"16496","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16497","messages":"16498","suppressedMessages":"16499","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16500","messages":"16501","suppressedMessages":"16502","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16503","messages":"16504","suppressedMessages":"16505","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16506","messages":"16507","suppressedMessages":"16508","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"wjq4sy",{"filePath":"16509","messages":"16510","suppressedMessages":"16511","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16512","messages":"16513","suppressedMessages":"16514","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16515","messages":"16516","suppressedMessages":"16517","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16518","messages":"16519","suppressedMessages":"16520","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16521","messages":"16522","suppressedMessages":"16523","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16524","messages":"16525","suppressedMessages":"16526","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16527","messages":"16528","suppressedMessages":"16529","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16530","messages":"16531","suppressedMessages":"16532","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16533","messages":"16534","suppressedMessages":"16535","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16536","messages":"16537","suppressedMessages":"16538","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16539","messages":"16540","suppressedMessages":"16541","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16542","messages":"16543","suppressedMessages":"16544","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16545","messages":"16546","suppressedMessages":"16547","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16548","messages":"16549","suppressedMessages":"16550","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16551","messages":"16552","suppressedMessages":"16553","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16554","messages":"16555","suppressedMessages":"16556","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16557","messages":"16558","suppressedMessages":"16559","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16560","messages":"16561","suppressedMessages":"16562","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16563","messages":"16564","suppressedMessages":"16565","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16566","messages":"16567","suppressedMessages":"16568","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16569","messages":"16570","suppressedMessages":"16571","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16572","messages":"16573","suppressedMessages":"16574","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16575","messages":"16576","suppressedMessages":"16577","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16578","messages":"16579","suppressedMessages":"16580","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16581","messages":"16582","suppressedMessages":"16583","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16584","messages":"16585","suppressedMessages":"16586","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16587","messages":"16588","suppressedMessages":"16589","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16590","messages":"16591","suppressedMessages":"16592","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16593","messages":"16594","suppressedMessages":"16595","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16596","messages":"16597","suppressedMessages":"16598","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16599","messages":"16600","suppressedMessages":"16601","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16602","messages":"16603","suppressedMessages":"16604","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16605","messages":"16606","suppressedMessages":"16607","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16608","messages":"16609","suppressedMessages":"16610","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16611","messages":"16612","suppressedMessages":"16613","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16614","messages":"16615","suppressedMessages":"16616","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16617","messages":"16618","suppressedMessages":"16619","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16620","messages":"16621","suppressedMessages":"16622","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16623","messages":"16624","suppressedMessages":"16625","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16626","messages":"16627","suppressedMessages":"16628","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16629","messages":"16630","suppressedMessages":"16631","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16632","messages":"16633","suppressedMessages":"16634","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16635","messages":"16636","suppressedMessages":"16637","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16638","messages":"16639","suppressedMessages":"16640","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16641","messages":"16642","suppressedMessages":"16643","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16644","messages":"16645","suppressedMessages":"16646","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16647","messages":"16648","suppressedMessages":"16649","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16650","messages":"16651","suppressedMessages":"16652","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16653","messages":"16654","suppressedMessages":"16655","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16656","messages":"16657","suppressedMessages":"16658","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16659","messages":"16660","suppressedMessages":"16661","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16662","messages":"16663","suppressedMessages":"16664","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16665","messages":"16666","suppressedMessages":"16667","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16668","messages":"16669","suppressedMessages":"16670","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16671","messages":"16672","suppressedMessages":"16673","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16674","messages":"16675","suppressedMessages":"16676","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16677","messages":"16678","suppressedMessages":"16679","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16680","messages":"16681","suppressedMessages":"16682","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16683","messages":"16684","suppressedMessages":"16685","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16686","messages":"16687","suppressedMessages":"16688","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16689","messages":"16690","suppressedMessages":"16691","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16692","messages":"16693","suppressedMessages":"16694","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16695","messages":"16696","suppressedMessages":"16697","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16698","messages":"16699","suppressedMessages":"16700","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16701","messages":"16702","suppressedMessages":"16703","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16704","messages":"16705","suppressedMessages":"16706","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16707","messages":"16708","suppressedMessages":"16709","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16710","messages":"16711","suppressedMessages":"16712","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16713","messages":"16714","suppressedMessages":"16715","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16716","messages":"16717","suppressedMessages":"16718","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16719","messages":"16720","suppressedMessages":"16721","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16722","messages":"16723","suppressedMessages":"16724","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16725","messages":"16726","suppressedMessages":"16727","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16728","messages":"16729","suppressedMessages":"16730","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16731","messages":"16732","suppressedMessages":"16733","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16734","messages":"16735","suppressedMessages":"16736","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16737","messages":"16738","suppressedMessages":"16739","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16740","messages":"16741","suppressedMessages":"16742","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16743","messages":"16744","suppressedMessages":"16745","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16746","messages":"16747","suppressedMessages":"16748","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16749","messages":"16750","suppressedMessages":"16751","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16752","messages":"16753","suppressedMessages":"16754","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16755","messages":"16756","suppressedMessages":"16757","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16758","messages":"16759","suppressedMessages":"16760","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16761","messages":"16762","suppressedMessages":"16763","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16764","messages":"16765","suppressedMessages":"16766","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16767","messages":"16768","suppressedMessages":"16769","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16770","messages":"16771","suppressedMessages":"16772","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16773","messages":"16774","suppressedMessages":"16775","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16776","messages":"16777","suppressedMessages":"16778","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16779","messages":"16780","suppressedMessages":"16781","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16782","messages":"16783","suppressedMessages":"16784","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16785","messages":"16786","suppressedMessages":"16787","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16788","messages":"16789","suppressedMessages":"16790","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16791","messages":"16792","suppressedMessages":"16793","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16794","messages":"16795","suppressedMessages":"16796","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16797","messages":"16798","suppressedMessages":"16799","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16800","messages":"16801","suppressedMessages":"16802","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16803","messages":"16804","suppressedMessages":"16805","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16806","messages":"16807","suppressedMessages":"16808","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16809","messages":"16810","suppressedMessages":"16811","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16812","messages":"16813","suppressedMessages":"16814","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16815","messages":"16816","suppressedMessages":"16817","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16818","messages":"16819","suppressedMessages":"16820","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16821","messages":"16822","suppressedMessages":"16823","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16824","messages":"16825","suppressedMessages":"16826","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16827","messages":"16828","suppressedMessages":"16829","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16830","messages":"16831","suppressedMessages":"16832","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16833","messages":"16834","suppressedMessages":"16835","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16836","messages":"16837","suppressedMessages":"16838","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16839","messages":"16840","suppressedMessages":"16841","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16842","messages":"16843","suppressedMessages":"16844","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16845","messages":"16846","suppressedMessages":"16847","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16848","messages":"16849","suppressedMessages":"16850","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16851","messages":"16852","suppressedMessages":"16853","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16854","messages":"16855","suppressedMessages":"16856","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16857","messages":"16858","suppressedMessages":"16859","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16860","messages":"16861","suppressedMessages":"16862","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16863","messages":"16864","suppressedMessages":"16865","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16866","messages":"16867","suppressedMessages":"16868","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16869","messages":"16870","suppressedMessages":"16871","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16872","messages":"16873","suppressedMessages":"16874","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16875","messages":"16876","suppressedMessages":"16877","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16878","messages":"16879","suppressedMessages":"16880","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16881","messages":"16882","suppressedMessages":"16883","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16884","messages":"16885","suppressedMessages":"16886","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16887","messages":"16888","suppressedMessages":"16889","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16890","messages":"16891","suppressedMessages":"16892","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16893","messages":"16894","suppressedMessages":"16895","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16896","messages":"16897","suppressedMessages":"16898","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16899","messages":"16900","suppressedMessages":"16901","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16902","messages":"16903","suppressedMessages":"16904","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16905","messages":"16906","suppressedMessages":"16907","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16908","messages":"16909","suppressedMessages":"16910","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16911","messages":"16912","suppressedMessages":"16913","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16914","messages":"16915","suppressedMessages":"16916","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16917","messages":"16918","suppressedMessages":"16919","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16920","messages":"16921","suppressedMessages":"16922","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16923","messages":"16924","suppressedMessages":"16925","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16926","messages":"16927","suppressedMessages":"16928","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16929","messages":"16930","suppressedMessages":"16931","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16932","messages":"16933","suppressedMessages":"16934","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16935","messages":"16936","suppressedMessages":"16937","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16938","messages":"16939","suppressedMessages":"16940","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16941","messages":"16942","suppressedMessages":"16943","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16944","messages":"16945","suppressedMessages":"16946","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16947","messages":"16948","suppressedMessages":"16949","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16950","messages":"16951","suppressedMessages":"16952","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16953","messages":"16954","suppressedMessages":"16955","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16956","messages":"16957","suppressedMessages":"16958","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16959","messages":"16960","suppressedMessages":"16961","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16962","messages":"16963","suppressedMessages":"16964","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16965","messages":"16966","suppressedMessages":"16967","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16968","messages":"16969","suppressedMessages":"16970","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16971","messages":"16972","suppressedMessages":"16973","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16974","messages":"16975","suppressedMessages":"16976","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16977","messages":"16978","suppressedMessages":"16979","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16980","messages":"16981","suppressedMessages":"16982","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16983","messages":"16984","suppressedMessages":"16985","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16986","messages":"16987","suppressedMessages":"16988","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16989","messages":"16990","suppressedMessages":"16991","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16992","messages":"16993","suppressedMessages":"16994","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16995","messages":"16996","suppressedMessages":"16997","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16998","messages":"16999","suppressedMessages":"17000","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17001","messages":"17002","suppressedMessages":"17003","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17004","messages":"17005","suppressedMessages":"17006","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17007","messages":"17008","suppressedMessages":"17009","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17010","messages":"17011","suppressedMessages":"17012","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17013","messages":"17014","suppressedMessages":"17015","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17016","messages":"17017","suppressedMessages":"17018","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17019","messages":"17020","suppressedMessages":"17021","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17022","messages":"17023","suppressedMessages":"17024","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17025","messages":"17026","suppressedMessages":"17027","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17028","messages":"17029","suppressedMessages":"17030","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17031","messages":"17032","suppressedMessages":"17033","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17034","messages":"17035","suppressedMessages":"17036","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17037","messages":"17038","suppressedMessages":"17039","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17040","messages":"17041","suppressedMessages":"17042","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17043","messages":"17044","suppressedMessages":"17045","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17046","messages":"17047","suppressedMessages":"17048","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17049","messages":"17050","suppressedMessages":"17051","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17052","messages":"17053","suppressedMessages":"17054","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17055","messages":"17056","suppressedMessages":"17057","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17058","messages":"17059","suppressedMessages":"17060","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17061","messages":"17062","suppressedMessages":"17063","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17064","messages":"17065","suppressedMessages":"17066","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17067","messages":"17068","suppressedMessages":"17069","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17070","messages":"17071","suppressedMessages":"17072","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17073","messages":"17074","suppressedMessages":"17075","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17076","messages":"17077","suppressedMessages":"17078","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17079","messages":"17080","suppressedMessages":"17081","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17082","messages":"17083","suppressedMessages":"17084","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17085","messages":"17086","suppressedMessages":"17087","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17088","messages":"17089","suppressedMessages":"17090","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17091","messages":"17092","suppressedMessages":"17093","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17094","messages":"17095","suppressedMessages":"17096","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17097","messages":"17098","suppressedMessages":"17099","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17100","messages":"17101","suppressedMessages":"17102","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17103","messages":"17104","suppressedMessages":"17105","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17106","messages":"17107","suppressedMessages":"17108","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17109","messages":"17110","suppressedMessages":"17111","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17112","messages":"17113","suppressedMessages":"17114","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17115","messages":"17116","suppressedMessages":"17117","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17118","messages":"17119","suppressedMessages":"17120","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17121","messages":"17122","suppressedMessages":"17123","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17124","messages":"17125","suppressedMessages":"17126","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17127","messages":"17128","suppressedMessages":"17129","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17130","messages":"17131","suppressedMessages":"17132","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17133","messages":"17134","suppressedMessages":"17135","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17136","messages":"17137","suppressedMessages":"17138","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17139","messages":"17140","suppressedMessages":"17141","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17142","messages":"17143","suppressedMessages":"17144","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17145","messages":"17146","suppressedMessages":"17147","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17148","messages":"17149","suppressedMessages":"17150","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17151","messages":"17152","suppressedMessages":"17153","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17154","messages":"17155","suppressedMessages":"17156","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17157","messages":"17158","suppressedMessages":"17159","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17160","messages":"17161","suppressedMessages":"17162","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17163","messages":"17164","suppressedMessages":"17165","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17166","messages":"17167","suppressedMessages":"17168","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17169","messages":"17170","suppressedMessages":"17171","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17172","messages":"17173","suppressedMessages":"17174","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17175","messages":"17176","suppressedMessages":"17177","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17178","messages":"17179","suppressedMessages":"17180","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17181","messages":"17182","suppressedMessages":"17183","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17184","messages":"17185","suppressedMessages":"17186","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17187","messages":"17188","suppressedMessages":"17189","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17190","messages":"17191","suppressedMessages":"17192","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17193","messages":"17194","suppressedMessages":"17195","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17196","messages":"17197","suppressedMessages":"17198","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17199","messages":"17200","suppressedMessages":"17201","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17202","messages":"17203","suppressedMessages":"17204","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17205","messages":"17206","suppressedMessages":"17207","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17208","messages":"17209","suppressedMessages":"17210","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17211","messages":"17212","suppressedMessages":"17213","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17214","messages":"17215","suppressedMessages":"17216","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17217","messages":"17218","suppressedMessages":"17219","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17220","messages":"17221","suppressedMessages":"17222","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17223","messages":"17224","suppressedMessages":"17225","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17226","messages":"17227","suppressedMessages":"17228","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17229","messages":"17230","suppressedMessages":"17231","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17232","messages":"17233","suppressedMessages":"17234","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17235","messages":"17236","suppressedMessages":"17237","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17238","messages":"17239","suppressedMessages":"17240","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17241","messages":"17242","suppressedMessages":"17243","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17244","messages":"17245","suppressedMessages":"17246","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17247","messages":"17248","suppressedMessages":"17249","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17250","messages":"17251","suppressedMessages":"17252","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17253","messages":"17254","suppressedMessages":"17255","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17256","messages":"17257","suppressedMessages":"17258","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17259","messages":"17260","suppressedMessages":"17261","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17262","messages":"17263","suppressedMessages":"17264","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17265","messages":"17266","suppressedMessages":"17267","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17268","messages":"17269","suppressedMessages":"17270","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17271","messages":"17272","suppressedMessages":"17273","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17274","messages":"17275","suppressedMessages":"17276","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17277","messages":"17278","suppressedMessages":"17279","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17280","messages":"17281","suppressedMessages":"17282","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17283","messages":"17284","suppressedMessages":"17285","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17286","messages":"17287","suppressedMessages":"17288","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17289","messages":"17290","suppressedMessages":"17291","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17292","messages":"17293","suppressedMessages":"17294","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17295","messages":"17296","suppressedMessages":"17297","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17298","messages":"17299","suppressedMessages":"17300","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17301","messages":"17302","suppressedMessages":"17303","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17304","messages":"17305","suppressedMessages":"17306","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17307","messages":"17308","suppressedMessages":"17309","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17310","messages":"17311","suppressedMessages":"17312","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17313","messages":"17314","suppressedMessages":"17315","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17316","messages":"17317","suppressedMessages":"17318","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17319","messages":"17320","suppressedMessages":"17321","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17322","messages":"17323","suppressedMessages":"17324","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17325","messages":"17326","suppressedMessages":"17327","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17328","messages":"17329","suppressedMessages":"17330","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17331","messages":"17332","suppressedMessages":"17333","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17334","messages":"17335","suppressedMessages":"17336","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17337","messages":"17338","suppressedMessages":"17339","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17340","messages":"17341","suppressedMessages":"17342","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17343","messages":"17344","suppressedMessages":"17345","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17346","messages":"17347","suppressedMessages":"17348","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17349","messages":"17350","suppressedMessages":"17351","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17352","messages":"17353","suppressedMessages":"17354","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17355","messages":"17356","suppressedMessages":"17357","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17358","messages":"17359","suppressedMessages":"17360","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17361","messages":"17362","suppressedMessages":"17363","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17364","messages":"17365","suppressedMessages":"17366","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17367","messages":"17368","suppressedMessages":"17369","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17370","messages":"17371","suppressedMessages":"17372","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17373","messages":"17374","suppressedMessages":"17375","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17376","messages":"17377","suppressedMessages":"17378","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17379","messages":"17380","suppressedMessages":"17381","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17382","messages":"17383","suppressedMessages":"17384","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17385","messages":"17386","suppressedMessages":"17387","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17388","messages":"17389","suppressedMessages":"17390","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17391","messages":"17392","suppressedMessages":"17393","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17394","messages":"17395","suppressedMessages":"17396","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17397","messages":"17398","suppressedMessages":"17399","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17400","messages":"17401","suppressedMessages":"17402","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17403","messages":"17404","suppressedMessages":"17405","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17406","messages":"17407","suppressedMessages":"17408","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17409","messages":"17410","suppressedMessages":"17411","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17412","messages":"17413","suppressedMessages":"17414","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17415","messages":"17416","suppressedMessages":"17417","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17418","messages":"17419","suppressedMessages":"17420","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17421","messages":"17422","suppressedMessages":"17423","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17424","messages":"17425","suppressedMessages":"17426","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17427","messages":"17428","suppressedMessages":"17429","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17430","messages":"17431","suppressedMessages":"17432","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17433","messages":"17434","suppressedMessages":"17435","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17436","messages":"17437","suppressedMessages":"17438","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17439","messages":"17440","suppressedMessages":"17441","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17442","messages":"17443","suppressedMessages":"17444","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"17445","messages":"17446","suppressedMessages":"17447","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17448","messages":"17449","suppressedMessages":"17450","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17451","messages":"17452","suppressedMessages":"17453","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17454","messages":"17455","suppressedMessages":"17456","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17457","messages":"17458","suppressedMessages":"17459","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17460","messages":"17461","suppressedMessages":"17462","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17463","messages":"17464","suppressedMessages":"17465","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17466","messages":"17467","suppressedMessages":"17468","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17469","messages":"17470","suppressedMessages":"17471","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17472","messages":"17473","suppressedMessages":"17474","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17475","messages":"17476","suppressedMessages":"17477","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17478","messages":"17479","suppressedMessages":"17480","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17481","messages":"17482","suppressedMessages":"17483","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17484","messages":"17485","suppressedMessages":"17486","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17487","messages":"17488","suppressedMessages":"17489","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17490","messages":"17491","suppressedMessages":"17492","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"17493","messages":"17494","suppressedMessages":"17495","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17496","messages":"17497","suppressedMessages":"17498","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17499","messages":"17500","suppressedMessages":"17501","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17502","messages":"17503","suppressedMessages":"17504","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17505","messages":"17506","suppressedMessages":"17507","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17508","messages":"17509","suppressedMessages":"17510","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17511","messages":"17512","suppressedMessages":"17513","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17514","messages":"17515","suppressedMessages":"17516","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17517","messages":"17518","suppressedMessages":"17519","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17520","messages":"17521","suppressedMessages":"17522","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17523","messages":"17524","suppressedMessages":"17525","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17526","messages":"17527","suppressedMessages":"17528","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17529","messages":"17530","suppressedMessages":"17531","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17532","messages":"17533","suppressedMessages":"17534","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17535","messages":"17536","suppressedMessages":"17537","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17538","messages":"17539","suppressedMessages":"17540","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17541","messages":"17542","suppressedMessages":"17543","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17544","messages":"17545","suppressedMessages":"17546","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17547","messages":"17548","suppressedMessages":"17549","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17550","messages":"17551","suppressedMessages":"17552","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17553","messages":"17554","suppressedMessages":"17555","errorCount":12,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"17556","messages":"17557","suppressedMessages":"17558","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17559","messages":"17560","suppressedMessages":"17561","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17562","messages":"17563","suppressedMessages":"17564","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17565","messages":"17566","suppressedMessages":"17567","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17568","messages":"17569","suppressedMessages":"17570","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17571","messages":"17572","suppressedMessages":"17573","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17574","messages":"17575","suppressedMessages":"17576","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17577","messages":"17578","suppressedMessages":"17579","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17580","messages":"17581","suppressedMessages":"17582","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17583","messages":"17584","suppressedMessages":"17585","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17586","messages":"17587","suppressedMessages":"17588","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17589","messages":"17590","suppressedMessages":"17591","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17592","messages":"17593","suppressedMessages":"17594","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17595","messages":"17596","suppressedMessages":"17597","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17598","messages":"17599","suppressedMessages":"17600","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17601","messages":"17602","suppressedMessages":"17603","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17604","messages":"17605","suppressedMessages":"17606","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17607","messages":"17608","suppressedMessages":"17609","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17610","messages":"17611","suppressedMessages":"17612","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"17613","messages":"17614","suppressedMessages":"17615","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17616","messages":"17617","suppressedMessages":"17618","errorCount":14,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"17619","messages":"17620","suppressedMessages":"17621","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17622","messages":"17623","suppressedMessages":"17624","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17625","messages":"17626","suppressedMessages":"17627","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17628","messages":"17629","suppressedMessages":"17630","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17631","messages":"17632","suppressedMessages":"17633","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17634","messages":"17635","suppressedMessages":"17636","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17637","messages":"17638","suppressedMessages":"17639","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17640","messages":"17641","suppressedMessages":"17642","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17643","messages":"17644","suppressedMessages":"17645","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17646","messages":"17647","suppressedMessages":"17648","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17649","messages":"17650","suppressedMessages":"17651","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17652","messages":"17653","suppressedMessages":"17654","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17655","messages":"17656","suppressedMessages":"17657","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17658","messages":"17659","suppressedMessages":"17660","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17661","messages":"17662","suppressedMessages":"17663","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17664","messages":"17665","suppressedMessages":"17666","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17667","messages":"17668","suppressedMessages":"17669","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17670","messages":"17671","suppressedMessages":"17672","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17673","messages":"17674","suppressedMessages":"17675","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17676","messages":"17677","suppressedMessages":"17678","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17679","messages":"17680","suppressedMessages":"17681","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17682","messages":"17683","suppressedMessages":"17684","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17685","messages":"17686","suppressedMessages":"17687","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17688","messages":"17689","suppressedMessages":"17690","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17691","messages":"17692","suppressedMessages":"17693","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17694","messages":"17695","suppressedMessages":"17696","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17697","messages":"17698","suppressedMessages":"17699","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17700","messages":"17701","suppressedMessages":"17702","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17703","messages":"17704","suppressedMessages":"17705","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17706","messages":"17707","suppressedMessages":"17708","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17709","messages":"17710","suppressedMessages":"17711","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17712","messages":"17713","suppressedMessages":"17714","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17715","messages":"17716","suppressedMessages":"17717","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17718","messages":"17719","suppressedMessages":"17720","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17721","messages":"17722","suppressedMessages":"17723","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17724","messages":"17725","suppressedMessages":"17726","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17727","messages":"17728","suppressedMessages":"17729","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17730","messages":"17731","suppressedMessages":"17732","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17733","messages":"17734","suppressedMessages":"17735","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"17736","messages":"17737","suppressedMessages":"17738","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17739","messages":"17740","suppressedMessages":"17741","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17742","messages":"17743","suppressedMessages":"17744","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17745","messages":"17746","suppressedMessages":"17747","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"17748","messages":"17749","suppressedMessages":"17750","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17751","messages":"17752","suppressedMessages":"17753","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17754","messages":"17755","suppressedMessages":"17756","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17757","messages":"17758","suppressedMessages":"17759","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17760","messages":"17761","suppressedMessages":"17762","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"17763","messages":"17764","suppressedMessages":"17765","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17766","messages":"17767","suppressedMessages":"17768","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17769","messages":"17770","suppressedMessages":"17771","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17772","messages":"17773","suppressedMessages":"17774","errorCount":11,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"17775","messages":"17776","suppressedMessages":"17777","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17778","messages":"17779","suppressedMessages":"17780","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17781","messages":"17782","suppressedMessages":"17783","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17784","messages":"17785","suppressedMessages":"17786","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17787","messages":"17788","suppressedMessages":"17789","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17790","messages":"17791","suppressedMessages":"17792","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17793","messages":"17794","suppressedMessages":"17795","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17796","messages":"17797","suppressedMessages":"17798","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"17799","messages":"17800","suppressedMessages":"17801","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17802","messages":"17803","suppressedMessages":"17804","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17805","messages":"17806","suppressedMessages":"17807","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17808","messages":"17809","suppressedMessages":"17810","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17811","messages":"17812","suppressedMessages":"17813","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17814","messages":"17815","suppressedMessages":"17816","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17817","messages":"17818","suppressedMessages":"17819","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17820","messages":"17821","suppressedMessages":"17822","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17823","messages":"17824","suppressedMessages":"17825","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17826","messages":"17827","suppressedMessages":"17828","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17829","messages":"17830","suppressedMessages":"17831","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17832","messages":"17833","suppressedMessages":"17834","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17835","messages":"17836","suppressedMessages":"17837","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17838","messages":"17839","suppressedMessages":"17840","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17841","messages":"17842","suppressedMessages":"17843","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17844","messages":"17845","suppressedMessages":"17846","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17847","messages":"17848","suppressedMessages":"17849","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17850","messages":"17851","suppressedMessages":"17852","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17853","messages":"17854","suppressedMessages":"17855","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17856","messages":"17857","suppressedMessages":"17858","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17859","messages":"17860","suppressedMessages":"17861","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17862","messages":"17863","suppressedMessages":"17864","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17865","messages":"17866","suppressedMessages":"17867","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17868","messages":"17869","suppressedMessages":"17870","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17871","messages":"17872","suppressedMessages":"17873","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17874","messages":"17875","suppressedMessages":"17876","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17877","messages":"17878","suppressedMessages":"17879","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17880","messages":"17881","suppressedMessages":"17882","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"17883","messages":"17884","suppressedMessages":"17885","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17886","messages":"17887","suppressedMessages":"17888","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"17889","messages":"17890","suppressedMessages":"17891","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17892","messages":"17893","suppressedMessages":"17894","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17895","messages":"17896","suppressedMessages":"17897","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17898","messages":"17899","suppressedMessages":"17900","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17901","messages":"17902","suppressedMessages":"17903","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17904","messages":"17905","suppressedMessages":"17906","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17907","messages":"17908","suppressedMessages":"17909","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17910","messages":"17911","suppressedMessages":"17912","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17913","messages":"17914","suppressedMessages":"17915","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17916","messages":"17917","suppressedMessages":"17918","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17919","messages":"17920","suppressedMessages":"17921","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17922","messages":"17923","suppressedMessages":"17924","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17925","messages":"17926","suppressedMessages":"17927","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17928","messages":"17929","suppressedMessages":"17930","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17931","messages":"17932","suppressedMessages":"17933","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17934","messages":"17935","suppressedMessages":"17936","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17937","messages":"17938","suppressedMessages":"17939","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17940","messages":"17941","suppressedMessages":"17942","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17943","messages":"17944","suppressedMessages":"17945","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17946","messages":"17947","suppressedMessages":"17948","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17949","messages":"17950","suppressedMessages":"17951","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17952","messages":"17953","suppressedMessages":"17954","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17955","messages":"17956","suppressedMessages":"17957","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17958","messages":"17959","suppressedMessages":"17960","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17961","messages":"17962","suppressedMessages":"17963","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17964","messages":"17965","suppressedMessages":"17966","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17967","messages":"17968","suppressedMessages":"17969","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17970","messages":"17971","suppressedMessages":"17972","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17973","messages":"17974","suppressedMessages":"17975","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17976","messages":"17977","suppressedMessages":"17978","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17979","messages":"17980","suppressedMessages":"17981","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17982","messages":"17983","suppressedMessages":"17984","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17985","messages":"17986","suppressedMessages":"17987","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17988","messages":"17989","suppressedMessages":"17990","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17991","messages":"17992","suppressedMessages":"17993","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17994","messages":"17995","suppressedMessages":"17996","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"17997","messages":"17998","suppressedMessages":"17999","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18000","messages":"18001","suppressedMessages":"18002","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18003","messages":"18004","suppressedMessages":"18005","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18006","messages":"18007","suppressedMessages":"18008","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18009","messages":"18010","suppressedMessages":"18011","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18012","messages":"18013","suppressedMessages":"18014","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18015","messages":"18016","suppressedMessages":"18017","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18018","messages":"18019","suppressedMessages":"18020","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18021","messages":"18022","suppressedMessages":"18023","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18024","messages":"18025","suppressedMessages":"18026","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18027","messages":"18028","suppressedMessages":"18029","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18030","messages":"18031","suppressedMessages":"18032","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18033","messages":"18034","suppressedMessages":"18035","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18036","messages":"18037","suppressedMessages":"18038","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18039","messages":"18040","suppressedMessages":"18041","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18042","messages":"18043","suppressedMessages":"18044","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18045","messages":"18046","suppressedMessages":"18047","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18048","messages":"18049","suppressedMessages":"18050","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18051","messages":"18052","suppressedMessages":"18053","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18054","messages":"18055","suppressedMessages":"18056","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18057","messages":"18058","suppressedMessages":"18059","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18060","messages":"18061","suppressedMessages":"18062","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18063","messages":"18064","suppressedMessages":"18065","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18066","messages":"18067","suppressedMessages":"18068","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18069","messages":"18070","suppressedMessages":"18071","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18072","messages":"18073","suppressedMessages":"18074","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18075","messages":"18076","suppressedMessages":"18077","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18078","messages":"18079","suppressedMessages":"18080","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18081","messages":"18082","suppressedMessages":"18083","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18084","messages":"18085","suppressedMessages":"18086","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18087","messages":"18088","suppressedMessages":"18089","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18090","messages":"18091","suppressedMessages":"18092","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18093","messages":"18094","suppressedMessages":"18095","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18096","messages":"18097","suppressedMessages":"18098","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18099","messages":"18100","suppressedMessages":"18101","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18102","messages":"18103","suppressedMessages":"18104","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18105","messages":"18106","suppressedMessages":"18107","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18108","messages":"18109","suppressedMessages":"18110","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18111","messages":"18112","suppressedMessages":"18113","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18114","messages":"18115","suppressedMessages":"18116","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18117","messages":"18118","suppressedMessages":"18119","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18120","messages":"18121","suppressedMessages":"18122","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18123","messages":"18124","suppressedMessages":"18125","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18126","messages":"18127","suppressedMessages":"18128","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18129","messages":"18130","suppressedMessages":"18131","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18132","messages":"18133","suppressedMessages":"18134","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18135","messages":"18136","suppressedMessages":"18137","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18138","messages":"18139","suppressedMessages":"18140","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18141","messages":"18142","suppressedMessages":"18143","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18144","messages":"18145","suppressedMessages":"18146","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18147","messages":"18148","suppressedMessages":"18149","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18150","messages":"18151","suppressedMessages":"18152","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18153","messages":"18154","suppressedMessages":"18155","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18156","messages":"18157","suppressedMessages":"18158","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18159","messages":"18160","suppressedMessages":"18161","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18162","messages":"18163","suppressedMessages":"18164","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18165","messages":"18166","suppressedMessages":"18167","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18168","messages":"18169","suppressedMessages":"18170","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18171","messages":"18172","suppressedMessages":"18173","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18174","messages":"18175","suppressedMessages":"18176","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18177","messages":"18178","suppressedMessages":"18179","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18180","messages":"18181","suppressedMessages":"18182","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18183","messages":"18184","suppressedMessages":"18185","errorCount":34,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18186","messages":"18187","suppressedMessages":"18188","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18189","messages":"18190","suppressedMessages":"18191","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18192","messages":"18193","suppressedMessages":"18194","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18195","messages":"18196","suppressedMessages":"18197","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18198","messages":"18199","suppressedMessages":"18200","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18201","messages":"18202","suppressedMessages":"18203","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18204","messages":"18205","suppressedMessages":"18206","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18207","messages":"18208","suppressedMessages":"18209","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18210","messages":"18211","suppressedMessages":"18212","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18213","messages":"18214","suppressedMessages":"18215","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18216","messages":"18217","suppressedMessages":"18218","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18219","messages":"18220","suppressedMessages":"18221","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18222","messages":"18223","suppressedMessages":"18224","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18225","messages":"18226","suppressedMessages":"18227","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18228","messages":"18229","suppressedMessages":"18230","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18231","messages":"18232","suppressedMessages":"18233","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18234","messages":"18235","suppressedMessages":"18236","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1invka3",{"filePath":"18237","messages":"18238","suppressedMessages":"18239","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18240","messages":"18241","suppressedMessages":"18242","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18243","messages":"18244","suppressedMessages":"18245","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18246","messages":"18247","suppressedMessages":"18248","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18249","messages":"18250","suppressedMessages":"18251","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18252","messages":"18253","suppressedMessages":"18254","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18255","messages":"18256","suppressedMessages":"18257","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18258","messages":"18259","suppressedMessages":"18260","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18261","messages":"18262","suppressedMessages":"18263","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18264","messages":"18265","suppressedMessages":"18266","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18267","messages":"18268","suppressedMessages":"18269","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18270","messages":"18271","suppressedMessages":"18272","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18273","messages":"18274","suppressedMessages":"18275","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18276","messages":"18277","suppressedMessages":"18278","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18279","messages":"18280","suppressedMessages":"18281","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18282","messages":"18283","suppressedMessages":"18284","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18285","messages":"18286","suppressedMessages":"18287","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18288","messages":"18289","suppressedMessages":"18290","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18291","messages":"18292","suppressedMessages":"18293","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18294","messages":"18295","suppressedMessages":"18296","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18297","messages":"18298","suppressedMessages":"18299","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18300","messages":"18301","suppressedMessages":"18302","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18303","messages":"18304","suppressedMessages":"18305","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18306","messages":"18307","suppressedMessages":"18308","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18309","messages":"18310","suppressedMessages":"18311","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18312","messages":"18313","suppressedMessages":"18314","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18315","messages":"18316","suppressedMessages":"18317","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18318","messages":"18319","suppressedMessages":"18320","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18321","messages":"18322","suppressedMessages":"18323","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18324","messages":"18325","suppressedMessages":"18326","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18327","messages":"18328","suppressedMessages":"18329","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18330","messages":"18331","suppressedMessages":"18332","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18333","messages":"18334","suppressedMessages":"18335","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18336","messages":"18337","suppressedMessages":"18338","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18339","messages":"18340","suppressedMessages":"18341","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18342","messages":"18343","suppressedMessages":"18344","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18345","messages":"18346","suppressedMessages":"18347","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18348","messages":"18349","suppressedMessages":"18350","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18351","messages":"18352","suppressedMessages":"18353","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18354","messages":"18355","suppressedMessages":"18356","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18357","messages":"18358","suppressedMessages":"18359","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18360","messages":"18361","suppressedMessages":"18362","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18363","messages":"18364","suppressedMessages":"18365","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18366","messages":"18367","suppressedMessages":"18368","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18369","messages":"18370","suppressedMessages":"18371","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18372","messages":"18373","suppressedMessages":"18374","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18375","messages":"18376","suppressedMessages":"18377","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18378","messages":"18379","suppressedMessages":"18380","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18381","messages":"18382","suppressedMessages":"18383","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18384","messages":"18385","suppressedMessages":"18386","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18387","messages":"18388","suppressedMessages":"18389","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18390","messages":"18391","suppressedMessages":"18392","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18393","messages":"18394","suppressedMessages":"18395","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18396","messages":"18397","suppressedMessages":"18398","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18399","messages":"18400","suppressedMessages":"18401","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18402","messages":"18403","suppressedMessages":"18404","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18405","messages":"18406","suppressedMessages":"18407","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18408","messages":"18409","suppressedMessages":"18410","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18411","messages":"18412","suppressedMessages":"18413","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18414","messages":"18415","suppressedMessages":"18416","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18417","messages":"18418","suppressedMessages":"18419","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18420","messages":"18421","suppressedMessages":"18422","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18423","messages":"18424","suppressedMessages":"18425","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18426","messages":"18427","suppressedMessages":"18428","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18429","messages":"18430","suppressedMessages":"18431","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18432","messages":"18433","suppressedMessages":"18434","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18435","messages":"18436","suppressedMessages":"18437","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18438","messages":"18439","suppressedMessages":"18440","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18441","messages":"18442","suppressedMessages":"18443","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18444","messages":"18445","suppressedMessages":"18446","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18447","messages":"18448","suppressedMessages":"18449","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18450","messages":"18451","suppressedMessages":"18452","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18453","messages":"18454","suppressedMessages":"18455","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18456","messages":"18457","suppressedMessages":"18458","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18459","messages":"18460","suppressedMessages":"18461","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18462","messages":"18463","suppressedMessages":"18464","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18465","messages":"18466","suppressedMessages":"18467","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18468","messages":"18469","suppressedMessages":"18470","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18471","messages":"18472","suppressedMessages":"18473","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18474","messages":"18475","suppressedMessages":"18476","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18477","messages":"18478","suppressedMessages":"18479","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18480","messages":"18481","suppressedMessages":"18482","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18483","messages":"18484","suppressedMessages":"18485","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18486","messages":"18487","suppressedMessages":"18488","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18489","messages":"18490","suppressedMessages":"18491","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18492","messages":"18493","suppressedMessages":"18494","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18495","messages":"18496","suppressedMessages":"18497","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18498","messages":"18499","suppressedMessages":"18500","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18501","messages":"18502","suppressedMessages":"18503","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18504","messages":"18505","suppressedMessages":"18506","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18507","messages":"18508","suppressedMessages":"18509","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18510","messages":"18511","suppressedMessages":"18512","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18513","messages":"18514","suppressedMessages":"18515","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18516","messages":"18517","suppressedMessages":"18518","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18519","messages":"18520","suppressedMessages":"18521","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18522","messages":"18523","suppressedMessages":"18524","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18525","messages":"18526","suppressedMessages":"18527","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18528","messages":"18529","suppressedMessages":"18530","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18531","messages":"18532","suppressedMessages":"18533","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18534","messages":"18535","suppressedMessages":"18536","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18537","messages":"18538","suppressedMessages":"18539","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18540","messages":"18541","suppressedMessages":"18542","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18543","messages":"18544","suppressedMessages":"18545","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18546","messages":"18547","suppressedMessages":"18548","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18549","messages":"18550","suppressedMessages":"18551","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18552","messages":"18553","suppressedMessages":"18554","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18555","messages":"18556","suppressedMessages":"18557","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18558","messages":"18559","suppressedMessages":"18560","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18561","messages":"18562","suppressedMessages":"18563","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18564","messages":"18565","suppressedMessages":"18566","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18567","messages":"18568","suppressedMessages":"18569","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18570","messages":"18571","suppressedMessages":"18572","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18573","messages":"18574","suppressedMessages":"18575","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18576","messages":"18577","suppressedMessages":"18578","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18579","messages":"18580","suppressedMessages":"18581","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18582","messages":"18583","suppressedMessages":"18584","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18585","messages":"18586","suppressedMessages":"18587","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18588","messages":"18589","suppressedMessages":"18590","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18591","messages":"18592","suppressedMessages":"18593","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18594","messages":"18595","suppressedMessages":"18596","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18597","messages":"18598","suppressedMessages":"18599","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18600","messages":"18601","suppressedMessages":"18602","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18603","messages":"18604","suppressedMessages":"18605","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18606","messages":"18607","suppressedMessages":"18608","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18609","messages":"18610","suppressedMessages":"18611","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18612","messages":"18613","suppressedMessages":"18614","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18615","messages":"18616","suppressedMessages":"18617","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18618","messages":"18619","suppressedMessages":"18620","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18621","messages":"18622","suppressedMessages":"18623","errorCount":20,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18624","messages":"18625","suppressedMessages":"18626","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18627","messages":"18628","suppressedMessages":"18629","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18630","messages":"18631","suppressedMessages":"18632","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18633","messages":"18634","suppressedMessages":"18635","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18636","messages":"18637","suppressedMessages":"18638","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18639","messages":"18640","suppressedMessages":"18641","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18642","messages":"18643","suppressedMessages":"18644","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18645","messages":"18646","suppressedMessages":"18647","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18648","messages":"18649","suppressedMessages":"18650","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18651","messages":"18652","suppressedMessages":"18653","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18654","messages":"18655","suppressedMessages":"18656","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18657","messages":"18658","suppressedMessages":"18659","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18660","messages":"18661","suppressedMessages":"18662","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18663","messages":"18664","suppressedMessages":"18665","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18666","messages":"18667","suppressedMessages":"18668","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18669","messages":"18670","suppressedMessages":"18671","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18672","messages":"18673","suppressedMessages":"18674","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18675","messages":"18676","suppressedMessages":"18677","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18678","messages":"18679","suppressedMessages":"18680","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18681","messages":"18682","suppressedMessages":"18683","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18684","messages":"18685","suppressedMessages":"18686","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18687","messages":"18688","suppressedMessages":"18689","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18690","messages":"18691","suppressedMessages":"18692","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18693","messages":"18694","suppressedMessages":"18695","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18696","messages":"18697","suppressedMessages":"18698","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18699","messages":"18700","suppressedMessages":"18701","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18702","messages":"18703","suppressedMessages":"18704","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18705","messages":"18706","suppressedMessages":"18707","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18708","messages":"18709","suppressedMessages":"18710","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18711","messages":"18712","suppressedMessages":"18713","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18714","messages":"18715","suppressedMessages":"18716","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18717","messages":"18718","suppressedMessages":"18719","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18720","messages":"18721","suppressedMessages":"18722","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18723","messages":"18724","suppressedMessages":"18725","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18726","messages":"18727","suppressedMessages":"18728","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18729","messages":"18730","suppressedMessages":"18731","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18732","messages":"18733","suppressedMessages":"18734","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18735","messages":"18736","suppressedMessages":"18737","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18738","messages":"18739","suppressedMessages":"18740","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18741","messages":"18742","suppressedMessages":"18743","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18744","messages":"18745","suppressedMessages":"18746","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18747","messages":"18748","suppressedMessages":"18749","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18750","messages":"18751","suppressedMessages":"18752","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18753","messages":"18754","suppressedMessages":"18755","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18756","messages":"18757","suppressedMessages":"18758","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18759","messages":"18760","suppressedMessages":"18761","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18762","messages":"18763","suppressedMessages":"18764","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18765","messages":"18766","suppressedMessages":"18767","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18768","messages":"18769","suppressedMessages":"18770","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18771","messages":"18772","suppressedMessages":"18773","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18774","messages":"18775","suppressedMessages":"18776","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18777","messages":"18778","suppressedMessages":"18779","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18780","messages":"18781","suppressedMessages":"18782","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18783","messages":"18784","suppressedMessages":"18785","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18786","messages":"18787","suppressedMessages":"18788","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18789","messages":"18790","suppressedMessages":"18791","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18792","messages":"18793","suppressedMessages":"18794","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18795","messages":"18796","suppressedMessages":"18797","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18798","messages":"18799","suppressedMessages":"18800","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18801","messages":"18802","suppressedMessages":"18803","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18804","messages":"18805","suppressedMessages":"18806","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18807","messages":"18808","suppressedMessages":"18809","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18810","messages":"18811","suppressedMessages":"18812","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18813","messages":"18814","suppressedMessages":"18815","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18816","messages":"18817","suppressedMessages":"18818","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18819","messages":"18820","suppressedMessages":"18821","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18822","messages":"18823","suppressedMessages":"18824","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18825","messages":"18826","suppressedMessages":"18827","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18828","messages":"18829","suppressedMessages":"18830","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18831","messages":"18832","suppressedMessages":"18833","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18834","messages":"18835","suppressedMessages":"18836","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18837","messages":"18838","suppressedMessages":"18839","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18840","messages":"18841","suppressedMessages":"18842","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18843","messages":"18844","suppressedMessages":"18845","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18846","messages":"18847","suppressedMessages":"18848","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18849","messages":"18850","suppressedMessages":"18851","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18852","messages":"18853","suppressedMessages":"18854","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18855","messages":"18856","suppressedMessages":"18857","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18858","messages":"18859","suppressedMessages":"18860","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18861","messages":"18862","suppressedMessages":"18863","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18864","messages":"18865","suppressedMessages":"18866","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18867","messages":"18868","suppressedMessages":"18869","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18870","messages":"18871","suppressedMessages":"18872","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18873","messages":"18874","suppressedMessages":"18875","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18876","messages":"18877","suppressedMessages":"18878","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18879","messages":"18880","suppressedMessages":"18881","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18882","messages":"18883","suppressedMessages":"18884","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18885","messages":"18886","suppressedMessages":"18887","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18888","messages":"18889","suppressedMessages":"18890","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18891","messages":"18892","suppressedMessages":"18893","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18894","messages":"18895","suppressedMessages":"18896","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18897","messages":"18898","suppressedMessages":"18899","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18900","messages":"18901","suppressedMessages":"18902","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18903","messages":"18904","suppressedMessages":"18905","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18906","messages":"18907","suppressedMessages":"18908","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18909","messages":"18910","suppressedMessages":"18911","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18912","messages":"18913","suppressedMessages":"18914","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18915","messages":"18916","suppressedMessages":"18917","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18918","messages":"18919","suppressedMessages":"18920","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18921","messages":"18922","suppressedMessages":"18923","errorCount":22,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18924","messages":"18925","suppressedMessages":"18926","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18927","messages":"18928","suppressedMessages":"18929","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18930","messages":"18931","suppressedMessages":"18932","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"18933","messages":"18934","suppressedMessages":"18935","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18936","messages":"18937","suppressedMessages":"18938","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18939","messages":"18940","suppressedMessages":"18941","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18942","messages":"18943","suppressedMessages":"18944","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18945","messages":"18946","suppressedMessages":"18947","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18948","messages":"18949","suppressedMessages":"18950","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18951","messages":"18952","suppressedMessages":"18953","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18954","messages":"18955","suppressedMessages":"18956","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18957","messages":"18958","suppressedMessages":"18959","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18960","messages":"18961","suppressedMessages":"18962","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18963","messages":"18964","suppressedMessages":"18965","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18966","messages":"18967","suppressedMessages":"18968","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18969","messages":"18970","suppressedMessages":"18971","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18972","messages":"18973","suppressedMessages":"18974","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18975","messages":"18976","suppressedMessages":"18977","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18978","messages":"18979","suppressedMessages":"18980","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18981","messages":"18982","suppressedMessages":"18983","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18984","messages":"18985","suppressedMessages":"18986","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18987","messages":"18988","suppressedMessages":"18989","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18990","messages":"18991","suppressedMessages":"18992","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18993","messages":"18994","suppressedMessages":"18995","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18996","messages":"18997","suppressedMessages":"18998","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18999","messages":"19000","suppressedMessages":"19001","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19002","messages":"19003","suppressedMessages":"19004","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19005","messages":"19006","suppressedMessages":"19007","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19008","messages":"19009","suppressedMessages":"19010","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19011","messages":"19012","suppressedMessages":"19013","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19014","messages":"19015","suppressedMessages":"19016","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19017","messages":"19018","suppressedMessages":"19019","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19020","messages":"19021","suppressedMessages":"19022","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19023","messages":"19024","suppressedMessages":"19025","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19026","messages":"19027","suppressedMessages":"19028","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19029","messages":"19030","suppressedMessages":"19031","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19032","messages":"19033","suppressedMessages":"19034","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19035","messages":"19036","suppressedMessages":"19037","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19038","messages":"19039","suppressedMessages":"19040","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19041","messages":"19042","suppressedMessages":"19043","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19044","messages":"19045","suppressedMessages":"19046","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19047","messages":"19048","suppressedMessages":"19049","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19050","messages":"19051","suppressedMessages":"19052","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19053","messages":"19054","suppressedMessages":"19055","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19056","messages":"19057","suppressedMessages":"19058","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19059","messages":"19060","suppressedMessages":"19061","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19062","messages":"19063","suppressedMessages":"19064","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19065","messages":"19066","suppressedMessages":"19067","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19068","messages":"19069","suppressedMessages":"19070","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19071","messages":"19072","suppressedMessages":"19073","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19074","messages":"19075","suppressedMessages":"19076","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19077","messages":"19078","suppressedMessages":"19079","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19080","messages":"19081","suppressedMessages":"19082","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19083","messages":"19084","suppressedMessages":"19085","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19086","messages":"19087","suppressedMessages":"19088","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19089","messages":"19090","suppressedMessages":"19091","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19092","messages":"19093","suppressedMessages":"19094","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19095","messages":"19096","suppressedMessages":"19097","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19098","messages":"19099","suppressedMessages":"19100","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19101","messages":"19102","suppressedMessages":"19103","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19104","messages":"19105","suppressedMessages":"19106","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19107","messages":"19108","suppressedMessages":"19109","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19110","messages":"19111","suppressedMessages":"19112","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19113","messages":"19114","suppressedMessages":"19115","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19116","messages":"19117","suppressedMessages":"19118","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19119","messages":"19120","suppressedMessages":"19121","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19122","messages":"19123","suppressedMessages":"19124","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19125","messages":"19126","suppressedMessages":"19127","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19128","messages":"19129","suppressedMessages":"19130","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19131","messages":"19132","suppressedMessages":"19133","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19134","messages":"19135","suppressedMessages":"19136","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19137","messages":"19138","suppressedMessages":"19139","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19140","messages":"19141","suppressedMessages":"19142","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19143","messages":"19144","suppressedMessages":"19145","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19146","messages":"19147","suppressedMessages":"19148","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19149","messages":"19150","suppressedMessages":"19151","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19152","messages":"19153","suppressedMessages":"19154","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19155","messages":"19156","suppressedMessages":"19157","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19158","messages":"19159","suppressedMessages":"19160","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19161","messages":"19162","suppressedMessages":"19163","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19164","messages":"19165","suppressedMessages":"19166","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19167","messages":"19168","suppressedMessages":"19169","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19170","messages":"19171","suppressedMessages":"19172","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19173","messages":"19174","suppressedMessages":"19175","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19176","messages":"19177","suppressedMessages":"19178","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19179","messages":"19180","suppressedMessages":"19181","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19182","messages":"19183","suppressedMessages":"19184","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19185","messages":"19186","suppressedMessages":"19187","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19188","messages":"19189","suppressedMessages":"19190","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19191","messages":"19192","suppressedMessages":"19193","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19194","messages":"19195","suppressedMessages":"19196","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19197","messages":"19198","suppressedMessages":"19199","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19200","messages":"19201","suppressedMessages":"19202","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19203","messages":"19204","suppressedMessages":"19205","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19206","messages":"19207","suppressedMessages":"19208","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19209","messages":"19210","suppressedMessages":"19211","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19212","messages":"19213","suppressedMessages":"19214","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19215","messages":"19216","suppressedMessages":"19217","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"19218","messages":"19219","suppressedMessages":"19220","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19221","messages":"19222","suppressedMessages":"19223","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19224","messages":"19225","suppressedMessages":"19226","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19227","messages":"19228","suppressedMessages":"19229","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19230","messages":"19231","suppressedMessages":"19232","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19233","messages":"19234","suppressedMessages":"19235","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19236","messages":"19237","suppressedMessages":"19238","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19239","messages":"19240","suppressedMessages":"19241","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19242","messages":"19243","suppressedMessages":"19244","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19245","messages":"19246","suppressedMessages":"19247","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19248","messages":"19249","suppressedMessages":"19250","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19251","messages":"19252","suppressedMessages":"19253","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19254","messages":"19255","suppressedMessages":"19256","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19257","messages":"19258","suppressedMessages":"19259","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19260","messages":"19261","suppressedMessages":"19262","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19263","messages":"19264","suppressedMessages":"19265","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19266","messages":"19267","suppressedMessages":"19268","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19269","messages":"19270","suppressedMessages":"19271","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19272","messages":"19273","suppressedMessages":"19274","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19275","messages":"19276","suppressedMessages":"19277","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"19278","messages":"19279","suppressedMessages":"19280","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"19281","messages":"19282","suppressedMessages":"19283","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19284","messages":"19285","suppressedMessages":"19286","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"19287","messages":"19288","suppressedMessages":"19289","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19290","messages":"19291","suppressedMessages":"19292","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19293","messages":"19294","suppressedMessages":"19295","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19296","messages":"19297","suppressedMessages":"19298","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19299","messages":"19300","suppressedMessages":"19301","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19302","messages":"19303","suppressedMessages":"19304","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19305","messages":"19306","suppressedMessages":"19307","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19308","messages":"19309","suppressedMessages":"19310","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19311","messages":"19312","suppressedMessages":"19313","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19314","messages":"19315","suppressedMessages":"19316","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19317","messages":"19318","suppressedMessages":"19319","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19320","messages":"19321","suppressedMessages":"19322","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"19323","messages":"19324","suppressedMessages":"19325","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19326","messages":"19327","suppressedMessages":"19328","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19329","messages":"19330","suppressedMessages":"19331","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19332","messages":"19333","suppressedMessages":"19334","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19335","messages":"19336","suppressedMessages":"19337","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19338","messages":"19339","suppressedMessages":"19340","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19341","messages":"19342","suppressedMessages":"19343","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19344","messages":"19345","suppressedMessages":"19346","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19347","messages":"19348","suppressedMessages":"19349","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19350","messages":"19351","suppressedMessages":"19352","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19353","messages":"19354","suppressedMessages":"19355","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19356","messages":"19357","suppressedMessages":"19358","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"19359","messages":"19360","suppressedMessages":"19361","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19362","messages":"19363","suppressedMessages":"19364","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19365","messages":"19366","suppressedMessages":"19367","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"19368","messages":"19369","suppressedMessages":"19370","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19371","messages":"19372","suppressedMessages":"19373","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19374","messages":"19375","suppressedMessages":"19376","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19377","messages":"19378","suppressedMessages":"19379","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19380","messages":"19381","suppressedMessages":"19382","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19383","messages":"19384","suppressedMessages":"19385","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19386","messages":"19387","suppressedMessages":"19388","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19389","messages":"19390","suppressedMessages":"19391","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19392","messages":"19393","suppressedMessages":"19394","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19395","messages":"19396","suppressedMessages":"19397","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19398","messages":"19399","suppressedMessages":"19400","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19401","messages":"19402","suppressedMessages":"19403","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19404","messages":"19405","suppressedMessages":"19406","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19407","messages":"19408","suppressedMessages":"19409","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19410","messages":"19411","suppressedMessages":"19412","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19413","messages":"19414","suppressedMessages":"19415","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19416","messages":"19417","suppressedMessages":"19418","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19419","messages":"19420","suppressedMessages":"19421","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19422","messages":"19423","suppressedMessages":"19424","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19425","messages":"19426","suppressedMessages":"19427","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19428","messages":"19429","suppressedMessages":"19430","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"19431","messages":"19432","suppressedMessages":"19433","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"19434","messages":"19435","suppressedMessages":"19436","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19437","messages":"19438","suppressedMessages":"19439","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19440","messages":"19441","suppressedMessages":"19442","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19443","messages":"19444","suppressedMessages":"19445","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19446","messages":"19447","suppressedMessages":"19448","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19449","messages":"19450","suppressedMessages":"19451","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19452","messages":"19453","suppressedMessages":"19454","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19455","messages":"19456","suppressedMessages":"19457","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19458","messages":"19459","suppressedMessages":"19460","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19461","messages":"19462","suppressedMessages":"19463","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19464","messages":"19465","suppressedMessages":"19466","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19467","messages":"19468","suppressedMessages":"19469","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19470","messages":"19471","suppressedMessages":"19472","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19473","messages":"19474","suppressedMessages":"19475","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19476","messages":"19477","suppressedMessages":"19478","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19479","messages":"19480","suppressedMessages":"19481","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19482","messages":"19483","suppressedMessages":"19484","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19485","messages":"19486","suppressedMessages":"19487","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19488","messages":"19489","suppressedMessages":"19490","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19491","messages":"19492","suppressedMessages":"19493","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19494","messages":"19495","suppressedMessages":"19496","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19497","messages":"19498","suppressedMessages":"19499","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19500","messages":"19501","suppressedMessages":"19502","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19503","messages":"19504","suppressedMessages":"19505","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19506","messages":"19507","suppressedMessages":"19508","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19509","messages":"19510","suppressedMessages":"19511","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19512","messages":"19513","suppressedMessages":"19514","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19515","messages":"19516","suppressedMessages":"19517","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19518","messages":"19519","suppressedMessages":"19520","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19521","messages":"19522","suppressedMessages":"19523","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19524","messages":"19525","suppressedMessages":"19526","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19527","messages":"19528","suppressedMessages":"19529","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19530","messages":"19531","suppressedMessages":"19532","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19533","messages":"19534","suppressedMessages":"19535","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19536","messages":"19537","suppressedMessages":"19538","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19539","messages":"19540","suppressedMessages":"19541","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19542","messages":"19543","suppressedMessages":"19544","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19545","messages":"19546","suppressedMessages":"19547","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19548","messages":"19549","suppressedMessages":"19550","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19551","messages":"19552","suppressedMessages":"19553","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19554","messages":"19555","suppressedMessages":"19556","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19557","messages":"19558","suppressedMessages":"19559","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19560","messages":"19561","suppressedMessages":"19562","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19563","messages":"19564","suppressedMessages":"19565","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19566","messages":"19567","suppressedMessages":"19568","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19569","messages":"19570","suppressedMessages":"19571","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19572","messages":"19573","suppressedMessages":"19574","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19575","messages":"19576","suppressedMessages":"19577","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19578","messages":"19579","suppressedMessages":"19580","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19581","messages":"19582","suppressedMessages":"19583","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19584","messages":"19585","suppressedMessages":"19586","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19587","messages":"19588","suppressedMessages":"19589","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19590","messages":"19591","suppressedMessages":"19592","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19593","messages":"19594","suppressedMessages":"19595","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19596","messages":"19597","suppressedMessages":"19598","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19599","messages":"19600","suppressedMessages":"19601","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19602","messages":"19603","suppressedMessages":"19604","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19605","messages":"19606","suppressedMessages":"19607","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"19608","messages":"19609","suppressedMessages":"19610","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19611","messages":"19612","suppressedMessages":"19613","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19614","messages":"19615","suppressedMessages":"19616","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19617","messages":"19618","suppressedMessages":"19619","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19620","messages":"19621","suppressedMessages":"19622","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19623","messages":"19624","suppressedMessages":"19625","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19626","messages":"19627","suppressedMessages":"19628","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19629","messages":"19630","suppressedMessages":"19631","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19632","messages":"19633","suppressedMessages":"19634","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"19635","messages":"19636","suppressedMessages":"19637","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19638","messages":"19639","suppressedMessages":"19640","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19641","messages":"19642","suppressedMessages":"19643","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19644","messages":"19645","suppressedMessages":"19646","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19647","messages":"19648","suppressedMessages":"19649","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19650","messages":"19651","suppressedMessages":"19652","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19653","messages":"19654","suppressedMessages":"19655","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19656","messages":"19657","suppressedMessages":"19658","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19659","messages":"19660","suppressedMessages":"19661","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19662","messages":"19663","suppressedMessages":"19664","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19665","messages":"19666","suppressedMessages":"19667","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19668","messages":"19669","suppressedMessages":"19670","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19671","messages":"19672","suppressedMessages":"19673","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19674","messages":"19675","suppressedMessages":"19676","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19677","messages":"19678","suppressedMessages":"19679","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19680","messages":"19681","suppressedMessages":"19682","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19683","messages":"19684","suppressedMessages":"19685","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19686","messages":"19687","suppressedMessages":"19688","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"19689","messages":"19690","suppressedMessages":"19691","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19692","messages":"19693","suppressedMessages":"19694","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19695","messages":"19696","suppressedMessages":"19697","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19698","messages":"19699","suppressedMessages":"19700","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19701","messages":"19702","suppressedMessages":"19703","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19704","messages":"19705","suppressedMessages":"19706","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19707","messages":"19708","suppressedMessages":"19709","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19710","messages":"19711","suppressedMessages":"19712","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"19713","messages":"19714","suppressedMessages":"19715","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19716","messages":"19717","suppressedMessages":"19718","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19719","messages":"19720","suppressedMessages":"19721","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19722","messages":"19723","suppressedMessages":"19724","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19725","messages":"19726","suppressedMessages":"19727","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19728","messages":"19729","suppressedMessages":"19730","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19731","messages":"19732","suppressedMessages":"19733","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19734","messages":"19735","suppressedMessages":"19736","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19737","messages":"19738","suppressedMessages":"19739","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19740","messages":"19741","suppressedMessages":"19742","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19743","messages":"19744","suppressedMessages":"19745","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19746","messages":"19747","suppressedMessages":"19748","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19749","messages":"19750","suppressedMessages":"19751","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19752","messages":"19753","suppressedMessages":"19754","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19755","messages":"19756","suppressedMessages":"19757","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19758","messages":"19759","suppressedMessages":"19760","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19761","messages":"19762","suppressedMessages":"19763","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19764","messages":"19765","suppressedMessages":"19766","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19767","messages":"19768","suppressedMessages":"19769","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"19770","messages":"19771","suppressedMessages":"19772","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19773","messages":"19774","suppressedMessages":"19775","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19776","messages":"19777","suppressedMessages":"19778","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19779","messages":"19780","suppressedMessages":"19781","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19782","messages":"19783","suppressedMessages":"19784","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19785","messages":"19786","suppressedMessages":"19787","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"19788","messages":"19789","suppressedMessages":"19790","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19791","messages":"19792","suppressedMessages":"19793","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19794","messages":"19795","suppressedMessages":"19796","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19797","messages":"19798","suppressedMessages":"19799","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19800","messages":"19801","suppressedMessages":"19802","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19803","messages":"19804","suppressedMessages":"19805","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19806","messages":"19807","suppressedMessages":"19808","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19809","messages":"19810","suppressedMessages":"19811","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19812","messages":"19813","suppressedMessages":"19814","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19815","messages":"19816","suppressedMessages":"19817","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19818","messages":"19819","suppressedMessages":"19820","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19821","messages":"19822","suppressedMessages":"19823","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19824","messages":"19825","suppressedMessages":"19826","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19827","messages":"19828","suppressedMessages":"19829","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19830","messages":"19831","suppressedMessages":"19832","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19833","messages":"19834","suppressedMessages":"19835","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19836","messages":"19837","suppressedMessages":"19838","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19839","messages":"19840","suppressedMessages":"19841","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19842","messages":"19843","suppressedMessages":"19844","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19845","messages":"19846","suppressedMessages":"19847","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19848","messages":"19849","suppressedMessages":"19850","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19851","messages":"19852","suppressedMessages":"19853","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19854","messages":"19855","suppressedMessages":"19856","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19857","messages":"19858","suppressedMessages":"19859","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19860","messages":"19861","suppressedMessages":"19862","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19863","messages":"19864","suppressedMessages":"19865","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19866","messages":"19867","suppressedMessages":"19868","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19869","messages":"19870","suppressedMessages":"19871","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19872","messages":"19873","suppressedMessages":"19874","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19875","messages":"19876","suppressedMessages":"19877","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19878","messages":"19879","suppressedMessages":"19880","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19881","messages":"19882","suppressedMessages":"19883","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19884","messages":"19885","suppressedMessages":"19886","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19887","messages":"19888","suppressedMessages":"19889","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19890","messages":"19891","suppressedMessages":"19892","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19893","messages":"19894","suppressedMessages":"19895","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19896","messages":"19897","suppressedMessages":"19898","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19899","messages":"19900","suppressedMessages":"19901","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19902","messages":"19903","suppressedMessages":"19904","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19905","messages":"19906","suppressedMessages":"19907","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19908","messages":"19909","suppressedMessages":"19910","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19911","messages":"19912","suppressedMessages":"19913","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19914","messages":"19915","suppressedMessages":"19916","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19917","messages":"19918","suppressedMessages":"19919","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19920","messages":"19921","suppressedMessages":"19922","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19923","messages":"19924","suppressedMessages":"19925","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19926","messages":"19927","suppressedMessages":"19928","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19929","messages":"19930","suppressedMessages":"19931","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19932","messages":"19933","suppressedMessages":"19934","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19935","messages":"19936","suppressedMessages":"19937","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19938","messages":"19939","suppressedMessages":"19940","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19941","messages":"19942","suppressedMessages":"19943","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19944","messages":"19945","suppressedMessages":"19946","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19947","messages":"19948","suppressedMessages":"19949","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19950","messages":"19951","suppressedMessages":"19952","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19953","messages":"19954","suppressedMessages":"19955","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19956","messages":"19957","suppressedMessages":"19958","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19959","messages":"19960","suppressedMessages":"19961","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19962","messages":"19963","suppressedMessages":"19964","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19965","messages":"19966","suppressedMessages":"19967","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19968","messages":"19969","suppressedMessages":"19970","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19971","messages":"19972","suppressedMessages":"19973","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19974","messages":"19975","suppressedMessages":"19976","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19977","messages":"19978","suppressedMessages":"19979","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19980","messages":"19981","suppressedMessages":"19982","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19983","messages":"19984","suppressedMessages":"19985","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19986","messages":"19987","suppressedMessages":"19988","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19989","messages":"19990","suppressedMessages":"19991","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19992","messages":"19993","suppressedMessages":"19994","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19995","messages":"19996","suppressedMessages":"19997","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"19998","messages":"19999","suppressedMessages":"20000","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20001","messages":"20002","suppressedMessages":"20003","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20004","messages":"20005","suppressedMessages":"20006","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20007","messages":"20008","suppressedMessages":"20009","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20010","messages":"20011","suppressedMessages":"20012","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20013","messages":"20014","suppressedMessages":"20015","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20016","messages":"20017","suppressedMessages":"20018","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20019","messages":"20020","suppressedMessages":"20021","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20022","messages":"20023","suppressedMessages":"20024","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20025","messages":"20026","suppressedMessages":"20027","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20028","messages":"20029","suppressedMessages":"20030","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20031","messages":"20032","suppressedMessages":"20033","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20034","messages":"20035","suppressedMessages":"20036","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20037","messages":"20038","suppressedMessages":"20039","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20040","messages":"20041","suppressedMessages":"20042","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20043","messages":"20044","suppressedMessages":"20045","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20046","messages":"20047","suppressedMessages":"20048","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20049","messages":"20050","suppressedMessages":"20051","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20052","messages":"20053","suppressedMessages":"20054","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20055","messages":"20056","suppressedMessages":"20057","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20058","messages":"20059","suppressedMessages":"20060","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20061","messages":"20062","suppressedMessages":"20063","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20064","messages":"20065","suppressedMessages":"20066","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20067","messages":"20068","suppressedMessages":"20069","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20070","messages":"20071","suppressedMessages":"20072","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20073","messages":"20074","suppressedMessages":"20075","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20076","messages":"20077","suppressedMessages":"20078","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20079","messages":"20080","suppressedMessages":"20081","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20082","messages":"20083","suppressedMessages":"20084","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20085","messages":"20086","suppressedMessages":"20087","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20088","messages":"20089","suppressedMessages":"20090","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20091","messages":"20092","suppressedMessages":"20093","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20094","messages":"20095","suppressedMessages":"20096","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20097","messages":"20098","suppressedMessages":"20099","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20100","messages":"20101","suppressedMessages":"20102","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20103","messages":"20104","suppressedMessages":"20105","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20106","messages":"20107","suppressedMessages":"20108","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20109","messages":"20110","suppressedMessages":"20111","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20112","messages":"20113","suppressedMessages":"20114","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20115","messages":"20116","suppressedMessages":"20117","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20118","messages":"20119","suppressedMessages":"20120","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20121","messages":"20122","suppressedMessages":"20123","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20124","messages":"20125","suppressedMessages":"20126","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20127","messages":"20128","suppressedMessages":"20129","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20130","messages":"20131","suppressedMessages":"20132","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20133","messages":"20134","suppressedMessages":"20135","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20136","messages":"20137","suppressedMessages":"20138","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20139","messages":"20140","suppressedMessages":"20141","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20142","messages":"20143","suppressedMessages":"20144","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"20145","messages":"20146","suppressedMessages":"20147","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20148","messages":"20149","suppressedMessages":"20150","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20151","messages":"20152","suppressedMessages":"20153","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20154","messages":"20155","suppressedMessages":"20156","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20157","messages":"20158","suppressedMessages":"20159","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20160","messages":"20161","suppressedMessages":"20162","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20163","messages":"20164","suppressedMessages":"20165","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20166","messages":"20167","suppressedMessages":"20168","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20169","messages":"20170","suppressedMessages":"20171","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20172","messages":"20173","suppressedMessages":"20174","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20175","messages":"20176","suppressedMessages":"20177","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20178","messages":"20179","suppressedMessages":"20180","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20181","messages":"20182","suppressedMessages":"20183","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20184","messages":"20185","suppressedMessages":"20186","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20187","messages":"20188","suppressedMessages":"20189","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20190","messages":"20191","suppressedMessages":"20192","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20193","messages":"20194","suppressedMessages":"20195","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20196","messages":"20197","suppressedMessages":"20198","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20199","messages":"20200","suppressedMessages":"20201","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"20202","messages":"20203","suppressedMessages":"20204","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20205","messages":"20206","suppressedMessages":"20207","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20208","messages":"20209","suppressedMessages":"20210","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20211","messages":"20212","suppressedMessages":"20213","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20214","messages":"20215","suppressedMessages":"20216","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20217","messages":"20218","suppressedMessages":"20219","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20220","messages":"20221","suppressedMessages":"20222","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20223","messages":"20224","suppressedMessages":"20225","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20226","messages":"20227","suppressedMessages":"20228","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20229","messages":"20230","suppressedMessages":"20231","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"20232","messages":"20233","suppressedMessages":"20234","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20235","messages":"20236","suppressedMessages":"20237","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20238","messages":"20239","suppressedMessages":"20240","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20241","messages":"20242","suppressedMessages":"20243","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20244","messages":"20245","suppressedMessages":"20246","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20247","messages":"20248","suppressedMessages":"20249","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20250","messages":"20251","suppressedMessages":"20252","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20253","messages":"20254","suppressedMessages":"20255","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20256","messages":"20257","suppressedMessages":"20258","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20259","messages":"20260","suppressedMessages":"20261","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20262","messages":"20263","suppressedMessages":"20264","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20265","messages":"20266","suppressedMessages":"20267","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20268","messages":"20269","suppressedMessages":"20270","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20271","messages":"20272","suppressedMessages":"20273","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20274","messages":"20275","suppressedMessages":"20276","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20277","messages":"20278","suppressedMessages":"20279","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20280","messages":"20281","suppressedMessages":"20282","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20283","messages":"20284","suppressedMessages":"20285","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20286","messages":"20287","suppressedMessages":"20288","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"z7bfz5",{"filePath":"20289","messages":"20290","suppressedMessages":"20291","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"20292","messages":"20293","suppressedMessages":"20294","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20295","messages":"20296","suppressedMessages":"20297","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20298","messages":"20299","suppressedMessages":"20300","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20301","messages":"20302","suppressedMessages":"20303","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20304","messages":"20305","suppressedMessages":"20306","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20307","messages":"20308","suppressedMessages":"20309","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20310","messages":"20311","suppressedMessages":"20312","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20313","messages":"20314","suppressedMessages":"20315","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20316","messages":"20317","suppressedMessages":"20318","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20319","messages":"20320","suppressedMessages":"20321","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20322","messages":"20323","suppressedMessages":"20324","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20325","messages":"20326","suppressedMessages":"20327","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20328","messages":"20329","suppressedMessages":"20330","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20331","messages":"20332","suppressedMessages":"20333","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20334","messages":"20335","suppressedMessages":"20336","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20337","messages":"20338","suppressedMessages":"20339","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20340","messages":"20341","suppressedMessages":"20342","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20343","messages":"20344","suppressedMessages":"20345","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20346","messages":"20347","suppressedMessages":"20348","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20349","messages":"20350","suppressedMessages":"20351","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20352","messages":"20353","suppressedMessages":"20354","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20355","messages":"20356","suppressedMessages":"20357","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20358","messages":"20359","suppressedMessages":"20360","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20361","messages":"20362","suppressedMessages":"20363","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20364","messages":"20365","suppressedMessages":"20366","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20367","messages":"20368","suppressedMessages":"20369","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20370","messages":"20371","suppressedMessages":"20372","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20373","messages":"20374","suppressedMessages":"20375","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20376","messages":"20377","suppressedMessages":"20378","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20379","messages":"20380","suppressedMessages":"20381","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20382","messages":"20383","suppressedMessages":"20384","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20385","messages":"20386","suppressedMessages":"20387","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20388","messages":"20389","suppressedMessages":"20390","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20391","messages":"20392","suppressedMessages":"20393","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20394","messages":"20395","suppressedMessages":"20396","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20397","messages":"20398","suppressedMessages":"20399","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20400","messages":"20401","suppressedMessages":"20402","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20403","messages":"20404","suppressedMessages":"20405","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20406","messages":"20407","suppressedMessages":"20408","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20409","messages":"20410","suppressedMessages":"20411","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20412","messages":"20413","suppressedMessages":"20414","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20415","messages":"20416","suppressedMessages":"20417","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20418","messages":"20419","suppressedMessages":"20420","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20421","messages":"20422","suppressedMessages":"20423","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20424","messages":"20425","suppressedMessages":"20426","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20427","messages":"20428","suppressedMessages":"20429","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20430","messages":"20431","suppressedMessages":"20432","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20433","messages":"20434","suppressedMessages":"20435","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20436","messages":"20437","suppressedMessages":"20438","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20439","messages":"20440","suppressedMessages":"20441","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20442","messages":"20443","suppressedMessages":"20444","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20445","messages":"20446","suppressedMessages":"20447","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20448","messages":"20449","suppressedMessages":"20450","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20451","messages":"20452","suppressedMessages":"20453","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20454","messages":"20455","suppressedMessages":"20456","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20457","messages":"20458","suppressedMessages":"20459","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20460","messages":"20461","suppressedMessages":"20462","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20463","messages":"20464","suppressedMessages":"20465","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20466","messages":"20467","suppressedMessages":"20468","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20469","messages":"20470","suppressedMessages":"20471","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20472","messages":"20473","suppressedMessages":"20474","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20475","messages":"20476","suppressedMessages":"20477","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20478","messages":"20479","suppressedMessages":"20480","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20481","messages":"20482","suppressedMessages":"20483","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20484","messages":"20485","suppressedMessages":"20486","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20487","messages":"20488","suppressedMessages":"20489","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20490","messages":"20491","suppressedMessages":"20492","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20493","messages":"20494","suppressedMessages":"20495","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20496","messages":"20497","suppressedMessages":"20498","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20499","messages":"20500","suppressedMessages":"20501","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20502","messages":"20503","suppressedMessages":"20504","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20505","messages":"20506","suppressedMessages":"20507","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20508","messages":"20509","suppressedMessages":"20510","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20511","messages":"20512","suppressedMessages":"20513","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20514","messages":"20515","suppressedMessages":"20516","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20517","messages":"20518","suppressedMessages":"20519","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20520","messages":"20521","suppressedMessages":"20522","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20523","messages":"20524","suppressedMessages":"20525","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20526","messages":"20527","suppressedMessages":"20528","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20529","messages":"20530","suppressedMessages":"20531","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20532","messages":"20533","suppressedMessages":"20534","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20535","messages":"20536","suppressedMessages":"20537","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20538","messages":"20539","suppressedMessages":"20540","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20541","messages":"20542","suppressedMessages":"20543","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20544","messages":"20545","suppressedMessages":"20546","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20547","messages":"20548","suppressedMessages":"20549","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20550","messages":"20551","suppressedMessages":"20552","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20553","messages":"20554","suppressedMessages":"20555","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20556","messages":"20557","suppressedMessages":"20558","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20559","messages":"20560","suppressedMessages":"20561","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20562","messages":"20563","suppressedMessages":"20564","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20565","messages":"20566","suppressedMessages":"20567","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20568","messages":"20569","suppressedMessages":"20570","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20571","messages":"20572","suppressedMessages":"20573","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20574","messages":"20575","suppressedMessages":"20576","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20577","messages":"20578","suppressedMessages":"20579","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20580","messages":"20581","suppressedMessages":"20582","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20583","messages":"20584","suppressedMessages":"20585","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20586","messages":"20587","suppressedMessages":"20588","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20589","messages":"20590","suppressedMessages":"20591","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20592","messages":"20593","suppressedMessages":"20594","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20595","messages":"20596","suppressedMessages":"20597","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"20598","messages":"20599","suppressedMessages":"20600","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20601","messages":"20602","suppressedMessages":"20603","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20604","messages":"20605","suppressedMessages":"20606","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20607","messages":"20608","suppressedMessages":"20609","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20610","messages":"20611","suppressedMessages":"20612","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"20613","messages":"20614","suppressedMessages":"20615","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20616","messages":"20617","suppressedMessages":"20618","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20619","messages":"20620","suppressedMessages":"20621","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20622","messages":"20623","suppressedMessages":"20624","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20625","messages":"20626","suppressedMessages":"20627","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20628","messages":"20629","suppressedMessages":"20630","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20631","messages":"20632","suppressedMessages":"20633","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20634","messages":"20635","suppressedMessages":"20636","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20637","messages":"20638","suppressedMessages":"20639","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20640","messages":"20641","suppressedMessages":"20642","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20643","messages":"20644","suppressedMessages":"20645","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20646","messages":"20647","suppressedMessages":"20648","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20649","messages":"20650","suppressedMessages":"20651","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20652","messages":"20653","suppressedMessages":"20654","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20655","messages":"20656","suppressedMessages":"20657","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20658","messages":"20659","suppressedMessages":"20660","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20661","messages":"20662","suppressedMessages":"20663","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20664","messages":"20665","suppressedMessages":"20666","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20667","messages":"20668","suppressedMessages":"20669","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20670","messages":"20671","suppressedMessages":"20672","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20673","messages":"20674","suppressedMessages":"20675","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20676","messages":"20677","suppressedMessages":"20678","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20679","messages":"20680","suppressedMessages":"20681","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20682","messages":"20683","suppressedMessages":"20684","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20685","messages":"20686","suppressedMessages":"20687","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20688","messages":"20689","suppressedMessages":"20690","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20691","messages":"20692","suppressedMessages":"20693","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20694","messages":"20695","suppressedMessages":"20696","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20697","messages":"20698","suppressedMessages":"20699","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20700","messages":"20701","suppressedMessages":"20702","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20703","messages":"20704","suppressedMessages":"20705","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20706","messages":"20707","suppressedMessages":"20708","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20709","messages":"20710","suppressedMessages":"20711","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20712","messages":"20713","suppressedMessages":"20714","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20715","messages":"20716","suppressedMessages":"20717","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20718","messages":"20719","suppressedMessages":"20720","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20721","messages":"20722","suppressedMessages":"20723","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20724","messages":"20725","suppressedMessages":"20726","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20727","messages":"20728","suppressedMessages":"20729","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20730","messages":"20731","suppressedMessages":"20732","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20733","messages":"20734","suppressedMessages":"20735","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20736","messages":"20737","suppressedMessages":"20738","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20739","messages":"20740","suppressedMessages":"20741","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20742","messages":"20743","suppressedMessages":"20744","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20745","messages":"20746","suppressedMessages":"20747","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20748","messages":"20749","suppressedMessages":"20750","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20751","messages":"20752","suppressedMessages":"20753","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20754","messages":"20755","suppressedMessages":"20756","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20757","messages":"20758","suppressedMessages":"20759","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20760","messages":"20761","suppressedMessages":"20762","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20763","messages":"20764","suppressedMessages":"20765","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20766","messages":"20767","suppressedMessages":"20768","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20769","messages":"20770","suppressedMessages":"20771","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20772","messages":"20773","suppressedMessages":"20774","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20775","messages":"20776","suppressedMessages":"20777","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20778","messages":"20779","suppressedMessages":"20780","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20781","messages":"20782","suppressedMessages":"20783","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20784","messages":"20785","suppressedMessages":"20786","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20787","messages":"20788","suppressedMessages":"20789","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20790","messages":"20791","suppressedMessages":"20792","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20793","messages":"20794","suppressedMessages":"20795","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20796","messages":"20797","suppressedMessages":"20798","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20799","messages":"20800","suppressedMessages":"20801","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20802","messages":"20803","suppressedMessages":"20804","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20805","messages":"20806","suppressedMessages":"20807","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20808","messages":"20809","suppressedMessages":"20810","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20811","messages":"20812","suppressedMessages":"20813","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20814","messages":"20815","suppressedMessages":"20816","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20817","messages":"20818","suppressedMessages":"20819","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20820","messages":"20821","suppressedMessages":"20822","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20823","messages":"20824","suppressedMessages":"20825","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20826","messages":"20827","suppressedMessages":"20828","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20829","messages":"20830","suppressedMessages":"20831","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20832","messages":"20833","suppressedMessages":"20834","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20835","messages":"20836","suppressedMessages":"20837","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20838","messages":"20839","suppressedMessages":"20840","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20841","messages":"20842","suppressedMessages":"20843","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20844","messages":"20845","suppressedMessages":"20846","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20847","messages":"20848","suppressedMessages":"20849","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20850","messages":"20851","suppressedMessages":"20852","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20853","messages":"20854","suppressedMessages":"20855","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20856","messages":"20857","suppressedMessages":"20858","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20859","messages":"20860","suppressedMessages":"20861","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20862","messages":"20863","suppressedMessages":"20864","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20865","messages":"20866","suppressedMessages":"20867","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20868","messages":"20869","suppressedMessages":"20870","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20871","messages":"20872","suppressedMessages":"20873","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20874","messages":"20875","suppressedMessages":"20876","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20877","messages":"20878","suppressedMessages":"20879","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20880","messages":"20881","suppressedMessages":"20882","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20883","messages":"20884","suppressedMessages":"20885","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20886","messages":"20887","suppressedMessages":"20888","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20889","messages":"20890","suppressedMessages":"20891","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20892","messages":"20893","suppressedMessages":"20894","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20895","messages":"20896","suppressedMessages":"20897","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20898","messages":"20899","suppressedMessages":"20900","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20901","messages":"20902","suppressedMessages":"20903","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20904","messages":"20905","suppressedMessages":"20906","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20907","messages":"20908","suppressedMessages":"20909","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20910","messages":"20911","suppressedMessages":"20912","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20913","messages":"20914","suppressedMessages":"20915","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20916","messages":"20917","suppressedMessages":"20918","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20919","messages":"20920","suppressedMessages":"20921","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"20922","messages":"20923","suppressedMessages":"20924","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20925","messages":"20926","suppressedMessages":"20927","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20928","messages":"20929","suppressedMessages":"20930","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20931","messages":"20932","suppressedMessages":"20933","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20934","messages":"20935","suppressedMessages":"20936","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20937","messages":"20938","suppressedMessages":"20939","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20940","messages":"20941","suppressedMessages":"20942","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20943","messages":"20944","suppressedMessages":"20945","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20946","messages":"20947","suppressedMessages":"20948","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20949","messages":"20950","suppressedMessages":"20951","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20952","messages":"20953","suppressedMessages":"20954","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20955","messages":"20956","suppressedMessages":"20957","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20958","messages":"20959","suppressedMessages":"20960","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20961","messages":"20962","suppressedMessages":"20963","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20964","messages":"20965","suppressedMessages":"20966","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20967","messages":"20968","suppressedMessages":"20969","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20970","messages":"20971","suppressedMessages":"20972","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20973","messages":"20974","suppressedMessages":"20975","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20976","messages":"20977","suppressedMessages":"20978","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20979","messages":"20980","suppressedMessages":"20981","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20982","messages":"20983","suppressedMessages":"20984","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20985","messages":"20986","suppressedMessages":"20987","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20988","messages":"20989","suppressedMessages":"20990","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20991","messages":"20992","suppressedMessages":"20993","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20994","messages":"20995","suppressedMessages":"20996","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20997","messages":"20998","suppressedMessages":"20999","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21000","messages":"21001","suppressedMessages":"21002","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21003","messages":"21004","suppressedMessages":"21005","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21006","messages":"21007","suppressedMessages":"21008","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21009","messages":"21010","suppressedMessages":"21011","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21012","messages":"21013","suppressedMessages":"21014","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21015","messages":"21016","suppressedMessages":"21017","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21018","messages":"21019","suppressedMessages":"21020","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21021","messages":"21022","suppressedMessages":"21023","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21024","messages":"21025","suppressedMessages":"21026","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21027","messages":"21028","suppressedMessages":"21029","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21030","messages":"21031","suppressedMessages":"21032","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21033","messages":"21034","suppressedMessages":"21035","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21036","messages":"21037","suppressedMessages":"21038","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21039","messages":"21040","suppressedMessages":"21041","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21042","messages":"21043","suppressedMessages":"21044","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21045","messages":"21046","suppressedMessages":"21047","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21048","messages":"21049","suppressedMessages":"21050","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21051","messages":"21052","suppressedMessages":"21053","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21054","messages":"21055","suppressedMessages":"21056","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21057","messages":"21058","suppressedMessages":"21059","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21060","messages":"21061","suppressedMessages":"21062","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21063","messages":"21064","suppressedMessages":"21065","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21066","messages":"21067","suppressedMessages":"21068","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21069","messages":"21070","suppressedMessages":"21071","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21072","messages":"21073","suppressedMessages":"21074","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21075","messages":"21076","suppressedMessages":"21077","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21078","messages":"21079","suppressedMessages":"21080","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21081","messages":"21082","suppressedMessages":"21083","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21084","messages":"21085","suppressedMessages":"21086","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21087","messages":"21088","suppressedMessages":"21089","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21090","messages":"21091","suppressedMessages":"21092","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21093","messages":"21094","suppressedMessages":"21095","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21096","messages":"21097","suppressedMessages":"21098","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21099","messages":"21100","suppressedMessages":"21101","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21102","messages":"21103","suppressedMessages":"21104","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21105","messages":"21106","suppressedMessages":"21107","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21108","messages":"21109","suppressedMessages":"21110","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21111","messages":"21112","suppressedMessages":"21113","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21114","messages":"21115","suppressedMessages":"21116","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21117","messages":"21118","suppressedMessages":"21119","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21120","messages":"21121","suppressedMessages":"21122","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21123","messages":"21124","suppressedMessages":"21125","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21126","messages":"21127","suppressedMessages":"21128","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21129","messages":"21130","suppressedMessages":"21131","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21132","messages":"21133","suppressedMessages":"21134","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21135","messages":"21136","suppressedMessages":"21137","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21138","messages":"21139","suppressedMessages":"21140","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21141","messages":"21142","suppressedMessages":"21143","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21144","messages":"21145","suppressedMessages":"21146","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21147","messages":"21148","suppressedMessages":"21149","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21150","messages":"21151","suppressedMessages":"21152","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21153","messages":"21154","suppressedMessages":"21155","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21156","messages":"21157","suppressedMessages":"21158","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21159","messages":"21160","suppressedMessages":"21161","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21162","messages":"21163","suppressedMessages":"21164","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21165","messages":"21166","suppressedMessages":"21167","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21168","messages":"21169","suppressedMessages":"21170","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21171","messages":"21172","suppressedMessages":"21173","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21174","messages":"21175","suppressedMessages":"21176","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21177","messages":"21178","suppressedMessages":"21179","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21180","messages":"21181","suppressedMessages":"21182","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21183","messages":"21184","suppressedMessages":"21185","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21186","messages":"21187","suppressedMessages":"21188","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21189","messages":"21190","suppressedMessages":"21191","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21192","messages":"21193","suppressedMessages":"21194","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21195","messages":"21196","suppressedMessages":"21197","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21198","messages":"21199","suppressedMessages":"21200","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21201","messages":"21202","suppressedMessages":"21203","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21204","messages":"21205","suppressedMessages":"21206","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21207","messages":"21208","suppressedMessages":"21209","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21210","messages":"21211","suppressedMessages":"21212","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21213","messages":"21214","suppressedMessages":"21215","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21216","messages":"21217","suppressedMessages":"21218","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21219","messages":"21220","suppressedMessages":"21221","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21222","messages":"21223","suppressedMessages":"21224","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21225","messages":"21226","suppressedMessages":"21227","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21228","messages":"21229","suppressedMessages":"21230","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21231","messages":"21232","suppressedMessages":"21233","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21234","messages":"21235","suppressedMessages":"21236","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21237","messages":"21238","suppressedMessages":"21239","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21240","messages":"21241","suppressedMessages":"21242","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21243","messages":"21244","suppressedMessages":"21245","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21246","messages":"21247","suppressedMessages":"21248","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21249","messages":"21250","suppressedMessages":"21251","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21252","messages":"21253","suppressedMessages":"21254","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21255","messages":"21256","suppressedMessages":"21257","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21258","messages":"21259","suppressedMessages":"21260","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"21261","messages":"21262","suppressedMessages":"21263","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21264","messages":"21265","suppressedMessages":"21266","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21267","messages":"21268","suppressedMessages":"21269","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21270","messages":"21271","suppressedMessages":"21272","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21273","messages":"21274","suppressedMessages":"21275","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21276","messages":"21277","suppressedMessages":"21278","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21279","messages":"21280","suppressedMessages":"21281","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21282","messages":"21283","suppressedMessages":"21284","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21285","messages":"21286","suppressedMessages":"21287","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21288","messages":"21289","suppressedMessages":"21290","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21291","messages":"21292","suppressedMessages":"21293","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21294","messages":"21295","suppressedMessages":"21296","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21297","messages":"21298","suppressedMessages":"21299","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21300","messages":"21301","suppressedMessages":"21302","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21303","messages":"21304","suppressedMessages":"21305","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21306","messages":"21307","suppressedMessages":"21308","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21309","messages":"21310","suppressedMessages":"21311","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21312","messages":"21313","suppressedMessages":"21314","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21315","messages":"21316","suppressedMessages":"21317","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21318","messages":"21319","suppressedMessages":"21320","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21321","messages":"21322","suppressedMessages":"21323","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21324","messages":"21325","suppressedMessages":"21326","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21327","messages":"21328","suppressedMessages":"21329","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21330","messages":"21331","suppressedMessages":"21332","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21333","messages":"21334","suppressedMessages":"21335","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21336","messages":"21337","suppressedMessages":"21338","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21339","messages":"21340","suppressedMessages":"21341","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21342","messages":"21343","suppressedMessages":"21344","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21345","messages":"21346","suppressedMessages":"21347","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21348","messages":"21349","suppressedMessages":"21350","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21351","messages":"21352","suppressedMessages":"21353","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21354","messages":"21355","suppressedMessages":"21356","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21357","messages":"21358","suppressedMessages":"21359","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21360","messages":"21361","suppressedMessages":"21362","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21363","messages":"21364","suppressedMessages":"21365","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21366","messages":"21367","suppressedMessages":"21368","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21369","messages":"21370","suppressedMessages":"21371","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21372","messages":"21373","suppressedMessages":"21374","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21375","messages":"21376","suppressedMessages":"21377","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21378","messages":"21379","suppressedMessages":"21380","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21381","messages":"21382","suppressedMessages":"21383","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21384","messages":"21385","suppressedMessages":"21386","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21387","messages":"21388","suppressedMessages":"21389","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21390","messages":"21391","suppressedMessages":"21392","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21393","messages":"21394","suppressedMessages":"21395","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21396","messages":"21397","suppressedMessages":"21398","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21399","messages":"21400","suppressedMessages":"21401","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21402","messages":"21403","suppressedMessages":"21404","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21405","messages":"21406","suppressedMessages":"21407","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21408","messages":"21409","suppressedMessages":"21410","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21411","messages":"21412","suppressedMessages":"21413","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21414","messages":"21415","suppressedMessages":"21416","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21417","messages":"21418","suppressedMessages":"21419","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21420","messages":"21421","suppressedMessages":"21422","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21423","messages":"21424","suppressedMessages":"21425","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21426","messages":"21427","suppressedMessages":"21428","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21429","messages":"21430","suppressedMessages":"21431","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21432","messages":"21433","suppressedMessages":"21434","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21435","messages":"21436","suppressedMessages":"21437","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21438","messages":"21439","suppressedMessages":"21440","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21441","messages":"21442","suppressedMessages":"21443","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21444","messages":"21445","suppressedMessages":"21446","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21447","messages":"21448","suppressedMessages":"21449","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21450","messages":"21451","suppressedMessages":"21452","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21453","messages":"21454","suppressedMessages":"21455","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21456","messages":"21457","suppressedMessages":"21458","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21459","messages":"21460","suppressedMessages":"21461","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21462","messages":"21463","suppressedMessages":"21464","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21465","messages":"21466","suppressedMessages":"21467","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21468","messages":"21469","suppressedMessages":"21470","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21471","messages":"21472","suppressedMessages":"21473","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21474","messages":"21475","suppressedMessages":"21476","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21477","messages":"21478","suppressedMessages":"21479","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21480","messages":"21481","suppressedMessages":"21482","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21483","messages":"21484","suppressedMessages":"21485","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21486","messages":"21487","suppressedMessages":"21488","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21489","messages":"21490","suppressedMessages":"21491","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21492","messages":"21493","suppressedMessages":"21494","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21495","messages":"21496","suppressedMessages":"21497","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21498","messages":"21499","suppressedMessages":"21500","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21501","messages":"21502","suppressedMessages":"21503","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21504","messages":"21505","suppressedMessages":"21506","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21507","messages":"21508","suppressedMessages":"21509","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21510","messages":"21511","suppressedMessages":"21512","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21513","messages":"21514","suppressedMessages":"21515","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21516","messages":"21517","suppressedMessages":"21518","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21519","messages":"21520","suppressedMessages":"21521","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21522","messages":"21523","suppressedMessages":"21524","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21525","messages":"21526","suppressedMessages":"21527","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21528","messages":"21529","suppressedMessages":"21530","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21531","messages":"21532","suppressedMessages":"21533","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21534","messages":"21535","suppressedMessages":"21536","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21537","messages":"21538","suppressedMessages":"21539","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21540","messages":"21541","suppressedMessages":"21542","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21543","messages":"21544","suppressedMessages":"21545","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21546","messages":"21547","suppressedMessages":"21548","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21549","messages":"21550","suppressedMessages":"21551","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21552","messages":"21553","suppressedMessages":"21554","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21555","messages":"21556","suppressedMessages":"21557","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21558","messages":"21559","suppressedMessages":"21560","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21561","messages":"21562","suppressedMessages":"21563","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21564","messages":"21565","suppressedMessages":"21566","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21567","messages":"21568","suppressedMessages":"21569","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21570","messages":"21571","suppressedMessages":"21572","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21573","messages":"21574","suppressedMessages":"21575","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21576","messages":"21577","suppressedMessages":"21578","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21579","messages":"21580","suppressedMessages":"21581","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21582","messages":"21583","suppressedMessages":"21584","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21585","messages":"21586","suppressedMessages":"21587","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21588","messages":"21589","suppressedMessages":"21590","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21591","messages":"21592","suppressedMessages":"21593","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21594","messages":"21595","suppressedMessages":"21596","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21597","messages":"21598","suppressedMessages":"21599","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21600","messages":"21601","suppressedMessages":"21602","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21603","messages":"21604","suppressedMessages":"21605","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21606","messages":"21607","suppressedMessages":"21608","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21609","messages":"21610","suppressedMessages":"21611","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21612","messages":"21613","suppressedMessages":"21614","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21615","messages":"21616","suppressedMessages":"21617","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21618","messages":"21619","suppressedMessages":"21620","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21621","messages":"21622","suppressedMessages":"21623","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21624","messages":"21625","suppressedMessages":"21626","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21627","messages":"21628","suppressedMessages":"21629","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21630","messages":"21631","suppressedMessages":"21632","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21633","messages":"21634","suppressedMessages":"21635","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21636","messages":"21637","suppressedMessages":"21638","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21639","messages":"21640","suppressedMessages":"21641","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21642","messages":"21643","suppressedMessages":"21644","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21645","messages":"21646","suppressedMessages":"21647","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21648","messages":"21649","suppressedMessages":"21650","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21651","messages":"21652","suppressedMessages":"21653","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21654","messages":"21655","suppressedMessages":"21656","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21657","messages":"21658","suppressedMessages":"21659","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21660","messages":"21661","suppressedMessages":"21662","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21663","messages":"21664","suppressedMessages":"21665","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21666","messages":"21667","suppressedMessages":"21668","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21669","messages":"21670","suppressedMessages":"21671","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21672","messages":"21673","suppressedMessages":"21674","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21675","messages":"21676","suppressedMessages":"21677","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21678","messages":"21679","suppressedMessages":"21680","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21681","messages":"21682","suppressedMessages":"21683","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21684","messages":"21685","suppressedMessages":"21686","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21687","messages":"21688","suppressedMessages":"21689","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21690","messages":"21691","suppressedMessages":"21692","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21693","messages":"21694","suppressedMessages":"21695","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21696","messages":"21697","suppressedMessages":"21698","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21699","messages":"21700","suppressedMessages":"21701","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21702","messages":"21703","suppressedMessages":"21704","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21705","messages":"21706","suppressedMessages":"21707","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21708","messages":"21709","suppressedMessages":"21710","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21711","messages":"21712","suppressedMessages":"21713","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21714","messages":"21715","suppressedMessages":"21716","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21717","messages":"21718","suppressedMessages":"21719","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21720","messages":"21721","suppressedMessages":"21722","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21723","messages":"21724","suppressedMessages":"21725","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21726","messages":"21727","suppressedMessages":"21728","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21729","messages":"21730","suppressedMessages":"21731","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21732","messages":"21733","suppressedMessages":"21734","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21735","messages":"21736","suppressedMessages":"21737","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21738","messages":"21739","suppressedMessages":"21740","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21741","messages":"21742","suppressedMessages":"21743","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21744","messages":"21745","suppressedMessages":"21746","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21747","messages":"21748","suppressedMessages":"21749","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21750","messages":"21751","suppressedMessages":"21752","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21753","messages":"21754","suppressedMessages":"21755","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21756","messages":"21757","suppressedMessages":"21758","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21759","messages":"21760","suppressedMessages":"21761","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21762","messages":"21763","suppressedMessages":"21764","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21765","messages":"21766","suppressedMessages":"21767","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21768","messages":"21769","suppressedMessages":"21770","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21771","messages":"21772","suppressedMessages":"21773","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21774","messages":"21775","suppressedMessages":"21776","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21777","messages":"21778","suppressedMessages":"21779","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21780","messages":"21781","suppressedMessages":"21782","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21783","messages":"21784","suppressedMessages":"21785","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21786","messages":"21787","suppressedMessages":"21788","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21789","messages":"21790","suppressedMessages":"21791","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21792","messages":"21793","suppressedMessages":"21794","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21795","messages":"21796","suppressedMessages":"21797","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21798","messages":"21799","suppressedMessages":"21800","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21801","messages":"21802","suppressedMessages":"21803","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21804","messages":"21805","suppressedMessages":"21806","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21807","messages":"21808","suppressedMessages":"21809","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21810","messages":"21811","suppressedMessages":"21812","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21813","messages":"21814","suppressedMessages":"21815","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21816","messages":"21817","suppressedMessages":"21818","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21819","messages":"21820","suppressedMessages":"21821","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21822","messages":"21823","suppressedMessages":"21824","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21825","messages":"21826","suppressedMessages":"21827","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21828","messages":"21829","suppressedMessages":"21830","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21831","messages":"21832","suppressedMessages":"21833","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21834","messages":"21835","suppressedMessages":"21836","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21837","messages":"21838","suppressedMessages":"21839","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21840","messages":"21841","suppressedMessages":"21842","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21843","messages":"21844","suppressedMessages":"21845","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21846","messages":"21847","suppressedMessages":"21848","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21849","messages":"21850","suppressedMessages":"21851","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21852","messages":"21853","suppressedMessages":"21854","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21855","messages":"21856","suppressedMessages":"21857","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"21858","messages":"21859","suppressedMessages":"21860","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"21861","messages":"21862","suppressedMessages":"21863","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21864","messages":"21865","suppressedMessages":"21866","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21867","messages":"21868","suppressedMessages":"21869","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21870","messages":"21871","suppressedMessages":"21872","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21873","messages":"21874","suppressedMessages":"21875","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21876","messages":"21877","suppressedMessages":"21878","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21879","messages":"21880","suppressedMessages":"21881","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21882","messages":"21883","suppressedMessages":"21884","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21885","messages":"21886","suppressedMessages":"21887","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21888","messages":"21889","suppressedMessages":"21890","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21891","messages":"21892","suppressedMessages":"21893","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21894","messages":"21895","suppressedMessages":"21896","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21897","messages":"21898","suppressedMessages":"21899","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21900","messages":"21901","suppressedMessages":"21902","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21903","messages":"21904","suppressedMessages":"21905","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21906","messages":"21907","suppressedMessages":"21908","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21909","messages":"21910","suppressedMessages":"21911","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21912","messages":"21913","suppressedMessages":"21914","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21915","messages":"21916","suppressedMessages":"21917","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21918","messages":"21919","suppressedMessages":"21920","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21921","messages":"21922","suppressedMessages":"21923","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21924","messages":"21925","suppressedMessages":"21926","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"21927","messages":"21928","suppressedMessages":"21929","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21930","messages":"21931","suppressedMessages":"21932","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21933","messages":"21934","suppressedMessages":"21935","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21936","messages":"21937","suppressedMessages":"21938","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21939","messages":"21940","suppressedMessages":"21941","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21942","messages":"21943","suppressedMessages":"21944","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21945","messages":"21946","suppressedMessages":"21947","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21948","messages":"21949","suppressedMessages":"21950","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21951","messages":"21952","suppressedMessages":"21953","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21954","messages":"21955","suppressedMessages":"21956","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"21957","messages":"21958","suppressedMessages":"21959","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21960","messages":"21961","suppressedMessages":"21962","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21963","messages":"21964","suppressedMessages":"21965","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21966","messages":"21967","suppressedMessages":"21968","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21969","messages":"21970","suppressedMessages":"21971","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21972","messages":"21973","suppressedMessages":"21974","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21975","messages":"21976","suppressedMessages":"21977","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21978","messages":"21979","suppressedMessages":"21980","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21981","messages":"21982","suppressedMessages":"21983","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21984","messages":"21985","suppressedMessages":"21986","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21987","messages":"21988","suppressedMessages":"21989","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21990","messages":"21991","suppressedMessages":"21992","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21993","messages":"21994","suppressedMessages":"21995","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21996","messages":"21997","suppressedMessages":"21998","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"21999","messages":"22000","suppressedMessages":"22001","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22002","messages":"22003","suppressedMessages":"22004","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22005","messages":"22006","suppressedMessages":"22007","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22008","messages":"22009","suppressedMessages":"22010","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22011","messages":"22012","suppressedMessages":"22013","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22014","messages":"22015","suppressedMessages":"22016","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22017","messages":"22018","suppressedMessages":"22019","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22020","messages":"22021","suppressedMessages":"22022","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22023","messages":"22024","suppressedMessages":"22025","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22026","messages":"22027","suppressedMessages":"22028","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22029","messages":"22030","suppressedMessages":"22031","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22032","messages":"22033","suppressedMessages":"22034","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22035","messages":"22036","suppressedMessages":"22037","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22038","messages":"22039","suppressedMessages":"22040","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22041","messages":"22042","suppressedMessages":"22043","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22044","messages":"22045","suppressedMessages":"22046","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22047","messages":"22048","suppressedMessages":"22049","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22050","messages":"22051","suppressedMessages":"22052","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22053","messages":"22054","suppressedMessages":"22055","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22056","messages":"22057","suppressedMessages":"22058","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22059","messages":"22060","suppressedMessages":"22061","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22062","messages":"22063","suppressedMessages":"22064","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22065","messages":"22066","suppressedMessages":"22067","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22068","messages":"22069","suppressedMessages":"22070","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22071","messages":"22072","suppressedMessages":"22073","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22074","messages":"22075","suppressedMessages":"22076","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22077","messages":"22078","suppressedMessages":"22079","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22080","messages":"22081","suppressedMessages":"22082","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22083","messages":"22084","suppressedMessages":"22085","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22086","messages":"22087","suppressedMessages":"22088","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22089","messages":"22090","suppressedMessages":"22091","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22092","messages":"22093","suppressedMessages":"22094","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22095","messages":"22096","suppressedMessages":"22097","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22098","messages":"22099","suppressedMessages":"22100","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22101","messages":"22102","suppressedMessages":"22103","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22104","messages":"22105","suppressedMessages":"22106","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22107","messages":"22108","suppressedMessages":"22109","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22110","messages":"22111","suppressedMessages":"22112","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22113","messages":"22114","suppressedMessages":"22115","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22116","messages":"22117","suppressedMessages":"22118","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22119","messages":"22120","suppressedMessages":"22121","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22122","messages":"22123","suppressedMessages":"22124","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22125","messages":"22126","suppressedMessages":"22127","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22128","messages":"22129","suppressedMessages":"22130","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22131","messages":"22132","suppressedMessages":"22133","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22134","messages":"22135","suppressedMessages":"22136","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22137","messages":"22138","suppressedMessages":"22139","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22140","messages":"22141","suppressedMessages":"22142","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22143","messages":"22144","suppressedMessages":"22145","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22146","messages":"22147","suppressedMessages":"22148","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22149","messages":"22150","suppressedMessages":"22151","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22152","messages":"22153","suppressedMessages":"22154","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22155","messages":"22156","suppressedMessages":"22157","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22158","messages":"22159","suppressedMessages":"22160","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22161","messages":"22162","suppressedMessages":"22163","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22164","messages":"22165","suppressedMessages":"22166","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22167","messages":"22168","suppressedMessages":"22169","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22170","messages":"22171","suppressedMessages":"22172","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22173","messages":"22174","suppressedMessages":"22175","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22176","messages":"22177","suppressedMessages":"22178","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22179","messages":"22180","suppressedMessages":"22181","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22182","messages":"22183","suppressedMessages":"22184","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22185","messages":"22186","suppressedMessages":"22187","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22188","messages":"22189","suppressedMessages":"22190","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22191","messages":"22192","suppressedMessages":"22193","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22194","messages":"22195","suppressedMessages":"22196","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22197","messages":"22198","suppressedMessages":"22199","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22200","messages":"22201","suppressedMessages":"22202","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22203","messages":"22204","suppressedMessages":"22205","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22206","messages":"22207","suppressedMessages":"22208","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22209","messages":"22210","suppressedMessages":"22211","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22212","messages":"22213","suppressedMessages":"22214","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22215","messages":"22216","suppressedMessages":"22217","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22218","messages":"22219","suppressedMessages":"22220","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22221","messages":"22222","suppressedMessages":"22223","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22224","messages":"22225","suppressedMessages":"22226","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22227","messages":"22228","suppressedMessages":"22229","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22230","messages":"22231","suppressedMessages":"22232","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22233","messages":"22234","suppressedMessages":"22235","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22236","messages":"22237","suppressedMessages":"22238","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22239","messages":"22240","suppressedMessages":"22241","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22242","messages":"22243","suppressedMessages":"22244","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22245","messages":"22246","suppressedMessages":"22247","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22248","messages":"22249","suppressedMessages":"22250","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22251","messages":"22252","suppressedMessages":"22253","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22254","messages":"22255","suppressedMessages":"22256","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22257","messages":"22258","suppressedMessages":"22259","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22260","messages":"22261","suppressedMessages":"22262","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22263","messages":"22264","suppressedMessages":"22265","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22266","messages":"22267","suppressedMessages":"22268","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22269","messages":"22270","suppressedMessages":"22271","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22272","messages":"22273","suppressedMessages":"22274","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22275","messages":"22276","suppressedMessages":"22277","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22278","messages":"22279","suppressedMessages":"22280","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22281","messages":"22282","suppressedMessages":"22283","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22284","messages":"22285","suppressedMessages":"22286","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22287","messages":"22288","suppressedMessages":"22289","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22290","messages":"22291","suppressedMessages":"22292","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22293","messages":"22294","suppressedMessages":"22295","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22296","messages":"22297","suppressedMessages":"22298","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22299","messages":"22300","suppressedMessages":"22301","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22302","messages":"22303","suppressedMessages":"22304","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22305","messages":"22306","suppressedMessages":"22307","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22308","messages":"22309","suppressedMessages":"22310","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22311","messages":"22312","suppressedMessages":"22313","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22314","messages":"22315","suppressedMessages":"22316","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22317","messages":"22318","suppressedMessages":"22319","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22320","messages":"22321","suppressedMessages":"22322","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22323","messages":"22324","suppressedMessages":"22325","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22326","messages":"22327","suppressedMessages":"22328","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22329","messages":"22330","suppressedMessages":"22331","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22332","messages":"22333","suppressedMessages":"22334","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22335","messages":"22336","suppressedMessages":"22337","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22338","messages":"22339","suppressedMessages":"22340","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22341","messages":"22342","suppressedMessages":"22343","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22344","messages":"22345","suppressedMessages":"22346","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22347","messages":"22348","suppressedMessages":"22349","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22350","messages":"22351","suppressedMessages":"22352","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22353","messages":"22354","suppressedMessages":"22355","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22356","messages":"22357","suppressedMessages":"22358","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22359","messages":"22360","suppressedMessages":"22361","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22362","messages":"22363","suppressedMessages":"22364","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22365","messages":"22366","suppressedMessages":"22367","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22368","messages":"22369","suppressedMessages":"22370","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22371","messages":"22372","suppressedMessages":"22373","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22374","messages":"22375","suppressedMessages":"22376","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22377","messages":"22378","suppressedMessages":"22379","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22380","messages":"22381","suppressedMessages":"22382","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22383","messages":"22384","suppressedMessages":"22385","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22386","messages":"22387","suppressedMessages":"22388","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22389","messages":"22390","suppressedMessages":"22391","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22392","messages":"22393","suppressedMessages":"22394","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22395","messages":"22396","suppressedMessages":"22397","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22398","messages":"22399","suppressedMessages":"22400","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22401","messages":"22402","suppressedMessages":"22403","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22404","messages":"22405","suppressedMessages":"22406","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22407","messages":"22408","suppressedMessages":"22409","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22410","messages":"22411","suppressedMessages":"22412","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22413","messages":"22414","suppressedMessages":"22415","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22416","messages":"22417","suppressedMessages":"22418","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22419","messages":"22420","suppressedMessages":"22421","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22422","messages":"22423","suppressedMessages":"22424","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22425","messages":"22426","suppressedMessages":"22427","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22428","messages":"22429","suppressedMessages":"22430","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22431","messages":"22432","suppressedMessages":"22433","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22434","messages":"22435","suppressedMessages":"22436","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22437","messages":"22438","suppressedMessages":"22439","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22440","messages":"22441","suppressedMessages":"22442","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22443","messages":"22444","suppressedMessages":"22445","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22446","messages":"22447","suppressedMessages":"22448","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22449","messages":"22450","suppressedMessages":"22451","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22452","messages":"22453","suppressedMessages":"22454","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22455","messages":"22456","suppressedMessages":"22457","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22458","messages":"22459","suppressedMessages":"22460","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22461","messages":"22462","suppressedMessages":"22463","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22464","messages":"22465","suppressedMessages":"22466","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22467","messages":"22468","suppressedMessages":"22469","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22470","messages":"22471","suppressedMessages":"22472","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22473","messages":"22474","suppressedMessages":"22475","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22476","messages":"22477","suppressedMessages":"22478","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22479","messages":"22480","suppressedMessages":"22481","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22482","messages":"22483","suppressedMessages":"22484","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22485","messages":"22486","suppressedMessages":"22487","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22488","messages":"22489","suppressedMessages":"22490","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22491","messages":"22492","suppressedMessages":"22493","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22494","messages":"22495","suppressedMessages":"22496","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22497","messages":"22498","suppressedMessages":"22499","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22500","messages":"22501","suppressedMessages":"22502","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22503","messages":"22504","suppressedMessages":"22505","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22506","messages":"22507","suppressedMessages":"22508","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22509","messages":"22510","suppressedMessages":"22511","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22512","messages":"22513","suppressedMessages":"22514","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22515","messages":"22516","suppressedMessages":"22517","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22518","messages":"22519","suppressedMessages":"22520","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22521","messages":"22522","suppressedMessages":"22523","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22524","messages":"22525","suppressedMessages":"22526","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22527","messages":"22528","suppressedMessages":"22529","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22530","messages":"22531","suppressedMessages":"22532","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22533","messages":"22534","suppressedMessages":"22535","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22536","messages":"22537","suppressedMessages":"22538","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22539","messages":"22540","suppressedMessages":"22541","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22542","messages":"22543","suppressedMessages":"22544","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22545","messages":"22546","suppressedMessages":"22547","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22548","messages":"22549","suppressedMessages":"22550","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22551","messages":"22552","suppressedMessages":"22553","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22554","messages":"22555","suppressedMessages":"22556","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22557","messages":"22558","suppressedMessages":"22559","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22560","messages":"22561","suppressedMessages":"22562","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22563","messages":"22564","suppressedMessages":"22565","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22566","messages":"22567","suppressedMessages":"22568","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22569","messages":"22570","suppressedMessages":"22571","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22572","messages":"22573","suppressedMessages":"22574","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22575","messages":"22576","suppressedMessages":"22577","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22578","messages":"22579","suppressedMessages":"22580","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22581","messages":"22582","suppressedMessages":"22583","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22584","messages":"22585","suppressedMessages":"22586","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22587","messages":"22588","suppressedMessages":"22589","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22590","messages":"22591","suppressedMessages":"22592","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22593","messages":"22594","suppressedMessages":"22595","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22596","messages":"22597","suppressedMessages":"22598","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22599","messages":"22600","suppressedMessages":"22601","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22602","messages":"22603","suppressedMessages":"22604","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22605","messages":"22606","suppressedMessages":"22607","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22608","messages":"22609","suppressedMessages":"22610","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22611","messages":"22612","suppressedMessages":"22613","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22614","messages":"22615","suppressedMessages":"22616","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22617","messages":"22618","suppressedMessages":"22619","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22620","messages":"22621","suppressedMessages":"22622","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22623","messages":"22624","suppressedMessages":"22625","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22626","messages":"22627","suppressedMessages":"22628","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22629","messages":"22630","suppressedMessages":"22631","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22632","messages":"22633","suppressedMessages":"22634","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22635","messages":"22636","suppressedMessages":"22637","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22638","messages":"22639","suppressedMessages":"22640","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22641","messages":"22642","suppressedMessages":"22643","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22644","messages":"22645","suppressedMessages":"22646","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22647","messages":"22648","suppressedMessages":"22649","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22650","messages":"22651","suppressedMessages":"22652","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22653","messages":"22654","suppressedMessages":"22655","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22656","messages":"22657","suppressedMessages":"22658","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22659","messages":"22660","suppressedMessages":"22661","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22662","messages":"22663","suppressedMessages":"22664","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22665","messages":"22666","suppressedMessages":"22667","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22668","messages":"22669","suppressedMessages":"22670","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22671","messages":"22672","suppressedMessages":"22673","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22674","messages":"22675","suppressedMessages":"22676","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22677","messages":"22678","suppressedMessages":"22679","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22680","messages":"22681","suppressedMessages":"22682","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22683","messages":"22684","suppressedMessages":"22685","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22686","messages":"22687","suppressedMessages":"22688","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22689","messages":"22690","suppressedMessages":"22691","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22692","messages":"22693","suppressedMessages":"22694","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22695","messages":"22696","suppressedMessages":"22697","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22698","messages":"22699","suppressedMessages":"22700","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22701","messages":"22702","suppressedMessages":"22703","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22704","messages":"22705","suppressedMessages":"22706","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22707","messages":"22708","suppressedMessages":"22709","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22710","messages":"22711","suppressedMessages":"22712","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22713","messages":"22714","suppressedMessages":"22715","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22716","messages":"22717","suppressedMessages":"22718","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22719","messages":"22720","suppressedMessages":"22721","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22722","messages":"22723","suppressedMessages":"22724","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22725","messages":"22726","suppressedMessages":"22727","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22728","messages":"22729","suppressedMessages":"22730","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22731","messages":"22732","suppressedMessages":"22733","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22734","messages":"22735","suppressedMessages":"22736","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22737","messages":"22738","suppressedMessages":"22739","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22740","messages":"22741","suppressedMessages":"22742","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22743","messages":"22744","suppressedMessages":"22745","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22746","messages":"22747","suppressedMessages":"22748","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22749","messages":"22750","suppressedMessages":"22751","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22752","messages":"22753","suppressedMessages":"22754","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22755","messages":"22756","suppressedMessages":"22757","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22758","messages":"22759","suppressedMessages":"22760","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22761","messages":"22762","suppressedMessages":"22763","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22764","messages":"22765","suppressedMessages":"22766","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22767","messages":"22768","suppressedMessages":"22769","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22770","messages":"22771","suppressedMessages":"22772","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22773","messages":"22774","suppressedMessages":"22775","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22776","messages":"22777","suppressedMessages":"22778","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22779","messages":"22780","suppressedMessages":"22781","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22782","messages":"22783","suppressedMessages":"22784","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22785","messages":"22786","suppressedMessages":"22787","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22788","messages":"22789","suppressedMessages":"22790","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22791","messages":"22792","suppressedMessages":"22793","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22794","messages":"22795","suppressedMessages":"22796","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22797","messages":"22798","suppressedMessages":"22799","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22800","messages":"22801","suppressedMessages":"22802","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22803","messages":"22804","suppressedMessages":"22805","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22806","messages":"22807","suppressedMessages":"22808","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22809","messages":"22810","suppressedMessages":"22811","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22812","messages":"22813","suppressedMessages":"22814","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22815","messages":"22816","suppressedMessages":"22817","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22818","messages":"22819","suppressedMessages":"22820","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22821","messages":"22822","suppressedMessages":"22823","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22824","messages":"22825","suppressedMessages":"22826","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22827","messages":"22828","suppressedMessages":"22829","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22830","messages":"22831","suppressedMessages":"22832","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22833","messages":"22834","suppressedMessages":"22835","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22836","messages":"22837","suppressedMessages":"22838","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22839","messages":"22840","suppressedMessages":"22841","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22842","messages":"22843","suppressedMessages":"22844","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22845","messages":"22846","suppressedMessages":"22847","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22848","messages":"22849","suppressedMessages":"22850","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22851","messages":"22852","suppressedMessages":"22853","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22854","messages":"22855","suppressedMessages":"22856","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22857","messages":"22858","suppressedMessages":"22859","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22860","messages":"22861","suppressedMessages":"22862","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22863","messages":"22864","suppressedMessages":"22865","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22866","messages":"22867","suppressedMessages":"22868","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22869","messages":"22870","suppressedMessages":"22871","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22872","messages":"22873","suppressedMessages":"22874","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22875","messages":"22876","suppressedMessages":"22877","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22878","messages":"22879","suppressedMessages":"22880","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22881","messages":"22882","suppressedMessages":"22883","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22884","messages":"22885","suppressedMessages":"22886","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22887","messages":"22888","suppressedMessages":"22889","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22890","messages":"22891","suppressedMessages":"22892","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22893","messages":"22894","suppressedMessages":"22895","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22896","messages":"22897","suppressedMessages":"22898","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22899","messages":"22900","suppressedMessages":"22901","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22902","messages":"22903","suppressedMessages":"22904","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22905","messages":"22906","suppressedMessages":"22907","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22908","messages":"22909","suppressedMessages":"22910","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22911","messages":"22912","suppressedMessages":"22913","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22914","messages":"22915","suppressedMessages":"22916","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22917","messages":"22918","suppressedMessages":"22919","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22920","messages":"22921","suppressedMessages":"22922","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22923","messages":"22924","suppressedMessages":"22925","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22926","messages":"22927","suppressedMessages":"22928","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22929","messages":"22930","suppressedMessages":"22931","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22932","messages":"22933","suppressedMessages":"22934","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22935","messages":"22936","suppressedMessages":"22937","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22938","messages":"22939","suppressedMessages":"22940","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22941","messages":"22942","suppressedMessages":"22943","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"22944","messages":"22945","suppressedMessages":"22946","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22947","messages":"22948","suppressedMessages":"22949","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22950","messages":"22951","suppressedMessages":"22952","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22953","messages":"22954","suppressedMessages":"22955","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22956","messages":"22957","suppressedMessages":"22958","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22959","messages":"22960","suppressedMessages":"22961","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22962","messages":"22963","suppressedMessages":"22964","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22965","messages":"22966","suppressedMessages":"22967","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22968","messages":"22969","suppressedMessages":"22970","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22971","messages":"22972","suppressedMessages":"22973","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22974","messages":"22975","suppressedMessages":"22976","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22977","messages":"22978","suppressedMessages":"22979","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22980","messages":"22981","suppressedMessages":"22982","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22983","messages":"22984","suppressedMessages":"22985","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22986","messages":"22987","suppressedMessages":"22988","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22989","messages":"22990","suppressedMessages":"22991","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22992","messages":"22993","suppressedMessages":"22994","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22995","messages":"22996","suppressedMessages":"22997","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22998","messages":"22999","suppressedMessages":"23000","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23001","messages":"23002","suppressedMessages":"23003","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23004","messages":"23005","suppressedMessages":"23006","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23007","messages":"23008","suppressedMessages":"23009","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23010","messages":"23011","suppressedMessages":"23012","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23013","messages":"23014","suppressedMessages":"23015","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23016","messages":"23017","suppressedMessages":"23018","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23019","messages":"23020","suppressedMessages":"23021","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23022","messages":"23023","suppressedMessages":"23024","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23025","messages":"23026","suppressedMessages":"23027","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23028","messages":"23029","suppressedMessages":"23030","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23031","messages":"23032","suppressedMessages":"23033","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23034","messages":"23035","suppressedMessages":"23036","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23037","messages":"23038","suppressedMessages":"23039","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23040","messages":"23041","suppressedMessages":"23042","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23043","messages":"23044","suppressedMessages":"23045","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23046","messages":"23047","suppressedMessages":"23048","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23049","messages":"23050","suppressedMessages":"23051","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23052","messages":"23053","suppressedMessages":"23054","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23055","messages":"23056","suppressedMessages":"23057","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23058","messages":"23059","suppressedMessages":"23060","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23061","messages":"23062","suppressedMessages":"23063","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23064","messages":"23065","suppressedMessages":"23066","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23067","messages":"23068","suppressedMessages":"23069","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23070","messages":"23071","suppressedMessages":"23072","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23073","messages":"23074","suppressedMessages":"23075","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23076","messages":"23077","suppressedMessages":"23078","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23079","messages":"23080","suppressedMessages":"23081","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23082","messages":"23083","suppressedMessages":"23084","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23085","messages":"23086","suppressedMessages":"23087","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23088","messages":"23089","suppressedMessages":"23090","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23091","messages":"23092","suppressedMessages":"23093","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23094","messages":"23095","suppressedMessages":"23096","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23097","messages":"23098","suppressedMessages":"23099","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23100","messages":"23101","suppressedMessages":"23102","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23103","messages":"23104","suppressedMessages":"23105","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23106","messages":"23107","suppressedMessages":"23108","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23109","messages":"23110","suppressedMessages":"23111","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23112","messages":"23113","suppressedMessages":"23114","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23115","messages":"23116","suppressedMessages":"23117","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23118","messages":"23119","suppressedMessages":"23120","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23121","messages":"23122","suppressedMessages":"23123","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23124","messages":"23125","suppressedMessages":"23126","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23127","messages":"23128","suppressedMessages":"23129","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23130","messages":"23131","suppressedMessages":"23132","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23133","messages":"23134","suppressedMessages":"23135","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23136","messages":"23137","suppressedMessages":"23138","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23139","messages":"23140","suppressedMessages":"23141","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23142","messages":"23143","suppressedMessages":"23144","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23145","messages":"23146","suppressedMessages":"23147","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23148","messages":"23149","suppressedMessages":"23150","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23151","messages":"23152","suppressedMessages":"23153","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23154","messages":"23155","suppressedMessages":"23156","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23157","messages":"23158","suppressedMessages":"23159","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23160","messages":"23161","suppressedMessages":"23162","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23163","messages":"23164","suppressedMessages":"23165","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23166","messages":"23167","suppressedMessages":"23168","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23169","messages":"23170","suppressedMessages":"23171","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23172","messages":"23173","suppressedMessages":"23174","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23175","messages":"23176","suppressedMessages":"23177","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23178","messages":"23179","suppressedMessages":"23180","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23181","messages":"23182","suppressedMessages":"23183","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23184","messages":"23185","suppressedMessages":"23186","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23187","messages":"23188","suppressedMessages":"23189","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23190","messages":"23191","suppressedMessages":"23192","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23193","messages":"23194","suppressedMessages":"23195","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23196","messages":"23197","suppressedMessages":"23198","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23199","messages":"23200","suppressedMessages":"23201","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23202","messages":"23203","suppressedMessages":"23204","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23205","messages":"23206","suppressedMessages":"23207","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23208","messages":"23209","suppressedMessages":"23210","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23211","messages":"23212","suppressedMessages":"23213","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23214","messages":"23215","suppressedMessages":"23216","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23217","messages":"23218","suppressedMessages":"23219","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23220","messages":"23221","suppressedMessages":"23222","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23223","messages":"23224","suppressedMessages":"23225","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23226","messages":"23227","suppressedMessages":"23228","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23229","messages":"23230","suppressedMessages":"23231","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23232","messages":"23233","suppressedMessages":"23234","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23235","messages":"23236","suppressedMessages":"23237","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23238","messages":"23239","suppressedMessages":"23240","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23241","messages":"23242","suppressedMessages":"23243","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23244","messages":"23245","suppressedMessages":"23246","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23247","messages":"23248","suppressedMessages":"23249","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23250","messages":"23251","suppressedMessages":"23252","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23253","messages":"23254","suppressedMessages":"23255","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23256","messages":"23257","suppressedMessages":"23258","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23259","messages":"23260","suppressedMessages":"23261","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23262","messages":"23263","suppressedMessages":"23264","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23265","messages":"23266","suppressedMessages":"23267","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23268","messages":"23269","suppressedMessages":"23270","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23271","messages":"23272","suppressedMessages":"23273","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23274","messages":"23275","suppressedMessages":"23276","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23277","messages":"23278","suppressedMessages":"23279","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23280","messages":"23281","suppressedMessages":"23282","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23283","messages":"23284","suppressedMessages":"23285","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23286","messages":"23287","suppressedMessages":"23288","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23289","messages":"23290","suppressedMessages":"23291","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23292","messages":"23293","suppressedMessages":"23294","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23295","messages":"23296","suppressedMessages":"23297","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23298","messages":"23299","suppressedMessages":"23300","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23301","messages":"23302","suppressedMessages":"23303","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23304","messages":"23305","suppressedMessages":"23306","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23307","messages":"23308","suppressedMessages":"23309","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23310","messages":"23311","suppressedMessages":"23312","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23313","messages":"23314","suppressedMessages":"23315","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23316","messages":"23317","suppressedMessages":"23318","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23319","messages":"23320","suppressedMessages":"23321","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23322","messages":"23323","suppressedMessages":"23324","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23325","messages":"23326","suppressedMessages":"23327","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23328","messages":"23329","suppressedMessages":"23330","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23331","messages":"23332","suppressedMessages":"23333","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23334","messages":"23335","suppressedMessages":"23336","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23337","messages":"23338","suppressedMessages":"23339","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23340","messages":"23341","suppressedMessages":"23342","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23343","messages":"23344","suppressedMessages":"23345","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23346","messages":"23347","suppressedMessages":"23348","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23349","messages":"23350","suppressedMessages":"23351","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23352","messages":"23353","suppressedMessages":"23354","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23355","messages":"23356","suppressedMessages":"23357","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23358","messages":"23359","suppressedMessages":"23360","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23361","messages":"23362","suppressedMessages":"23363","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23364","messages":"23365","suppressedMessages":"23366","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23367","messages":"23368","suppressedMessages":"23369","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23370","messages":"23371","suppressedMessages":"23372","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23373","messages":"23374","suppressedMessages":"23375","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23376","messages":"23377","suppressedMessages":"23378","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23379","messages":"23380","suppressedMessages":"23381","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23382","messages":"23383","suppressedMessages":"23384","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23385","messages":"23386","suppressedMessages":"23387","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23388","messages":"23389","suppressedMessages":"23390","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23391","messages":"23392","suppressedMessages":"23393","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23394","messages":"23395","suppressedMessages":"23396","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23397","messages":"23398","suppressedMessages":"23399","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23400","messages":"23401","suppressedMessages":"23402","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23403","messages":"23404","suppressedMessages":"23405","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23406","messages":"23407","suppressedMessages":"23408","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23409","messages":"23410","suppressedMessages":"23411","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23412","messages":"23413","suppressedMessages":"23414","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23415","messages":"23416","suppressedMessages":"23417","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23418","messages":"23419","suppressedMessages":"23420","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23421","messages":"23422","suppressedMessages":"23423","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23424","messages":"23425","suppressedMessages":"23426","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23427","messages":"23428","suppressedMessages":"23429","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23430","messages":"23431","suppressedMessages":"23432","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23433","messages":"23434","suppressedMessages":"23435","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23436","messages":"23437","suppressedMessages":"23438","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23439","messages":"23440","suppressedMessages":"23441","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23442","messages":"23443","suppressedMessages":"23444","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23445","messages":"23446","suppressedMessages":"23447","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23448","messages":"23449","suppressedMessages":"23450","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23451","messages":"23452","suppressedMessages":"23453","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23454","messages":"23455","suppressedMessages":"23456","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23457","messages":"23458","suppressedMessages":"23459","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23460","messages":"23461","suppressedMessages":"23462","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23463","messages":"23464","suppressedMessages":"23465","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23466","messages":"23467","suppressedMessages":"23468","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23469","messages":"23470","suppressedMessages":"23471","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23472","messages":"23473","suppressedMessages":"23474","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23475","messages":"23476","suppressedMessages":"23477","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23478","messages":"23479","suppressedMessages":"23480","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23481","messages":"23482","suppressedMessages":"23483","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23484","messages":"23485","suppressedMessages":"23486","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23487","messages":"23488","suppressedMessages":"23489","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23490","messages":"23491","suppressedMessages":"23492","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23493","messages":"23494","suppressedMessages":"23495","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23496","messages":"23497","suppressedMessages":"23498","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23499","messages":"23500","suppressedMessages":"23501","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23502","messages":"23503","suppressedMessages":"23504","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23505","messages":"23506","suppressedMessages":"23507","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23508","messages":"23509","suppressedMessages":"23510","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23511","messages":"23512","suppressedMessages":"23513","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23514","messages":"23515","suppressedMessages":"23516","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23517","messages":"23518","suppressedMessages":"23519","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23520","messages":"23521","suppressedMessages":"23522","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23523","messages":"23524","suppressedMessages":"23525","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23526","messages":"23527","suppressedMessages":"23528","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23529","messages":"23530","suppressedMessages":"23531","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23532","messages":"23533","suppressedMessages":"23534","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23535","messages":"23536","suppressedMessages":"23537","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23538","messages":"23539","suppressedMessages":"23540","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23541","messages":"23542","suppressedMessages":"23543","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23544","messages":"23545","suppressedMessages":"23546","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23547","messages":"23548","suppressedMessages":"23549","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23550","messages":"23551","suppressedMessages":"23552","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23553","messages":"23554","suppressedMessages":"23555","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23556","messages":"23557","suppressedMessages":"23558","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23559","messages":"23560","suppressedMessages":"23561","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23562","messages":"23563","suppressedMessages":"23564","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23565","messages":"23566","suppressedMessages":"23567","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23568","messages":"23569","suppressedMessages":"23570","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23571","messages":"23572","suppressedMessages":"23573","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23574","messages":"23575","suppressedMessages":"23576","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23577","messages":"23578","suppressedMessages":"23579","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23580","messages":"23581","suppressedMessages":"23582","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23583","messages":"23584","suppressedMessages":"23585","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23586","messages":"23587","suppressedMessages":"23588","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23589","messages":"23590","suppressedMessages":"23591","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23592","messages":"23593","suppressedMessages":"23594","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23595","messages":"23596","suppressedMessages":"23597","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23598","messages":"23599","suppressedMessages":"23600","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23601","messages":"23602","suppressedMessages":"23603","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23604","messages":"23605","suppressedMessages":"23606","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23607","messages":"23608","suppressedMessages":"23609","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23610","messages":"23611","suppressedMessages":"23612","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23613","messages":"23614","suppressedMessages":"23615","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23616","messages":"23617","suppressedMessages":"23618","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23619","messages":"23620","suppressedMessages":"23621","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23622","messages":"23623","suppressedMessages":"23624","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23625","messages":"23626","suppressedMessages":"23627","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23628","messages":"23629","suppressedMessages":"23630","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23631","messages":"23632","suppressedMessages":"23633","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23634","messages":"23635","suppressedMessages":"23636","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23637","messages":"23638","suppressedMessages":"23639","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23640","messages":"23641","suppressedMessages":"23642","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23643","messages":"23644","suppressedMessages":"23645","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23646","messages":"23647","suppressedMessages":"23648","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23649","messages":"23650","suppressedMessages":"23651","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23652","messages":"23653","suppressedMessages":"23654","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23655","messages":"23656","suppressedMessages":"23657","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23658","messages":"23659","suppressedMessages":"23660","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23661","messages":"23662","suppressedMessages":"23663","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23664","messages":"23665","suppressedMessages":"23666","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23667","messages":"23668","suppressedMessages":"23669","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23670","messages":"23671","suppressedMessages":"23672","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23673","messages":"23674","suppressedMessages":"23675","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23676","messages":"23677","suppressedMessages":"23678","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23679","messages":"23680","suppressedMessages":"23681","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23682","messages":"23683","suppressedMessages":"23684","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23685","messages":"23686","suppressedMessages":"23687","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23688","messages":"23689","suppressedMessages":"23690","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23691","messages":"23692","suppressedMessages":"23693","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23694","messages":"23695","suppressedMessages":"23696","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23697","messages":"23698","suppressedMessages":"23699","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23700","messages":"23701","suppressedMessages":"23702","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23703","messages":"23704","suppressedMessages":"23705","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23706","messages":"23707","suppressedMessages":"23708","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23709","messages":"23710","suppressedMessages":"23711","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23712","messages":"23713","suppressedMessages":"23714","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23715","messages":"23716","suppressedMessages":"23717","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23718","messages":"23719","suppressedMessages":"23720","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23721","messages":"23722","suppressedMessages":"23723","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23724","messages":"23725","suppressedMessages":"23726","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23727","messages":"23728","suppressedMessages":"23729","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23730","messages":"23731","suppressedMessages":"23732","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23733","messages":"23734","suppressedMessages":"23735","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23736","messages":"23737","suppressedMessages":"23738","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23739","messages":"23740","suppressedMessages":"23741","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23742","messages":"23743","suppressedMessages":"23744","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23745","messages":"23746","suppressedMessages":"23747","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23748","messages":"23749","suppressedMessages":"23750","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23751","messages":"23752","suppressedMessages":"23753","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23754","messages":"23755","suppressedMessages":"23756","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23757","messages":"23758","suppressedMessages":"23759","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23760","messages":"23761","suppressedMessages":"23762","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23763","messages":"23764","suppressedMessages":"23765","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23766","messages":"23767","suppressedMessages":"23768","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23769","messages":"23770","suppressedMessages":"23771","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23772","messages":"23773","suppressedMessages":"23774","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23775","messages":"23776","suppressedMessages":"23777","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23778","messages":"23779","suppressedMessages":"23780","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23781","messages":"23782","suppressedMessages":"23783","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23784","messages":"23785","suppressedMessages":"23786","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23787","messages":"23788","suppressedMessages":"23789","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23790","messages":"23791","suppressedMessages":"23792","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23793","messages":"23794","suppressedMessages":"23795","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23796","messages":"23797","suppressedMessages":"23798","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23799","messages":"23800","suppressedMessages":"23801","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23802","messages":"23803","suppressedMessages":"23804","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23805","messages":"23806","suppressedMessages":"23807","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23808","messages":"23809","suppressedMessages":"23810","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23811","messages":"23812","suppressedMessages":"23813","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23814","messages":"23815","suppressedMessages":"23816","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23817","messages":"23818","suppressedMessages":"23819","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23820","messages":"23821","suppressedMessages":"23822","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23823","messages":"23824","suppressedMessages":"23825","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23826","messages":"23827","suppressedMessages":"23828","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23829","messages":"23830","suppressedMessages":"23831","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23832","messages":"23833","suppressedMessages":"23834","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23835","messages":"23836","suppressedMessages":"23837","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23838","messages":"23839","suppressedMessages":"23840","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23841","messages":"23842","suppressedMessages":"23843","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23844","messages":"23845","suppressedMessages":"23846","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23847","messages":"23848","suppressedMessages":"23849","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23850","messages":"23851","suppressedMessages":"23852","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23853","messages":"23854","suppressedMessages":"23855","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23856","messages":"23857","suppressedMessages":"23858","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23859","messages":"23860","suppressedMessages":"23861","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23862","messages":"23863","suppressedMessages":"23864","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23865","messages":"23866","suppressedMessages":"23867","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23868","messages":"23869","suppressedMessages":"23870","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23871","messages":"23872","suppressedMessages":"23873","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23874","messages":"23875","suppressedMessages":"23876","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23877","messages":"23878","suppressedMessages":"23879","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23880","messages":"23881","suppressedMessages":"23882","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23883","messages":"23884","suppressedMessages":"23885","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23886","messages":"23887","suppressedMessages":"23888","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23889","messages":"23890","suppressedMessages":"23891","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23892","messages":"23893","suppressedMessages":"23894","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23895","messages":"23896","suppressedMessages":"23897","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23898","messages":"23899","suppressedMessages":"23900","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23901","messages":"23902","suppressedMessages":"23903","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23904","messages":"23905","suppressedMessages":"23906","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23907","messages":"23908","suppressedMessages":"23909","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23910","messages":"23911","suppressedMessages":"23912","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23913","messages":"23914","suppressedMessages":"23915","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23916","messages":"23917","suppressedMessages":"23918","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23919","messages":"23920","suppressedMessages":"23921","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23922","messages":"23923","suppressedMessages":"23924","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23925","messages":"23926","suppressedMessages":"23927","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23928","messages":"23929","suppressedMessages":"23930","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23931","messages":"23932","suppressedMessages":"23933","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23934","messages":"23935","suppressedMessages":"23936","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23937","messages":"23938","suppressedMessages":"23939","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23940","messages":"23941","suppressedMessages":"23942","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23943","messages":"23944","suppressedMessages":"23945","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23946","messages":"23947","suppressedMessages":"23948","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23949","messages":"23950","suppressedMessages":"23951","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23952","messages":"23953","suppressedMessages":"23954","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23955","messages":"23956","suppressedMessages":"23957","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23958","messages":"23959","suppressedMessages":"23960","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23961","messages":"23962","suppressedMessages":"23963","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23964","messages":"23965","suppressedMessages":"23966","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23967","messages":"23968","suppressedMessages":"23969","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23970","messages":"23971","suppressedMessages":"23972","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23973","messages":"23974","suppressedMessages":"23975","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23976","messages":"23977","suppressedMessages":"23978","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23979","messages":"23980","suppressedMessages":"23981","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23982","messages":"23983","suppressedMessages":"23984","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23985","messages":"23986","suppressedMessages":"23987","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23988","messages":"23989","suppressedMessages":"23990","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23991","messages":"23992","suppressedMessages":"23993","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23994","messages":"23995","suppressedMessages":"23996","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"23997","messages":"23998","suppressedMessages":"23999","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24000","messages":"24001","suppressedMessages":"24002","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24003","messages":"24004","suppressedMessages":"24005","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24006","messages":"24007","suppressedMessages":"24008","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24009","messages":"24010","suppressedMessages":"24011","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24012","messages":"24013","suppressedMessages":"24014","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24015","messages":"24016","suppressedMessages":"24017","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24018","messages":"24019","suppressedMessages":"24020","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24021","messages":"24022","suppressedMessages":"24023","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24024","messages":"24025","suppressedMessages":"24026","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24027","messages":"24028","suppressedMessages":"24029","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24030","messages":"24031","suppressedMessages":"24032","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24033","messages":"24034","suppressedMessages":"24035","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24036","messages":"24037","suppressedMessages":"24038","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24039","messages":"24040","suppressedMessages":"24041","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24042","messages":"24043","suppressedMessages":"24044","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24045","messages":"24046","suppressedMessages":"24047","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24048","messages":"24049","suppressedMessages":"24050","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24051","messages":"24052","suppressedMessages":"24053","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24054","messages":"24055","suppressedMessages":"24056","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24057","messages":"24058","suppressedMessages":"24059","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24060","messages":"24061","suppressedMessages":"24062","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24063","messages":"24064","suppressedMessages":"24065","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24066","messages":"24067","suppressedMessages":"24068","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24069","messages":"24070","suppressedMessages":"24071","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24072","messages":"24073","suppressedMessages":"24074","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24075","messages":"24076","suppressedMessages":"24077","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24078","messages":"24079","suppressedMessages":"24080","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24081","messages":"24082","suppressedMessages":"24083","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24084","messages":"24085","suppressedMessages":"24086","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24087","messages":"24088","suppressedMessages":"24089","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24090","messages":"24091","suppressedMessages":"24092","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24093","messages":"24094","suppressedMessages":"24095","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24096","messages":"24097","suppressedMessages":"24098","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24099","messages":"24100","suppressedMessages":"24101","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24102","messages":"24103","suppressedMessages":"24104","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24105","messages":"24106","suppressedMessages":"24107","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24108","messages":"24109","suppressedMessages":"24110","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24111","messages":"24112","suppressedMessages":"24113","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24114","messages":"24115","suppressedMessages":"24116","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24117","messages":"24118","suppressedMessages":"24119","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24120","messages":"24121","suppressedMessages":"24122","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24123","messages":"24124","suppressedMessages":"24125","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24126","messages":"24127","suppressedMessages":"24128","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24129","messages":"24130","suppressedMessages":"24131","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24132","messages":"24133","suppressedMessages":"24134","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24135","messages":"24136","suppressedMessages":"24137","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24138","messages":"24139","suppressedMessages":"24140","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24141","messages":"24142","suppressedMessages":"24143","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24144","messages":"24145","suppressedMessages":"24146","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24147","messages":"24148","suppressedMessages":"24149","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24150","messages":"24151","suppressedMessages":"24152","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24153","messages":"24154","suppressedMessages":"24155","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24156","messages":"24157","suppressedMessages":"24158","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24159","messages":"24160","suppressedMessages":"24161","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24162","messages":"24163","suppressedMessages":"24164","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24165","messages":"24166","suppressedMessages":"24167","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24168","messages":"24169","suppressedMessages":"24170","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24171","messages":"24172","suppressedMessages":"24173","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24174","messages":"24175","suppressedMessages":"24176","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24177","messages":"24178","suppressedMessages":"24179","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24180","messages":"24181","suppressedMessages":"24182","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24183","messages":"24184","suppressedMessages":"24185","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24186","messages":"24187","suppressedMessages":"24188","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24189","messages":"24190","suppressedMessages":"24191","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24192","messages":"24193","suppressedMessages":"24194","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24195","messages":"24196","suppressedMessages":"24197","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24198","messages":"24199","suppressedMessages":"24200","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24201","messages":"24202","suppressedMessages":"24203","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24204","messages":"24205","suppressedMessages":"24206","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24207","messages":"24208","suppressedMessages":"24209","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24210","messages":"24211","suppressedMessages":"24212","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24213","messages":"24214","suppressedMessages":"24215","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24216","messages":"24217","suppressedMessages":"24218","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24219","messages":"24220","suppressedMessages":"24221","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24222","messages":"24223","suppressedMessages":"24224","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24225","messages":"24226","suppressedMessages":"24227","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24228","messages":"24229","suppressedMessages":"24230","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24231","messages":"24232","suppressedMessages":"24233","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24234","messages":"24235","suppressedMessages":"24236","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24237","messages":"24238","suppressedMessages":"24239","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24240","messages":"24241","suppressedMessages":"24242","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24243","messages":"24244","suppressedMessages":"24245","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24246","messages":"24247","suppressedMessages":"24248","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24249","messages":"24250","suppressedMessages":"24251","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24252","messages":"24253","suppressedMessages":"24254","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24255","messages":"24256","suppressedMessages":"24257","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24258","messages":"24259","suppressedMessages":"24260","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24261","messages":"24262","suppressedMessages":"24263","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24264","messages":"24265","suppressedMessages":"24266","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24267","messages":"24268","suppressedMessages":"24269","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24270","messages":"24271","suppressedMessages":"24272","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24273","messages":"24274","suppressedMessages":"24275","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24276","messages":"24277","suppressedMessages":"24278","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24279","messages":"24280","suppressedMessages":"24281","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24282","messages":"24283","suppressedMessages":"24284","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24285","messages":"24286","suppressedMessages":"24287","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24288","messages":"24289","suppressedMessages":"24290","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24291","messages":"24292","suppressedMessages":"24293","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24294","messages":"24295","suppressedMessages":"24296","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24297","messages":"24298","suppressedMessages":"24299","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24300","messages":"24301","suppressedMessages":"24302","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24303","messages":"24304","suppressedMessages":"24305","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24306","messages":"24307","suppressedMessages":"24308","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24309","messages":"24310","suppressedMessages":"24311","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24312","messages":"24313","suppressedMessages":"24314","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24315","messages":"24316","suppressedMessages":"24317","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24318","messages":"24319","suppressedMessages":"24320","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24321","messages":"24322","suppressedMessages":"24323","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24324","messages":"24325","suppressedMessages":"24326","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24327","messages":"24328","suppressedMessages":"24329","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24330","messages":"24331","suppressedMessages":"24332","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24333","messages":"24334","suppressedMessages":"24335","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24336","messages":"24337","suppressedMessages":"24338","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24339","messages":"24340","suppressedMessages":"24341","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24342","messages":"24343","suppressedMessages":"24344","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24345","messages":"24346","suppressedMessages":"24347","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24348","messages":"24349","suppressedMessages":"24350","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24351","messages":"24352","suppressedMessages":"24353","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24354","messages":"24355","suppressedMessages":"24356","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24357","messages":"24358","suppressedMessages":"24359","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24360","messages":"24361","suppressedMessages":"24362","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24363","messages":"24364","suppressedMessages":"24365","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24366","messages":"24367","suppressedMessages":"24368","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24369","messages":"24370","suppressedMessages":"24371","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24372","messages":"24373","suppressedMessages":"24374","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24375","messages":"24376","suppressedMessages":"24377","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24378","messages":"24379","suppressedMessages":"24380","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24381","messages":"24382","suppressedMessages":"24383","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24384","messages":"24385","suppressedMessages":"24386","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24387","messages":"24388","suppressedMessages":"24389","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24390","messages":"24391","suppressedMessages":"24392","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24393","messages":"24394","suppressedMessages":"24395","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24396","messages":"24397","suppressedMessages":"24398","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24399","messages":"24400","suppressedMessages":"24401","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24402","messages":"24403","suppressedMessages":"24404","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24405","messages":"24406","suppressedMessages":"24407","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24408","messages":"24409","suppressedMessages":"24410","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24411","messages":"24412","suppressedMessages":"24413","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24414","messages":"24415","suppressedMessages":"24416","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24417","messages":"24418","suppressedMessages":"24419","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24420","messages":"24421","suppressedMessages":"24422","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24423","messages":"24424","suppressedMessages":"24425","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24426","messages":"24427","suppressedMessages":"24428","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24429","messages":"24430","suppressedMessages":"24431","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24432","messages":"24433","suppressedMessages":"24434","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24435","messages":"24436","suppressedMessages":"24437","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24438","messages":"24439","suppressedMessages":"24440","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24441","messages":"24442","suppressedMessages":"24443","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24444","messages":"24445","suppressedMessages":"24446","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24447","messages":"24448","suppressedMessages":"24449","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24450","messages":"24451","suppressedMessages":"24452","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24453","messages":"24454","suppressedMessages":"24455","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24456","messages":"24457","suppressedMessages":"24458","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24459","messages":"24460","suppressedMessages":"24461","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24462","messages":"24463","suppressedMessages":"24464","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24465","messages":"24466","suppressedMessages":"24467","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24468","messages":"24469","suppressedMessages":"24470","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24471","messages":"24472","suppressedMessages":"24473","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24474","messages":"24475","suppressedMessages":"24476","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24477","messages":"24478","suppressedMessages":"24479","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24480","messages":"24481","suppressedMessages":"24482","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24483","messages":"24484","suppressedMessages":"24485","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24486","messages":"24487","suppressedMessages":"24488","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24489","messages":"24490","suppressedMessages":"24491","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24492","messages":"24493","suppressedMessages":"24494","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24495","messages":"24496","suppressedMessages":"24497","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24498","messages":"24499","suppressedMessages":"24500","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24501","messages":"24502","suppressedMessages":"24503","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24504","messages":"24505","suppressedMessages":"24506","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24507","messages":"24508","suppressedMessages":"24509","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24510","messages":"24511","suppressedMessages":"24512","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24513","messages":"24514","suppressedMessages":"24515","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24516","messages":"24517","suppressedMessages":"24518","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24519","messages":"24520","suppressedMessages":"24521","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24522","messages":"24523","suppressedMessages":"24524","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24525","messages":"24526","suppressedMessages":"24527","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24528","messages":"24529","suppressedMessages":"24530","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24531","messages":"24532","suppressedMessages":"24533","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24534","messages":"24535","suppressedMessages":"24536","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24537","messages":"24538","suppressedMessages":"24539","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24540","messages":"24541","suppressedMessages":"24542","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24543","messages":"24544","suppressedMessages":"24545","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24546","messages":"24547","suppressedMessages":"24548","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24549","messages":"24550","suppressedMessages":"24551","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24552","messages":"24553","suppressedMessages":"24554","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24555","messages":"24556","suppressedMessages":"24557","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24558","messages":"24559","suppressedMessages":"24560","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24561","messages":"24562","suppressedMessages":"24563","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24564","messages":"24565","suppressedMessages":"24566","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24567","messages":"24568","suppressedMessages":"24569","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24570","messages":"24571","suppressedMessages":"24572","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24573","messages":"24574","suppressedMessages":"24575","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24576","messages":"24577","suppressedMessages":"24578","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24579","messages":"24580","suppressedMessages":"24581","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24582","messages":"24583","suppressedMessages":"24584","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24585","messages":"24586","suppressedMessages":"24587","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24588","messages":"24589","suppressedMessages":"24590","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24591","messages":"24592","suppressedMessages":"24593","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24594","messages":"24595","suppressedMessages":"24596","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24597","messages":"24598","suppressedMessages":"24599","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24600","messages":"24601","suppressedMessages":"24602","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24603","messages":"24604","suppressedMessages":"24605","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24606","messages":"24607","suppressedMessages":"24608","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24609","messages":"24610","suppressedMessages":"24611","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24612","messages":"24613","suppressedMessages":"24614","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24615","messages":"24616","suppressedMessages":"24617","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24618","messages":"24619","suppressedMessages":"24620","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24621","messages":"24622","suppressedMessages":"24623","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24624","messages":"24625","suppressedMessages":"24626","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24627","messages":"24628","suppressedMessages":"24629","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24630","messages":"24631","suppressedMessages":"24632","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24633","messages":"24634","suppressedMessages":"24635","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24636","messages":"24637","suppressedMessages":"24638","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24639","messages":"24640","suppressedMessages":"24641","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24642","messages":"24643","suppressedMessages":"24644","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24645","messages":"24646","suppressedMessages":"24647","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24648","messages":"24649","suppressedMessages":"24650","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24651","messages":"24652","suppressedMessages":"24653","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24654","messages":"24655","suppressedMessages":"24656","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24657","messages":"24658","suppressedMessages":"24659","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24660","messages":"24661","suppressedMessages":"24662","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24663","messages":"24664","suppressedMessages":"24665","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24666","messages":"24667","suppressedMessages":"24668","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24669","messages":"24670","suppressedMessages":"24671","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24672","messages":"24673","suppressedMessages":"24674","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24675","messages":"24676","suppressedMessages":"24677","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24678","messages":"24679","suppressedMessages":"24680","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24681","messages":"24682","suppressedMessages":"24683","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24684","messages":"24685","suppressedMessages":"24686","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24687","messages":"24688","suppressedMessages":"24689","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24690","messages":"24691","suppressedMessages":"24692","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24693","messages":"24694","suppressedMessages":"24695","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24696","messages":"24697","suppressedMessages":"24698","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24699","messages":"24700","suppressedMessages":"24701","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24702","messages":"24703","suppressedMessages":"24704","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24705","messages":"24706","suppressedMessages":"24707","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24708","messages":"24709","suppressedMessages":"24710","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24711","messages":"24712","suppressedMessages":"24713","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24714","messages":"24715","suppressedMessages":"24716","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24717","messages":"24718","suppressedMessages":"24719","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24720","messages":"24721","suppressedMessages":"24722","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24723","messages":"24724","suppressedMessages":"24725","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24726","messages":"24727","suppressedMessages":"24728","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24729","messages":"24730","suppressedMessages":"24731","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24732","messages":"24733","suppressedMessages":"24734","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24735","messages":"24736","suppressedMessages":"24737","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24738","messages":"24739","suppressedMessages":"24740","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24741","messages":"24742","suppressedMessages":"24743","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24744","messages":"24745","suppressedMessages":"24746","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24747","messages":"24748","suppressedMessages":"24749","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24750","messages":"24751","suppressedMessages":"24752","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24753","messages":"24754","suppressedMessages":"24755","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24756","messages":"24757","suppressedMessages":"24758","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24759","messages":"24760","suppressedMessages":"24761","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24762","messages":"24763","suppressedMessages":"24764","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24765","messages":"24766","suppressedMessages":"24767","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24768","messages":"24769","suppressedMessages":"24770","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24771","messages":"24772","suppressedMessages":"24773","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24774","messages":"24775","suppressedMessages":"24776","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24777","messages":"24778","suppressedMessages":"24779","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24780","messages":"24781","suppressedMessages":"24782","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24783","messages":"24784","suppressedMessages":"24785","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24786","messages":"24787","suppressedMessages":"24788","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24789","messages":"24790","suppressedMessages":"24791","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24792","messages":"24793","suppressedMessages":"24794","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24795","messages":"24796","suppressedMessages":"24797","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24798","messages":"24799","suppressedMessages":"24800","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24801","messages":"24802","suppressedMessages":"24803","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24804","messages":"24805","suppressedMessages":"24806","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24807","messages":"24808","suppressedMessages":"24809","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24810","messages":"24811","suppressedMessages":"24812","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24813","messages":"24814","suppressedMessages":"24815","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24816","messages":"24817","suppressedMessages":"24818","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24819","messages":"24820","suppressedMessages":"24821","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"11lzzz9",{"filePath":"24822","messages":"24823","suppressedMessages":"24824","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24825","messages":"24826","suppressedMessages":"24827","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24828","messages":"24829","suppressedMessages":"24830","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24831","messages":"24832","suppressedMessages":"24833","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24834","messages":"24835","suppressedMessages":"24836","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24837","messages":"24838","suppressedMessages":"24839","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24840","messages":"24841","suppressedMessages":"24842","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24843","messages":"24844","suppressedMessages":"24845","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24846","messages":"24847","suppressedMessages":"24848","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24849","messages":"24850","suppressedMessages":"24851","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24852","messages":"24853","suppressedMessages":"24854","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24855","messages":"24856","suppressedMessages":"24857","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24858","messages":"24859","suppressedMessages":"24860","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24861","messages":"24862","suppressedMessages":"24863","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24864","messages":"24865","suppressedMessages":"24866","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24867","messages":"24868","suppressedMessages":"24869","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24870","messages":"24871","suppressedMessages":"24872","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24873","messages":"24874","suppressedMessages":"24875","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24876","messages":"24877","suppressedMessages":"24878","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24879","messages":"24880","suppressedMessages":"24881","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24882","messages":"24883","suppressedMessages":"24884","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24885","messages":"24886","suppressedMessages":"24887","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24888","messages":"24889","suppressedMessages":"24890","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24891","messages":"24892","suppressedMessages":"24893","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24894","messages":"24895","suppressedMessages":"24896","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24897","messages":"24898","suppressedMessages":"24899","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24900","messages":"24901","suppressedMessages":"24902","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24903","messages":"24904","suppressedMessages":"24905","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24906","messages":"24907","suppressedMessages":"24908","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24909","messages":"24910","suppressedMessages":"24911","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24912","messages":"24913","suppressedMessages":"24914","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24915","messages":"24916","suppressedMessages":"24917","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24918","messages":"24919","suppressedMessages":"24920","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24921","messages":"24922","suppressedMessages":"24923","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24924","messages":"24925","suppressedMessages":"24926","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24927","messages":"24928","suppressedMessages":"24929","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24930","messages":"24931","suppressedMessages":"24932","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24933","messages":"24934","suppressedMessages":"24935","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24936","messages":"24937","suppressedMessages":"24938","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24939","messages":"24940","suppressedMessages":"24941","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24942","messages":"24943","suppressedMessages":"24944","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24945","messages":"24946","suppressedMessages":"24947","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24948","messages":"24949","suppressedMessages":"24950","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24951","messages":"24952","suppressedMessages":"24953","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24954","messages":"24955","suppressedMessages":"24956","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24957","messages":"24958","suppressedMessages":"24959","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24960","messages":"24961","suppressedMessages":"24962","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24963","messages":"24964","suppressedMessages":"24965","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24966","messages":"24967","suppressedMessages":"24968","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24969","messages":"24970","suppressedMessages":"24971","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24972","messages":"24973","suppressedMessages":"24974","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24975","messages":"24976","suppressedMessages":"24977","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24978","messages":"24979","suppressedMessages":"24980","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24981","messages":"24982","suppressedMessages":"24983","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24984","messages":"24985","suppressedMessages":"24986","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24987","messages":"24988","suppressedMessages":"24989","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24990","messages":"24991","suppressedMessages":"24992","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24993","messages":"24994","suppressedMessages":"24995","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24996","messages":"24997","suppressedMessages":"24998","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24999","messages":"25000","suppressedMessages":"25001","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25002","messages":"25003","suppressedMessages":"25004","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25005","messages":"25006","suppressedMessages":"25007","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25008","messages":"25009","suppressedMessages":"25010","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25011","messages":"25012","suppressedMessages":"25013","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25014","messages":"25015","suppressedMessages":"25016","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25017","messages":"25018","suppressedMessages":"25019","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25020","messages":"25021","suppressedMessages":"25022","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25023","messages":"25024","suppressedMessages":"25025","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25026","messages":"25027","suppressedMessages":"25028","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25029","messages":"25030","suppressedMessages":"25031","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25032","messages":"25033","suppressedMessages":"25034","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25035","messages":"25036","suppressedMessages":"25037","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25038","messages":"25039","suppressedMessages":"25040","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25041","messages":"25042","suppressedMessages":"25043","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25044","messages":"25045","suppressedMessages":"25046","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25047","messages":"25048","suppressedMessages":"25049","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25050","messages":"25051","suppressedMessages":"25052","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25053","messages":"25054","suppressedMessages":"25055","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25056","messages":"25057","suppressedMessages":"25058","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25059","messages":"25060","suppressedMessages":"25061","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25062","messages":"25063","suppressedMessages":"25064","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25065","messages":"25066","suppressedMessages":"25067","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25068","messages":"25069","suppressedMessages":"25070","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25071","messages":"25072","suppressedMessages":"25073","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25074","messages":"25075","suppressedMessages":"25076","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25077","messages":"25078","suppressedMessages":"25079","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25080","messages":"25081","suppressedMessages":"25082","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25083","messages":"25084","suppressedMessages":"25085","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25086","messages":"25087","suppressedMessages":"25088","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25089","messages":"25090","suppressedMessages":"25091","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25092","messages":"25093","suppressedMessages":"25094","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25095","messages":"25096","suppressedMessages":"25097","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25098","messages":"25099","suppressedMessages":"25100","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25101","messages":"25102","suppressedMessages":"25103","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25104","messages":"25105","suppressedMessages":"25106","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25107","messages":"25108","suppressedMessages":"25109","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25110","messages":"25111","suppressedMessages":"25112","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25113","messages":"25114","suppressedMessages":"25115","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25116","messages":"25117","suppressedMessages":"25118","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25119","messages":"25120","suppressedMessages":"25121","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25122","messages":"25123","suppressedMessages":"25124","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25125","messages":"25126","suppressedMessages":"25127","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25128","messages":"25129","suppressedMessages":"25130","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25131","messages":"25132","suppressedMessages":"25133","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25134","messages":"25135","suppressedMessages":"25136","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25137","messages":"25138","suppressedMessages":"25139","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25140","messages":"25141","suppressedMessages":"25142","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25143","messages":"25144","suppressedMessages":"25145","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25146","messages":"25147","suppressedMessages":"25148","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25149","messages":"25150","suppressedMessages":"25151","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25152","messages":"25153","suppressedMessages":"25154","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25155","messages":"25156","suppressedMessages":"25157","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25158","messages":"25159","suppressedMessages":"25160","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25161","messages":"25162","suppressedMessages":"25163","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25164","messages":"25165","suppressedMessages":"25166","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25167","messages":"25168","suppressedMessages":"25169","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25170","messages":"25171","suppressedMessages":"25172","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25173","messages":"25174","suppressedMessages":"25175","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25176","messages":"25177","suppressedMessages":"25178","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25179","messages":"25180","suppressedMessages":"25181","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25182","messages":"25183","suppressedMessages":"25184","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25185","messages":"25186","suppressedMessages":"25187","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25188","messages":"25189","suppressedMessages":"25190","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25191","messages":"25192","suppressedMessages":"25193","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25194","messages":"25195","suppressedMessages":"25196","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25197","messages":"25198","suppressedMessages":"25199","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25200","messages":"25201","suppressedMessages":"25202","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25203","messages":"25204","suppressedMessages":"25205","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25206","messages":"25207","suppressedMessages":"25208","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25209","messages":"25210","suppressedMessages":"25211","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25212","messages":"25213","suppressedMessages":"25214","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25215","messages":"25216","suppressedMessages":"25217","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25218","messages":"25219","suppressedMessages":"25220","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25221","messages":"25222","suppressedMessages":"25223","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25224","messages":"25225","suppressedMessages":"25226","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25227","messages":"25228","suppressedMessages":"25229","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25230","messages":"25231","suppressedMessages":"25232","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25233","messages":"25234","suppressedMessages":"25235","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25236","messages":"25237","suppressedMessages":"25238","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25239","messages":"25240","suppressedMessages":"25241","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25242","messages":"25243","suppressedMessages":"25244","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25245","messages":"25246","suppressedMessages":"25247","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25248","messages":"25249","suppressedMessages":"25250","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25251","messages":"25252","suppressedMessages":"25253","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1h4i9bm",{"filePath":"25254","messages":"25255","suppressedMessages":"25256","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25257","messages":"25258","suppressedMessages":"25259","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25260","messages":"25261","suppressedMessages":"25262","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25263","messages":"25264","suppressedMessages":"25265","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25266","messages":"25267","suppressedMessages":"25268","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25269","messages":"25270","suppressedMessages":"25271","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25272","messages":"25273","suppressedMessages":"25274","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25275","messages":"25276","suppressedMessages":"25277","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25278","messages":"25279","suppressedMessages":"25280","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25281","messages":"25282","suppressedMessages":"25283","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25284","messages":"25285","suppressedMessages":"25286","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25287","messages":"25288","suppressedMessages":"25289","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25290","messages":"25291","suppressedMessages":"25292","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25293","messages":"25294","suppressedMessages":"25295","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25296","messages":"25297","suppressedMessages":"25298","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25299","messages":"25300","suppressedMessages":"25301","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25302","messages":"25303","suppressedMessages":"25304","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25305","messages":"25306","suppressedMessages":"25307","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25308","messages":"25309","suppressedMessages":"25310","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25311","messages":"25312","suppressedMessages":"25313","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25314","messages":"25315","suppressedMessages":"25316","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25317","messages":"25318","suppressedMessages":"25319","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25320","messages":"25321","suppressedMessages":"25322","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25323","messages":"25324","suppressedMessages":"25325","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25326","messages":"25327","suppressedMessages":"25328","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25329","messages":"25330","suppressedMessages":"25331","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25332","messages":"25333","suppressedMessages":"25334","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25335","messages":"25336","suppressedMessages":"25337","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25338","messages":"25339","suppressedMessages":"25340","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25341","messages":"25342","suppressedMessages":"25343","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25344","messages":"25345","suppressedMessages":"25346","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25347","messages":"25348","suppressedMessages":"25349","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25350","messages":"25351","suppressedMessages":"25352","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25353","messages":"25354","suppressedMessages":"25355","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25356","messages":"25357","suppressedMessages":"25358","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25359","messages":"25360","suppressedMessages":"25361","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25362","messages":"25363","suppressedMessages":"25364","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25365","messages":"25366","suppressedMessages":"25367","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25368","messages":"25369","suppressedMessages":"25370","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25371","messages":"25372","suppressedMessages":"25373","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25374","messages":"25375","suppressedMessages":"25376","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25377","messages":"25378","suppressedMessages":"25379","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25380","messages":"25381","suppressedMessages":"25382","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25383","messages":"25384","suppressedMessages":"25385","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25386","messages":"25387","suppressedMessages":"25388","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25389","messages":"25390","suppressedMessages":"25391","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25392","messages":"25393","suppressedMessages":"25394","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25395","messages":"25396","suppressedMessages":"25397","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25398","messages":"25399","suppressedMessages":"25400","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25401","messages":"25402","suppressedMessages":"25403","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25404","messages":"25405","suppressedMessages":"25406","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25407","messages":"25408","suppressedMessages":"25409","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25410","messages":"25411","suppressedMessages":"25412","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25413","messages":"25414","suppressedMessages":"25415","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25416","messages":"25417","suppressedMessages":"25418","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25419","messages":"25420","suppressedMessages":"25421","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25422","messages":"25423","suppressedMessages":"25424","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25425","messages":"25426","suppressedMessages":"25427","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25428","messages":"25429","suppressedMessages":"25430","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25431","messages":"25432","suppressedMessages":"25433","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25434","messages":"25435","suppressedMessages":"25436","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25437","messages":"25438","suppressedMessages":"25439","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25440","messages":"25441","suppressedMessages":"25442","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25443","messages":"25444","suppressedMessages":"25445","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25446","messages":"25447","suppressedMessages":"25448","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25449","messages":"25450","suppressedMessages":"25451","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25452","messages":"25453","suppressedMessages":"25454","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25455","messages":"25456","suppressedMessages":"25457","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25458","messages":"25459","suppressedMessages":"25460","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25461","messages":"25462","suppressedMessages":"25463","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25464","messages":"25465","suppressedMessages":"25466","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25467","messages":"25468","suppressedMessages":"25469","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25470","messages":"25471","suppressedMessages":"25472","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25473","messages":"25474","suppressedMessages":"25475","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25476","messages":"25477","suppressedMessages":"25478","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25479","messages":"25480","suppressedMessages":"25481","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25482","messages":"25483","suppressedMessages":"25484","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25485","messages":"25486","suppressedMessages":"25487","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25488","messages":"25489","suppressedMessages":"25490","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25491","messages":"25492","suppressedMessages":"25493","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25494","messages":"25495","suppressedMessages":"25496","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25497","messages":"25498","suppressedMessages":"25499","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25500","messages":"25501","suppressedMessages":"25502","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25503","messages":"25504","suppressedMessages":"25505","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25506","messages":"25507","suppressedMessages":"25508","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25509","messages":"25510","suppressedMessages":"25511","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25512","messages":"25513","suppressedMessages":"25514","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25515","messages":"25516","suppressedMessages":"25517","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25518","messages":"25519","suppressedMessages":"25520","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25521","messages":"25522","suppressedMessages":"25523","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25524","messages":"25525","suppressedMessages":"25526","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25527","messages":"25528","suppressedMessages":"25529","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25530","messages":"25531","suppressedMessages":"25532","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25533","messages":"25534","suppressedMessages":"25535","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25536","messages":"25537","suppressedMessages":"25538","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25539","messages":"25540","suppressedMessages":"25541","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25542","messages":"25543","suppressedMessages":"25544","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25545","messages":"25546","suppressedMessages":"25547","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25548","messages":"25549","suppressedMessages":"25550","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25551","messages":"25552","suppressedMessages":"25553","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25554","messages":"25555","suppressedMessages":"25556","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25557","messages":"25558","suppressedMessages":"25559","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25560","messages":"25561","suppressedMessages":"25562","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25563","messages":"25564","suppressedMessages":"25565","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25566","messages":"25567","suppressedMessages":"25568","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25569","messages":"25570","suppressedMessages":"25571","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25572","messages":"25573","suppressedMessages":"25574","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25575","messages":"25576","suppressedMessages":"25577","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25578","messages":"25579","suppressedMessages":"25580","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25581","messages":"25582","suppressedMessages":"25583","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25584","messages":"25585","suppressedMessages":"25586","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25587","messages":"25588","suppressedMessages":"25589","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25590","messages":"25591","suppressedMessages":"25592","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25593","messages":"25594","suppressedMessages":"25595","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25596","messages":"25597","suppressedMessages":"25598","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25599","messages":"25600","suppressedMessages":"25601","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25602","messages":"25603","suppressedMessages":"25604","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25605","messages":"25606","suppressedMessages":"25607","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25608","messages":"25609","suppressedMessages":"25610","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25611","messages":"25612","suppressedMessages":"25613","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25614","messages":"25615","suppressedMessages":"25616","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25617","messages":"25618","suppressedMessages":"25619","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25620","messages":"25621","suppressedMessages":"25622","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25623","messages":"25624","suppressedMessages":"25625","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25626","messages":"25627","suppressedMessages":"25628","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25629","messages":"25630","suppressedMessages":"25631","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25632","messages":"25633","suppressedMessages":"25634","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25635","messages":"25636","suppressedMessages":"25637","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25638","messages":"25639","suppressedMessages":"25640","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25641","messages":"25642","suppressedMessages":"25643","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25644","messages":"25645","suppressedMessages":"25646","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25647","messages":"25648","suppressedMessages":"25649","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25650","messages":"25651","suppressedMessages":"25652","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25653","messages":"25654","suppressedMessages":"25655","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25656","messages":"25657","suppressedMessages":"25658","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25659","messages":"25660","suppressedMessages":"25661","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25662","messages":"25663","suppressedMessages":"25664","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25665","messages":"25666","suppressedMessages":"25667","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25668","messages":"25669","suppressedMessages":"25670","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25671","messages":"25672","suppressedMessages":"25673","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25674","messages":"25675","suppressedMessages":"25676","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25677","messages":"25678","suppressedMessages":"25679","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25680","messages":"25681","suppressedMessages":"25682","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25683","messages":"25684","suppressedMessages":"25685","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25686","messages":"25687","suppressedMessages":"25688","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25689","messages":"25690","suppressedMessages":"25691","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25692","messages":"25693","suppressedMessages":"25694","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25695","messages":"25696","suppressedMessages":"25697","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25698","messages":"25699","suppressedMessages":"25700","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25701","messages":"25702","suppressedMessages":"25703","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25704","messages":"25705","suppressedMessages":"25706","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25707","messages":"25708","suppressedMessages":"25709","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25710","messages":"25711","suppressedMessages":"25712","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25713","messages":"25714","suppressedMessages":"25715","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25716","messages":"25717","suppressedMessages":"25718","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25719","messages":"25720","suppressedMessages":"25721","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25722","messages":"25723","suppressedMessages":"25724","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25725","messages":"25726","suppressedMessages":"25727","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25728","messages":"25729","suppressedMessages":"25730","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25731","messages":"25732","suppressedMessages":"25733","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25734","messages":"25735","suppressedMessages":"25736","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25737","messages":"25738","suppressedMessages":"25739","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25740","messages":"25741","suppressedMessages":"25742","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25743","messages":"25744","suppressedMessages":"25745","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25746","messages":"25747","suppressedMessages":"25748","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25749","messages":"25750","suppressedMessages":"25751","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25752","messages":"25753","suppressedMessages":"25754","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25755","messages":"25756","suppressedMessages":"25757","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25758","messages":"25759","suppressedMessages":"25760","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25761","messages":"25762","suppressedMessages":"25763","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25764","messages":"25765","suppressedMessages":"25766","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25767","messages":"25768","suppressedMessages":"25769","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25770","messages":"25771","suppressedMessages":"25772","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25773","messages":"25774","suppressedMessages":"25775","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25776","messages":"25777","suppressedMessages":"25778","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25779","messages":"25780","suppressedMessages":"25781","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25782","messages":"25783","suppressedMessages":"25784","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25785","messages":"25786","suppressedMessages":"25787","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25788","messages":"25789","suppressedMessages":"25790","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25791","messages":"25792","suppressedMessages":"25793","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25794","messages":"25795","suppressedMessages":"25796","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25797","messages":"25798","suppressedMessages":"25799","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25800","messages":"25801","suppressedMessages":"25802","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25803","messages":"25804","suppressedMessages":"25805","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25806","messages":"25807","suppressedMessages":"25808","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25809","messages":"25810","suppressedMessages":"25811","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25812","messages":"25813","suppressedMessages":"25814","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25815","messages":"25816","suppressedMessages":"25817","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25818","messages":"25819","suppressedMessages":"25820","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25821","messages":"25822","suppressedMessages":"25823","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25824","messages":"25825","suppressedMessages":"25826","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25827","messages":"25828","suppressedMessages":"25829","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25830","messages":"25831","suppressedMessages":"25832","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25833","messages":"25834","suppressedMessages":"25835","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25836","messages":"25837","suppressedMessages":"25838","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25839","messages":"25840","suppressedMessages":"25841","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25842","messages":"25843","suppressedMessages":"25844","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25845","messages":"25846","suppressedMessages":"25847","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25848","messages":"25849","suppressedMessages":"25850","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25851","messages":"25852","suppressedMessages":"25853","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25854","messages":"25855","suppressedMessages":"25856","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25857","messages":"25858","suppressedMessages":"25859","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25860","messages":"25861","suppressedMessages":"25862","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25863","messages":"25864","suppressedMessages":"25865","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25866","messages":"25867","suppressedMessages":"25868","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25869","messages":"25870","suppressedMessages":"25871","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25872","messages":"25873","suppressedMessages":"25874","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25875","messages":"25876","suppressedMessages":"25877","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25878","messages":"25879","suppressedMessages":"25880","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25881","messages":"25882","suppressedMessages":"25883","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25884","messages":"25885","suppressedMessages":"25886","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25887","messages":"25888","suppressedMessages":"25889","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25890","messages":"25891","suppressedMessages":"25892","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25893","messages":"25894","suppressedMessages":"25895","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25896","messages":"25897","suppressedMessages":"25898","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25899","messages":"25900","suppressedMessages":"25901","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25902","messages":"25903","suppressedMessages":"25904","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25905","messages":"25906","suppressedMessages":"25907","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25908","messages":"25909","suppressedMessages":"25910","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25911","messages":"25912","suppressedMessages":"25913","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25914","messages":"25915","suppressedMessages":"25916","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25917","messages":"25918","suppressedMessages":"25919","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25920","messages":"25921","suppressedMessages":"25922","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25923","messages":"25924","suppressedMessages":"25925","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25926","messages":"25927","suppressedMessages":"25928","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25929","messages":"25930","suppressedMessages":"25931","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25932","messages":"25933","suppressedMessages":"25934","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25935","messages":"25936","suppressedMessages":"25937","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25938","messages":"25939","suppressedMessages":"25940","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25941","messages":"25942","suppressedMessages":"25943","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25944","messages":"25945","suppressedMessages":"25946","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25947","messages":"25948","suppressedMessages":"25949","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25950","messages":"25951","suppressedMessages":"25952","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25953","messages":"25954","suppressedMessages":"25955","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25956","messages":"25957","suppressedMessages":"25958","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25959","messages":"25960","suppressedMessages":"25961","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25962","messages":"25963","suppressedMessages":"25964","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25965","messages":"25966","suppressedMessages":"25967","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25968","messages":"25969","suppressedMessages":"25970","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25971","messages":"25972","suppressedMessages":"25973","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25974","messages":"25975","suppressedMessages":"25976","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25977","messages":"25978","suppressedMessages":"25979","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25980","messages":"25981","suppressedMessages":"25982","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25983","messages":"25984","suppressedMessages":"25985","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25986","messages":"25987","suppressedMessages":"25988","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25989","messages":"25990","suppressedMessages":"25991","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25992","messages":"25993","suppressedMessages":"25994","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25995","messages":"25996","suppressedMessages":"25997","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"25998","messages":"25999","suppressedMessages":"26000","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26001","messages":"26002","suppressedMessages":"26003","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26004","messages":"26005","suppressedMessages":"26006","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26007","messages":"26008","suppressedMessages":"26009","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26010","messages":"26011","suppressedMessages":"26012","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26013","messages":"26014","suppressedMessages":"26015","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26016","messages":"26017","suppressedMessages":"26018","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26019","messages":"26020","suppressedMessages":"26021","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26022","messages":"26023","suppressedMessages":"26024","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26025","messages":"26026","suppressedMessages":"26027","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26028","messages":"26029","suppressedMessages":"26030","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26031","messages":"26032","suppressedMessages":"26033","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26034","messages":"26035","suppressedMessages":"26036","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26037","messages":"26038","suppressedMessages":"26039","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26040","messages":"26041","suppressedMessages":"26042","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26043","messages":"26044","suppressedMessages":"26045","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26046","messages":"26047","suppressedMessages":"26048","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26049","messages":"26050","suppressedMessages":"26051","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26052","messages":"26053","suppressedMessages":"26054","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26055","messages":"26056","suppressedMessages":"26057","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26058","messages":"26059","suppressedMessages":"26060","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26061","messages":"26062","suppressedMessages":"26063","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26064","messages":"26065","suppressedMessages":"26066","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26067","messages":"26068","suppressedMessages":"26069","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26070","messages":"26071","suppressedMessages":"26072","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26073","messages":"26074","suppressedMessages":"26075","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26076","messages":"26077","suppressedMessages":"26078","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26079","messages":"26080","suppressedMessages":"26081","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26082","messages":"26083","suppressedMessages":"26084","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26085","messages":"26086","suppressedMessages":"26087","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26088","messages":"26089","suppressedMessages":"26090","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26091","messages":"26092","suppressedMessages":"26093","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26094","messages":"26095","suppressedMessages":"26096","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26097","messages":"26098","suppressedMessages":"26099","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26100","messages":"26101","suppressedMessages":"26102","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26103","messages":"26104","suppressedMessages":"26105","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26106","messages":"26107","suppressedMessages":"26108","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26109","messages":"26110","suppressedMessages":"26111","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26112","messages":"26113","suppressedMessages":"26114","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26115","messages":"26116","suppressedMessages":"26117","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26118","messages":"26119","suppressedMessages":"26120","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26121","messages":"26122","suppressedMessages":"26123","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26124","messages":"26125","suppressedMessages":"26126","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26127","messages":"26128","suppressedMessages":"26129","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26130","messages":"26131","suppressedMessages":"26132","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26133","messages":"26134","suppressedMessages":"26135","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26136","messages":"26137","suppressedMessages":"26138","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26139","messages":"26140","suppressedMessages":"26141","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26142","messages":"26143","suppressedMessages":"26144","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26145","messages":"26146","suppressedMessages":"26147","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26148","messages":"26149","suppressedMessages":"26150","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26151","messages":"26152","suppressedMessages":"26153","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26154","messages":"26155","suppressedMessages":"26156","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26157","messages":"26158","suppressedMessages":"26159","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26160","messages":"26161","suppressedMessages":"26162","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26163","messages":"26164","suppressedMessages":"26165","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26166","messages":"26167","suppressedMessages":"26168","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26169","messages":"26170","suppressedMessages":"26171","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26172","messages":"26173","suppressedMessages":"26174","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26175","messages":"26176","suppressedMessages":"26177","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26178","messages":"26179","suppressedMessages":"26180","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26181","messages":"26182","suppressedMessages":"26183","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26184","messages":"26185","suppressedMessages":"26186","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26187","messages":"26188","suppressedMessages":"26189","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26190","messages":"26191","suppressedMessages":"26192","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26193","messages":"26194","suppressedMessages":"26195","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26196","messages":"26197","suppressedMessages":"26198","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26199","messages":"26200","suppressedMessages":"26201","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26202","messages":"26203","suppressedMessages":"26204","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26205","messages":"26206","suppressedMessages":"26207","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26208","messages":"26209","suppressedMessages":"26210","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26211","messages":"26212","suppressedMessages":"26213","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26214","messages":"26215","suppressedMessages":"26216","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26217","messages":"26218","suppressedMessages":"26219","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26220","messages":"26221","suppressedMessages":"26222","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26223","messages":"26224","suppressedMessages":"26225","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26226","messages":"26227","suppressedMessages":"26228","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26229","messages":"26230","suppressedMessages":"26231","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26232","messages":"26233","suppressedMessages":"26234","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26235","messages":"26236","suppressedMessages":"26237","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26238","messages":"26239","suppressedMessages":"26240","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26241","messages":"26242","suppressedMessages":"26243","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26244","messages":"26245","suppressedMessages":"26246","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26247","messages":"26248","suppressedMessages":"26249","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26250","messages":"26251","suppressedMessages":"26252","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26253","messages":"26254","suppressedMessages":"26255","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26256","messages":"26257","suppressedMessages":"26258","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26259","messages":"26260","suppressedMessages":"26261","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26262","messages":"26263","suppressedMessages":"26264","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26265","messages":"26266","suppressedMessages":"26267","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26268","messages":"26269","suppressedMessages":"26270","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26271","messages":"26272","suppressedMessages":"26273","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26274","messages":"26275","suppressedMessages":"26276","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26277","messages":"26278","suppressedMessages":"26279","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26280","messages":"26281","suppressedMessages":"26282","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26283","messages":"26284","suppressedMessages":"26285","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26286","messages":"26287","suppressedMessages":"26288","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26289","messages":"26290","suppressedMessages":"26291","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26292","messages":"26293","suppressedMessages":"26294","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26295","messages":"26296","suppressedMessages":"26297","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26298","messages":"26299","suppressedMessages":"26300","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26301","messages":"26302","suppressedMessages":"26303","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26304","messages":"26305","suppressedMessages":"26306","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26307","messages":"26308","suppressedMessages":"26309","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26310","messages":"26311","suppressedMessages":"26312","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26313","messages":"26314","suppressedMessages":"26315","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26316","messages":"26317","suppressedMessages":"26318","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26319","messages":"26320","suppressedMessages":"26321","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26322","messages":"26323","suppressedMessages":"26324","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26325","messages":"26326","suppressedMessages":"26327","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26328","messages":"26329","suppressedMessages":"26330","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26331","messages":"26332","suppressedMessages":"26333","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26334","messages":"26335","suppressedMessages":"26336","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26337","messages":"26338","suppressedMessages":"26339","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26340","messages":"26341","suppressedMessages":"26342","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26343","messages":"26344","suppressedMessages":"26345","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26346","messages":"26347","suppressedMessages":"26348","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26349","messages":"26350","suppressedMessages":"26351","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26352","messages":"26353","suppressedMessages":"26354","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26355","messages":"26356","suppressedMessages":"26357","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26358","messages":"26359","suppressedMessages":"26360","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26361","messages":"26362","suppressedMessages":"26363","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26364","messages":"26365","suppressedMessages":"26366","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26367","messages":"26368","suppressedMessages":"26369","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26370","messages":"26371","suppressedMessages":"26372","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26373","messages":"26374","suppressedMessages":"26375","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26376","messages":"26377","suppressedMessages":"26378","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26379","messages":"26380","suppressedMessages":"26381","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26382","messages":"26383","suppressedMessages":"26384","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26385","messages":"26386","suppressedMessages":"26387","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26388","messages":"26389","suppressedMessages":"26390","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26391","messages":"26392","suppressedMessages":"26393","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26394","messages":"26395","suppressedMessages":"26396","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26397","messages":"26398","suppressedMessages":"26399","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26400","messages":"26401","suppressedMessages":"26402","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26403","messages":"26404","suppressedMessages":"26405","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26406","messages":"26407","suppressedMessages":"26408","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26409","messages":"26410","suppressedMessages":"26411","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26412","messages":"26413","suppressedMessages":"26414","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26415","messages":"26416","suppressedMessages":"26417","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26418","messages":"26419","suppressedMessages":"26420","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26421","messages":"26422","suppressedMessages":"26423","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26424","messages":"26425","suppressedMessages":"26426","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26427","messages":"26428","suppressedMessages":"26429","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26430","messages":"26431","suppressedMessages":"26432","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26433","messages":"26434","suppressedMessages":"26435","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26436","messages":"26437","suppressedMessages":"26438","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26439","messages":"26440","suppressedMessages":"26441","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26442","messages":"26443","suppressedMessages":"26444","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26445","messages":"26446","suppressedMessages":"26447","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26448","messages":"26449","suppressedMessages":"26450","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26451","messages":"26452","suppressedMessages":"26453","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26454","messages":"26455","suppressedMessages":"26456","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26457","messages":"26458","suppressedMessages":"26459","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26460","messages":"26461","suppressedMessages":"26462","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26463","messages":"26464","suppressedMessages":"26465","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26466","messages":"26467","suppressedMessages":"26468","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26469","messages":"26470","suppressedMessages":"26471","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26472","messages":"26473","suppressedMessages":"26474","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26475","messages":"26476","suppressedMessages":"26477","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26478","messages":"26479","suppressedMessages":"26480","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26481","messages":"26482","suppressedMessages":"26483","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26484","messages":"26485","suppressedMessages":"26486","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26487","messages":"26488","suppressedMessages":"26489","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26490","messages":"26491","suppressedMessages":"26492","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26493","messages":"26494","suppressedMessages":"26495","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26496","messages":"26497","suppressedMessages":"26498","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26499","messages":"26500","suppressedMessages":"26501","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26502","messages":"26503","suppressedMessages":"26504","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26505","messages":"26506","suppressedMessages":"26507","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26508","messages":"26509","suppressedMessages":"26510","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26511","messages":"26512","suppressedMessages":"26513","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26514","messages":"26515","suppressedMessages":"26516","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26517","messages":"26518","suppressedMessages":"26519","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26520","messages":"26521","suppressedMessages":"26522","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26523","messages":"26524","suppressedMessages":"26525","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26526","messages":"26527","suppressedMessages":"26528","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26529","messages":"26530","suppressedMessages":"26531","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26532","messages":"26533","suppressedMessages":"26534","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26535","messages":"26536","suppressedMessages":"26537","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26538","messages":"26539","suppressedMessages":"26540","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26541","messages":"26542","suppressedMessages":"26543","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26544","messages":"26545","suppressedMessages":"26546","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26547","messages":"26548","suppressedMessages":"26549","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26550","messages":"26551","suppressedMessages":"26552","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26553","messages":"26554","suppressedMessages":"26555","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26556","messages":"26557","suppressedMessages":"26558","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26559","messages":"26560","suppressedMessages":"26561","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26562","messages":"26563","suppressedMessages":"26564","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26565","messages":"26566","suppressedMessages":"26567","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26568","messages":"26569","suppressedMessages":"26570","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26571","messages":"26572","suppressedMessages":"26573","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26574","messages":"26575","suppressedMessages":"26576","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26577","messages":"26578","suppressedMessages":"26579","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26580","messages":"26581","suppressedMessages":"26582","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26583","messages":"26584","suppressedMessages":"26585","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26586","messages":"26587","suppressedMessages":"26588","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26589","messages":"26590","suppressedMessages":"26591","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26592","messages":"26593","suppressedMessages":"26594","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26595","messages":"26596","suppressedMessages":"26597","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26598","messages":"26599","suppressedMessages":"26600","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26601","messages":"26602","suppressedMessages":"26603","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26604","messages":"26605","suppressedMessages":"26606","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26607","messages":"26608","suppressedMessages":"26609","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26610","messages":"26611","suppressedMessages":"26612","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26613","messages":"26614","suppressedMessages":"26615","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26616","messages":"26617","suppressedMessages":"26618","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26619","messages":"26620","suppressedMessages":"26621","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26622","messages":"26623","suppressedMessages":"26624","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26625","messages":"26626","suppressedMessages":"26627","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26628","messages":"26629","suppressedMessages":"26630","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26631","messages":"26632","suppressedMessages":"26633","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26634","messages":"26635","suppressedMessages":"26636","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26637","messages":"26638","suppressedMessages":"26639","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26640","messages":"26641","suppressedMessages":"26642","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26643","messages":"26644","suppressedMessages":"26645","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26646","messages":"26647","suppressedMessages":"26648","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26649","messages":"26650","suppressedMessages":"26651","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26652","messages":"26653","suppressedMessages":"26654","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26655","messages":"26656","suppressedMessages":"26657","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26658","messages":"26659","suppressedMessages":"26660","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26661","messages":"26662","suppressedMessages":"26663","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26664","messages":"26665","suppressedMessages":"26666","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26667","messages":"26668","suppressedMessages":"26669","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26670","messages":"26671","suppressedMessages":"26672","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26673","messages":"26674","suppressedMessages":"26675","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26676","messages":"26677","suppressedMessages":"26678","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26679","messages":"26680","suppressedMessages":"26681","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26682","messages":"26683","suppressedMessages":"26684","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26685","messages":"26686","suppressedMessages":"26687","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26688","messages":"26689","suppressedMessages":"26690","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26691","messages":"26692","suppressedMessages":"26693","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26694","messages":"26695","suppressedMessages":"26696","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26697","messages":"26698","suppressedMessages":"26699","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26700","messages":"26701","suppressedMessages":"26702","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26703","messages":"26704","suppressedMessages":"26705","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26706","messages":"26707","suppressedMessages":"26708","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26709","messages":"26710","suppressedMessages":"26711","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26712","messages":"26713","suppressedMessages":"26714","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26715","messages":"26716","suppressedMessages":"26717","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26718","messages":"26719","suppressedMessages":"26720","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26721","messages":"26722","suppressedMessages":"26723","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26724","messages":"26725","suppressedMessages":"26726","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26727","messages":"26728","suppressedMessages":"26729","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26730","messages":"26731","suppressedMessages":"26732","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26733","messages":"26734","suppressedMessages":"26735","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26736","messages":"26737","suppressedMessages":"26738","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26739","messages":"26740","suppressedMessages":"26741","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26742","messages":"26743","suppressedMessages":"26744","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26745","messages":"26746","suppressedMessages":"26747","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26748","messages":"26749","suppressedMessages":"26750","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26751","messages":"26752","suppressedMessages":"26753","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26754","messages":"26755","suppressedMessages":"26756","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26757","messages":"26758","suppressedMessages":"26759","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26760","messages":"26761","suppressedMessages":"26762","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26763","messages":"26764","suppressedMessages":"26765","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26766","messages":"26767","suppressedMessages":"26768","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26769","messages":"26770","suppressedMessages":"26771","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26772","messages":"26773","suppressedMessages":"26774","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26775","messages":"26776","suppressedMessages":"26777","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26778","messages":"26779","suppressedMessages":"26780","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26781","messages":"26782","suppressedMessages":"26783","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26784","messages":"26785","suppressedMessages":"26786","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26787","messages":"26788","suppressedMessages":"26789","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26790","messages":"26791","suppressedMessages":"26792","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26793","messages":"26794","suppressedMessages":"26795","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26796","messages":"26797","suppressedMessages":"26798","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26799","messages":"26800","suppressedMessages":"26801","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26802","messages":"26803","suppressedMessages":"26804","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26805","messages":"26806","suppressedMessages":"26807","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26808","messages":"26809","suppressedMessages":"26810","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26811","messages":"26812","suppressedMessages":"26813","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26814","messages":"26815","suppressedMessages":"26816","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26817","messages":"26818","suppressedMessages":"26819","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26820","messages":"26821","suppressedMessages":"26822","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26823","messages":"26824","suppressedMessages":"26825","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26826","messages":"26827","suppressedMessages":"26828","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26829","messages":"26830","suppressedMessages":"26831","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26832","messages":"26833","suppressedMessages":"26834","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26835","messages":"26836","suppressedMessages":"26837","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26838","messages":"26839","suppressedMessages":"26840","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26841","messages":"26842","suppressedMessages":"26843","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26844","messages":"26845","suppressedMessages":"26846","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26847","messages":"26848","suppressedMessages":"26849","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26850","messages":"26851","suppressedMessages":"26852","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26853","messages":"26854","suppressedMessages":"26855","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26856","messages":"26857","suppressedMessages":"26858","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26859","messages":"26860","suppressedMessages":"26861","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26862","messages":"26863","suppressedMessages":"26864","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26865","messages":"26866","suppressedMessages":"26867","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26868","messages":"26869","suppressedMessages":"26870","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26871","messages":"26872","suppressedMessages":"26873","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26874","messages":"26875","suppressedMessages":"26876","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26877","messages":"26878","suppressedMessages":"26879","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26880","messages":"26881","suppressedMessages":"26882","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26883","messages":"26884","suppressedMessages":"26885","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26886","messages":"26887","suppressedMessages":"26888","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26889","messages":"26890","suppressedMessages":"26891","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26892","messages":"26893","suppressedMessages":"26894","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26895","messages":"26896","suppressedMessages":"26897","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26898","messages":"26899","suppressedMessages":"26900","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26901","messages":"26902","suppressedMessages":"26903","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26904","messages":"26905","suppressedMessages":"26906","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26907","messages":"26908","suppressedMessages":"26909","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26910","messages":"26911","suppressedMessages":"26912","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26913","messages":"26914","suppressedMessages":"26915","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26916","messages":"26917","suppressedMessages":"26918","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26919","messages":"26920","suppressedMessages":"26921","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26922","messages":"26923","suppressedMessages":"26924","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26925","messages":"26926","suppressedMessages":"26927","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26928","messages":"26929","suppressedMessages":"26930","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26931","messages":"26932","suppressedMessages":"26933","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26934","messages":"26935","suppressedMessages":"26936","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26937","messages":"26938","suppressedMessages":"26939","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26940","messages":"26941","suppressedMessages":"26942","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26943","messages":"26944","suppressedMessages":"26945","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26946","messages":"26947","suppressedMessages":"26948","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26949","messages":"26950","suppressedMessages":"26951","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26952","messages":"26953","suppressedMessages":"26954","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26955","messages":"26956","suppressedMessages":"26957","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26958","messages":"26959","suppressedMessages":"26960","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26961","messages":"26962","suppressedMessages":"26963","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26964","messages":"26965","suppressedMessages":"26966","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26967","messages":"26968","suppressedMessages":"26969","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26970","messages":"26971","suppressedMessages":"26972","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26973","messages":"26974","suppressedMessages":"26975","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26976","messages":"26977","suppressedMessages":"26978","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26979","messages":"26980","suppressedMessages":"26981","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26982","messages":"26983","suppressedMessages":"26984","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26985","messages":"26986","suppressedMessages":"26987","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26988","messages":"26989","suppressedMessages":"26990","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26991","messages":"26992","suppressedMessages":"26993","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26994","messages":"26995","suppressedMessages":"26996","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26997","messages":"26998","suppressedMessages":"26999","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27000","messages":"27001","suppressedMessages":"27002","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27003","messages":"27004","suppressedMessages":"27005","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27006","messages":"27007","suppressedMessages":"27008","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27009","messages":"27010","suppressedMessages":"27011","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27012","messages":"27013","suppressedMessages":"27014","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27015","messages":"27016","suppressedMessages":"27017","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27018","messages":"27019","suppressedMessages":"27020","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27021","messages":"27022","suppressedMessages":"27023","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27024","messages":"27025","suppressedMessages":"27026","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27027","messages":"27028","suppressedMessages":"27029","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27030","messages":"27031","suppressedMessages":"27032","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27033","messages":"27034","suppressedMessages":"27035","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27036","messages":"27037","suppressedMessages":"27038","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27039","messages":"27040","suppressedMessages":"27041","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27042","messages":"27043","suppressedMessages":"27044","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27045","messages":"27046","suppressedMessages":"27047","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27048","messages":"27049","suppressedMessages":"27050","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27051","messages":"27052","suppressedMessages":"27053","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27054","messages":"27055","suppressedMessages":"27056","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27057","messages":"27058","suppressedMessages":"27059","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27060","messages":"27061","suppressedMessages":"27062","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27063","messages":"27064","suppressedMessages":"27065","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27066","messages":"27067","suppressedMessages":"27068","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27069","messages":"27070","suppressedMessages":"27071","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27072","messages":"27073","suppressedMessages":"27074","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27075","messages":"27076","suppressedMessages":"27077","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27078","messages":"27079","suppressedMessages":"27080","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27081","messages":"27082","suppressedMessages":"27083","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27084","messages":"27085","suppressedMessages":"27086","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27087","messages":"27088","suppressedMessages":"27089","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27090","messages":"27091","suppressedMessages":"27092","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27093","messages":"27094","suppressedMessages":"27095","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27096","messages":"27097","suppressedMessages":"27098","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27099","messages":"27100","suppressedMessages":"27101","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27102","messages":"27103","suppressedMessages":"27104","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27105","messages":"27106","suppressedMessages":"27107","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27108","messages":"27109","suppressedMessages":"27110","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27111","messages":"27112","suppressedMessages":"27113","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27114","messages":"27115","suppressedMessages":"27116","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27117","messages":"27118","suppressedMessages":"27119","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27120","messages":"27121","suppressedMessages":"27122","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27123","messages":"27124","suppressedMessages":"27125","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27126","messages":"27127","suppressedMessages":"27128","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27129","messages":"27130","suppressedMessages":"27131","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27132","messages":"27133","suppressedMessages":"27134","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27135","messages":"27136","suppressedMessages":"27137","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27138","messages":"27139","suppressedMessages":"27140","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27141","messages":"27142","suppressedMessages":"27143","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27144","messages":"27145","suppressedMessages":"27146","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27147","messages":"27148","suppressedMessages":"27149","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27150","messages":"27151","suppressedMessages":"27152","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27153","messages":"27154","suppressedMessages":"27155","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27156","messages":"27157","suppressedMessages":"27158","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27159","messages":"27160","suppressedMessages":"27161","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27162","messages":"27163","suppressedMessages":"27164","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27165","messages":"27166","suppressedMessages":"27167","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27168","messages":"27169","suppressedMessages":"27170","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27171","messages":"27172","suppressedMessages":"27173","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27174","messages":"27175","suppressedMessages":"27176","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27177","messages":"27178","suppressedMessages":"27179","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27180","messages":"27181","suppressedMessages":"27182","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27183","messages":"27184","suppressedMessages":"27185","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27186","messages":"27187","suppressedMessages":"27188","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27189","messages":"27190","suppressedMessages":"27191","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27192","messages":"27193","suppressedMessages":"27194","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27195","messages":"27196","suppressedMessages":"27197","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27198","messages":"27199","suppressedMessages":"27200","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27201","messages":"27202","suppressedMessages":"27203","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27204","messages":"27205","suppressedMessages":"27206","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27207","messages":"27208","suppressedMessages":"27209","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27210","messages":"27211","suppressedMessages":"27212","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27213","messages":"27214","suppressedMessages":"27215","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27216","messages":"27217","suppressedMessages":"27218","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27219","messages":"27220","suppressedMessages":"27221","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27222","messages":"27223","suppressedMessages":"27224","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27225","messages":"27226","suppressedMessages":"27227","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"27228","messages":"27229","suppressedMessages":"27230","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27231","messages":"27232","suppressedMessages":"27233","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27234","messages":"27235","suppressedMessages":"27236","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27237","messages":"27238","suppressedMessages":"27239","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27240","messages":"27241","suppressedMessages":"27242","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27243","messages":"27244","suppressedMessages":"27245","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27246","messages":"27247","suppressedMessages":"27248","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27249","messages":"27250","suppressedMessages":"27251","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27252","messages":"27253","suppressedMessages":"27254","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27255","messages":"27256","suppressedMessages":"27257","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27258","messages":"27259","suppressedMessages":"27260","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27261","messages":"27262","suppressedMessages":"27263","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27264","messages":"27265","suppressedMessages":"27266","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27267","messages":"27268","suppressedMessages":"27269","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27270","messages":"27271","suppressedMessages":"27272","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27273","messages":"27274","suppressedMessages":"27275","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27276","messages":"27277","suppressedMessages":"27278","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27279","messages":"27280","suppressedMessages":"27281","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27282","messages":"27283","suppressedMessages":"27284","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27285","messages":"27286","suppressedMessages":"27287","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27288","messages":"27289","suppressedMessages":"27290","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27291","messages":"27292","suppressedMessages":"27293","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27294","messages":"27295","suppressedMessages":"27296","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27297","messages":"27298","suppressedMessages":"27299","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"4cfoa2",{"filePath":"27300","messages":"27301","suppressedMessages":"27302","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27303","messages":"27304","suppressedMessages":"27305","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27306","messages":"27307","suppressedMessages":"27308","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27309","messages":"27310","suppressedMessages":"27311","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27312","messages":"27313","suppressedMessages":"27314","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27315","messages":"27316","suppressedMessages":"27317","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27318","messages":"27319","suppressedMessages":"27320","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27321","messages":"27322","suppressedMessages":"27323","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27324","messages":"27325","suppressedMessages":"27326","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27327","messages":"27328","suppressedMessages":"27329","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27330","messages":"27331","suppressedMessages":"27332","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27333","messages":"27334","suppressedMessages":"27335","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27336","messages":"27337","suppressedMessages":"27338","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"27339","messages":"27340","suppressedMessages":"27341","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27342","messages":"27343","suppressedMessages":"27344","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27345","messages":"27346","suppressedMessages":"27347","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27348","messages":"27349","suppressedMessages":"27350","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27351","messages":"27352","suppressedMessages":"27353","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27354","messages":"27355","suppressedMessages":"27356","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27357","messages":"27358","suppressedMessages":"27359","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27360","messages":"27361","suppressedMessages":"27362","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27363","messages":"27364","suppressedMessages":"27365","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27366","messages":"27367","suppressedMessages":"27368","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27369","messages":"27370","suppressedMessages":"27371","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27372","messages":"27373","suppressedMessages":"27374","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27375","messages":"27376","suppressedMessages":"27377","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27378","messages":"27379","suppressedMessages":"27380","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27381","messages":"27382","suppressedMessages":"27383","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"27384","messages":"27385","suppressedMessages":"27386","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27387","messages":"27388","suppressedMessages":"27389","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27390","messages":"27391","suppressedMessages":"27392","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27393","messages":"27394","suppressedMessages":"27395","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27396","messages":"27397","suppressedMessages":"27398","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27399","messages":"27400","suppressedMessages":"27401","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27402","messages":"27403","suppressedMessages":"27404","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27405","messages":"27406","suppressedMessages":"27407","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27408","messages":"27409","suppressedMessages":"27410","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27411","messages":"27412","suppressedMessages":"27413","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27414","messages":"27415","suppressedMessages":"27416","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27417","messages":"27418","suppressedMessages":"27419","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27420","messages":"27421","suppressedMessages":"27422","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27423","messages":"27424","suppressedMessages":"27425","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27426","messages":"27427","suppressedMessages":"27428","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27429","messages":"27430","suppressedMessages":"27431","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27432","messages":"27433","suppressedMessages":"27434","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27435","messages":"27436","suppressedMessages":"27437","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27438","messages":"27439","suppressedMessages":"27440","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27441","messages":"27442","suppressedMessages":"27443","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27444","messages":"27445","suppressedMessages":"27446","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27447","messages":"27448","suppressedMessages":"27449","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27450","messages":"27451","suppressedMessages":"27452","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27453","messages":"27454","suppressedMessages":"27455","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"27456","messages":"27457","suppressedMessages":"27458","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27459","messages":"27460","suppressedMessages":"27461","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27462","messages":"27463","suppressedMessages":"27464","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27465","messages":"27466","suppressedMessages":"27467","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27468","messages":"27469","suppressedMessages":"27470","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27471","messages":"27472","suppressedMessages":"27473","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27474","messages":"27475","suppressedMessages":"27476","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"27477","messages":"27478","suppressedMessages":"27479","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27480","messages":"27481","suppressedMessages":"27482","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27483","messages":"27484","suppressedMessages":"27485","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27486","messages":"27487","suppressedMessages":"27488","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27489","messages":"27490","suppressedMessages":"27491","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27492","messages":"27493","suppressedMessages":"27494","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"27495","messages":"27496","suppressedMessages":"27497","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27498","messages":"27499","suppressedMessages":"27500","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27501","messages":"27502","suppressedMessages":"27503","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27504","messages":"27505","suppressedMessages":"27506","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27507","messages":"27508","suppressedMessages":"27509","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27510","messages":"27511","suppressedMessages":"27512","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27513","messages":"27514","suppressedMessages":"27515","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27516","messages":"27517","suppressedMessages":"27518","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27519","messages":"27520","suppressedMessages":"27521","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27522","messages":"27523","suppressedMessages":"27524","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27525","messages":"27526","suppressedMessages":"27527","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27528","messages":"27529","suppressedMessages":"27530","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27531","messages":"27532","suppressedMessages":"27533","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27534","messages":"27535","suppressedMessages":"27536","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27537","messages":"27538","suppressedMessages":"27539","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27540","messages":"27541","suppressedMessages":"27542","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27543","messages":"27544","suppressedMessages":"27545","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27546","messages":"27547","suppressedMessages":"27548","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27549","messages":"27550","suppressedMessages":"27551","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27552","messages":"27553","suppressedMessages":"27554","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27555","messages":"27556","suppressedMessages":"27557","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27558","messages":"27559","suppressedMessages":"27560","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27561","messages":"27562","suppressedMessages":"27563","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27564","messages":"27565","suppressedMessages":"27566","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27567","messages":"27568","suppressedMessages":"27569","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27570","messages":"27571","suppressedMessages":"27572","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27573","messages":"27574","suppressedMessages":"27575","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27576","messages":"27577","suppressedMessages":"27578","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27579","messages":"27580","suppressedMessages":"27581","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27582","messages":"27583","suppressedMessages":"27584","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27585","messages":"27586","suppressedMessages":"27587","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27588","messages":"27589","suppressedMessages":"27590","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27591","messages":"27592","suppressedMessages":"27593","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27594","messages":"27595","suppressedMessages":"27596","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27597","messages":"27598","suppressedMessages":"27599","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27600","messages":"27601","suppressedMessages":"27602","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27603","messages":"27604","suppressedMessages":"27605","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27606","messages":"27607","suppressedMessages":"27608","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27609","messages":"27610","suppressedMessages":"27611","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27612","messages":"27613","suppressedMessages":"27614","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27615","messages":"27616","suppressedMessages":"27617","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27618","messages":"27619","suppressedMessages":"27620","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27621","messages":"27622","suppressedMessages":"27623","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27624","messages":"27625","suppressedMessages":"27626","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27627","messages":"27628","suppressedMessages":"27629","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27630","messages":"27631","suppressedMessages":"27632","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27633","messages":"27634","suppressedMessages":"27635","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27636","messages":"27637","suppressedMessages":"27638","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27639","messages":"27640","suppressedMessages":"27641","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27642","messages":"27643","suppressedMessages":"27644","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27645","messages":"27646","suppressedMessages":"27647","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27648","messages":"27649","suppressedMessages":"27650","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27651","messages":"27652","suppressedMessages":"27653","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27654","messages":"27655","suppressedMessages":"27656","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27657","messages":"27658","suppressedMessages":"27659","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27660","messages":"27661","suppressedMessages":"27662","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27663","messages":"27664","suppressedMessages":"27665","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27666","messages":"27667","suppressedMessages":"27668","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27669","messages":"27670","suppressedMessages":"27671","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27672","messages":"27673","suppressedMessages":"27674","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27675","messages":"27676","suppressedMessages":"27677","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27678","messages":"27679","suppressedMessages":"27680","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27681","messages":"27682","suppressedMessages":"27683","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27684","messages":"27685","suppressedMessages":"27686","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27687","messages":"27688","suppressedMessages":"27689","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27690","messages":"27691","suppressedMessages":"27692","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27693","messages":"27694","suppressedMessages":"27695","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27696","messages":"27697","suppressedMessages":"27698","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27699","messages":"27700","suppressedMessages":"27701","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27702","messages":"27703","suppressedMessages":"27704","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27705","messages":"27706","suppressedMessages":"27707","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27708","messages":"27709","suppressedMessages":"27710","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27711","messages":"27712","suppressedMessages":"27713","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27714","messages":"27715","suppressedMessages":"27716","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27717","messages":"27718","suppressedMessages":"27719","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27720","messages":"27721","suppressedMessages":"27722","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27723","messages":"27724","suppressedMessages":"27725","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27726","messages":"27727","suppressedMessages":"27728","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27729","messages":"27730","suppressedMessages":"27731","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27732","messages":"27733","suppressedMessages":"27734","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27735","messages":"27736","suppressedMessages":"27737","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27738","messages":"27739","suppressedMessages":"27740","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27741","messages":"27742","suppressedMessages":"27743","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27744","messages":"27745","suppressedMessages":"27746","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27747","messages":"27748","suppressedMessages":"27749","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27750","messages":"27751","suppressedMessages":"27752","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27753","messages":"27754","suppressedMessages":"27755","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27756","messages":"27757","suppressedMessages":"27758","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27759","messages":"27760","suppressedMessages":"27761","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27762","messages":"27763","suppressedMessages":"27764","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27765","messages":"27766","suppressedMessages":"27767","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27768","messages":"27769","suppressedMessages":"27770","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27771","messages":"27772","suppressedMessages":"27773","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27774","messages":"27775","suppressedMessages":"27776","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27777","messages":"27778","suppressedMessages":"27779","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27780","messages":"27781","suppressedMessages":"27782","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27783","messages":"27784","suppressedMessages":"27785","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27786","messages":"27787","suppressedMessages":"27788","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27789","messages":"27790","suppressedMessages":"27791","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27792","messages":"27793","suppressedMessages":"27794","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27795","messages":"27796","suppressedMessages":"27797","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27798","messages":"27799","suppressedMessages":"27800","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27801","messages":"27802","suppressedMessages":"27803","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27804","messages":"27805","suppressedMessages":"27806","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27807","messages":"27808","suppressedMessages":"27809","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27810","messages":"27811","suppressedMessages":"27812","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27813","messages":"27814","suppressedMessages":"27815","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27816","messages":"27817","suppressedMessages":"27818","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27819","messages":"27820","suppressedMessages":"27821","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27822","messages":"27823","suppressedMessages":"27824","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27825","messages":"27826","suppressedMessages":"27827","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27828","messages":"27829","suppressedMessages":"27830","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27831","messages":"27832","suppressedMessages":"27833","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27834","messages":"27835","suppressedMessages":"27836","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27837","messages":"27838","suppressedMessages":"27839","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27840","messages":"27841","suppressedMessages":"27842","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27843","messages":"27844","suppressedMessages":"27845","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27846","messages":"27847","suppressedMessages":"27848","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27849","messages":"27850","suppressedMessages":"27851","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27852","messages":"27853","suppressedMessages":"27854","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27855","messages":"27856","suppressedMessages":"27857","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27858","messages":"27859","suppressedMessages":"27860","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27861","messages":"27862","suppressedMessages":"27863","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27864","messages":"27865","suppressedMessages":"27866","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27867","messages":"27868","suppressedMessages":"27869","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27870","messages":"27871","suppressedMessages":"27872","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27873","messages":"27874","suppressedMessages":"27875","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27876","messages":"27877","suppressedMessages":"27878","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27879","messages":"27880","suppressedMessages":"27881","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27882","messages":"27883","suppressedMessages":"27884","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27885","messages":"27886","suppressedMessages":"27887","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27888","messages":"27889","suppressedMessages":"27890","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27891","messages":"27892","suppressedMessages":"27893","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27894","messages":"27895","suppressedMessages":"27896","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27897","messages":"27898","suppressedMessages":"27899","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27900","messages":"27901","suppressedMessages":"27902","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27903","messages":"27904","suppressedMessages":"27905","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27906","messages":"27907","suppressedMessages":"27908","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27909","messages":"27910","suppressedMessages":"27911","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27912","messages":"27913","suppressedMessages":"27914","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27915","messages":"27916","suppressedMessages":"27917","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27918","messages":"27919","suppressedMessages":"27920","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"27921","messages":"27922","suppressedMessages":"27923","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27924","messages":"27925","suppressedMessages":"27926","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27927","messages":"27928","suppressedMessages":"27929","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27930","messages":"27931","suppressedMessages":"27932","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27933","messages":"27934","suppressedMessages":"27935","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27936","messages":"27937","suppressedMessages":"27938","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27939","messages":"27940","suppressedMessages":"27941","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27942","messages":"27943","suppressedMessages":"27944","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27945","messages":"27946","suppressedMessages":"27947","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27948","messages":"27949","suppressedMessages":"27950","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27951","messages":"27952","suppressedMessages":"27953","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27954","messages":"27955","suppressedMessages":"27956","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27957","messages":"27958","suppressedMessages":"27959","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27960","messages":"27961","suppressedMessages":"27962","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27963","messages":"27964","suppressedMessages":"27965","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27966","messages":"27967","suppressedMessages":"27968","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27969","messages":"27970","suppressedMessages":"27971","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27972","messages":"27973","suppressedMessages":"27974","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27975","messages":"27976","suppressedMessages":"27977","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27978","messages":"27979","suppressedMessages":"27980","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27981","messages":"27982","suppressedMessages":"27983","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27984","messages":"27985","suppressedMessages":"27986","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27987","messages":"27988","suppressedMessages":"27989","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27990","messages":"27991","suppressedMessages":"27992","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27993","messages":"27994","suppressedMessages":"27995","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27996","messages":"27997","suppressedMessages":"27998","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"27999","messages":"28000","suppressedMessages":"28001","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28002","messages":"28003","suppressedMessages":"28004","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28005","messages":"28006","suppressedMessages":"28007","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28008","messages":"28009","suppressedMessages":"28010","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28011","messages":"28012","suppressedMessages":"28013","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28014","messages":"28015","suppressedMessages":"28016","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28017","messages":"28018","suppressedMessages":"28019","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28020","messages":"28021","suppressedMessages":"28022","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28023","messages":"28024","suppressedMessages":"28025","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28026","messages":"28027","suppressedMessages":"28028","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28029","messages":"28030","suppressedMessages":"28031","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28032","messages":"28033","suppressedMessages":"28034","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28035","messages":"28036","suppressedMessages":"28037","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28038","messages":"28039","suppressedMessages":"28040","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28041","messages":"28042","suppressedMessages":"28043","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28044","messages":"28045","suppressedMessages":"28046","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28047","messages":"28048","suppressedMessages":"28049","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28050","messages":"28051","suppressedMessages":"28052","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28053","messages":"28054","suppressedMessages":"28055","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28056","messages":"28057","suppressedMessages":"28058","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28059","messages":"28060","suppressedMessages":"28061","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28062","messages":"28063","suppressedMessages":"28064","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28065","messages":"28066","suppressedMessages":"28067","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28068","messages":"28069","suppressedMessages":"28070","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28071","messages":"28072","suppressedMessages":"28073","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28074","messages":"28075","suppressedMessages":"28076","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28077","messages":"28078","suppressedMessages":"28079","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28080","messages":"28081","suppressedMessages":"28082","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28083","messages":"28084","suppressedMessages":"28085","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28086","messages":"28087","suppressedMessages":"28088","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28089","messages":"28090","suppressedMessages":"28091","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28092","messages":"28093","suppressedMessages":"28094","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28095","messages":"28096","suppressedMessages":"28097","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28098","messages":"28099","suppressedMessages":"28100","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28101","messages":"28102","suppressedMessages":"28103","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28104","messages":"28105","suppressedMessages":"28106","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28107","messages":"28108","suppressedMessages":"28109","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28110","messages":"28111","suppressedMessages":"28112","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28113","messages":"28114","suppressedMessages":"28115","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28116","messages":"28117","suppressedMessages":"28118","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28119","messages":"28120","suppressedMessages":"28121","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28122","messages":"28123","suppressedMessages":"28124","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28125","messages":"28126","suppressedMessages":"28127","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28128","messages":"28129","suppressedMessages":"28130","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28131","messages":"28132","suppressedMessages":"28133","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28134","messages":"28135","suppressedMessages":"28136","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28137","messages":"28138","suppressedMessages":"28139","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28140","messages":"28141","suppressedMessages":"28142","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28143","messages":"28144","suppressedMessages":"28145","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28146","messages":"28147","suppressedMessages":"28148","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28149","messages":"28150","suppressedMessages":"28151","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28152","messages":"28153","suppressedMessages":"28154","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28155","messages":"28156","suppressedMessages":"28157","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28158","messages":"28159","suppressedMessages":"28160","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28161","messages":"28162","suppressedMessages":"28163","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28164","messages":"28165","suppressedMessages":"28166","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28167","messages":"28168","suppressedMessages":"28169","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28170","messages":"28171","suppressedMessages":"28172","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28173","messages":"28174","suppressedMessages":"28175","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28176","messages":"28177","suppressedMessages":"28178","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28179","messages":"28180","suppressedMessages":"28181","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28182","messages":"28183","suppressedMessages":"28184","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28185","messages":"28186","suppressedMessages":"28187","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28188","messages":"28189","suppressedMessages":"28190","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28191","messages":"28192","suppressedMessages":"28193","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28194","messages":"28195","suppressedMessages":"28196","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28197","messages":"28198","suppressedMessages":"28199","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28200","messages":"28201","suppressedMessages":"28202","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28203","messages":"28204","suppressedMessages":"28205","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28206","messages":"28207","suppressedMessages":"28208","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28209","messages":"28210","suppressedMessages":"28211","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28212","messages":"28213","suppressedMessages":"28214","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"13oux51",{"filePath":"28215","messages":"28216","suppressedMessages":"28217","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28218","messages":"28219","suppressedMessages":"28220","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28221","messages":"28222","suppressedMessages":"28223","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28224","messages":"28225","suppressedMessages":"28226","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28227","messages":"28228","suppressedMessages":"28229","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28230","messages":"28231","suppressedMessages":"28232","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28233","messages":"28234","suppressedMessages":"28235","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28236","messages":"28237","suppressedMessages":"28238","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28239","messages":"28240","suppressedMessages":"28241","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28242","messages":"28243","suppressedMessages":"28244","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28245","messages":"28246","suppressedMessages":"28247","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28248","messages":"28249","suppressedMessages":"28250","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28251","messages":"28252","suppressedMessages":"28253","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28254","messages":"28255","suppressedMessages":"28256","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28257","messages":"28258","suppressedMessages":"28259","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28260","messages":"28261","suppressedMessages":"28262","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28263","messages":"28264","suppressedMessages":"28265","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28266","messages":"28267","suppressedMessages":"28268","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28269","messages":"28270","suppressedMessages":"28271","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28272","messages":"28273","suppressedMessages":"28274","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28275","messages":"28276","suppressedMessages":"28277","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28278","messages":"28279","suppressedMessages":"28280","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28281","messages":"28282","suppressedMessages":"28283","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28284","messages":"28285","suppressedMessages":"28286","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28287","messages":"28288","suppressedMessages":"28289","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28290","messages":"28291","suppressedMessages":"28292","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28293","messages":"28294","suppressedMessages":"28295","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28296","messages":"28297","suppressedMessages":"28298","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28299","messages":"28300","suppressedMessages":"28301","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28302","messages":"28303","suppressedMessages":"28304","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28305","messages":"28306","suppressedMessages":"28307","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28308","messages":"28309","suppressedMessages":"28310","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28311","messages":"28312","suppressedMessages":"28313","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28314","messages":"28315","suppressedMessages":"28316","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28317","messages":"28318","suppressedMessages":"28319","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28320","messages":"28321","suppressedMessages":"28322","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28323","messages":"28324","suppressedMessages":"28325","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28326","messages":"28327","suppressedMessages":"28328","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28329","messages":"28330","suppressedMessages":"28331","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28332","messages":"28333","suppressedMessages":"28334","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28335","messages":"28336","suppressedMessages":"28337","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28338","messages":"28339","suppressedMessages":"28340","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28341","messages":"28342","suppressedMessages":"28343","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28344","messages":"28345","suppressedMessages":"28346","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28347","messages":"28348","suppressedMessages":"28349","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28350","messages":"28351","suppressedMessages":"28352","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28353","messages":"28354","suppressedMessages":"28355","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28356","messages":"28357","suppressedMessages":"28358","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28359","messages":"28360","suppressedMessages":"28361","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28362","messages":"28363","suppressedMessages":"28364","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28365","messages":"28366","suppressedMessages":"28367","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28368","messages":"28369","suppressedMessages":"28370","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28371","messages":"28372","suppressedMessages":"28373","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28374","messages":"28375","suppressedMessages":"28376","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28377","messages":"28378","suppressedMessages":"28379","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28380","messages":"28381","suppressedMessages":"28382","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28383","messages":"28384","suppressedMessages":"28385","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28386","messages":"28387","suppressedMessages":"28388","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28389","messages":"28390","suppressedMessages":"28391","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28392","messages":"28393","suppressedMessages":"28394","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28395","messages":"28396","suppressedMessages":"28397","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28398","messages":"28399","suppressedMessages":"28400","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28401","messages":"28402","suppressedMessages":"28403","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28404","messages":"28405","suppressedMessages":"28406","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28407","messages":"28408","suppressedMessages":"28409","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28410","messages":"28411","suppressedMessages":"28412","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28413","messages":"28414","suppressedMessages":"28415","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28416","messages":"28417","suppressedMessages":"28418","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28419","messages":"28420","suppressedMessages":"28421","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28422","messages":"28423","suppressedMessages":"28424","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28425","messages":"28426","suppressedMessages":"28427","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28428","messages":"28429","suppressedMessages":"28430","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28431","messages":"28432","suppressedMessages":"28433","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28434","messages":"28435","suppressedMessages":"28436","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28437","messages":"28438","suppressedMessages":"28439","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28440","messages":"28441","suppressedMessages":"28442","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28443","messages":"28444","suppressedMessages":"28445","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28446","messages":"28447","suppressedMessages":"28448","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28449","messages":"28450","suppressedMessages":"28451","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28452","messages":"28453","suppressedMessages":"28454","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28455","messages":"28456","suppressedMessages":"28457","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28458","messages":"28459","suppressedMessages":"28460","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28461","messages":"28462","suppressedMessages":"28463","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28464","messages":"28465","suppressedMessages":"28466","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28467","messages":"28468","suppressedMessages":"28469","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28470","messages":"28471","suppressedMessages":"28472","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28473","messages":"28474","suppressedMessages":"28475","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28476","messages":"28477","suppressedMessages":"28478","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28479","messages":"28480","suppressedMessages":"28481","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28482","messages":"28483","suppressedMessages":"28484","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28485","messages":"28486","suppressedMessages":"28487","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28488","messages":"28489","suppressedMessages":"28490","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"cz7bqe",{"filePath":"28491","messages":"28492","suppressedMessages":"28493","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28494","messages":"28495","suppressedMessages":"28496","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28497","messages":"28498","suppressedMessages":"28499","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28500","messages":"28501","suppressedMessages":"28502","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28503","messages":"28504","suppressedMessages":"28505","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28506","messages":"28507","suppressedMessages":"28508","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28509","messages":"28510","suppressedMessages":"28511","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28512","messages":"28513","suppressedMessages":"28514","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28515","messages":"28516","suppressedMessages":"28517","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28518","messages":"28519","suppressedMessages":"28520","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28521","messages":"28522","suppressedMessages":"28523","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28524","messages":"28525","suppressedMessages":"28526","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28527","messages":"28528","suppressedMessages":"28529","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28530","messages":"28531","suppressedMessages":"28532","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28533","messages":"28534","suppressedMessages":"28535","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28536","messages":"28537","suppressedMessages":"28538","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28539","messages":"28540","suppressedMessages":"28541","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28542","messages":"28543","suppressedMessages":"28544","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28545","messages":"28546","suppressedMessages":"28547","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28548","messages":"28549","suppressedMessages":"28550","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28551","messages":"28552","suppressedMessages":"28553","errorCount":17,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28554","messages":"28555","suppressedMessages":"28556","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28557","messages":"28558","suppressedMessages":"28559","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28560","messages":"28561","suppressedMessages":"28562","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28563","messages":"28564","suppressedMessages":"28565","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28566","messages":"28567","suppressedMessages":"28568","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28569","messages":"28570","suppressedMessages":"28571","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28572","messages":"28573","suppressedMessages":"28574","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28575","messages":"28576","suppressedMessages":"28577","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28578","messages":"28579","suppressedMessages":"28580","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28581","messages":"28582","suppressedMessages":"28583","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28584","messages":"28585","suppressedMessages":"28586","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28587","messages":"28588","suppressedMessages":"28589","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28590","messages":"28591","suppressedMessages":"28592","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28593","messages":"28594","suppressedMessages":"28595","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28596","messages":"28597","suppressedMessages":"28598","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28599","messages":"28600","suppressedMessages":"28601","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28602","messages":"28603","suppressedMessages":"28604","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28605","messages":"28606","suppressedMessages":"28607","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28608","messages":"28609","suppressedMessages":"28610","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28611","messages":"28612","suppressedMessages":"28613","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28614","messages":"28615","suppressedMessages":"28616","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28617","messages":"28618","suppressedMessages":"28619","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28620","messages":"28621","suppressedMessages":"28622","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28623","messages":"28624","suppressedMessages":"28625","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28626","messages":"28627","suppressedMessages":"28628","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28629","messages":"28630","suppressedMessages":"28631","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28632","messages":"28633","suppressedMessages":"28634","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28635","messages":"28636","suppressedMessages":"28637","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28638","messages":"28639","suppressedMessages":"28640","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28641","messages":"28642","suppressedMessages":"28643","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28644","messages":"28645","suppressedMessages":"28646","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1q4d2bs",{"filePath":"28647","messages":"28648","suppressedMessages":"28649","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28650","messages":"28651","suppressedMessages":"28652","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28653","messages":"28654","suppressedMessages":"28655","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28656","messages":"28657","suppressedMessages":"28658","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28659","messages":"28660","suppressedMessages":"28661","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28662","messages":"28663","suppressedMessages":"28664","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28665","messages":"28666","suppressedMessages":"28667","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28668","messages":"28669","suppressedMessages":"28670","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28671","messages":"28672","suppressedMessages":"28673","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28674","messages":"28675","suppressedMessages":"28676","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28677","messages":"28678","suppressedMessages":"28679","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28680","messages":"28681","suppressedMessages":"28682","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28683","messages":"28684","suppressedMessages":"28685","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28686","messages":"28687","suppressedMessages":"28688","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28689","messages":"28690","suppressedMessages":"28691","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28692","messages":"28693","suppressedMessages":"28694","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28695","messages":"28696","suppressedMessages":"28697","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28698","messages":"28699","suppressedMessages":"28700","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28701","messages":"28702","suppressedMessages":"28703","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28704","messages":"28705","suppressedMessages":"28706","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28707","messages":"28708","suppressedMessages":"28709","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28710","messages":"28711","suppressedMessages":"28712","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28713","messages":"28714","suppressedMessages":"28715","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28716","messages":"28717","suppressedMessages":"28718","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28719","messages":"28720","suppressedMessages":"28721","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28722","messages":"28723","suppressedMessages":"28724","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28725","messages":"28726","suppressedMessages":"28727","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28728","messages":"28729","suppressedMessages":"28730","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28731","messages":"28732","suppressedMessages":"28733","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28734","messages":"28735","suppressedMessages":"28736","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28737","messages":"28738","suppressedMessages":"28739","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28740","messages":"28741","suppressedMessages":"28742","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28743","messages":"28744","suppressedMessages":"28745","errorCount":23,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28746","messages":"28747","suppressedMessages":"28748","errorCount":39,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28749","messages":"28750","suppressedMessages":"28751","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28752","messages":"28753","suppressedMessages":"28754","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28755","messages":"28756","suppressedMessages":"28757","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28758","messages":"28759","suppressedMessages":"28760","errorCount":20,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28761","messages":"28762","suppressedMessages":"28763","errorCount":9,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28764","messages":"28765","suppressedMessages":"28766","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28767","messages":"28768","suppressedMessages":"28769","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28770","messages":"28771","suppressedMessages":"28772","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28773","messages":"28774","suppressedMessages":"28775","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28776","messages":"28777","suppressedMessages":"28778","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28779","messages":"28780","suppressedMessages":"28781","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28782","messages":"28783","suppressedMessages":"28784","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28785","messages":"28786","suppressedMessages":"28787","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28788","messages":"28789","suppressedMessages":"28790","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28791","messages":"28792","suppressedMessages":"28793","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28794","messages":"28795","suppressedMessages":"28796","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28797","messages":"28798","suppressedMessages":"28799","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28800","messages":"28801","suppressedMessages":"28802","errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28803","messages":"28804","suppressedMessages":"28805","errorCount":22,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28806","messages":"28807","suppressedMessages":"28808","errorCount":29,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28809","messages":"28810","suppressedMessages":"28811","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28812","messages":"28813","suppressedMessages":"28814","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28815","messages":"28816","suppressedMessages":"28817","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28818","messages":"28819","suppressedMessages":"28820","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28821","messages":"28822","suppressedMessages":"28823","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28824","messages":"28825","suppressedMessages":"28826","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28827","messages":"28828","suppressedMessages":"28829","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28830","messages":"28831","suppressedMessages":"28832","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28833","messages":"28834","suppressedMessages":"28835","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28836","messages":"28837","suppressedMessages":"28838","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28839","messages":"28840","suppressedMessages":"28841","errorCount":19,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28842","messages":"28843","suppressedMessages":"28844","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28845","messages":"28846","suppressedMessages":"28847","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28848","messages":"28849","suppressedMessages":"28850","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28851","messages":"28852","suppressedMessages":"28853","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28854","messages":"28855","suppressedMessages":"28856","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28857","messages":"28858","suppressedMessages":"28859","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28860","messages":"28861","suppressedMessages":"28862","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28863","messages":"28864","suppressedMessages":"28865","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28866","messages":"28867","suppressedMessages":"28868","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28869","messages":"28870","suppressedMessages":"28871","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28872","messages":"28873","suppressedMessages":"28874","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28875","messages":"28876","suppressedMessages":"28877","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28878","messages":"28879","suppressedMessages":"28880","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28881","messages":"28882","suppressedMessages":"28883","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28884","messages":"28885","suppressedMessages":"28886","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28887","messages":"28888","suppressedMessages":"28889","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28890","messages":"28891","suppressedMessages":"28892","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28893","messages":"28894","suppressedMessages":"28895","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28896","messages":"28897","suppressedMessages":"28898","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28899","messages":"28900","suppressedMessages":"28901","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28902","messages":"28903","suppressedMessages":"28904","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28905","messages":"28906","suppressedMessages":"28907","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28908","messages":"28909","suppressedMessages":"28910","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28911","messages":"28912","suppressedMessages":"28913","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28914","messages":"28915","suppressedMessages":"28916","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28917","messages":"28918","suppressedMessages":"28919","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28920","messages":"28921","suppressedMessages":"28922","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28923","messages":"28924","suppressedMessages":"28925","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28926","messages":"28927","suppressedMessages":"28928","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28929","messages":"28930","suppressedMessages":"28931","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28932","messages":"28933","suppressedMessages":"28934","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28935","messages":"28936","suppressedMessages":"28937","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28938","messages":"28939","suppressedMessages":"28940","errorCount":13,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28941","messages":"28942","suppressedMessages":"28943","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28944","messages":"28945","suppressedMessages":"28946","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28947","messages":"28948","suppressedMessages":"28949","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28950","messages":"28951","suppressedMessages":"28952","errorCount":12,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28953","messages":"28954","suppressedMessages":"28955","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28956","messages":"28957","suppressedMessages":"28958","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28959","messages":"28960","suppressedMessages":"28961","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28962","messages":"28963","suppressedMessages":"28964","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28965","messages":"28966","suppressedMessages":"28967","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28968","messages":"28969","suppressedMessages":"28970","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28971","messages":"28972","suppressedMessages":"28973","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28974","messages":"28975","suppressedMessages":"28976","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28977","messages":"28978","suppressedMessages":"28979","errorCount":9,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28980","messages":"28981","suppressedMessages":"28982","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28983","messages":"28984","suppressedMessages":"28985","errorCount":9,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28986","messages":"28987","suppressedMessages":"28988","errorCount":19,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"28989","messages":"28990","suppressedMessages":"28991","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28992","messages":"28993","suppressedMessages":"28994","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28995","messages":"28996","suppressedMessages":"28997","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28998","messages":"28999","suppressedMessages":"29000","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29001","messages":"29002","suppressedMessages":"29003","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29004","messages":"29005","suppressedMessages":"29006","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29007","messages":"29008","suppressedMessages":"29009","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29010","messages":"29011","suppressedMessages":"29012","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29013","messages":"29014","suppressedMessages":"29015","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29016","messages":"29017","suppressedMessages":"29018","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29019","messages":"29020","suppressedMessages":"29021","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29022","messages":"29023","suppressedMessages":"29024","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29025","messages":"29026","suppressedMessages":"29027","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29028","messages":"29029","suppressedMessages":"29030","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29031","messages":"29032","suppressedMessages":"29033","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29034","messages":"29035","suppressedMessages":"29036","errorCount":14,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29037","messages":"29038","suppressedMessages":"29039","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29040","messages":"29041","suppressedMessages":"29042","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29043","messages":"29044","suppressedMessages":"29045","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29046","messages":"29047","suppressedMessages":"29048","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29049","messages":"29050","suppressedMessages":"29051","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29052","messages":"29053","suppressedMessages":"29054","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29055","messages":"29056","suppressedMessages":"29057","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29058","messages":"29059","suppressedMessages":"29060","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29061","messages":"29062","suppressedMessages":"29063","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29064","messages":"29065","suppressedMessages":"29066","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29067","messages":"29068","suppressedMessages":"29069","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29070","messages":"29071","suppressedMessages":"29072","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29073","messages":"29074","suppressedMessages":"29075","errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29076","messages":"29077","suppressedMessages":"29078","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29079","messages":"29080","suppressedMessages":"29081","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29082","messages":"29083","suppressedMessages":"29084","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29085","messages":"29086","suppressedMessages":"29087","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29088","messages":"29089","suppressedMessages":"29090","errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29091","messages":"29092","suppressedMessages":"29093","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29094","messages":"29095","suppressedMessages":"29096","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29097","messages":"29098","suppressedMessages":"29099","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29100","messages":"29101","suppressedMessages":"29102","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29103","messages":"29104","suppressedMessages":"29105","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29106","messages":"29107","suppressedMessages":"29108","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29109","messages":"29110","suppressedMessages":"29111","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29112","messages":"29113","suppressedMessages":"29114","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29115","messages":"29116","suppressedMessages":"29117","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29118","messages":"29119","suppressedMessages":"29120","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29121","messages":"29122","suppressedMessages":"29123","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29124","messages":"29125","suppressedMessages":"29126","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29127","messages":"29128","suppressedMessages":"29129","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29130","messages":"29131","suppressedMessages":"29132","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29133","messages":"29134","suppressedMessages":"29135","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29136","messages":"29137","suppressedMessages":"29138","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29139","messages":"29140","suppressedMessages":"29141","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29142","messages":"29143","suppressedMessages":"29144","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29145","messages":"29146","suppressedMessages":"29147","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29148","messages":"29149","suppressedMessages":"29150","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29151","messages":"29152","suppressedMessages":"29153","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29154","messages":"29155","suppressedMessages":"29156","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29157","messages":"29158","suppressedMessages":"29159","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29160","messages":"29161","suppressedMessages":"29162","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29163","messages":"29164","suppressedMessages":"29165","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29166","messages":"29167","suppressedMessages":"29168","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29169","messages":"29170","suppressedMessages":"29171","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29172","messages":"29173","suppressedMessages":"29174","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29175","messages":"29176","suppressedMessages":"29177","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29178","messages":"29179","suppressedMessages":"29180","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29181","messages":"29182","suppressedMessages":"29183","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29184","messages":"29185","suppressedMessages":"29186","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29187","messages":"29188","suppressedMessages":"29189","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29190","messages":"29191","suppressedMessages":"29192","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29193","messages":"29194","suppressedMessages":"29195","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29196","messages":"29197","suppressedMessages":"29198","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29199","messages":"29200","suppressedMessages":"29201","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29202","messages":"29203","suppressedMessages":"29204","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29205","messages":"29206","suppressedMessages":"29207","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29208","messages":"29209","suppressedMessages":"29210","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29211","messages":"29212","suppressedMessages":"29213","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29214","messages":"29215","suppressedMessages":"29216","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29217","messages":"29218","suppressedMessages":"29219","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29220","messages":"29221","suppressedMessages":"29222","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29223","messages":"29224","suppressedMessages":"29225","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29226","messages":"29227","suppressedMessages":"29228","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29229","messages":"29230","suppressedMessages":"29231","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29232","messages":"29233","suppressedMessages":"29234","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29235","messages":"29236","suppressedMessages":"29237","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29238","messages":"29239","suppressedMessages":"29240","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29241","messages":"29242","suppressedMessages":"29243","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29244","messages":"29245","suppressedMessages":"29246","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29247","messages":"29248","suppressedMessages":"29249","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29250","messages":"29251","suppressedMessages":"29252","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29253","messages":"29254","suppressedMessages":"29255","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29256","messages":"29257","suppressedMessages":"29258","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29259","messages":"29260","suppressedMessages":"29261","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29262","messages":"29263","suppressedMessages":"29264","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29265","messages":"29266","suppressedMessages":"29267","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29268","messages":"29269","suppressedMessages":"29270","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29271","messages":"29272","suppressedMessages":"29273","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29274","messages":"29275","suppressedMessages":"29276","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29277","messages":"29278","suppressedMessages":"29279","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29280","messages":"29281","suppressedMessages":"29282","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29283","messages":"29284","suppressedMessages":"29285","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29286","messages":"29287","suppressedMessages":"29288","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29289","messages":"29290","suppressedMessages":"29291","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29292","messages":"29293","suppressedMessages":"29294","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29295","messages":"29296","suppressedMessages":"29297","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29298","messages":"29299","suppressedMessages":"29300","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29301","messages":"29302","suppressedMessages":"29303","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29304","messages":"29305","suppressedMessages":"29306","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29307","messages":"29308","suppressedMessages":"29309","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29310","messages":"29311","suppressedMessages":"29312","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29313","messages":"29314","suppressedMessages":"29315","errorCount":11,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29316","messages":"29317","suppressedMessages":"29318","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29319","messages":"29320","suppressedMessages":"29321","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29322","messages":"29323","suppressedMessages":"29324","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29325","messages":"29326","suppressedMessages":"29327","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29328","messages":"29329","suppressedMessages":"29330","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29331","messages":"29332","suppressedMessages":"29333","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29334","messages":"29335","suppressedMessages":"29336","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29337","messages":"29338","suppressedMessages":"29339","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29340","messages":"29341","suppressedMessages":"29342","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29343","messages":"29344","suppressedMessages":"29345","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29346","messages":"29347","suppressedMessages":"29348","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29349","messages":"29350","suppressedMessages":"29351","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29352","messages":"29353","suppressedMessages":"29354","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29355","messages":"29356","suppressedMessages":"29357","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29358","messages":"29359","suppressedMessages":"29360","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29361","messages":"29362","suppressedMessages":"29363","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29364","messages":"29365","suppressedMessages":"29366","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29367","messages":"29368","suppressedMessages":"29369","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29370","messages":"29371","suppressedMessages":"29372","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29373","messages":"29374","suppressedMessages":"29375","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29376","messages":"29377","suppressedMessages":"29378","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29379","messages":"29380","suppressedMessages":"29381","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29382","messages":"29383","suppressedMessages":"29384","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29385","messages":"29386","suppressedMessages":"29387","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29388","messages":"29389","suppressedMessages":"29390","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29391","messages":"29392","suppressedMessages":"29393","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29394","messages":"29395","suppressedMessages":"29396","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29397","messages":"29398","suppressedMessages":"29399","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29400","messages":"29401","suppressedMessages":"29402","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29403","messages":"29404","suppressedMessages":"29405","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29406","messages":"29407","suppressedMessages":"29408","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29409","messages":"29410","suppressedMessages":"29411","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29412","messages":"29413","suppressedMessages":"29414","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29415","messages":"29416","suppressedMessages":"29417","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29418","messages":"29419","suppressedMessages":"29420","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29421","messages":"29422","suppressedMessages":"29423","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29424","messages":"29425","suppressedMessages":"29426","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29427","messages":"29428","suppressedMessages":"29429","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29430","messages":"29431","suppressedMessages":"29432","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29433","messages":"29434","suppressedMessages":"29435","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29436","messages":"29437","suppressedMessages":"29438","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29439","messages":"29440","suppressedMessages":"29441","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29442","messages":"29443","suppressedMessages":"29444","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29445","messages":"29446","suppressedMessages":"29447","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29448","messages":"29449","suppressedMessages":"29450","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29451","messages":"29452","suppressedMessages":"29453","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29454","messages":"29455","suppressedMessages":"29456","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29457","messages":"29458","suppressedMessages":"29459","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29460","messages":"29461","suppressedMessages":"29462","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29463","messages":"29464","suppressedMessages":"29465","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29466","messages":"29467","suppressedMessages":"29468","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29469","messages":"29470","suppressedMessages":"29471","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29472","messages":"29473","suppressedMessages":"29474","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29475","messages":"29476","suppressedMessages":"29477","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29478","messages":"29479","suppressedMessages":"29480","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29481","messages":"29482","suppressedMessages":"29483","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29484","messages":"29485","suppressedMessages":"29486","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29487","messages":"29488","suppressedMessages":"29489","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29490","messages":"29491","suppressedMessages":"29492","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29493","messages":"29494","suppressedMessages":"29495","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29496","messages":"29497","suppressedMessages":"29498","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29499","messages":"29500","suppressedMessages":"29501","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29502","messages":"29503","suppressedMessages":"29504","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29505","messages":"29506","suppressedMessages":"29507","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29508","messages":"29509","suppressedMessages":"29510","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29511","messages":"29512","suppressedMessages":"29513","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29514","messages":"29515","suppressedMessages":"29516","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29517","messages":"29518","suppressedMessages":"29519","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29520","messages":"29521","suppressedMessages":"29522","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29523","messages":"29524","suppressedMessages":"29525","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29526","messages":"29527","suppressedMessages":"29528","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29529","messages":"29530","suppressedMessages":"29531","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29532","messages":"29533","suppressedMessages":"29534","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29535","messages":"29536","suppressedMessages":"29537","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29538","messages":"29539","suppressedMessages":"29540","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29541","messages":"29542","suppressedMessages":"29543","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29544","messages":"29545","suppressedMessages":"29546","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29547","messages":"29548","suppressedMessages":"29549","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29550","messages":"29551","suppressedMessages":"29552","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29553","messages":"29554","suppressedMessages":"29555","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29556","messages":"29557","suppressedMessages":"29558","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29559","messages":"29560","suppressedMessages":"29561","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29562","messages":"29563","suppressedMessages":"29564","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29565","messages":"29566","suppressedMessages":"29567","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29568","messages":"29569","suppressedMessages":"29570","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29571","messages":"29572","suppressedMessages":"29573","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29574","messages":"29575","suppressedMessages":"29576","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29577","messages":"29578","suppressedMessages":"29579","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29580","messages":"29581","suppressedMessages":"29582","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29583","messages":"29584","suppressedMessages":"29585","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29586","messages":"29587","suppressedMessages":"29588","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29589","messages":"29590","suppressedMessages":"29591","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29592","messages":"29593","suppressedMessages":"29594","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29595","messages":"29596","suppressedMessages":"29597","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29598","messages":"29599","suppressedMessages":"29600","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29601","messages":"29602","suppressedMessages":"29603","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29604","messages":"29605","suppressedMessages":"29606","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29607","messages":"29608","suppressedMessages":"29609","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29610","messages":"29611","suppressedMessages":"29612","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29613","messages":"29614","suppressedMessages":"29615","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29616","messages":"29617","suppressedMessages":"29618","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29619","messages":"29620","suppressedMessages":"29621","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29622","messages":"29623","suppressedMessages":"29624","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29625","messages":"29626","suppressedMessages":"29627","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29628","messages":"29629","suppressedMessages":"29630","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29631","messages":"29632","suppressedMessages":"29633","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29634","messages":"29635","suppressedMessages":"29636","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29637","messages":"29638","suppressedMessages":"29639","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29640","messages":"29641","suppressedMessages":"29642","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29643","messages":"29644","suppressedMessages":"29645","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29646","messages":"29647","suppressedMessages":"29648","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29649","messages":"29650","suppressedMessages":"29651","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29652","messages":"29653","suppressedMessages":"29654","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29655","messages":"29656","suppressedMessages":"29657","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29658","messages":"29659","suppressedMessages":"29660","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29661","messages":"29662","suppressedMessages":"29663","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29664","messages":"29665","suppressedMessages":"29666","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29667","messages":"29668","suppressedMessages":"29669","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29670","messages":"29671","suppressedMessages":"29672","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29673","messages":"29674","suppressedMessages":"29675","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29676","messages":"29677","suppressedMessages":"29678","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29679","messages":"29680","suppressedMessages":"29681","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29682","messages":"29683","suppressedMessages":"29684","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29685","messages":"29686","suppressedMessages":"29687","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29688","messages":"29689","suppressedMessages":"29690","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29691","messages":"29692","suppressedMessages":"29693","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29694","messages":"29695","suppressedMessages":"29696","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29697","messages":"29698","suppressedMessages":"29699","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29700","messages":"29701","suppressedMessages":"29702","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29703","messages":"29704","suppressedMessages":"29705","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29706","messages":"29707","suppressedMessages":"29708","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29709","messages":"29710","suppressedMessages":"29711","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29712","messages":"29713","suppressedMessages":"29714","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29715","messages":"29716","suppressedMessages":"29717","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29718","messages":"29719","suppressedMessages":"29720","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29721","messages":"29722","suppressedMessages":"29723","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29724","messages":"29725","suppressedMessages":"29726","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29727","messages":"29728","suppressedMessages":"29729","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29730","messages":"29731","suppressedMessages":"29732","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29733","messages":"29734","suppressedMessages":"29735","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29736","messages":"29737","suppressedMessages":"29738","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29739","messages":"29740","suppressedMessages":"29741","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29742","messages":"29743","suppressedMessages":"29744","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29745","messages":"29746","suppressedMessages":"29747","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29748","messages":"29749","suppressedMessages":"29750","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29751","messages":"29752","suppressedMessages":"29753","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29754","messages":"29755","suppressedMessages":"29756","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29757","messages":"29758","suppressedMessages":"29759","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29760","messages":"29761","suppressedMessages":"29762","errorCount":8,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29763","messages":"29764","suppressedMessages":"29765","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29766","messages":"29767","suppressedMessages":"29768","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29769","messages":"29770","suppressedMessages":"29771","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29772","messages":"29773","suppressedMessages":"29774","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29775","messages":"29776","suppressedMessages":"29777","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29778","messages":"29779","suppressedMessages":"29780","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29781","messages":"29782","suppressedMessages":"29783","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29784","messages":"29785","suppressedMessages":"29786","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29787","messages":"29788","suppressedMessages":"29789","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29790","messages":"29791","suppressedMessages":"29792","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29793","messages":"29794","suppressedMessages":"29795","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29796","messages":"29797","suppressedMessages":"29798","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29799","messages":"29800","suppressedMessages":"29801","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29802","messages":"29803","suppressedMessages":"29804","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29805","messages":"29806","suppressedMessages":"29807","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29808","messages":"29809","suppressedMessages":"29810","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29811","messages":"29812","suppressedMessages":"29813","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29814","messages":"29815","suppressedMessages":"29816","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29817","messages":"29818","suppressedMessages":"29819","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29820","messages":"29821","suppressedMessages":"29822","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29823","messages":"29824","suppressedMessages":"29825","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29826","messages":"29827","suppressedMessages":"29828","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29829","messages":"29830","suppressedMessages":"29831","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29832","messages":"29833","suppressedMessages":"29834","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29835","messages":"29836","suppressedMessages":"29837","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29838","messages":"29839","suppressedMessages":"29840","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29841","messages":"29842","suppressedMessages":"29843","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29844","messages":"29845","suppressedMessages":"29846","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29847","messages":"29848","suppressedMessages":"29849","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29850","messages":"29851","suppressedMessages":"29852","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29853","messages":"29854","suppressedMessages":"29855","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29856","messages":"29857","suppressedMessages":"29858","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29859","messages":"29860","suppressedMessages":"29861","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29862","messages":"29863","suppressedMessages":"29864","errorCount":9,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29865","messages":"29866","suppressedMessages":"29867","errorCount":9,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29868","messages":"29869","suppressedMessages":"29870","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29871","messages":"29872","suppressedMessages":"29873","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29874","messages":"29875","suppressedMessages":"29876","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29877","messages":"29878","suppressedMessages":"29879","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29880","messages":"29881","suppressedMessages":"29882","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29883","messages":"29884","suppressedMessages":"29885","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29886","messages":"29887","suppressedMessages":"29888","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29889","messages":"29890","suppressedMessages":"29891","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29892","messages":"29893","suppressedMessages":"29894","errorCount":9,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29895","messages":"29896","suppressedMessages":"29897","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29898","messages":"29899","suppressedMessages":"29900","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29901","messages":"29902","suppressedMessages":"29903","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29904","messages":"29905","suppressedMessages":"29906","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29907","messages":"29908","suppressedMessages":"29909","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29910","messages":"29911","suppressedMessages":"29912","errorCount":11,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29913","messages":"29914","suppressedMessages":"29915","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29916","messages":"29917","suppressedMessages":"29918","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29919","messages":"29920","suppressedMessages":"29921","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29922","messages":"29923","suppressedMessages":"29924","errorCount":11,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29925","messages":"29926","suppressedMessages":"29927","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29928","messages":"29929","suppressedMessages":"29930","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29931","messages":"29932","suppressedMessages":"29933","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29934","messages":"29935","suppressedMessages":"29936","errorCount":15,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29937","messages":"29938","suppressedMessages":"29939","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29940","messages":"29941","suppressedMessages":"29942","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29943","messages":"29944","suppressedMessages":"29945","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29946","messages":"29947","suppressedMessages":"29948","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29949","messages":"29950","suppressedMessages":"29951","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29952","messages":"29953","suppressedMessages":"29954","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29955","messages":"29956","suppressedMessages":"29957","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29958","messages":"29959","suppressedMessages":"29960","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29961","messages":"29962","suppressedMessages":"29963","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29964","messages":"29965","suppressedMessages":"29966","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29967","messages":"29968","suppressedMessages":"29969","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29970","messages":"29971","suppressedMessages":"29972","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29973","messages":"29974","suppressedMessages":"29975","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29976","messages":"29977","suppressedMessages":"29978","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29979","messages":"29980","suppressedMessages":"29981","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29982","messages":"29983","suppressedMessages":"29984","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29985","messages":"29986","suppressedMessages":"29987","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29988","messages":"29989","suppressedMessages":"29990","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29991","messages":"29992","suppressedMessages":"29993","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29994","messages":"29995","suppressedMessages":"29996","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29997","messages":"29998","suppressedMessages":"29999","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30000","messages":"30001","suppressedMessages":"30002","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30003","messages":"30004","suppressedMessages":"30005","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30006","messages":"30007","suppressedMessages":"30008","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30009","messages":"30010","suppressedMessages":"30011","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30012","messages":"30013","suppressedMessages":"30014","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30015","messages":"30016","suppressedMessages":"30017","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30018","messages":"30019","suppressedMessages":"30020","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30021","messages":"30022","suppressedMessages":"30023","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30024","messages":"30025","suppressedMessages":"30026","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30027","messages":"30028","suppressedMessages":"30029","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30030","messages":"30031","suppressedMessages":"30032","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30033","messages":"30034","suppressedMessages":"30035","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30036","messages":"30037","suppressedMessages":"30038","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30039","messages":"30040","suppressedMessages":"30041","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30042","messages":"30043","suppressedMessages":"30044","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30045","messages":"30046","suppressedMessages":"30047","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30048","messages":"30049","suppressedMessages":"30050","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30051","messages":"30052","suppressedMessages":"30053","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30054","messages":"30055","suppressedMessages":"30056","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30057","messages":"30058","suppressedMessages":"30059","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30060","messages":"30061","suppressedMessages":"30062","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30063","messages":"30064","suppressedMessages":"30065","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30066","messages":"30067","suppressedMessages":"30068","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30069","messages":"30070","suppressedMessages":"30071","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30072","messages":"30073","suppressedMessages":"30074","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30075","messages":"30076","suppressedMessages":"30077","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30078","messages":"30079","suppressedMessages":"30080","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30081","messages":"30082","suppressedMessages":"30083","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30084","messages":"30085","suppressedMessages":"30086","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30087","messages":"30088","suppressedMessages":"30089","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30090","messages":"30091","suppressedMessages":"30092","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30093","messages":"30094","suppressedMessages":"30095","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30096","messages":"30097","suppressedMessages":"30098","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30099","messages":"30100","suppressedMessages":"30101","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30102","messages":"30103","suppressedMessages":"30104","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30105","messages":"30106","suppressedMessages":"30107","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30108","messages":"30109","suppressedMessages":"30110","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30111","messages":"30112","suppressedMessages":"30113","errorCount":21,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30114","messages":"30115","suppressedMessages":"30116","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30117","messages":"30118","suppressedMessages":"30119","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30120","messages":"30121","suppressedMessages":"30122","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30123","messages":"30124","suppressedMessages":"30125","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30126","messages":"30127","suppressedMessages":"30128","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30129","messages":"30130","suppressedMessages":"30131","errorCount":48,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30132","messages":"30133","suppressedMessages":"30134","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30135","messages":"30136","suppressedMessages":"30137","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30138","messages":"30139","suppressedMessages":"30140","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30141","messages":"30142","suppressedMessages":"30143","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30144","messages":"30145","suppressedMessages":"30146","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30147","messages":"30148","suppressedMessages":"30149","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30150","messages":"30151","suppressedMessages":"30152","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30153","messages":"30154","suppressedMessages":"30155","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30156","messages":"30157","suppressedMessages":"30158","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30159","messages":"30160","suppressedMessages":"30161","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30162","messages":"30163","suppressedMessages":"30164","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30165","messages":"30166","suppressedMessages":"30167","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30168","messages":"30169","suppressedMessages":"30170","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30171","messages":"30172","suppressedMessages":"30173","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30174","messages":"30175","suppressedMessages":"30176","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30177","messages":"30178","suppressedMessages":"30179","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30180","messages":"30181","suppressedMessages":"30182","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30183","messages":"30184","suppressedMessages":"30185","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30186","messages":"30187","suppressedMessages":"30188","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30189","messages":"30190","suppressedMessages":"30191","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30192","messages":"30193","suppressedMessages":"30194","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30195","messages":"30196","suppressedMessages":"30197","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30198","messages":"30199","suppressedMessages":"30200","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30201","messages":"30202","suppressedMessages":"30203","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30204","messages":"30205","suppressedMessages":"30206","errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30207","messages":"30208","suppressedMessages":"30209","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30210","messages":"30211","suppressedMessages":"30212","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30213","messages":"30214","suppressedMessages":"30215","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30216","messages":"30217","suppressedMessages":"30218","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30219","messages":"30220","suppressedMessages":"30221","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30222","messages":"30223","suppressedMessages":"30224","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30225","messages":"30226","suppressedMessages":"30227","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30228","messages":"30229","suppressedMessages":"30230","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30231","messages":"30232","suppressedMessages":"30233","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30234","messages":"30235","suppressedMessages":"30236","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30237","messages":"30238","suppressedMessages":"30239","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30240","messages":"30241","suppressedMessages":"30242","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30243","messages":"30244","suppressedMessages":"30245","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30246","messages":"30247","suppressedMessages":"30248","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30249","messages":"30250","suppressedMessages":"30251","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30252","messages":"30253","suppressedMessages":"30254","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30255","messages":"30256","suppressedMessages":"30257","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30258","messages":"30259","suppressedMessages":"30260","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30261","messages":"30262","suppressedMessages":"30263","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30264","messages":"30265","suppressedMessages":"30266","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30267","messages":"30268","suppressedMessages":"30269","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30270","messages":"30271","suppressedMessages":"30272","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30273","messages":"30274","suppressedMessages":"30275","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30276","messages":"30277","suppressedMessages":"30278","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30279","messages":"30280","suppressedMessages":"30281","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30282","messages":"30283","suppressedMessages":"30284","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30285","messages":"30286","suppressedMessages":"30287","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30288","messages":"30289","suppressedMessages":"30290","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30291","messages":"30292","suppressedMessages":"30293","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30294","messages":"30295","suppressedMessages":"30296","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30297","messages":"30298","suppressedMessages":"30299","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30300","messages":"30301","suppressedMessages":"30302","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30303","messages":"30304","suppressedMessages":"30305","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30306","messages":"30307","suppressedMessages":"30308","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30309","messages":"30310","suppressedMessages":"30311","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30312","messages":"30313","suppressedMessages":"30314","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30315","messages":"30316","suppressedMessages":"30317","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30318","messages":"30319","suppressedMessages":"30320","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30321","messages":"30322","suppressedMessages":"30323","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30324","messages":"30325","suppressedMessages":"30326","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30327","messages":"30328","suppressedMessages":"30329","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30330","messages":"30331","suppressedMessages":"30332","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30333","messages":"30334","suppressedMessages":"30335","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30336","messages":"30337","suppressedMessages":"30338","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30339","messages":"30340","suppressedMessages":"30341","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30342","messages":"30343","suppressedMessages":"30344","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30345","messages":"30346","suppressedMessages":"30347","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30348","messages":"30349","suppressedMessages":"30350","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30351","messages":"30352","suppressedMessages":"30353","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30354","messages":"30355","suppressedMessages":"30356","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30357","messages":"30358","suppressedMessages":"30359","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30360","messages":"30361","suppressedMessages":"30362","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30363","messages":"30364","suppressedMessages":"30365","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30366","messages":"30367","suppressedMessages":"30368","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30369","messages":"30370","suppressedMessages":"30371","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30372","messages":"30373","suppressedMessages":"30374","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30375","messages":"30376","suppressedMessages":"30377","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30378","messages":"30379","suppressedMessages":"30380","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30381","messages":"30382","suppressedMessages":"30383","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30384","messages":"30385","suppressedMessages":"30386","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30387","messages":"30388","suppressedMessages":"30389","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30390","messages":"30391","suppressedMessages":"30392","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30393","messages":"30394","suppressedMessages":"30395","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30396","messages":"30397","suppressedMessages":"30398","errorCount":43,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30399","messages":"30400","suppressedMessages":"30401","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30402","messages":"30403","suppressedMessages":"30404","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30405","messages":"30406","suppressedMessages":"30407","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30408","messages":"30409","suppressedMessages":"30410","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30411","messages":"30412","suppressedMessages":"30413","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30414","messages":"30415","suppressedMessages":"30416","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30417","messages":"30418","suppressedMessages":"30419","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30420","messages":"30421","suppressedMessages":"30422","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30423","messages":"30424","suppressedMessages":"30425","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30426","messages":"30427","suppressedMessages":"30428","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30429","messages":"30430","suppressedMessages":"30431","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30432","messages":"30433","suppressedMessages":"30434","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30435","messages":"30436","suppressedMessages":"30437","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30438","messages":"30439","suppressedMessages":"30440","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30441","messages":"30442","suppressedMessages":"30443","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30444","messages":"30445","suppressedMessages":"30446","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30447","messages":"30448","suppressedMessages":"30449","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30450","messages":"30451","suppressedMessages":"30452","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30453","messages":"30454","suppressedMessages":"30455","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30456","messages":"30457","suppressedMessages":"30458","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30459","messages":"30460","suppressedMessages":"30461","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30462","messages":"30463","suppressedMessages":"30464","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30465","messages":"30466","suppressedMessages":"30467","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30468","messages":"30469","suppressedMessages":"30470","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30471","messages":"30472","suppressedMessages":"30473","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30474","messages":"30475","suppressedMessages":"30476","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30477","messages":"30478","suppressedMessages":"30479","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30480","messages":"30481","suppressedMessages":"30482","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30483","messages":"30484","suppressedMessages":"30485","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30486","messages":"30487","suppressedMessages":"30488","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30489","messages":"30490","suppressedMessages":"30491","errorCount":31,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30492","messages":"30493","suppressedMessages":"30494","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30495","messages":"30496","suppressedMessages":"30497","errorCount":37,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30498","messages":"30499","suppressedMessages":"30500","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30501","messages":"30502","suppressedMessages":"30503","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30504","messages":"30505","suppressedMessages":"30506","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30507","messages":"30508","suppressedMessages":"30509","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30510","messages":"30511","suppressedMessages":"30512","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30513","messages":"30514","suppressedMessages":"30515","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30516","messages":"30517","suppressedMessages":"30518","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30519","messages":"30520","suppressedMessages":"30521","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30522","messages":"30523","suppressedMessages":"30524","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30525","messages":"30526","suppressedMessages":"30527","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30528","messages":"30529","suppressedMessages":"30530","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30531","messages":"30532","suppressedMessages":"30533","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30534","messages":"30535","suppressedMessages":"30536","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30537","messages":"30538","suppressedMessages":"30539","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30540","messages":"30541","suppressedMessages":"30542","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30543","messages":"30544","suppressedMessages":"30545","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30546","messages":"30547","suppressedMessages":"30548","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30549","messages":"30550","suppressedMessages":"30551","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30552","messages":"30553","suppressedMessages":"30554","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30555","messages":"30556","suppressedMessages":"30557","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30558","messages":"30559","suppressedMessages":"30560","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30561","messages":"30562","suppressedMessages":"30563","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30564","messages":"30565","suppressedMessages":"30566","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30567","messages":"30568","suppressedMessages":"30569","errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30570","messages":"30571","suppressedMessages":"30572","errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30573","messages":"30574","suppressedMessages":"30575","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30576","messages":"30577","suppressedMessages":"30578","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30579","messages":"30580","suppressedMessages":"30581","errorCount":13,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30582","messages":"30583","suppressedMessages":"30584","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30585","messages":"30586","suppressedMessages":"30587","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30588","messages":"30589","suppressedMessages":"30590","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30591","messages":"30592","suppressedMessages":"30593","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30594","messages":"30595","suppressedMessages":"30596","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30597","messages":"30598","suppressedMessages":"30599","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30600","messages":"30601","suppressedMessages":"30602","errorCount":15,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30603","messages":"30604","suppressedMessages":"30605","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30606","messages":"30607","suppressedMessages":"30608","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30609","messages":"30610","suppressedMessages":"30611","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30612","messages":"30613","suppressedMessages":"30614","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30615","messages":"30616","suppressedMessages":"30617","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30618","messages":"30619","suppressedMessages":"30620","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30621","messages":"30622","suppressedMessages":"30623","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30624","messages":"30625","suppressedMessages":"30626","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30627","messages":"30628","suppressedMessages":"30629","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30630","messages":"30631","suppressedMessages":"30632","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30633","messages":"30634","suppressedMessages":"30635","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30636","messages":"30637","suppressedMessages":"30638","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30639","messages":"30640","suppressedMessages":"30641","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30642","messages":"30643","suppressedMessages":"30644","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30645","messages":"30646","suppressedMessages":"30647","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30648","messages":"30649","suppressedMessages":"30650","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30651","messages":"30652","suppressedMessages":"30653","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30654","messages":"30655","suppressedMessages":"30656","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30657","messages":"30658","suppressedMessages":"30659","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30660","messages":"30661","suppressedMessages":"30662","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30663","messages":"30664","suppressedMessages":"30665","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30666","messages":"30667","suppressedMessages":"30668","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30669","messages":"30670","suppressedMessages":"30671","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30672","messages":"30673","suppressedMessages":"30674","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30675","messages":"30676","suppressedMessages":"30677","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30678","messages":"30679","suppressedMessages":"30680","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30681","messages":"30682","suppressedMessages":"30683","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30684","messages":"30685","suppressedMessages":"30686","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30687","messages":"30688","suppressedMessages":"30689","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30690","messages":"30691","suppressedMessages":"30692","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30693","messages":"30694","suppressedMessages":"30695","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30696","messages":"30697","suppressedMessages":"30698","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30699","messages":"30700","suppressedMessages":"30701","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30702","messages":"30703","suppressedMessages":"30704","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30705","messages":"30706","suppressedMessages":"30707","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30708","messages":"30709","suppressedMessages":"30710","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30711","messages":"30712","suppressedMessages":"30713","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30714","messages":"30715","suppressedMessages":"30716","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30717","messages":"30718","suppressedMessages":"30719","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30720","messages":"30721","suppressedMessages":"30722","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30723","messages":"30724","suppressedMessages":"30725","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30726","messages":"30727","suppressedMessages":"30728","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30729","messages":"30730","suppressedMessages":"30731","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30732","messages":"30733","suppressedMessages":"30734","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30735","messages":"30736","suppressedMessages":"30737","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30738","messages":"30739","suppressedMessages":"30740","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30741","messages":"30742","suppressedMessages":"30743","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30744","messages":"30745","suppressedMessages":"30746","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30747","messages":"30748","suppressedMessages":"30749","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30750","messages":"30751","suppressedMessages":"30752","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30753","messages":"30754","suppressedMessages":"30755","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30756","messages":"30757","suppressedMessages":"30758","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30759","messages":"30760","suppressedMessages":"30761","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30762","messages":"30763","suppressedMessages":"30764","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30765","messages":"30766","suppressedMessages":"30767","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30768","messages":"30769","suppressedMessages":"30770","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30771","messages":"30772","suppressedMessages":"30773","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30774","messages":"30775","suppressedMessages":"30776","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30777","messages":"30778","suppressedMessages":"30779","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30780","messages":"30781","suppressedMessages":"30782","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30783","messages":"30784","suppressedMessages":"30785","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30786","messages":"30787","suppressedMessages":"30788","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30789","messages":"30790","suppressedMessages":"30791","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30792","messages":"30793","suppressedMessages":"30794","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30795","messages":"30796","suppressedMessages":"30797","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30798","messages":"30799","suppressedMessages":"30800","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30801","messages":"30802","suppressedMessages":"30803","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30804","messages":"30805","suppressedMessages":"30806","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30807","messages":"30808","suppressedMessages":"30809","errorCount":34,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30810","messages":"30811","suppressedMessages":"30812","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30813","messages":"30814","suppressedMessages":"30815","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30816","messages":"30817","suppressedMessages":"30818","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30819","messages":"30820","suppressedMessages":"30821","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30822","messages":"30823","suppressedMessages":"30824","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30825","messages":"30826","suppressedMessages":"30827","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30828","messages":"30829","suppressedMessages":"30830","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30831","messages":"30832","suppressedMessages":"30833","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30834","messages":"30835","suppressedMessages":"30836","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30837","messages":"30838","suppressedMessages":"30839","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30840","messages":"30841","suppressedMessages":"30842","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30843","messages":"30844","suppressedMessages":"30845","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30846","messages":"30847","suppressedMessages":"30848","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30849","messages":"30850","suppressedMessages":"30851","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30852","messages":"30853","suppressedMessages":"30854","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30855","messages":"30856","suppressedMessages":"30857","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30858","messages":"30859","suppressedMessages":"30860","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30861","messages":"30862","suppressedMessages":"30863","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30864","messages":"30865","suppressedMessages":"30866","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30867","messages":"30868","suppressedMessages":"30869","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30870","messages":"30871","suppressedMessages":"30872","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30873","messages":"30874","suppressedMessages":"30875","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30876","messages":"30877","suppressedMessages":"30878","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30879","messages":"30880","suppressedMessages":"30881","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30882","messages":"30883","suppressedMessages":"30884","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30885","messages":"30886","suppressedMessages":"30887","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30888","messages":"30889","suppressedMessages":"30890","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30891","messages":"30892","suppressedMessages":"30893","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30894","messages":"30895","suppressedMessages":"30896","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30897","messages":"30898","suppressedMessages":"30899","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30900","messages":"30901","suppressedMessages":"30902","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30903","messages":"30904","suppressedMessages":"30905","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30906","messages":"30907","suppressedMessages":"30908","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30909","messages":"30910","suppressedMessages":"30911","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30912","messages":"30913","suppressedMessages":"30914","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30915","messages":"30916","suppressedMessages":"30917","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30918","messages":"30919","suppressedMessages":"30920","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30921","messages":"30922","suppressedMessages":"30923","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30924","messages":"30925","suppressedMessages":"30926","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30927","messages":"30928","suppressedMessages":"30929","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30930","messages":"30931","suppressedMessages":"30932","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30933","messages":"30934","suppressedMessages":"30935","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30936","messages":"30937","suppressedMessages":"30938","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30939","messages":"30940","suppressedMessages":"30941","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30942","messages":"30943","suppressedMessages":"30944","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30945","messages":"30946","suppressedMessages":"30947","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30948","messages":"30949","suppressedMessages":"30950","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30951","messages":"30952","suppressedMessages":"30953","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30954","messages":"30955","suppressedMessages":"30956","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30957","messages":"30958","suppressedMessages":"30959","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30960","messages":"30961","suppressedMessages":"30962","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30963","messages":"30964","suppressedMessages":"30965","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30966","messages":"30967","suppressedMessages":"30968","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30969","messages":"30970","suppressedMessages":"30971","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30972","messages":"30973","suppressedMessages":"30974","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30975","messages":"30976","suppressedMessages":"30977","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30978","messages":"30979","suppressedMessages":"30980","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30981","messages":"30982","suppressedMessages":"30983","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30984","messages":"30985","suppressedMessages":"30986","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30987","messages":"30988","suppressedMessages":"30989","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30990","messages":"30991","suppressedMessages":"30992","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30993","messages":"30994","suppressedMessages":"30995","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30996","messages":"30997","suppressedMessages":"30998","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30999","messages":"31000","suppressedMessages":"31001","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31002","messages":"31003","suppressedMessages":"31004","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31005","messages":"31006","suppressedMessages":"31007","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31008","messages":"31009","suppressedMessages":"31010","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31011","messages":"31012","suppressedMessages":"31013","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31014","messages":"31015","suppressedMessages":"31016","errorCount":27,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31017","messages":"31018","suppressedMessages":"31019","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31020","messages":"31021","suppressedMessages":"31022","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31023","messages":"31024","suppressedMessages":"31025","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31026","messages":"31027","suppressedMessages":"31028","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31029","messages":"31030","suppressedMessages":"31031","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31032","messages":"31033","suppressedMessages":"31034","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31035","messages":"31036","suppressedMessages":"31037","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31038","messages":"31039","suppressedMessages":"31040","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31041","messages":"31042","suppressedMessages":"31043","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31044","messages":"31045","suppressedMessages":"31046","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31047","messages":"31048","suppressedMessages":"31049","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31050","messages":"31051","suppressedMessages":"31052","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31053","messages":"31054","suppressedMessages":"31055","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31056","messages":"31057","suppressedMessages":"31058","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31059","messages":"31060","suppressedMessages":"31061","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31062","messages":"31063","suppressedMessages":"31064","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31065","messages":"31066","suppressedMessages":"31067","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31068","messages":"31069","suppressedMessages":"31070","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31071","messages":"31072","suppressedMessages":"31073","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31074","messages":"31075","suppressedMessages":"31076","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31077","messages":"31078","suppressedMessages":"31079","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31080","messages":"31081","suppressedMessages":"31082","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31083","messages":"31084","suppressedMessages":"31085","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31086","messages":"31087","suppressedMessages":"31088","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31089","messages":"31090","suppressedMessages":"31091","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31092","messages":"31093","suppressedMessages":"31094","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31095","messages":"31096","suppressedMessages":"31097","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31098","messages":"31099","suppressedMessages":"31100","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31101","messages":"31102","suppressedMessages":"31103","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31104","messages":"31105","suppressedMessages":"31106","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31107","messages":"31108","suppressedMessages":"31109","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31110","messages":"31111","suppressedMessages":"31112","errorCount":8,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31113","messages":"31114","suppressedMessages":"31115","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31116","messages":"31117","suppressedMessages":"31118","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31119","messages":"31120","suppressedMessages":"31121","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31122","messages":"31123","suppressedMessages":"31124","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31125","messages":"31126","suppressedMessages":"31127","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31128","messages":"31129","suppressedMessages":"31130","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31131","messages":"31132","suppressedMessages":"31133","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31134","messages":"31135","suppressedMessages":"31136","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31137","messages":"31138","suppressedMessages":"31139","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31140","messages":"31141","suppressedMessages":"31142","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31143","messages":"31144","suppressedMessages":"31145","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31146","messages":"31147","suppressedMessages":"31148","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31149","messages":"31150","suppressedMessages":"31151","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31152","messages":"31153","suppressedMessages":"31154","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31155","messages":"31156","suppressedMessages":"31157","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31158","messages":"31159","suppressedMessages":"31160","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31161","messages":"31162","suppressedMessages":"31163","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31164","messages":"31165","suppressedMessages":"31166","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31167","messages":"31168","suppressedMessages":"31169","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31170","messages":"31171","suppressedMessages":"31172","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31173","messages":"31174","suppressedMessages":"31175","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31176","messages":"31177","suppressedMessages":"31178","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31179","messages":"31180","suppressedMessages":"31181","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31182","messages":"31183","suppressedMessages":"31184","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31185","messages":"31186","suppressedMessages":"31187","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31188","messages":"31189","suppressedMessages":"31190","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31191","messages":"31192","suppressedMessages":"31193","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31194","messages":"31195","suppressedMessages":"31196","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31197","messages":"31198","suppressedMessages":"31199","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31200","messages":"31201","suppressedMessages":"31202","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31203","messages":"31204","suppressedMessages":"31205","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31206","messages":"31207","suppressedMessages":"31208","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31209","messages":"31210","suppressedMessages":"31211","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31212","messages":"31213","suppressedMessages":"31214","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31215","messages":"31216","suppressedMessages":"31217","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31218","messages":"31219","suppressedMessages":"31220","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31221","messages":"31222","suppressedMessages":"31223","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31224","messages":"31225","suppressedMessages":"31226","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31227","messages":"31228","suppressedMessages":"31229","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31230","messages":"31231","suppressedMessages":"31232","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31233","messages":"31234","suppressedMessages":"31235","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31236","messages":"31237","suppressedMessages":"31238","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31239","messages":"31240","suppressedMessages":"31241","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31242","messages":"31243","suppressedMessages":"31244","errorCount":16,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31245","messages":"31246","suppressedMessages":"31247","errorCount":15,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31248","messages":"31249","suppressedMessages":"31250","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31251","messages":"31252","suppressedMessages":"31253","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31254","messages":"31255","suppressedMessages":"31256","errorCount":16,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31257","messages":"31258","suppressedMessages":"31259","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31260","messages":"31261","suppressedMessages":"31262","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31263","messages":"31264","suppressedMessages":"31265","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31266","messages":"31267","suppressedMessages":"31268","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31269","messages":"31270","suppressedMessages":"31271","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31272","messages":"31273","suppressedMessages":"31274","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31275","messages":"31276","suppressedMessages":"31277","errorCount":17,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31278","messages":"31279","suppressedMessages":"31280","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31281","messages":"31282","suppressedMessages":"31283","errorCount":18,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31284","messages":"31285","suppressedMessages":"31286","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31287","messages":"31288","suppressedMessages":"31289","errorCount":16,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31290","messages":"31291","suppressedMessages":"31292","errorCount":11,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31293","messages":"31294","suppressedMessages":"31295","errorCount":32,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31296","messages":"31297","suppressedMessages":"31298","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31299","messages":"31300","suppressedMessages":"31301","errorCount":19,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31302","messages":"31303","suppressedMessages":"31304","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31305","messages":"31306","suppressedMessages":"31307","errorCount":16,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31308","messages":"31309","suppressedMessages":"31310","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31311","messages":"31312","suppressedMessages":"31313","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31314","messages":"31315","suppressedMessages":"31316","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31317","messages":"31318","suppressedMessages":"31319","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31320","messages":"31321","suppressedMessages":"31322","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31323","messages":"31324","suppressedMessages":"31325","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31326","messages":"31327","suppressedMessages":"31328","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31329","messages":"31330","suppressedMessages":"31331","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31332","messages":"31333","suppressedMessages":"31334","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31335","messages":"31336","suppressedMessages":"31337","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31338","messages":"31339","suppressedMessages":"31340","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31341","messages":"31342","suppressedMessages":"31343","errorCount":22,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31344","messages":"31345","suppressedMessages":"31346","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31347","messages":"31348","suppressedMessages":"31349","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31350","messages":"31351","suppressedMessages":"31352","errorCount":12,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31353","messages":"31354","suppressedMessages":"31355","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31356","messages":"31357","suppressedMessages":"31358","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31359","messages":"31360","suppressedMessages":"31361","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31362","messages":"31363","suppressedMessages":"31364","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31365","messages":"31366","suppressedMessages":"31367","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31368","messages":"31369","suppressedMessages":"31370","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31371","messages":"31372","suppressedMessages":"31373","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31374","messages":"31375","suppressedMessages":"31376","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31377","messages":"31378","suppressedMessages":"31379","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31380","messages":"31381","suppressedMessages":"31382","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31383","messages":"31384","suppressedMessages":"31385","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31386","messages":"31387","suppressedMessages":"31388","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31389","messages":"31390","suppressedMessages":"31391","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31392","messages":"31393","suppressedMessages":"31394","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31395","messages":"31396","suppressedMessages":"31397","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31398","messages":"31399","suppressedMessages":"31400","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31401","messages":"31402","suppressedMessages":"31403","errorCount":16,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31404","messages":"31405","suppressedMessages":"31406","errorCount":18,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31407","messages":"31408","suppressedMessages":"31409","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31410","messages":"31411","suppressedMessages":"31412","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31413","messages":"31414","suppressedMessages":"31415","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31416","messages":"31417","suppressedMessages":"31418","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31419","messages":"31420","suppressedMessages":"31421","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31422","messages":"31423","suppressedMessages":"31424","errorCount":19,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31425","messages":"31426","suppressedMessages":"31427","errorCount":18,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31428","messages":"31429","suppressedMessages":"31430","errorCount":22,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31431","messages":"31432","suppressedMessages":"31433","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31434","messages":"31435","suppressedMessages":"31436","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31437","messages":"31438","suppressedMessages":"31439","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31440","messages":"31441","suppressedMessages":"31442","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31443","messages":"31444","suppressedMessages":"31445","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31446","messages":"31447","suppressedMessages":"31448","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31449","messages":"31450","suppressedMessages":"31451","errorCount":20,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31452","messages":"31453","suppressedMessages":"31454","errorCount":16,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31455","messages":"31456","suppressedMessages":"31457","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31458","messages":"31459","suppressedMessages":"31460","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31461","messages":"31462","suppressedMessages":"31463","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31464","messages":"31465","suppressedMessages":"31466","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31467","messages":"31468","suppressedMessages":"31469","errorCount":15,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31470","messages":"31471","suppressedMessages":"31472","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31473","messages":"31474","suppressedMessages":"31475","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31476","messages":"31477","suppressedMessages":"31478","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31479","messages":"31480","suppressedMessages":"31481","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31482","messages":"31483","suppressedMessages":"31484","errorCount":16,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31485","messages":"31486","suppressedMessages":"31487","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31488","messages":"31489","suppressedMessages":"31490","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31491","messages":"31492","suppressedMessages":"31493","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31494","messages":"31495","suppressedMessages":"31496","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31497","messages":"31498","suppressedMessages":"31499","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31500","messages":"31501","suppressedMessages":"31502","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31503","messages":"31504","suppressedMessages":"31505","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31506","messages":"31507","suppressedMessages":"31508","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31509","messages":"31510","suppressedMessages":"31511","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31512","messages":"31513","suppressedMessages":"31514","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31515","messages":"31516","suppressedMessages":"31517","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31518","messages":"31519","suppressedMessages":"31520","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31521","messages":"31522","suppressedMessages":"31523","errorCount":12,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31524","messages":"31525","suppressedMessages":"31526","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31527","messages":"31528","suppressedMessages":"31529","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31530","messages":"31531","suppressedMessages":"31532","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31533","messages":"31534","suppressedMessages":"31535","errorCount":13,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31536","messages":"31537","suppressedMessages":"31538","errorCount":22,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31539","messages":"31540","suppressedMessages":"31541","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31542","messages":"31543","suppressedMessages":"31544","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31545","messages":"31546","suppressedMessages":"31547","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31548","messages":"31549","suppressedMessages":"31550","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31551","messages":"31552","suppressedMessages":"31553","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31554","messages":"31555","suppressedMessages":"31556","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31557","messages":"31558","suppressedMessages":"31559","errorCount":13,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31560","messages":"31561","suppressedMessages":"31562","errorCount":21,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31563","messages":"31564","suppressedMessages":"31565","errorCount":17,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31566","messages":"31567","suppressedMessages":"31568","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31569","messages":"31570","suppressedMessages":"31571","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31572","messages":"31573","suppressedMessages":"31574","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31575","messages":"31576","suppressedMessages":"31577","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31578","messages":"31579","suppressedMessages":"31580","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31581","messages":"31582","suppressedMessages":"31583","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31584","messages":"31585","suppressedMessages":"31586","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31587","messages":"31588","suppressedMessages":"31589","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31590","messages":"31591","suppressedMessages":"31592","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31593","messages":"31594","suppressedMessages":"31595","errorCount":16,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31596","messages":"31597","suppressedMessages":"31598","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31599","messages":"31600","suppressedMessages":"31601","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31602","messages":"31603","suppressedMessages":"31604","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31605","messages":"31606","suppressedMessages":"31607","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31608","messages":"31609","suppressedMessages":"31610","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31611","messages":"31612","suppressedMessages":"31613","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31614","messages":"31615","suppressedMessages":"31616","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31617","messages":"31618","suppressedMessages":"31619","errorCount":17,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31620","messages":"31621","suppressedMessages":"31622","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31623","messages":"31624","suppressedMessages":"31625","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31626","messages":"31627","suppressedMessages":"31628","errorCount":23,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31629","messages":"31630","suppressedMessages":"31631","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31632","messages":"31633","suppressedMessages":"31634","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31635","messages":"31636","suppressedMessages":"31637","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31638","messages":"31639","suppressedMessages":"31640","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31641","messages":"31642","suppressedMessages":"31643","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31644","messages":"31645","suppressedMessages":"31646","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31647","messages":"31648","suppressedMessages":"31649","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31650","messages":"31651","suppressedMessages":"31652","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31653","messages":"31654","suppressedMessages":"31655","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31656","messages":"31657","suppressedMessages":"31658","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31659","messages":"31660","suppressedMessages":"31661","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31662","messages":"31663","suppressedMessages":"31664","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31665","messages":"31666","suppressedMessages":"31667","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31668","messages":"31669","suppressedMessages":"31670","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31671","messages":"31672","suppressedMessages":"31673","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31674","messages":"31675","suppressedMessages":"31676","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31677","messages":"31678","suppressedMessages":"31679","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31680","messages":"31681","suppressedMessages":"31682","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31683","messages":"31684","suppressedMessages":"31685","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31686","messages":"31687","suppressedMessages":"31688","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31689","messages":"31690","suppressedMessages":"31691","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31692","messages":"31693","suppressedMessages":"31694","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31695","messages":"31696","suppressedMessages":"31697","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31698","messages":"31699","suppressedMessages":"31700","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31701","messages":"31702","suppressedMessages":"31703","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31704","messages":"31705","suppressedMessages":"31706","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31707","messages":"31708","suppressedMessages":"31709","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31710","messages":"31711","suppressedMessages":"31712","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31713","messages":"31714","suppressedMessages":"31715","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31716","messages":"31717","suppressedMessages":"31718","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31719","messages":"31720","suppressedMessages":"31721","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31722","messages":"31723","suppressedMessages":"31724","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31725","messages":"31726","suppressedMessages":"31727","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31728","messages":"31729","suppressedMessages":"31730","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31731","messages":"31732","suppressedMessages":"31733","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31734","messages":"31735","suppressedMessages":"31736","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31737","messages":"31738","suppressedMessages":"31739","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31740","messages":"31741","suppressedMessages":"31742","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31743","messages":"31744","suppressedMessages":"31745","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31746","messages":"31747","suppressedMessages":"31748","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31749","messages":"31750","suppressedMessages":"31751","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31752","messages":"31753","suppressedMessages":"31754","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31755","messages":"31756","suppressedMessages":"31757","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31758","messages":"31759","suppressedMessages":"31760","errorCount":16,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31761","messages":"31762","suppressedMessages":"31763","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31764","messages":"31765","suppressedMessages":"31766","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31767","messages":"31768","suppressedMessages":"31769","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31770","messages":"31771","suppressedMessages":"31772","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31773","messages":"31774","suppressedMessages":"31775","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31776","messages":"31777","suppressedMessages":"31778","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31779","messages":"31780","suppressedMessages":"31781","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31782","messages":"31783","suppressedMessages":"31784","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31785","messages":"31786","suppressedMessages":"31787","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31788","messages":"31789","suppressedMessages":"31790","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31791","messages":"31792","suppressedMessages":"31793","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31794","messages":"31795","suppressedMessages":"31796","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31797","messages":"31798","suppressedMessages":"31799","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31800","messages":"31801","suppressedMessages":"31802","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31803","messages":"31804","suppressedMessages":"31805","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31806","messages":"31807","suppressedMessages":"31808","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31809","messages":"31810","suppressedMessages":"31811","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31812","messages":"31813","suppressedMessages":"31814","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31815","messages":"31816","suppressedMessages":"31817","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31818","messages":"31819","suppressedMessages":"31820","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31821","messages":"31822","suppressedMessages":"31823","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31824","messages":"31825","suppressedMessages":"31826","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31827","messages":"31828","suppressedMessages":"31829","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31830","messages":"31831","suppressedMessages":"31832","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31833","messages":"31834","suppressedMessages":"31835","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31836","messages":"31837","suppressedMessages":"31838","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31839","messages":"31840","suppressedMessages":"31841","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31842","messages":"31843","suppressedMessages":"31844","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31845","messages":"31846","suppressedMessages":"31847","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31848","messages":"31849","suppressedMessages":"31850","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31851","messages":"31852","suppressedMessages":"31853","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31854","messages":"31855","suppressedMessages":"31856","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31857","messages":"31858","suppressedMessages":"31859","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31860","messages":"31861","suppressedMessages":"31862","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31863","messages":"31864","suppressedMessages":"31865","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31866","messages":"31867","suppressedMessages":"31868","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31869","messages":"31870","suppressedMessages":"31871","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31872","messages":"31873","suppressedMessages":"31874","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31875","messages":"31876","suppressedMessages":"31877","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"31878","messages":"31879","suppressedMessages":"31880","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31881","messages":"31882","suppressedMessages":"31883","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31884","messages":"31885","suppressedMessages":"31886","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31887","messages":"31888","suppressedMessages":"31889","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31890","messages":"31891","suppressedMessages":"31892","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31893","messages":"31894","suppressedMessages":"31895","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31896","messages":"31897","suppressedMessages":"31898","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31899","messages":"31900","suppressedMessages":"31901","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31902","messages":"31903","suppressedMessages":"31904","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31905","messages":"31906","suppressedMessages":"31907","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31908","messages":"31909","suppressedMessages":"31910","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31911","messages":"31912","suppressedMessages":"31913","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31914","messages":"31915","suppressedMessages":"31916","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31917","messages":"31918","suppressedMessages":"31919","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31920","messages":"31921","suppressedMessages":"31922","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31923","messages":"31924","suppressedMessages":"31925","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31926","messages":"31927","suppressedMessages":"31928","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31929","messages":"31930","suppressedMessages":"31931","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31932","messages":"31933","suppressedMessages":"31934","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31935","messages":"31936","suppressedMessages":"31937","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31938","messages":"31939","suppressedMessages":"31940","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31941","messages":"31942","suppressedMessages":"31943","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31944","messages":"31945","suppressedMessages":"31946","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31947","messages":"31948","suppressedMessages":"31949","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31950","messages":"31951","suppressedMessages":"31952","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31953","messages":"31954","suppressedMessages":"31955","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31956","messages":"31957","suppressedMessages":"31958","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31959","messages":"31960","suppressedMessages":"31961","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31962","messages":"31963","suppressedMessages":"31964","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31965","messages":"31966","suppressedMessages":"31967","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31968","messages":"31969","suppressedMessages":"31970","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31971","messages":"31972","suppressedMessages":"31973","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31974","messages":"31975","suppressedMessages":"31976","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31977","messages":"31978","suppressedMessages":"31979","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31980","messages":"31981","suppressedMessages":"31982","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31983","messages":"31984","suppressedMessages":"31985","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31986","messages":"31987","suppressedMessages":"31988","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31989","messages":"31990","suppressedMessages":"31991","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31992","messages":"31993","suppressedMessages":"31994","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31995","messages":"31996","suppressedMessages":"31997","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31998","messages":"31999","suppressedMessages":"32000","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32001","messages":"32002","suppressedMessages":"32003","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32004","messages":"32005","suppressedMessages":"32006","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32007","messages":"32008","suppressedMessages":"32009","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32010","messages":"32011","suppressedMessages":"32012","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32013","messages":"32014","suppressedMessages":"32015","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32016","messages":"32017","suppressedMessages":"32018","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32019","messages":"32020","suppressedMessages":"32021","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32022","messages":"32023","suppressedMessages":"32024","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32025","messages":"32026","suppressedMessages":"32027","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32028","messages":"32029","suppressedMessages":"32030","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32031","messages":"32032","suppressedMessages":"32033","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32034","messages":"32035","suppressedMessages":"32036","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32037","messages":"32038","suppressedMessages":"32039","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32040","messages":"32041","suppressedMessages":"32042","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32043","messages":"32044","suppressedMessages":"32045","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32046","messages":"32047","suppressedMessages":"32048","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32049","messages":"32050","suppressedMessages":"32051","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32052","messages":"32053","suppressedMessages":"32054","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32055","messages":"32056","suppressedMessages":"32057","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32058","messages":"32059","suppressedMessages":"32060","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32061","messages":"32062","suppressedMessages":"32063","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32064","messages":"32065","suppressedMessages":"32066","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32067","messages":"32068","suppressedMessages":"32069","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32070","messages":"32071","suppressedMessages":"32072","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32073","messages":"32074","suppressedMessages":"32075","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32076","messages":"32077","suppressedMessages":"32078","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32079","messages":"32080","suppressedMessages":"32081","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32082","messages":"32083","suppressedMessages":"32084","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32085","messages":"32086","suppressedMessages":"32087","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32088","messages":"32089","suppressedMessages":"32090","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32091","messages":"32092","suppressedMessages":"32093","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32094","messages":"32095","suppressedMessages":"32096","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32097","messages":"32098","suppressedMessages":"32099","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32100","messages":"32101","suppressedMessages":"32102","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32103","messages":"32104","suppressedMessages":"32105","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32106","messages":"32107","suppressedMessages":"32108","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32109","messages":"32110","suppressedMessages":"32111","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32112","messages":"32113","suppressedMessages":"32114","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32115","messages":"32116","suppressedMessages":"32117","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32118","messages":"32119","suppressedMessages":"32120","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32121","messages":"32122","suppressedMessages":"32123","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32124","messages":"32125","suppressedMessages":"32126","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32127","messages":"32128","suppressedMessages":"32129","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32130","messages":"32131","suppressedMessages":"32132","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32133","messages":"32134","suppressedMessages":"32135","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32136","messages":"32137","suppressedMessages":"32138","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32139","messages":"32140","suppressedMessages":"32141","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32142","messages":"32143","suppressedMessages":"32144","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32145","messages":"32146","suppressedMessages":"32147","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32148","messages":"32149","suppressedMessages":"32150","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32151","messages":"32152","suppressedMessages":"32153","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32154","messages":"32155","suppressedMessages":"32156","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32157","messages":"32158","suppressedMessages":"32159","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32160","messages":"32161","suppressedMessages":"32162","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32163","messages":"32164","suppressedMessages":"32165","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32166","messages":"32167","suppressedMessages":"32168","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32169","messages":"32170","suppressedMessages":"32171","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32172","messages":"32173","suppressedMessages":"32174","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32175","messages":"32176","suppressedMessages":"32177","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32178","messages":"32179","suppressedMessages":"32180","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32181","messages":"32182","suppressedMessages":"32183","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32184","messages":"32185","suppressedMessages":"32186","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32187","messages":"32188","suppressedMessages":"32189","errorCount":18,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32190","messages":"32191","suppressedMessages":"32192","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32193","messages":"32194","suppressedMessages":"32195","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32196","messages":"32197","suppressedMessages":"32198","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32199","messages":"32200","suppressedMessages":"32201","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32202","messages":"32203","suppressedMessages":"32204","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32205","messages":"32206","suppressedMessages":"32207","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32208","messages":"32209","suppressedMessages":"32210","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32211","messages":"32212","suppressedMessages":"32213","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32214","messages":"32215","suppressedMessages":"32216","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32217","messages":"32218","suppressedMessages":"32219","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32220","messages":"32221","suppressedMessages":"32222","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32223","messages":"32224","suppressedMessages":"32225","errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32226","messages":"32227","suppressedMessages":"32228","errorCount":267,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32229","messages":"32230","suppressedMessages":"32231","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32232","messages":"32233","suppressedMessages":"32234","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32235","messages":"32236","suppressedMessages":"32237","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32238","messages":"32239","suppressedMessages":"32240","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32241","messages":"32242","suppressedMessages":"32243","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32244","messages":"32245","suppressedMessages":"32246","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32247","messages":"32248","suppressedMessages":"32249","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32250","messages":"32251","suppressedMessages":"32252","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32253","messages":"32254","suppressedMessages":"32255","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32256","messages":"32257","suppressedMessages":"32258","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32259","messages":"32260","suppressedMessages":"32261","errorCount":17,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32262","messages":"32263","suppressedMessages":"32264","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32265","messages":"32266","suppressedMessages":"32267","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32268","messages":"32269","suppressedMessages":"32270","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32271","messages":"32272","suppressedMessages":"32273","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32274","messages":"32275","suppressedMessages":"32276","errorCount":33,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32277","messages":"32278","suppressedMessages":"32279","errorCount":17,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32280","messages":"32281","suppressedMessages":"32282","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32283","messages":"32284","suppressedMessages":"32285","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32286","messages":"32287","suppressedMessages":"32288","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32289","messages":"32290","suppressedMessages":"32291","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32292","messages":"32293","suppressedMessages":"32294","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32295","messages":"32296","suppressedMessages":"32297","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32298","messages":"32299","suppressedMessages":"32300","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32301","messages":"32302","suppressedMessages":"32303","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32304","messages":"32305","suppressedMessages":"32306","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32307","messages":"32308","suppressedMessages":"32309","errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32310","messages":"32311","suppressedMessages":"32312","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32313","messages":"32314","suppressedMessages":"32315","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32316","messages":"32317","suppressedMessages":"32318","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32319","messages":"32320","suppressedMessages":"32321","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32322","messages":"32323","suppressedMessages":"32324","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32325","messages":"32326","suppressedMessages":"32327","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32328","messages":"32329","suppressedMessages":"32330","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32331","messages":"32332","suppressedMessages":"32333","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32334","messages":"32335","suppressedMessages":"32336","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32337","messages":"32338","suppressedMessages":"32339","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32340","messages":"32341","suppressedMessages":"32342","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32343","messages":"32344","suppressedMessages":"32345","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32346","messages":"32347","suppressedMessages":"32348","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32349","messages":"32350","suppressedMessages":"32351","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32352","messages":"32353","suppressedMessages":"32354","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32355","messages":"32356","suppressedMessages":"32357","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32358","messages":"32359","suppressedMessages":"32360","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32361","messages":"32362","suppressedMessages":"32363","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32364","messages":"32365","suppressedMessages":"32366","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32367","messages":"32368","suppressedMessages":"32369","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32370","messages":"32371","suppressedMessages":"32372","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32373","messages":"32374","suppressedMessages":"32375","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32376","messages":"32377","suppressedMessages":"32378","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32379","messages":"32380","suppressedMessages":"32381","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32382","messages":"32383","suppressedMessages":"32384","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32385","messages":"32386","suppressedMessages":"32387","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32388","messages":"32389","suppressedMessages":"32390","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32391","messages":"32392","suppressedMessages":"32393","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32394","messages":"32395","suppressedMessages":"32396","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32397","messages":"32398","suppressedMessages":"32399","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32400","messages":"32401","suppressedMessages":"32402","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32403","messages":"32404","suppressedMessages":"32405","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32406","messages":"32407","suppressedMessages":"32408","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32409","messages":"32410","suppressedMessages":"32411","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32412","messages":"32413","suppressedMessages":"32414","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32415","messages":"32416","suppressedMessages":"32417","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32418","messages":"32419","suppressedMessages":"32420","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32421","messages":"32422","suppressedMessages":"32423","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32424","messages":"32425","suppressedMessages":"32426","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32427","messages":"32428","suppressedMessages":"32429","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32430","messages":"32431","suppressedMessages":"32432","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32433","messages":"32434","suppressedMessages":"32435","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32436","messages":"32437","suppressedMessages":"32438","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32439","messages":"32440","suppressedMessages":"32441","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32442","messages":"32443","suppressedMessages":"32444","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32445","messages":"32446","suppressedMessages":"32447","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32448","messages":"32449","suppressedMessages":"32450","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32451","messages":"32452","suppressedMessages":"32453","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32454","messages":"32455","suppressedMessages":"32456","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32457","messages":"32458","suppressedMessages":"32459","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32460","messages":"32461","suppressedMessages":"32462","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32463","messages":"32464","suppressedMessages":"32465","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32466","messages":"32467","suppressedMessages":"32468","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32469","messages":"32470","suppressedMessages":"32471","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32472","messages":"32473","suppressedMessages":"32474","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32475","messages":"32476","suppressedMessages":"32477","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32478","messages":"32479","suppressedMessages":"32480","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32481","messages":"32482","suppressedMessages":"32483","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32484","messages":"32485","suppressedMessages":"32486","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32487","messages":"32488","suppressedMessages":"32489","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32490","messages":"32491","suppressedMessages":"32492","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32493","messages":"32494","suppressedMessages":"32495","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32496","messages":"32497","suppressedMessages":"32498","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32499","messages":"32500","suppressedMessages":"32501","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32502","messages":"32503","suppressedMessages":"32504","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32505","messages":"32506","suppressedMessages":"32507","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32508","messages":"32509","suppressedMessages":"32510","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32511","messages":"32512","suppressedMessages":"32513","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32514","messages":"32515","suppressedMessages":"32516","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32517","messages":"32518","suppressedMessages":"32519","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32520","messages":"32521","suppressedMessages":"32522","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32523","messages":"32524","suppressedMessages":"32525","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32526","messages":"32527","suppressedMessages":"32528","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32529","messages":"32530","suppressedMessages":"32531","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32532","messages":"32533","suppressedMessages":"32534","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32535","messages":"32536","suppressedMessages":"32537","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32538","messages":"32539","suppressedMessages":"32540","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32541","messages":"32542","suppressedMessages":"32543","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32544","messages":"32545","suppressedMessages":"32546","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32547","messages":"32548","suppressedMessages":"32549","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32550","messages":"32551","suppressedMessages":"32552","errorCount":16,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32553","messages":"32554","suppressedMessages":"32555","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32556","messages":"32557","suppressedMessages":"32558","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32559","messages":"32560","suppressedMessages":"32561","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32562","messages":"32563","suppressedMessages":"32564","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32565","messages":"32566","suppressedMessages":"32567","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32568","messages":"32569","suppressedMessages":"32570","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32571","messages":"32572","suppressedMessages":"32573","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32574","messages":"32575","suppressedMessages":"32576","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32577","messages":"32578","suppressedMessages":"32579","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32580","messages":"32581","suppressedMessages":"32582","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32583","messages":"32584","suppressedMessages":"32585","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32586","messages":"32587","suppressedMessages":"32588","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32589","messages":"32590","suppressedMessages":"32591","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32592","messages":"32593","suppressedMessages":"32594","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32595","messages":"32596","suppressedMessages":"32597","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32598","messages":"32599","suppressedMessages":"32600","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"32601","messages":"32602","suppressedMessages":"32603","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32604","messages":"32605","suppressedMessages":"32606","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32607","messages":"32608","suppressedMessages":"32609","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32610","messages":"32611","suppressedMessages":"32612","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32613","messages":"32614","suppressedMessages":"32615","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32616","messages":"32617","suppressedMessages":"32618","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32619","messages":"32620","suppressedMessages":"32621","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32622","messages":"32623","suppressedMessages":"32624","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32625","messages":"32626","suppressedMessages":"32627","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32628","messages":"32629","suppressedMessages":"32630","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32631","messages":"32632","suppressedMessages":"32633","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32634","messages":"32635","suppressedMessages":"32636","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32637","messages":"32638","suppressedMessages":"32639","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32640","messages":"32641","suppressedMessages":"32642","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32643","messages":"32644","suppressedMessages":"32645","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32646","messages":"32647","suppressedMessages":"32648","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32649","messages":"32650","suppressedMessages":"32651","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32652","messages":"32653","suppressedMessages":"32654","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32655","messages":"32656","suppressedMessages":"32657","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32658","messages":"32659","suppressedMessages":"32660","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32661","messages":"32662","suppressedMessages":"32663","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32664","messages":"32665","suppressedMessages":"32666","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32667","messages":"32668","suppressedMessages":"32669","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32670","messages":"32671","suppressedMessages":"32672","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32673","messages":"32674","suppressedMessages":"32675","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32676","messages":"32677","suppressedMessages":"32678","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32679","messages":"32680","suppressedMessages":"32681","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32682","messages":"32683","suppressedMessages":"32684","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32685","messages":"32686","suppressedMessages":"32687","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32688","messages":"32689","suppressedMessages":"32690","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32691","messages":"32692","suppressedMessages":"32693","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32694","messages":"32695","suppressedMessages":"32696","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32697","messages":"32698","suppressedMessages":"32699","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32700","messages":"32701","suppressedMessages":"32702","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32703","messages":"32704","suppressedMessages":"32705","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32706","messages":"32707","suppressedMessages":"32708","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32709","messages":"32710","suppressedMessages":"32711","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32712","messages":"32713","suppressedMessages":"32714","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32715","messages":"32716","suppressedMessages":"32717","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32718","messages":"32719","suppressedMessages":"32720","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32721","messages":"32722","suppressedMessages":"32723","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32724","messages":"32725","suppressedMessages":"32726","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32727","messages":"32728","suppressedMessages":"32729","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32730","messages":"32731","suppressedMessages":"32732","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32733","messages":"32734","suppressedMessages":"32735","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32736","messages":"32737","suppressedMessages":"32738","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32739","messages":"32740","suppressedMessages":"32741","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32742","messages":"32743","suppressedMessages":"32744","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32745","messages":"32746","suppressedMessages":"32747","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32748","messages":"32749","suppressedMessages":"32750","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32751","messages":"32752","suppressedMessages":"32753","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32754","messages":"32755","suppressedMessages":"32756","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32757","messages":"32758","suppressedMessages":"32759","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32760","messages":"32761","suppressedMessages":"32762","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32763","messages":"32764","suppressedMessages":"32765","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32766","messages":"32767","suppressedMessages":"32768","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32769","messages":"32770","suppressedMessages":"32771","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32772","messages":"32773","suppressedMessages":"32774","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32775","messages":"32776","suppressedMessages":"32777","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32778","messages":"32779","suppressedMessages":"32780","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32781","messages":"32782","suppressedMessages":"32783","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32784","messages":"32785","suppressedMessages":"32786","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32787","messages":"32788","suppressedMessages":"32789","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32790","messages":"32791","suppressedMessages":"32792","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32793","messages":"32794","suppressedMessages":"32795","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32796","messages":"32797","suppressedMessages":"32798","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32799","messages":"32800","suppressedMessages":"32801","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32802","messages":"32803","suppressedMessages":"32804","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32805","messages":"32806","suppressedMessages":"32807","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32808","messages":"32809","suppressedMessages":"32810","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32811","messages":"32812","suppressedMessages":"32813","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32814","messages":"32815","suppressedMessages":"32816","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32817","messages":"32818","suppressedMessages":"32819","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32820","messages":"32821","suppressedMessages":"32822","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32823","messages":"32824","suppressedMessages":"32825","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32826","messages":"32827","suppressedMessages":"32828","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32829","messages":"32830","suppressedMessages":"32831","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32832","messages":"32833","suppressedMessages":"32834","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32835","messages":"32836","suppressedMessages":"32837","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32838","messages":"32839","suppressedMessages":"32840","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32841","messages":"32842","suppressedMessages":"32843","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32844","messages":"32845","suppressedMessages":"32846","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32847","messages":"32848","suppressedMessages":"32849","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32850","messages":"32851","suppressedMessages":"32852","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32853","messages":"32854","suppressedMessages":"32855","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32856","messages":"32857","suppressedMessages":"32858","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32859","messages":"32860","suppressedMessages":"32861","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32862","messages":"32863","suppressedMessages":"32864","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32865","messages":"32866","suppressedMessages":"32867","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32868","messages":"32869","suppressedMessages":"32870","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32871","messages":"32872","suppressedMessages":"32873","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32874","messages":"32875","suppressedMessages":"32876","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32877","messages":"32878","suppressedMessages":"32879","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32880","messages":"32881","suppressedMessages":"32882","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32883","messages":"32884","suppressedMessages":"32885","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32886","messages":"32887","suppressedMessages":"32888","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32889","messages":"32890","suppressedMessages":"32891","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32892","messages":"32893","suppressedMessages":"32894","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32895","messages":"32896","suppressedMessages":"32897","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32898","messages":"32899","suppressedMessages":"32900","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32901","messages":"32902","suppressedMessages":"32903","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32904","messages":"32905","suppressedMessages":"32906","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32907","messages":"32908","suppressedMessages":"32909","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32910","messages":"32911","suppressedMessages":"32912","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32913","messages":"32914","suppressedMessages":"32915","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32916","messages":"32917","suppressedMessages":"32918","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32919","messages":"32920","suppressedMessages":"32921","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32922","messages":"32923","suppressedMessages":"32924","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32925","messages":"32926","suppressedMessages":"32927","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32928","messages":"32929","suppressedMessages":"32930","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32931","messages":"32932","suppressedMessages":"32933","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32934","messages":"32935","suppressedMessages":"32936","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32937","messages":"32938","suppressedMessages":"32939","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32940","messages":"32941","suppressedMessages":"32942","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32943","messages":"32944","suppressedMessages":"32945","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32946","messages":"32947","suppressedMessages":"32948","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32949","messages":"32950","suppressedMessages":"32951","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32952","messages":"32953","suppressedMessages":"32954","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32955","messages":"32956","suppressedMessages":"32957","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32958","messages":"32959","suppressedMessages":"32960","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32961","messages":"32962","suppressedMessages":"32963","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32964","messages":"32965","suppressedMessages":"32966","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32967","messages":"32968","suppressedMessages":"32969","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32970","messages":"32971","suppressedMessages":"32972","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32973","messages":"32974","suppressedMessages":"32975","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32976","messages":"32977","suppressedMessages":"32978","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32979","messages":"32980","suppressedMessages":"32981","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32982","messages":"32983","suppressedMessages":"32984","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32985","messages":"32986","suppressedMessages":"32987","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32988","messages":"32989","suppressedMessages":"32990","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32991","messages":"32992","suppressedMessages":"32993","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32994","messages":"32995","suppressedMessages":"32996","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32997","messages":"32998","suppressedMessages":"32999","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33000","messages":"33001","suppressedMessages":"33002","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33003","messages":"33004","suppressedMessages":"33005","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33006","messages":"33007","suppressedMessages":"33008","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33009","messages":"33010","suppressedMessages":"33011","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33012","messages":"33013","suppressedMessages":"33014","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33015","messages":"33016","suppressedMessages":"33017","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33018","messages":"33019","suppressedMessages":"33020","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33021","messages":"33022","suppressedMessages":"33023","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33024","messages":"33025","suppressedMessages":"33026","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33027","messages":"33028","suppressedMessages":"33029","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33030","messages":"33031","suppressedMessages":"33032","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33033","messages":"33034","suppressedMessages":"33035","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33036","messages":"33037","suppressedMessages":"33038","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33039","messages":"33040","suppressedMessages":"33041","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33042","messages":"33043","suppressedMessages":"33044","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33045","messages":"33046","suppressedMessages":"33047","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33048","messages":"33049","suppressedMessages":"33050","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33051","messages":"33052","suppressedMessages":"33053","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33054","messages":"33055","suppressedMessages":"33056","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33057","messages":"33058","suppressedMessages":"33059","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33060","messages":"33061","suppressedMessages":"33062","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33063","messages":"33064","suppressedMessages":"33065","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33066","messages":"33067","suppressedMessages":"33068","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33069","messages":"33070","suppressedMessages":"33071","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33072","messages":"33073","suppressedMessages":"33074","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33075","messages":"33076","suppressedMessages":"33077","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33078","messages":"33079","suppressedMessages":"33080","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33081","messages":"33082","suppressedMessages":"33083","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33084","messages":"33085","suppressedMessages":"33086","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33087","messages":"33088","suppressedMessages":"33089","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33090","messages":"33091","suppressedMessages":"33092","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33093","messages":"33094","suppressedMessages":"33095","errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33096","messages":"33097","suppressedMessages":"33098","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33099","messages":"33100","suppressedMessages":"33101","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33102","messages":"33103","suppressedMessages":"33104","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33105","messages":"33106","suppressedMessages":"33107","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33108","messages":"33109","suppressedMessages":"33110","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33111","messages":"33112","suppressedMessages":"33113","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33114","messages":"33115","suppressedMessages":"33116","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33117","messages":"33118","suppressedMessages":"33119","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33120","messages":"33121","suppressedMessages":"33122","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33123","messages":"33124","suppressedMessages":"33125","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33126","messages":"33127","suppressedMessages":"33128","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33129","messages":"33130","suppressedMessages":"33131","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33132","messages":"33133","suppressedMessages":"33134","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33135","messages":"33136","suppressedMessages":"33137","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33138","messages":"33139","suppressedMessages":"33140","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33141","messages":"33142","suppressedMessages":"33143","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33144","messages":"33145","suppressedMessages":"33146","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33147","messages":"33148","suppressedMessages":"33149","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33150","messages":"33151","suppressedMessages":"33152","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33153","messages":"33154","suppressedMessages":"33155","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33156","messages":"33157","suppressedMessages":"33158","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33159","messages":"33160","suppressedMessages":"33161","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33162","messages":"33163","suppressedMessages":"33164","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33165","messages":"33166","suppressedMessages":"33167","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33168","messages":"33169","suppressedMessages":"33170","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33171","messages":"33172","suppressedMessages":"33173","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33174","messages":"33175","suppressedMessages":"33176","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33177","messages":"33178","suppressedMessages":"33179","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33180","messages":"33181","suppressedMessages":"33182","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33183","messages":"33184","suppressedMessages":"33185","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33186","messages":"33187","suppressedMessages":"33188","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33189","messages":"33190","suppressedMessages":"33191","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33192","messages":"33193","suppressedMessages":"33194","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33195","messages":"33196","suppressedMessages":"33197","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33198","messages":"33199","suppressedMessages":"33200","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33201","messages":"33202","suppressedMessages":"33203","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33204","messages":"33205","suppressedMessages":"33206","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33207","messages":"33208","suppressedMessages":"33209","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33210","messages":"33211","suppressedMessages":"33212","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33213","messages":"33214","suppressedMessages":"33215","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33216","messages":"33217","suppressedMessages":"33218","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33219","messages":"33220","suppressedMessages":"33221","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33222","messages":"33223","suppressedMessages":"33224","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33225","messages":"33226","suppressedMessages":"33227","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33228","messages":"33229","suppressedMessages":"33230","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33231","messages":"33232","suppressedMessages":"33233","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33234","messages":"33235","suppressedMessages":"33236","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33237","messages":"33238","suppressedMessages":"33239","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33240","messages":"33241","suppressedMessages":"33242","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33243","messages":"33244","suppressedMessages":"33245","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33246","messages":"33247","suppressedMessages":"33248","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33249","messages":"33250","suppressedMessages":"33251","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33252","messages":"33253","suppressedMessages":"33254","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33255","messages":"33256","suppressedMessages":"33257","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33258","messages":"33259","suppressedMessages":"33260","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33261","messages":"33262","suppressedMessages":"33263","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33264","messages":"33265","suppressedMessages":"33266","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33267","messages":"33268","suppressedMessages":"33269","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33270","messages":"33271","suppressedMessages":"33272","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33273","messages":"33274","suppressedMessages":"33275","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33276","messages":"33277","suppressedMessages":"33278","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33279","messages":"33280","suppressedMessages":"33281","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33282","messages":"33283","suppressedMessages":"33284","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33285","messages":"33286","suppressedMessages":"33287","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33288","messages":"33289","suppressedMessages":"33290","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33291","messages":"33292","suppressedMessages":"33293","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33294","messages":"33295","suppressedMessages":"33296","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33297","messages":"33298","suppressedMessages":"33299","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33300","messages":"33301","suppressedMessages":"33302","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33303","messages":"33304","suppressedMessages":"33305","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33306","messages":"33307","suppressedMessages":"33308","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33309","messages":"33310","suppressedMessages":"33311","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33312","messages":"33313","suppressedMessages":"33314","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33315","messages":"33316","suppressedMessages":"33317","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33318","messages":"33319","suppressedMessages":"33320","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33321","messages":"33322","suppressedMessages":"33323","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33324","messages":"33325","suppressedMessages":"33326","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33327","messages":"33328","suppressedMessages":"33329","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33330","messages":"33331","suppressedMessages":"33332","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33333","messages":"33334","suppressedMessages":"33335","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33336","messages":"33337","suppressedMessages":"33338","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33339","messages":"33340","suppressedMessages":"33341","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33342","messages":"33343","suppressedMessages":"33344","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33345","messages":"33346","suppressedMessages":"33347","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33348","messages":"33349","suppressedMessages":"33350","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33351","messages":"33352","suppressedMessages":"33353","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33354","messages":"33355","suppressedMessages":"33356","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33357","messages":"33358","suppressedMessages":"33359","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33360","messages":"33361","suppressedMessages":"33362","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33363","messages":"33364","suppressedMessages":"33365","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33366","messages":"33367","suppressedMessages":"33368","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33369","messages":"33370","suppressedMessages":"33371","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33372","messages":"33373","suppressedMessages":"33374","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33375","messages":"33376","suppressedMessages":"33377","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33378","messages":"33379","suppressedMessages":"33380","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33381","messages":"33382","suppressedMessages":"33383","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33384","messages":"33385","suppressedMessages":"33386","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33387","messages":"33388","suppressedMessages":"33389","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33390","messages":"33391","suppressedMessages":"33392","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33393","messages":"33394","suppressedMessages":"33395","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33396","messages":"33397","suppressedMessages":"33398","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33399","messages":"33400","suppressedMessages":"33401","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33402","messages":"33403","suppressedMessages":"33404","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33405","messages":"33406","suppressedMessages":"33407","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33408","messages":"33409","suppressedMessages":"33410","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33411","messages":"33412","suppressedMessages":"33413","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33414","messages":"33415","suppressedMessages":"33416","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33417","messages":"33418","suppressedMessages":"33419","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33420","messages":"33421","suppressedMessages":"33422","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33423","messages":"33424","suppressedMessages":"33425","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33426","messages":"33427","suppressedMessages":"33428","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33429","messages":"33430","suppressedMessages":"33431","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33432","messages":"33433","suppressedMessages":"33434","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33435","messages":"33436","suppressedMessages":"33437","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33438","messages":"33439","suppressedMessages":"33440","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33441","messages":"33442","suppressedMessages":"33443","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33444","messages":"33445","suppressedMessages":"33446","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33447","messages":"33448","suppressedMessages":"33449","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33450","messages":"33451","suppressedMessages":"33452","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33453","messages":"33454","suppressedMessages":"33455","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33456","messages":"33457","suppressedMessages":"33458","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33459","messages":"33460","suppressedMessages":"33461","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33462","messages":"33463","suppressedMessages":"33464","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33465","messages":"33466","suppressedMessages":"33467","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33468","messages":"33469","suppressedMessages":"33470","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33471","messages":"33472","suppressedMessages":"33473","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33474","messages":"33475","suppressedMessages":"33476","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33477","messages":"33478","suppressedMessages":"33479","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33480","messages":"33481","suppressedMessages":"33482","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33483","messages":"33484","suppressedMessages":"33485","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33486","messages":"33487","suppressedMessages":"33488","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33489","messages":"33490","suppressedMessages":"33491","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33492","messages":"33493","suppressedMessages":"33494","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33495","messages":"33496","suppressedMessages":"33497","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33498","messages":"33499","suppressedMessages":"33500","errorCount":9,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33501","messages":"33502","suppressedMessages":"33503","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33504","messages":"33505","suppressedMessages":"33506","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33507","messages":"33508","suppressedMessages":"33509","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33510","messages":"33511","suppressedMessages":"33512","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33513","messages":"33514","suppressedMessages":"33515","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33516","messages":"33517","suppressedMessages":"33518","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33519","messages":"33520","suppressedMessages":"33521","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33522","messages":"33523","suppressedMessages":"33524","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33525","messages":"33526","suppressedMessages":"33527","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33528","messages":"33529","suppressedMessages":"33530","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33531","messages":"33532","suppressedMessages":"33533","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33534","messages":"33535","suppressedMessages":"33536","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33537","messages":"33538","suppressedMessages":"33539","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33540","messages":"33541","suppressedMessages":"33542","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33543","messages":"33544","suppressedMessages":"33545","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33546","messages":"33547","suppressedMessages":"33548","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33549","messages":"33550","suppressedMessages":"33551","errorCount":29,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33552","messages":"33553","suppressedMessages":"33554","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33555","messages":"33556","suppressedMessages":"33557","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33558","messages":"33559","suppressedMessages":"33560","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33561","messages":"33562","suppressedMessages":"33563","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33564","messages":"33565","suppressedMessages":"33566","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33567","messages":"33568","suppressedMessages":"33569","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33570","messages":"33571","suppressedMessages":"33572","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33573","messages":"33574","suppressedMessages":"33575","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33576","messages":"33577","suppressedMessages":"33578","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33579","messages":"33580","suppressedMessages":"33581","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33582","messages":"33583","suppressedMessages":"33584","errorCount":12,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33585","messages":"33586","suppressedMessages":"33587","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33588","messages":"33589","suppressedMessages":"33590","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33591","messages":"33592","suppressedMessages":"33593","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33594","messages":"33595","suppressedMessages":"33596","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33597","messages":"33598","suppressedMessages":"33599","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33600","messages":"33601","suppressedMessages":"33602","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33603","messages":"33604","suppressedMessages":"33605","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33606","messages":"33607","suppressedMessages":"33608","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33609","messages":"33610","suppressedMessages":"33611","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33612","messages":"33613","suppressedMessages":"33614","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33615","messages":"33616","suppressedMessages":"33617","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33618","messages":"33619","suppressedMessages":"33620","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33621","messages":"33622","suppressedMessages":"33623","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33624","messages":"33625","suppressedMessages":"33626","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33627","messages":"33628","suppressedMessages":"33629","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33630","messages":"33631","suppressedMessages":"33632","errorCount":18,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33633","messages":"33634","suppressedMessages":"33635","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33636","messages":"33637","suppressedMessages":"33638","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33639","messages":"33640","suppressedMessages":"33641","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33642","messages":"33643","suppressedMessages":"33644","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33645","messages":"33646","suppressedMessages":"33647","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33648","messages":"33649","suppressedMessages":"33650","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33651","messages":"33652","suppressedMessages":"33653","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33654","messages":"33655","suppressedMessages":"33656","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33657","messages":"33658","suppressedMessages":"33659","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33660","messages":"33661","suppressedMessages":"33662","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33663","messages":"33664","suppressedMessages":"33665","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33666","messages":"33667","suppressedMessages":"33668","errorCount":8,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33669","messages":"33670","suppressedMessages":"33671","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33672","messages":"33673","suppressedMessages":"33674","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33675","messages":"33676","suppressedMessages":"33677","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33678","messages":"33679","suppressedMessages":"33680","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33681","messages":"33682","suppressedMessages":"33683","errorCount":20,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33684","messages":"33685","suppressedMessages":"33686","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33687","messages":"33688","suppressedMessages":"33689","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33690","messages":"33691","suppressedMessages":"33692","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33693","messages":"33694","suppressedMessages":"33695","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33696","messages":"33697","suppressedMessages":"33698","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33699","messages":"33700","suppressedMessages":"33701","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33702","messages":"33703","suppressedMessages":"33704","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33705","messages":"33706","suppressedMessages":"33707","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33708","messages":"33709","suppressedMessages":"33710","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33711","messages":"33712","suppressedMessages":"33713","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33714","messages":"33715","suppressedMessages":"33716","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33717","messages":"33718","suppressedMessages":"33719","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33720","messages":"33721","suppressedMessages":"33722","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33723","messages":"33724","suppressedMessages":"33725","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33726","messages":"33727","suppressedMessages":"33728","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33729","messages":"33730","suppressedMessages":"33731","errorCount":8,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33732","messages":"33733","suppressedMessages":"33734","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33735","messages":"33736","suppressedMessages":"33737","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33738","messages":"33739","suppressedMessages":"33740","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33741","messages":"33742","suppressedMessages":"33743","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33744","messages":"33745","suppressedMessages":"33746","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33747","messages":"33748","suppressedMessages":"33749","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33750","messages":"33751","suppressedMessages":"33752","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33753","messages":"33754","suppressedMessages":"33755","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33756","messages":"33757","suppressedMessages":"33758","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33759","messages":"33760","suppressedMessages":"33761","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33762","messages":"33763","suppressedMessages":"33764","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33765","messages":"33766","suppressedMessages":"33767","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33768","messages":"33769","suppressedMessages":"33770","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33771","messages":"33772","suppressedMessages":"33773","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33774","messages":"33775","suppressedMessages":"33776","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33777","messages":"33778","suppressedMessages":"33779","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33780","messages":"33781","suppressedMessages":"33782","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33783","messages":"33784","suppressedMessages":"33785","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33786","messages":"33787","suppressedMessages":"33788","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33789","messages":"33790","suppressedMessages":"33791","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33792","messages":"33793","suppressedMessages":"33794","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33795","messages":"33796","suppressedMessages":"33797","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33798","messages":"33799","suppressedMessages":"33800","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33801","messages":"33802","suppressedMessages":"33803","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33804","messages":"33805","suppressedMessages":"33806","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33807","messages":"33808","suppressedMessages":"33809","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33810","messages":"33811","suppressedMessages":"33812","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33813","messages":"33814","suppressedMessages":"33815","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33816","messages":"33817","suppressedMessages":"33818","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33819","messages":"33820","suppressedMessages":"33821","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33822","messages":"33823","suppressedMessages":"33824","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33825","messages":"33826","suppressedMessages":"33827","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33828","messages":"33829","suppressedMessages":"33830","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33831","messages":"33832","suppressedMessages":"33833","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33834","messages":"33835","suppressedMessages":"33836","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33837","messages":"33838","suppressedMessages":"33839","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33840","messages":"33841","suppressedMessages":"33842","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33843","messages":"33844","suppressedMessages":"33845","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33846","messages":"33847","suppressedMessages":"33848","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33849","messages":"33850","suppressedMessages":"33851","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33852","messages":"33853","suppressedMessages":"33854","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33855","messages":"33856","suppressedMessages":"33857","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33858","messages":"33859","suppressedMessages":"33860","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33861","messages":"33862","suppressedMessages":"33863","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33864","messages":"33865","suppressedMessages":"33866","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33867","messages":"33868","suppressedMessages":"33869","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33870","messages":"33871","suppressedMessages":"33872","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33873","messages":"33874","suppressedMessages":"33875","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33876","messages":"33877","suppressedMessages":"33878","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33879","messages":"33880","suppressedMessages":"33881","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33882","messages":"33883","suppressedMessages":"33884","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33885","messages":"33886","suppressedMessages":"33887","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33888","messages":"33889","suppressedMessages":"33890","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33891","messages":"33892","suppressedMessages":"33893","errorCount":8,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33894","messages":"33895","suppressedMessages":"33896","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33897","messages":"33898","suppressedMessages":"33899","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33900","messages":"33901","suppressedMessages":"33902","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33903","messages":"33904","suppressedMessages":"33905","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33906","messages":"33907","suppressedMessages":"33908","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33909","messages":"33910","suppressedMessages":"33911","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33912","messages":"33913","suppressedMessages":"33914","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33915","messages":"33916","suppressedMessages":"33917","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33918","messages":"33919","suppressedMessages":"33920","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33921","messages":"33922","suppressedMessages":"33923","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33924","messages":"33925","suppressedMessages":"33926","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33927","messages":"33928","suppressedMessages":"33929","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33930","messages":"33931","suppressedMessages":"33932","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33933","messages":"33934","suppressedMessages":"33935","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33936","messages":"33937","suppressedMessages":"33938","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33939","messages":"33940","suppressedMessages":"33941","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33942","messages":"33943","suppressedMessages":"33944","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33945","messages":"33946","suppressedMessages":"33947","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33948","messages":"33949","suppressedMessages":"33950","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33951","messages":"33952","suppressedMessages":"33953","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33954","messages":"33955","suppressedMessages":"33956","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33957","messages":"33958","suppressedMessages":"33959","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33960","messages":"33961","suppressedMessages":"33962","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33963","messages":"33964","suppressedMessages":"33965","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33966","messages":"33967","suppressedMessages":"33968","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33969","messages":"33970","suppressedMessages":"33971","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33972","messages":"33973","suppressedMessages":"33974","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33975","messages":"33976","suppressedMessages":"33977","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33978","messages":"33979","suppressedMessages":"33980","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"33981","messages":"33982","suppressedMessages":"33983","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33984","messages":"33985","suppressedMessages":"33986","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33987","messages":"33988","suppressedMessages":"33989","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33990","messages":"33991","suppressedMessages":"33992","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33993","messages":"33994","suppressedMessages":"33995","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33996","messages":"33997","suppressedMessages":"33998","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33999","messages":"34000","suppressedMessages":"34001","errorCount":8,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34002","messages":"34003","suppressedMessages":"34004","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34005","messages":"34006","suppressedMessages":"34007","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34008","messages":"34009","suppressedMessages":"34010","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34011","messages":"34012","suppressedMessages":"34013","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34014","messages":"34015","suppressedMessages":"34016","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34017","messages":"34018","suppressedMessages":"34019","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34020","messages":"34021","suppressedMessages":"34022","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34023","messages":"34024","suppressedMessages":"34025","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34026","messages":"34027","suppressedMessages":"34028","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34029","messages":"34030","suppressedMessages":"34031","errorCount":19,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34032","messages":"34033","suppressedMessages":"34034","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34035","messages":"34036","suppressedMessages":"34037","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34038","messages":"34039","suppressedMessages":"34040","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34041","messages":"34042","suppressedMessages":"34043","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34044","messages":"34045","suppressedMessages":"34046","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34047","messages":"34048","suppressedMessages":"34049","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34050","messages":"34051","suppressedMessages":"34052","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34053","messages":"34054","suppressedMessages":"34055","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34056","messages":"34057","suppressedMessages":"34058","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34059","messages":"34060","suppressedMessages":"34061","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34062","messages":"34063","suppressedMessages":"34064","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34065","messages":"34066","suppressedMessages":"34067","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34068","messages":"34069","suppressedMessages":"34070","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34071","messages":"34072","suppressedMessages":"34073","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34074","messages":"34075","suppressedMessages":"34076","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34077","messages":"34078","suppressedMessages":"34079","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34080","messages":"34081","suppressedMessages":"34082","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34083","messages":"34084","suppressedMessages":"34085","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34086","messages":"34087","suppressedMessages":"34088","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34089","messages":"34090","suppressedMessages":"34091","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34092","messages":"34093","suppressedMessages":"34094","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34095","messages":"34096","suppressedMessages":"34097","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34098","messages":"34099","suppressedMessages":"34100","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34101","messages":"34102","suppressedMessages":"34103","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34104","messages":"34105","suppressedMessages":"34106","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34107","messages":"34108","suppressedMessages":"34109","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34110","messages":"34111","suppressedMessages":"34112","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34113","messages":"34114","suppressedMessages":"34115","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34116","messages":"34117","suppressedMessages":"34118","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34119","messages":"34120","suppressedMessages":"34121","errorCount":42,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34122","messages":"34123","suppressedMessages":"34124","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34125","messages":"34126","suppressedMessages":"34127","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34128","messages":"34129","suppressedMessages":"34130","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34131","messages":"34132","suppressedMessages":"34133","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34134","messages":"34135","suppressedMessages":"34136","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34137","messages":"34138","suppressedMessages":"34139","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34140","messages":"34141","suppressedMessages":"34142","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34143","messages":"34144","suppressedMessages":"34145","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34146","messages":"34147","suppressedMessages":"34148","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34149","messages":"34150","suppressedMessages":"34151","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34152","messages":"34153","suppressedMessages":"34154","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34155","messages":"34156","suppressedMessages":"34157","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34158","messages":"34159","suppressedMessages":"34160","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34161","messages":"34162","suppressedMessages":"34163","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34164","messages":"34165","suppressedMessages":"34166","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34167","messages":"34168","suppressedMessages":"34169","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34170","messages":"34171","suppressedMessages":"34172","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34173","messages":"34174","suppressedMessages":"34175","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34176","messages":"34177","suppressedMessages":"34178","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34179","messages":"34180","suppressedMessages":"34181","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34182","messages":"34183","suppressedMessages":"34184","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34185","messages":"34186","suppressedMessages":"34187","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34188","messages":"34189","suppressedMessages":"34190","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34191","messages":"34192","suppressedMessages":"34193","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34194","messages":"34195","suppressedMessages":"34196","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34197","messages":"34198","suppressedMessages":"34199","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34200","messages":"34201","suppressedMessages":"34202","errorCount":40,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34203","messages":"34204","suppressedMessages":"34205","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34206","messages":"34207","suppressedMessages":"34208","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34209","messages":"34210","suppressedMessages":"34211","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34212","messages":"34213","suppressedMessages":"34214","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34215","messages":"34216","suppressedMessages":"34217","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34218","messages":"34219","suppressedMessages":"34220","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34221","messages":"34222","suppressedMessages":"34223","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34224","messages":"34225","suppressedMessages":"34226","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34227","messages":"34228","suppressedMessages":"34229","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34230","messages":"34231","suppressedMessages":"34232","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34233","messages":"34234","suppressedMessages":"34235","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34236","messages":"34237","suppressedMessages":"34238","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34239","messages":"34240","suppressedMessages":"34241","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34242","messages":"34243","suppressedMessages":"34244","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34245","messages":"34246","suppressedMessages":"34247","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34248","messages":"34249","suppressedMessages":"34250","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34251","messages":"34252","suppressedMessages":"34253","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34254","messages":"34255","suppressedMessages":"34256","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34257","messages":"34258","suppressedMessages":"34259","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34260","messages":"34261","suppressedMessages":"34262","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34263","messages":"34264","suppressedMessages":"34265","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34266","messages":"34267","suppressedMessages":"34268","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34269","messages":"34270","suppressedMessages":"34271","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34272","messages":"34273","suppressedMessages":"34274","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34275","messages":"34276","suppressedMessages":"34277","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34278","messages":"34279","suppressedMessages":"34280","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34281","messages":"34282","suppressedMessages":"34283","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34284","messages":"34285","suppressedMessages":"34286","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34287","messages":"34288","suppressedMessages":"34289","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34290","messages":"34291","suppressedMessages":"34292","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34293","messages":"34294","suppressedMessages":"34295","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34296","messages":"34297","suppressedMessages":"34298","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34299","messages":"34300","suppressedMessages":"34301","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34302","messages":"34303","suppressedMessages":"34304","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34305","messages":"34306","suppressedMessages":"34307","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34308","messages":"34309","suppressedMessages":"34310","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34311","messages":"34312","suppressedMessages":"34313","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34314","messages":"34315","suppressedMessages":"34316","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34317","messages":"34318","suppressedMessages":"34319","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34320","messages":"34321","suppressedMessages":"34322","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34323","messages":"34324","suppressedMessages":"34325","errorCount":20,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34326","messages":"34327","suppressedMessages":"34328","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34329","messages":"34330","suppressedMessages":"34331","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34332","messages":"34333","suppressedMessages":"34334","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34335","messages":"34336","suppressedMessages":"34337","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34338","messages":"34339","suppressedMessages":"34340","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34341","messages":"34342","suppressedMessages":"34343","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34344","messages":"34345","suppressedMessages":"34346","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34347","messages":"34348","suppressedMessages":"34349","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34350","messages":"34351","suppressedMessages":"34352","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34353","messages":"34354","suppressedMessages":"34355","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34356","messages":"34357","suppressedMessages":"34358","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34359","messages":"34360","suppressedMessages":"34361","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34362","messages":"34363","suppressedMessages":"34364","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34365","messages":"34366","suppressedMessages":"34367","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34368","messages":"34369","suppressedMessages":"34370","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34371","messages":"34372","suppressedMessages":"34373","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34374","messages":"34375","suppressedMessages":"34376","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34377","messages":"34378","suppressedMessages":"34379","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34380","messages":"34381","suppressedMessages":"34382","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34383","messages":"34384","suppressedMessages":"34385","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34386","messages":"34387","suppressedMessages":"34388","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34389","messages":"34390","suppressedMessages":"34391","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34392","messages":"34393","suppressedMessages":"34394","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34395","messages":"34396","suppressedMessages":"34397","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34398","messages":"34399","suppressedMessages":"34400","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34401","messages":"34402","suppressedMessages":"34403","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34404","messages":"34405","suppressedMessages":"34406","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34407","messages":"34408","suppressedMessages":"34409","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34410","messages":"34411","suppressedMessages":"34412","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34413","messages":"34414","suppressedMessages":"34415","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34416","messages":"34417","suppressedMessages":"34418","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34419","messages":"34420","suppressedMessages":"34421","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34422","messages":"34423","suppressedMessages":"34424","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34425","messages":"34426","suppressedMessages":"34427","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34428","messages":"34429","suppressedMessages":"34430","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34431","messages":"34432","suppressedMessages":"34433","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34434","messages":"34435","suppressedMessages":"34436","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34437","messages":"34438","suppressedMessages":"34439","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34440","messages":"34441","suppressedMessages":"34442","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34443","messages":"34444","suppressedMessages":"34445","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34446","messages":"34447","suppressedMessages":"34448","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34449","messages":"34450","suppressedMessages":"34451","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34452","messages":"34453","suppressedMessages":"34454","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34455","messages":"34456","suppressedMessages":"34457","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34458","messages":"34459","suppressedMessages":"34460","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34461","messages":"34462","suppressedMessages":"34463","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34464","messages":"34465","suppressedMessages":"34466","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34467","messages":"34468","suppressedMessages":"34469","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34470","messages":"34471","suppressedMessages":"34472","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34473","messages":"34474","suppressedMessages":"34475","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34476","messages":"34477","suppressedMessages":"34478","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34479","messages":"34480","suppressedMessages":"34481","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34482","messages":"34483","suppressedMessages":"34484","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34485","messages":"34486","suppressedMessages":"34487","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34488","messages":"34489","suppressedMessages":"34490","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34491","messages":"34492","suppressedMessages":"34493","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34494","messages":"34495","suppressedMessages":"34496","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34497","messages":"34498","suppressedMessages":"34499","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34500","messages":"34501","suppressedMessages":"34502","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34503","messages":"34504","suppressedMessages":"34505","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34506","messages":"34507","suppressedMessages":"34508","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34509","messages":"34510","suppressedMessages":"34511","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34512","messages":"34513","suppressedMessages":"34514","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34515","messages":"34516","suppressedMessages":"34517","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34518","messages":"34519","suppressedMessages":"34520","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34521","messages":"34522","suppressedMessages":"34523","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34524","messages":"34525","suppressedMessages":"34526","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34527","messages":"34528","suppressedMessages":"34529","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34530","messages":"34531","suppressedMessages":"34532","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34533","messages":"34534","suppressedMessages":"34535","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34536","messages":"34537","suppressedMessages":"34538","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34539","messages":"34540","suppressedMessages":"34541","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34542","messages":"34543","suppressedMessages":"34544","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34545","messages":"34546","suppressedMessages":"34547","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34548","messages":"34549","suppressedMessages":"34550","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34551","messages":"34552","suppressedMessages":"34553","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34554","messages":"34555","suppressedMessages":"34556","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34557","messages":"34558","suppressedMessages":"34559","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34560","messages":"34561","suppressedMessages":"34562","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34563","messages":"34564","suppressedMessages":"34565","errorCount":8,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34566","messages":"34567","suppressedMessages":"34568","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34569","messages":"34570","suppressedMessages":"34571","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34572","messages":"34573","suppressedMessages":"34574","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34575","messages":"34576","suppressedMessages":"34577","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34578","messages":"34579","suppressedMessages":"34580","errorCount":9,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34581","messages":"34582","suppressedMessages":"34583","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34584","messages":"34585","suppressedMessages":"34586","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34587","messages":"34588","suppressedMessages":"34589","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34590","messages":"34591","suppressedMessages":"34592","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34593","messages":"34594","suppressedMessages":"34595","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34596","messages":"34597","suppressedMessages":"34598","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34599","messages":"34600","suppressedMessages":"34601","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34602","messages":"34603","suppressedMessages":"34604","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34605","messages":"34606","suppressedMessages":"34607","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34608","messages":"34609","suppressedMessages":"34610","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34611","messages":"34612","suppressedMessages":"34613","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34614","messages":"34615","suppressedMessages":"34616","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34617","messages":"34618","suppressedMessages":"34619","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34620","messages":"34621","suppressedMessages":"34622","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34623","messages":"34624","suppressedMessages":"34625","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34626","messages":"34627","suppressedMessages":"34628","errorCount":19,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34629","messages":"34630","suppressedMessages":"34631","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34632","messages":"34633","suppressedMessages":"34634","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34635","messages":"34636","suppressedMessages":"34637","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34638","messages":"34639","suppressedMessages":"34640","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34641","messages":"34642","suppressedMessages":"34643","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34644","messages":"34645","suppressedMessages":"34646","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34647","messages":"34648","suppressedMessages":"34649","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34650","messages":"34651","suppressedMessages":"34652","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34653","messages":"34654","suppressedMessages":"34655","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34656","messages":"34657","suppressedMessages":"34658","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34659","messages":"34660","suppressedMessages":"34661","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34662","messages":"34663","suppressedMessages":"34664","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34665","messages":"34666","suppressedMessages":"34667","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34668","messages":"34669","suppressedMessages":"34670","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34671","messages":"34672","suppressedMessages":"34673","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34674","messages":"34675","suppressedMessages":"34676","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34677","messages":"34678","suppressedMessages":"34679","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34680","messages":"34681","suppressedMessages":"34682","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34683","messages":"34684","suppressedMessages":"34685","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34686","messages":"34687","suppressedMessages":"34688","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34689","messages":"34690","suppressedMessages":"34691","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34692","messages":"34693","suppressedMessages":"34694","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34695","messages":"34696","suppressedMessages":"34697","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34698","messages":"34699","suppressedMessages":"34700","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34701","messages":"34702","suppressedMessages":"34703","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34704","messages":"34705","suppressedMessages":"34706","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34707","messages":"34708","suppressedMessages":"34709","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34710","messages":"34711","suppressedMessages":"34712","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34713","messages":"34714","suppressedMessages":"34715","errorCount":25,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34716","messages":"34717","suppressedMessages":"34718","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34719","messages":"34720","suppressedMessages":"34721","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34722","messages":"34723","suppressedMessages":"34724","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34725","messages":"34726","suppressedMessages":"34727","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34728","messages":"34729","suppressedMessages":"34730","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34731","messages":"34732","suppressedMessages":"34733","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34734","messages":"34735","suppressedMessages":"34736","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34737","messages":"34738","suppressedMessages":"34739","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34740","messages":"34741","suppressedMessages":"34742","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34743","messages":"34744","suppressedMessages":"34745","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34746","messages":"34747","suppressedMessages":"34748","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34749","messages":"34750","suppressedMessages":"34751","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34752","messages":"34753","suppressedMessages":"34754","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34755","messages":"34756","suppressedMessages":"34757","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34758","messages":"34759","suppressedMessages":"34760","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34761","messages":"34762","suppressedMessages":"34763","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34764","messages":"34765","suppressedMessages":"34766","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34767","messages":"34768","suppressedMessages":"34769","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34770","messages":"34771","suppressedMessages":"34772","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34773","messages":"34774","suppressedMessages":"34775","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34776","messages":"34777","suppressedMessages":"34778","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34779","messages":"34780","suppressedMessages":"34781","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34782","messages":"34783","suppressedMessages":"34784","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34785","messages":"34786","suppressedMessages":"34787","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34788","messages":"34789","suppressedMessages":"34790","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34791","messages":"34792","suppressedMessages":"34793","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34794","messages":"34795","suppressedMessages":"34796","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34797","messages":"34798","suppressedMessages":"34799","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34800","messages":"34801","suppressedMessages":"34802","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34803","messages":"34804","suppressedMessages":"34805","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34806","messages":"34807","suppressedMessages":"34808","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34809","messages":"34810","suppressedMessages":"34811","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34812","messages":"34813","suppressedMessages":"34814","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34815","messages":"34816","suppressedMessages":"34817","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34818","messages":"34819","suppressedMessages":"34820","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34821","messages":"34822","suppressedMessages":"34823","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34824","messages":"34825","suppressedMessages":"34826","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34827","messages":"34828","suppressedMessages":"34829","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34830","messages":"34831","suppressedMessages":"34832","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34833","messages":"34834","suppressedMessages":"34835","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34836","messages":"34837","suppressedMessages":"34838","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34839","messages":"34840","suppressedMessages":"34841","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34842","messages":"34843","suppressedMessages":"34844","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34845","messages":"34846","suppressedMessages":"34847","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34848","messages":"34849","suppressedMessages":"34850","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34851","messages":"34852","suppressedMessages":"34853","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34854","messages":"34855","suppressedMessages":"34856","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34857","messages":"34858","suppressedMessages":"34859","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34860","messages":"34861","suppressedMessages":"34862","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34863","messages":"34864","suppressedMessages":"34865","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34866","messages":"34867","suppressedMessages":"34868","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34869","messages":"34870","suppressedMessages":"34871","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34872","messages":"34873","suppressedMessages":"34874","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34875","messages":"34876","suppressedMessages":"34877","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34878","messages":"34879","suppressedMessages":"34880","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34881","messages":"34882","suppressedMessages":"34883","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34884","messages":"34885","suppressedMessages":"34886","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34887","messages":"34888","suppressedMessages":"34889","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34890","messages":"34891","suppressedMessages":"34892","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34893","messages":"34894","suppressedMessages":"34895","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34896","messages":"34897","suppressedMessages":"34898","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34899","messages":"34900","suppressedMessages":"34901","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34902","messages":"34903","suppressedMessages":"34904","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34905","messages":"34906","suppressedMessages":"34907","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34908","messages":"34909","suppressedMessages":"34910","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34911","messages":"34912","suppressedMessages":"34913","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34914","messages":"34915","suppressedMessages":"34916","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34917","messages":"34918","suppressedMessages":"34919","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34920","messages":"34921","suppressedMessages":"34922","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34923","messages":"34924","suppressedMessages":"34925","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34926","messages":"34927","suppressedMessages":"34928","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34929","messages":"34930","suppressedMessages":"34931","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34932","messages":"34933","suppressedMessages":"34934","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34935","messages":"34936","suppressedMessages":"34937","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34938","messages":"34939","suppressedMessages":"34940","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34941","messages":"34942","suppressedMessages":"34943","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34944","messages":"34945","suppressedMessages":"34946","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34947","messages":"34948","suppressedMessages":"34949","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34950","messages":"34951","suppressedMessages":"34952","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34953","messages":"34954","suppressedMessages":"34955","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34956","messages":"34957","suppressedMessages":"34958","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"34959","messages":"34960","suppressedMessages":"34961","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34962","messages":"34963","suppressedMessages":"34964","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34965","messages":"34966","suppressedMessages":"34967","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34968","messages":"34969","suppressedMessages":"34970","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34971","messages":"34972","suppressedMessages":"34973","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34974","messages":"34975","suppressedMessages":"34976","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34977","messages":"34978","suppressedMessages":"34979","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34980","messages":"34981","suppressedMessages":"34982","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34983","messages":"34984","suppressedMessages":"34985","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34986","messages":"34987","suppressedMessages":"34988","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34989","messages":"34990","suppressedMessages":"34991","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34992","messages":"34993","suppressedMessages":"34994","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34995","messages":"34996","suppressedMessages":"34997","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"34998","messages":"34999","suppressedMessages":"35000","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35001","messages":"35002","suppressedMessages":"35003","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35004","messages":"35005","suppressedMessages":"35006","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35007","messages":"35008","suppressedMessages":"35009","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35010","messages":"35011","suppressedMessages":"35012","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35013","messages":"35014","suppressedMessages":"35015","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35016","messages":"35017","suppressedMessages":"35018","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35019","messages":"35020","suppressedMessages":"35021","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35022","messages":"35023","suppressedMessages":"35024","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35025","messages":"35026","suppressedMessages":"35027","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35028","messages":"35029","suppressedMessages":"35030","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35031","messages":"35032","suppressedMessages":"35033","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35034","messages":"35035","suppressedMessages":"35036","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35037","messages":"35038","suppressedMessages":"35039","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35040","messages":"35041","suppressedMessages":"35042","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35043","messages":"35044","suppressedMessages":"35045","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35046","messages":"35047","suppressedMessages":"35048","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35049","messages":"35050","suppressedMessages":"35051","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35052","messages":"35053","suppressedMessages":"35054","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35055","messages":"35056","suppressedMessages":"35057","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35058","messages":"35059","suppressedMessages":"35060","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35061","messages":"35062","suppressedMessages":"35063","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35064","messages":"35065","suppressedMessages":"35066","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35067","messages":"35068","suppressedMessages":"35069","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35070","messages":"35071","suppressedMessages":"35072","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35073","messages":"35074","suppressedMessages":"35075","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35076","messages":"35077","suppressedMessages":"35078","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35079","messages":"35080","suppressedMessages":"35081","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35082","messages":"35083","suppressedMessages":"35084","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35085","messages":"35086","suppressedMessages":"35087","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35088","messages":"35089","suppressedMessages":"35090","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35091","messages":"35092","suppressedMessages":"35093","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35094","messages":"35095","suppressedMessages":"35096","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35097","messages":"35098","suppressedMessages":"35099","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35100","messages":"35101","suppressedMessages":"35102","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35103","messages":"35104","suppressedMessages":"35105","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35106","messages":"35107","suppressedMessages":"35108","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35109","messages":"35110","suppressedMessages":"35111","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35112","messages":"35113","suppressedMessages":"35114","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35115","messages":"35116","suppressedMessages":"35117","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35118","messages":"35119","suppressedMessages":"35120","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35121","messages":"35122","suppressedMessages":"35123","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35124","messages":"35125","suppressedMessages":"35126","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35127","messages":"35128","suppressedMessages":"35129","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35130","messages":"35131","suppressedMessages":"35132","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35133","messages":"35134","suppressedMessages":"35135","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35136","messages":"35137","suppressedMessages":"35138","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35139","messages":"35140","suppressedMessages":"35141","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35142","messages":"35143","suppressedMessages":"35144","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35145","messages":"35146","suppressedMessages":"35147","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35148","messages":"35149","suppressedMessages":"35150","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35151","messages":"35152","suppressedMessages":"35153","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35154","messages":"35155","suppressedMessages":"35156","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35157","messages":"35158","suppressedMessages":"35159","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35160","messages":"35161","suppressedMessages":"35162","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35163","messages":"35164","suppressedMessages":"35165","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35166","messages":"35167","suppressedMessages":"35168","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35169","messages":"35170","suppressedMessages":"35171","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35172","messages":"35173","suppressedMessages":"35174","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35175","messages":"35176","suppressedMessages":"35177","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35178","messages":"35179","suppressedMessages":"35180","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35181","messages":"35182","suppressedMessages":"35183","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35184","messages":"35185","suppressedMessages":"35186","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35187","messages":"35188","suppressedMessages":"35189","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35190","messages":"35191","suppressedMessages":"35192","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35193","messages":"35194","suppressedMessages":"35195","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35196","messages":"35197","suppressedMessages":"35198","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35199","messages":"35200","suppressedMessages":"35201","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35202","messages":"35203","suppressedMessages":"35204","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35205","messages":"35206","suppressedMessages":"35207","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35208","messages":"35209","suppressedMessages":"35210","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35211","messages":"35212","suppressedMessages":"35213","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35214","messages":"35215","suppressedMessages":"35216","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35217","messages":"35218","suppressedMessages":"35219","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35220","messages":"35221","suppressedMessages":"35222","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35223","messages":"35224","suppressedMessages":"35225","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35226","messages":"35227","suppressedMessages":"35228","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35229","messages":"35230","suppressedMessages":"35231","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35232","messages":"35233","suppressedMessages":"35234","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35235","messages":"35236","suppressedMessages":"35237","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35238","messages":"35239","suppressedMessages":"35240","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35241","messages":"35242","suppressedMessages":"35243","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35244","messages":"35245","suppressedMessages":"35246","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35247","messages":"35248","suppressedMessages":"35249","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35250","messages":"35251","suppressedMessages":"35252","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35253","messages":"35254","suppressedMessages":"35255","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35256","messages":"35257","suppressedMessages":"35258","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35259","messages":"35260","suppressedMessages":"35261","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35262","messages":"35263","suppressedMessages":"35264","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35265","messages":"35266","suppressedMessages":"35267","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35268","messages":"35269","suppressedMessages":"35270","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35271","messages":"35272","suppressedMessages":"35273","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35274","messages":"35275","suppressedMessages":"35276","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35277","messages":"35278","suppressedMessages":"35279","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35280","messages":"35281","suppressedMessages":"35282","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35283","messages":"35284","suppressedMessages":"35285","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35286","messages":"35287","suppressedMessages":"35288","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35289","messages":"35290","suppressedMessages":"35291","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35292","messages":"35293","suppressedMessages":"35294","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35295","messages":"35296","suppressedMessages":"35297","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35298","messages":"35299","suppressedMessages":"35300","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35301","messages":"35302","suppressedMessages":"35303","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35304","messages":"35305","suppressedMessages":"35306","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35307","messages":"35308","suppressedMessages":"35309","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35310","messages":"35311","suppressedMessages":"35312","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35313","messages":"35314","suppressedMessages":"35315","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35316","messages":"35317","suppressedMessages":"35318","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35319","messages":"35320","suppressedMessages":"35321","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35322","messages":"35323","suppressedMessages":"35324","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35325","messages":"35326","suppressedMessages":"35327","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35328","messages":"35329","suppressedMessages":"35330","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35331","messages":"35332","suppressedMessages":"35333","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35334","messages":"35335","suppressedMessages":"35336","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35337","messages":"35338","suppressedMessages":"35339","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35340","messages":"35341","suppressedMessages":"35342","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35343","messages":"35344","suppressedMessages":"35345","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35346","messages":"35347","suppressedMessages":"35348","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35349","messages":"35350","suppressedMessages":"35351","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35352","messages":"35353","suppressedMessages":"35354","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35355","messages":"35356","suppressedMessages":"35357","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35358","messages":"35359","suppressedMessages":"35360","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35361","messages":"35362","suppressedMessages":"35363","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35364","messages":"35365","suppressedMessages":"35366","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35367","messages":"35368","suppressedMessages":"35369","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35370","messages":"35371","suppressedMessages":"35372","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35373","messages":"35374","suppressedMessages":"35375","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35376","messages":"35377","suppressedMessages":"35378","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35379","messages":"35380","suppressedMessages":"35381","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35382","messages":"35383","suppressedMessages":"35384","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35385","messages":"35386","suppressedMessages":"35387","errorCount":12,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35388","messages":"35389","suppressedMessages":"35390","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35391","messages":"35392","suppressedMessages":"35393","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35394","messages":"35395","suppressedMessages":"35396","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35397","messages":"35398","suppressedMessages":"35399","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35400","messages":"35401","suppressedMessages":"35402","errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35403","messages":"35404","suppressedMessages":"35405","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35406","messages":"35407","suppressedMessages":"35408","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35409","messages":"35410","suppressedMessages":"35411","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35412","messages":"35413","suppressedMessages":"35414","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35415","messages":"35416","suppressedMessages":"35417","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35418","messages":"35419","suppressedMessages":"35420","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35421","messages":"35422","suppressedMessages":"35423","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35424","messages":"35425","suppressedMessages":"35426","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35427","messages":"35428","suppressedMessages":"35429","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35430","messages":"35431","suppressedMessages":"35432","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35433","messages":"35434","suppressedMessages":"35435","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35436","messages":"35437","suppressedMessages":"35438","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35439","messages":"35440","suppressedMessages":"35441","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35442","messages":"35443","suppressedMessages":"35444","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35445","messages":"35446","suppressedMessages":"35447","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35448","messages":"35449","suppressedMessages":"35450","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35451","messages":"35452","suppressedMessages":"35453","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35454","messages":"35455","suppressedMessages":"35456","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35457","messages":"35458","suppressedMessages":"35459","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35460","messages":"35461","suppressedMessages":"35462","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35463","messages":"35464","suppressedMessages":"35465","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35466","messages":"35467","suppressedMessages":"35468","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35469","messages":"35470","suppressedMessages":"35471","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35472","messages":"35473","suppressedMessages":"35474","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35475","messages":"35476","suppressedMessages":"35477","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35478","messages":"35479","suppressedMessages":"35480","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35481","messages":"35482","suppressedMessages":"35483","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35484","messages":"35485","suppressedMessages":"35486","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35487","messages":"35488","suppressedMessages":"35489","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35490","messages":"35491","suppressedMessages":"35492","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35493","messages":"35494","suppressedMessages":"35495","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35496","messages":"35497","suppressedMessages":"35498","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35499","messages":"35500","suppressedMessages":"35501","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35502","messages":"35503","suppressedMessages":"35504","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35505","messages":"35506","suppressedMessages":"35507","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35508","messages":"35509","suppressedMessages":"35510","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35511","messages":"35512","suppressedMessages":"35513","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35514","messages":"35515","suppressedMessages":"35516","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35517","messages":"35518","suppressedMessages":"35519","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35520","messages":"35521","suppressedMessages":"35522","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35523","messages":"35524","suppressedMessages":"35525","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35526","messages":"35527","suppressedMessages":"35528","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35529","messages":"35530","suppressedMessages":"35531","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35532","messages":"35533","suppressedMessages":"35534","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35535","messages":"35536","suppressedMessages":"35537","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35538","messages":"35539","suppressedMessages":"35540","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35541","messages":"35542","suppressedMessages":"35543","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35544","messages":"35545","suppressedMessages":"35546","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35547","messages":"35548","suppressedMessages":"35549","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35550","messages":"35551","suppressedMessages":"35552","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35553","messages":"35554","suppressedMessages":"35555","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35556","messages":"35557","suppressedMessages":"35558","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35559","messages":"35560","suppressedMessages":"35561","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35562","messages":"35563","suppressedMessages":"35564","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35565","messages":"35566","suppressedMessages":"35567","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35568","messages":"35569","suppressedMessages":"35570","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35571","messages":"35572","suppressedMessages":"35573","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35574","messages":"35575","suppressedMessages":"35576","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35577","messages":"35578","suppressedMessages":"35579","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35580","messages":"35581","suppressedMessages":"35582","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35583","messages":"35584","suppressedMessages":"35585","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35586","messages":"35587","suppressedMessages":"35588","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35589","messages":"35590","suppressedMessages":"35591","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35592","messages":"35593","suppressedMessages":"35594","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35595","messages":"35596","suppressedMessages":"35597","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35598","messages":"35599","suppressedMessages":"35600","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35601","messages":"35602","suppressedMessages":"35603","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35604","messages":"35605","suppressedMessages":"35606","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35607","messages":"35608","suppressedMessages":"35609","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35610","messages":"35611","suppressedMessages":"35612","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35613","messages":"35614","suppressedMessages":"35615","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35616","messages":"35617","suppressedMessages":"35618","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35619","messages":"35620","suppressedMessages":"35621","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35622","messages":"35623","suppressedMessages":"35624","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35625","messages":"35626","suppressedMessages":"35627","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35628","messages":"35629","suppressedMessages":"35630","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35631","messages":"35632","suppressedMessages":"35633","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35634","messages":"35635","suppressedMessages":"35636","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35637","messages":"35638","suppressedMessages":"35639","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35640","messages":"35641","suppressedMessages":"35642","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35643","messages":"35644","suppressedMessages":"35645","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35646","messages":"35647","suppressedMessages":"35648","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35649","messages":"35650","suppressedMessages":"35651","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35652","messages":"35653","suppressedMessages":"35654","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35655","messages":"35656","suppressedMessages":"35657","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35658","messages":"35659","suppressedMessages":"35660","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35661","messages":"35662","suppressedMessages":"35663","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35664","messages":"35665","suppressedMessages":"35666","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35667","messages":"35668","suppressedMessages":"35669","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35670","messages":"35671","suppressedMessages":"35672","errorCount":58,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35673","messages":"35674","suppressedMessages":"35675","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35676","messages":"35677","suppressedMessages":"35678","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35679","messages":"35680","suppressedMessages":"35681","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35682","messages":"35683","suppressedMessages":"35684","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35685","messages":"35686","suppressedMessages":"35687","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35688","messages":"35689","suppressedMessages":"35690","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35691","messages":"35692","suppressedMessages":"35693","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35694","messages":"35695","suppressedMessages":"35696","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35697","messages":"35698","suppressedMessages":"35699","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35700","messages":"35701","suppressedMessages":"35702","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35703","messages":"35704","suppressedMessages":"35705","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35706","messages":"35707","suppressedMessages":"35708","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35709","messages":"35710","suppressedMessages":"35711","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35712","messages":"35713","suppressedMessages":"35714","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35715","messages":"35716","suppressedMessages":"35717","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35718","messages":"35719","suppressedMessages":"35720","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35721","messages":"35722","suppressedMessages":"35723","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35724","messages":"35725","suppressedMessages":"35726","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35727","messages":"35728","suppressedMessages":"35729","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35730","messages":"35731","suppressedMessages":"35732","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35733","messages":"35734","suppressedMessages":"35735","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35736","messages":"35737","suppressedMessages":"35738","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35739","messages":"35740","suppressedMessages":"35741","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35742","messages":"35743","suppressedMessages":"35744","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35745","messages":"35746","suppressedMessages":"35747","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35748","messages":"35749","suppressedMessages":"35750","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35751","messages":"35752","suppressedMessages":"35753","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35754","messages":"35755","suppressedMessages":"35756","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35757","messages":"35758","suppressedMessages":"35759","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35760","messages":"35761","suppressedMessages":"35762","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35763","messages":"35764","suppressedMessages":"35765","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35766","messages":"35767","suppressedMessages":"35768","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35769","messages":"35770","suppressedMessages":"35771","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35772","messages":"35773","suppressedMessages":"35774","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35775","messages":"35776","suppressedMessages":"35777","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35778","messages":"35779","suppressedMessages":"35780","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35781","messages":"35782","suppressedMessages":"35783","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35784","messages":"35785","suppressedMessages":"35786","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35787","messages":"35788","suppressedMessages":"35789","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35790","messages":"35791","suppressedMessages":"35792","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35793","messages":"35794","suppressedMessages":"35795","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35796","messages":"35797","suppressedMessages":"35798","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35799","messages":"35800","suppressedMessages":"35801","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35802","messages":"35803","suppressedMessages":"35804","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35805","messages":"35806","suppressedMessages":"35807","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35808","messages":"35809","suppressedMessages":"35810","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35811","messages":"35812","suppressedMessages":"35813","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35814","messages":"35815","suppressedMessages":"35816","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35817","messages":"35818","suppressedMessages":"35819","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35820","messages":"35821","suppressedMessages":"35822","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35823","messages":"35824","suppressedMessages":"35825","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35826","messages":"35827","suppressedMessages":"35828","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35829","messages":"35830","suppressedMessages":"35831","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35832","messages":"35833","suppressedMessages":"35834","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35835","messages":"35836","suppressedMessages":"35837","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35838","messages":"35839","suppressedMessages":"35840","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35841","messages":"35842","suppressedMessages":"35843","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35844","messages":"35845","suppressedMessages":"35846","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35847","messages":"35848","suppressedMessages":"35849","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35850","messages":"35851","suppressedMessages":"35852","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35853","messages":"35854","suppressedMessages":"35855","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35856","messages":"35857","suppressedMessages":"35858","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35859","messages":"35860","suppressedMessages":"35861","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35862","messages":"35863","suppressedMessages":"35864","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35865","messages":"35866","suppressedMessages":"35867","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35868","messages":"35869","suppressedMessages":"35870","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35871","messages":"35872","suppressedMessages":"35873","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35874","messages":"35875","suppressedMessages":"35876","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35877","messages":"35878","suppressedMessages":"35879","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35880","messages":"35881","suppressedMessages":"35882","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35883","messages":"35884","suppressedMessages":"35885","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35886","messages":"35887","suppressedMessages":"35888","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35889","messages":"35890","suppressedMessages":"35891","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35892","messages":"35893","suppressedMessages":"35894","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35895","messages":"35896","suppressedMessages":"35897","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35898","messages":"35899","suppressedMessages":"35900","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35901","messages":"35902","suppressedMessages":"35903","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35904","messages":"35905","suppressedMessages":"35906","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35907","messages":"35908","suppressedMessages":"35909","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35910","messages":"35911","suppressedMessages":"35912","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35913","messages":"35914","suppressedMessages":"35915","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35916","messages":"35917","suppressedMessages":"35918","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35919","messages":"35920","suppressedMessages":"35921","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35922","messages":"35923","suppressedMessages":"35924","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35925","messages":"35926","suppressedMessages":"35927","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35928","messages":"35929","suppressedMessages":"35930","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35931","messages":"35932","suppressedMessages":"35933","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35934","messages":"35935","suppressedMessages":"35936","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35937","messages":"35938","suppressedMessages":"35939","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35940","messages":"35941","suppressedMessages":"35942","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35943","messages":"35944","suppressedMessages":"35945","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35946","messages":"35947","suppressedMessages":"35948","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35949","messages":"35950","suppressedMessages":"35951","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35952","messages":"35953","suppressedMessages":"35954","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35955","messages":"35956","suppressedMessages":"35957","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35958","messages":"35959","suppressedMessages":"35960","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35961","messages":"35962","suppressedMessages":"35963","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35964","messages":"35965","suppressedMessages":"35966","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35967","messages":"35968","suppressedMessages":"35969","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35970","messages":"35971","suppressedMessages":"35972","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35973","messages":"35974","suppressedMessages":"35975","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35976","messages":"35977","suppressedMessages":"35978","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35979","messages":"35980","suppressedMessages":"35981","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35982","messages":"35983","suppressedMessages":"35984","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35985","messages":"35986","suppressedMessages":"35987","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35988","messages":"35989","suppressedMessages":"35990","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35991","messages":"35992","suppressedMessages":"35993","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35994","messages":"35995","suppressedMessages":"35996","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35997","messages":"35998","suppressedMessages":"35999","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36000","messages":"36001","suppressedMessages":"36002","errorCount":16,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36003","messages":"36004","suppressedMessages":"36005","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36006","messages":"36007","suppressedMessages":"36008","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36009","messages":"36010","suppressedMessages":"36011","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36012","messages":"36013","suppressedMessages":"36014","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36015","messages":"36016","suppressedMessages":"36017","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36018","messages":"36019","suppressedMessages":"36020","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36021","messages":"36022","suppressedMessages":"36023","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36024","messages":"36025","suppressedMessages":"36026","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36027","messages":"36028","suppressedMessages":"36029","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36030","messages":"36031","suppressedMessages":"36032","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36033","messages":"36034","suppressedMessages":"36035","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36036","messages":"36037","suppressedMessages":"36038","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36039","messages":"36040","suppressedMessages":"36041","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36042","messages":"36043","suppressedMessages":"36044","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36045","messages":"36046","suppressedMessages":"36047","errorCount":79,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36048","messages":"36049","suppressedMessages":"36050","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36051","messages":"36052","suppressedMessages":"36053","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36054","messages":"36055","suppressedMessages":"36056","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36057","messages":"36058","suppressedMessages":"36059","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36060","messages":"36061","suppressedMessages":"36062","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36063","messages":"36064","suppressedMessages":"36065","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36066","messages":"36067","suppressedMessages":"36068","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36069","messages":"36070","suppressedMessages":"36071","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36072","messages":"36073","suppressedMessages":"36074","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36075","messages":"36076","suppressedMessages":"36077","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36078","messages":"36079","suppressedMessages":"36080","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36081","messages":"36082","suppressedMessages":"36083","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36084","messages":"36085","suppressedMessages":"36086","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36087","messages":"36088","suppressedMessages":"36089","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36090","messages":"36091","suppressedMessages":"36092","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36093","messages":"36094","suppressedMessages":"36095","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36096","messages":"36097","suppressedMessages":"36098","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36099","messages":"36100","suppressedMessages":"36101","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36102","messages":"36103","suppressedMessages":"36104","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36105","messages":"36106","suppressedMessages":"36107","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36108","messages":"36109","suppressedMessages":"36110","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36111","messages":"36112","suppressedMessages":"36113","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36114","messages":"36115","suppressedMessages":"36116","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36117","messages":"36118","suppressedMessages":"36119","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36120","messages":"36121","suppressedMessages":"36122","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36123","messages":"36124","suppressedMessages":"36125","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36126","messages":"36127","suppressedMessages":"36128","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36129","messages":"36130","suppressedMessages":"36131","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36132","messages":"36133","suppressedMessages":"36134","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36135","messages":"36136","suppressedMessages":"36137","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36138","messages":"36139","suppressedMessages":"36140","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36141","messages":"36142","suppressedMessages":"36143","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36144","messages":"36145","suppressedMessages":"36146","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36147","messages":"36148","suppressedMessages":"36149","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36150","messages":"36151","suppressedMessages":"36152","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36153","messages":"36154","suppressedMessages":"36155","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36156","messages":"36157","suppressedMessages":"36158","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36159","messages":"36160","suppressedMessages":"36161","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36162","messages":"36163","suppressedMessages":"36164","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36165","messages":"36166","suppressedMessages":"36167","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36168","messages":"36169","suppressedMessages":"36170","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36171","messages":"36172","suppressedMessages":"36173","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36174","messages":"36175","suppressedMessages":"36176","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36177","messages":"36178","suppressedMessages":"36179","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36180","messages":"36181","suppressedMessages":"36182","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36183","messages":"36184","suppressedMessages":"36185","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36186","messages":"36187","suppressedMessages":"36188","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36189","messages":"36190","suppressedMessages":"36191","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36192","messages":"36193","suppressedMessages":"36194","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36195","messages":"36196","suppressedMessages":"36197","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36198","messages":"36199","suppressedMessages":"36200","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36201","messages":"36202","suppressedMessages":"36203","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36204","messages":"36205","suppressedMessages":"36206","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36207","messages":"36208","suppressedMessages":"36209","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36210","messages":"36211","suppressedMessages":"36212","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36213","messages":"36214","suppressedMessages":"36215","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36216","messages":"36217","suppressedMessages":"36218","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36219","messages":"36220","suppressedMessages":"36221","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36222","messages":"36223","suppressedMessages":"36224","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36225","messages":"36226","suppressedMessages":"36227","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36228","messages":"36229","suppressedMessages":"36230","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36231","messages":"36232","suppressedMessages":"36233","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36234","messages":"36235","suppressedMessages":"36236","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36237","messages":"36238","suppressedMessages":"36239","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36240","messages":"36241","suppressedMessages":"36242","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36243","messages":"36244","suppressedMessages":"36245","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36246","messages":"36247","suppressedMessages":"36248","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36249","messages":"36250","suppressedMessages":"36251","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36252","messages":"36253","suppressedMessages":"36254","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36255","messages":"36256","suppressedMessages":"36257","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36258","messages":"36259","suppressedMessages":"36260","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36261","messages":"36262","suppressedMessages":"36263","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36264","messages":"36265","suppressedMessages":"36266","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36267","messages":"36268","suppressedMessages":"36269","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36270","messages":"36271","suppressedMessages":"36272","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36273","messages":"36274","suppressedMessages":"36275","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36276","messages":"36277","suppressedMessages":"36278","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36279","messages":"36280","suppressedMessages":"36281","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36282","messages":"36283","suppressedMessages":"36284","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36285","messages":"36286","suppressedMessages":"36287","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36288","messages":"36289","suppressedMessages":"36290","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36291","messages":"36292","suppressedMessages":"36293","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36294","messages":"36295","suppressedMessages":"36296","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36297","messages":"36298","suppressedMessages":"36299","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36300","messages":"36301","suppressedMessages":"36302","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36303","messages":"36304","suppressedMessages":"36305","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36306","messages":"36307","suppressedMessages":"36308","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36309","messages":"36310","suppressedMessages":"36311","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36312","messages":"36313","suppressedMessages":"36314","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36315","messages":"36316","suppressedMessages":"36317","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36318","messages":"36319","suppressedMessages":"36320","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36321","messages":"36322","suppressedMessages":"36323","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36324","messages":"36325","suppressedMessages":"36326","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36327","messages":"36328","suppressedMessages":"36329","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36330","messages":"36331","suppressedMessages":"36332","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36333","messages":"36334","suppressedMessages":"36335","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36336","messages":"36337","suppressedMessages":"36338","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36339","messages":"36340","suppressedMessages":"36341","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36342","messages":"36343","suppressedMessages":"36344","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36345","messages":"36346","suppressedMessages":"36347","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36348","messages":"36349","suppressedMessages":"36350","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36351","messages":"36352","suppressedMessages":"36353","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36354","messages":"36355","suppressedMessages":"36356","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36357","messages":"36358","suppressedMessages":"36359","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36360","messages":"36361","suppressedMessages":"36362","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36363","messages":"36364","suppressedMessages":"36365","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36366","messages":"36367","suppressedMessages":"36368","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36369","messages":"36370","suppressedMessages":"36371","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36372","messages":"36373","suppressedMessages":"36374","errorCount":8,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36375","messages":"36376","suppressedMessages":"36377","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36378","messages":"36379","suppressedMessages":"36380","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36381","messages":"36382","suppressedMessages":"36383","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36384","messages":"36385","suppressedMessages":"36386","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36387","messages":"36388","suppressedMessages":"36389","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36390","messages":"36391","suppressedMessages":"36392","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36393","messages":"36394","suppressedMessages":"36395","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36396","messages":"36397","suppressedMessages":"36398","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36399","messages":"36400","suppressedMessages":"36401","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36402","messages":"36403","suppressedMessages":"36404","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36405","messages":"36406","suppressedMessages":"36407","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36408","messages":"36409","suppressedMessages":"36410","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36411","messages":"36412","suppressedMessages":"36413","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36414","messages":"36415","suppressedMessages":"36416","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36417","messages":"36418","suppressedMessages":"36419","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36420","messages":"36421","suppressedMessages":"36422","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36423","messages":"36424","suppressedMessages":"36425","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36426","messages":"36427","suppressedMessages":"36428","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36429","messages":"36430","suppressedMessages":"36431","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36432","messages":"36433","suppressedMessages":"36434","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36435","messages":"36436","suppressedMessages":"36437","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36438","messages":"36439","suppressedMessages":"36440","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36441","messages":"36442","suppressedMessages":"36443","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36444","messages":"36445","suppressedMessages":"36446","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36447","messages":"36448","suppressedMessages":"36449","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36450","messages":"36451","suppressedMessages":"36452","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36453","messages":"36454","suppressedMessages":"36455","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36456","messages":"36457","suppressedMessages":"36458","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36459","messages":"36460","suppressedMessages":"36461","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36462","messages":"36463","suppressedMessages":"36464","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36465","messages":"36466","suppressedMessages":"36467","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36468","messages":"36469","suppressedMessages":"36470","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36471","messages":"36472","suppressedMessages":"36473","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36474","messages":"36475","suppressedMessages":"36476","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36477","messages":"36478","suppressedMessages":"36479","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36480","messages":"36481","suppressedMessages":"36482","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36483","messages":"36484","suppressedMessages":"36485","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36486","messages":"36487","suppressedMessages":"36488","errorCount":8,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36489","messages":"36490","suppressedMessages":"36491","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36492","messages":"36493","suppressedMessages":"36494","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36495","messages":"36496","suppressedMessages":"36497","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36498","messages":"36499","suppressedMessages":"36500","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36501","messages":"36502","suppressedMessages":"36503","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36504","messages":"36505","suppressedMessages":"36506","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36507","messages":"36508","suppressedMessages":"36509","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36510","messages":"36511","suppressedMessages":"36512","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36513","messages":"36514","suppressedMessages":"36515","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36516","messages":"36517","suppressedMessages":"36518","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36519","messages":"36520","suppressedMessages":"36521","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36522","messages":"36523","suppressedMessages":"36524","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36525","messages":"36526","suppressedMessages":"36527","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36528","messages":"36529","suppressedMessages":"36530","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36531","messages":"36532","suppressedMessages":"36533","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36534","messages":"36535","suppressedMessages":"36536","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36537","messages":"36538","suppressedMessages":"36539","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36540","messages":"36541","suppressedMessages":"36542","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36543","messages":"36544","suppressedMessages":"36545","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36546","messages":"36547","suppressedMessages":"36548","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36549","messages":"36550","suppressedMessages":"36551","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36552","messages":"36553","suppressedMessages":"36554","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36555","messages":"36556","suppressedMessages":"36557","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36558","messages":"36559","suppressedMessages":"36560","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36561","messages":"36562","suppressedMessages":"36563","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36564","messages":"36565","suppressedMessages":"36566","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36567","messages":"36568","suppressedMessages":"36569","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36570","messages":"36571","suppressedMessages":"36572","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36573","messages":"36574","suppressedMessages":"36575","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36576","messages":"36577","suppressedMessages":"36578","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36579","messages":"36580","suppressedMessages":"36581","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36582","messages":"36583","suppressedMessages":"36584","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36585","messages":"36586","suppressedMessages":"36587","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36588","messages":"36589","suppressedMessages":"36590","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36591","messages":"36592","suppressedMessages":"36593","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36594","messages":"36595","suppressedMessages":"36596","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36597","messages":"36598","suppressedMessages":"36599","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36600","messages":"36601","suppressedMessages":"36602","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36603","messages":"36604","suppressedMessages":"36605","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36606","messages":"36607","suppressedMessages":"36608","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36609","messages":"36610","suppressedMessages":"36611","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36612","messages":"36613","suppressedMessages":"36614","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36615","messages":"36616","suppressedMessages":"36617","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36618","messages":"36619","suppressedMessages":"36620","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36621","messages":"36622","suppressedMessages":"36623","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36624","messages":"36625","suppressedMessages":"36626","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36627","messages":"36628","suppressedMessages":"36629","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36630","messages":"36631","suppressedMessages":"36632","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36633","messages":"36634","suppressedMessages":"36635","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36636","messages":"36637","suppressedMessages":"36638","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36639","messages":"36640","suppressedMessages":"36641","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36642","messages":"36643","suppressedMessages":"36644","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36645","messages":"36646","suppressedMessages":"36647","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36648","messages":"36649","suppressedMessages":"36650","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36651","messages":"36652","suppressedMessages":"36653","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36654","messages":"36655","suppressedMessages":"36656","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36657","messages":"36658","suppressedMessages":"36659","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36660","messages":"36661","suppressedMessages":"36662","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36663","messages":"36664","suppressedMessages":"36665","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36666","messages":"36667","suppressedMessages":"36668","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36669","messages":"36670","suppressedMessages":"36671","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36672","messages":"36673","suppressedMessages":"36674","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36675","messages":"36676","suppressedMessages":"36677","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36678","messages":"36679","suppressedMessages":"36680","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36681","messages":"36682","suppressedMessages":"36683","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36684","messages":"36685","suppressedMessages":"36686","errorCount":20,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36687","messages":"36688","suppressedMessages":"36689","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36690","messages":"36691","suppressedMessages":"36692","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36693","messages":"36694","suppressedMessages":"36695","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36696","messages":"36697","suppressedMessages":"36698","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36699","messages":"36700","suppressedMessages":"36701","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36702","messages":"36703","suppressedMessages":"36704","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36705","messages":"36706","suppressedMessages":"36707","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36708","messages":"36709","suppressedMessages":"36710","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36711","messages":"36712","suppressedMessages":"36713","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36714","messages":"36715","suppressedMessages":"36716","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36717","messages":"36718","suppressedMessages":"36719","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36720","messages":"36721","suppressedMessages":"36722","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36723","messages":"36724","suppressedMessages":"36725","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36726","messages":"36727","suppressedMessages":"36728","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36729","messages":"36730","suppressedMessages":"36731","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36732","messages":"36733","suppressedMessages":"36734","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36735","messages":"36736","suppressedMessages":"36737","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36738","messages":"36739","suppressedMessages":"36740","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36741","messages":"36742","suppressedMessages":"36743","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36744","messages":"36745","suppressedMessages":"36746","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36747","messages":"36748","suppressedMessages":"36749","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36750","messages":"36751","suppressedMessages":"36752","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36753","messages":"36754","suppressedMessages":"36755","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36756","messages":"36757","suppressedMessages":"36758","errorCount":9,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36759","messages":"36760","suppressedMessages":"36761","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36762","messages":"36763","suppressedMessages":"36764","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36765","messages":"36766","suppressedMessages":"36767","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36768","messages":"36769","suppressedMessages":"36770","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36771","messages":"36772","suppressedMessages":"36773","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36774","messages":"36775","suppressedMessages":"36776","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36777","messages":"36778","suppressedMessages":"36779","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36780","messages":"36781","suppressedMessages":"36782","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36783","messages":"36784","suppressedMessages":"36785","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36786","messages":"36787","suppressedMessages":"36788","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36789","messages":"36790","suppressedMessages":"36791","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36792","messages":"36793","suppressedMessages":"36794","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36795","messages":"36796","suppressedMessages":"36797","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36798","messages":"36799","suppressedMessages":"36800","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36801","messages":"36802","suppressedMessages":"36803","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36804","messages":"36805","suppressedMessages":"36806","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36807","messages":"36808","suppressedMessages":"36809","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36810","messages":"36811","suppressedMessages":"36812","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36813","messages":"36814","suppressedMessages":"36815","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36816","messages":"36817","suppressedMessages":"36818","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36819","messages":"36820","suppressedMessages":"36821","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36822","messages":"36823","suppressedMessages":"36824","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36825","messages":"36826","suppressedMessages":"36827","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36828","messages":"36829","suppressedMessages":"36830","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36831","messages":"36832","suppressedMessages":"36833","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36834","messages":"36835","suppressedMessages":"36836","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36837","messages":"36838","suppressedMessages":"36839","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36840","messages":"36841","suppressedMessages":"36842","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36843","messages":"36844","suppressedMessages":"36845","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36846","messages":"36847","suppressedMessages":"36848","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36849","messages":"36850","suppressedMessages":"36851","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36852","messages":"36853","suppressedMessages":"36854","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36855","messages":"36856","suppressedMessages":"36857","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36858","messages":"36859","suppressedMessages":"36860","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36861","messages":"36862","suppressedMessages":"36863","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36864","messages":"36865","suppressedMessages":"36866","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36867","messages":"36868","suppressedMessages":"36869","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36870","messages":"36871","suppressedMessages":"36872","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36873","messages":"36874","suppressedMessages":"36875","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36876","messages":"36877","suppressedMessages":"36878","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36879","messages":"36880","suppressedMessages":"36881","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36882","messages":"36883","suppressedMessages":"36884","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36885","messages":"36886","suppressedMessages":"36887","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36888","messages":"36889","suppressedMessages":"36890","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36891","messages":"36892","suppressedMessages":"36893","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36894","messages":"36895","suppressedMessages":"36896","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36897","messages":"36898","suppressedMessages":"36899","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36900","messages":"36901","suppressedMessages":"36902","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36903","messages":"36904","suppressedMessages":"36905","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36906","messages":"36907","suppressedMessages":"36908","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36909","messages":"36910","suppressedMessages":"36911","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36912","messages":"36913","suppressedMessages":"36914","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36915","messages":"36916","suppressedMessages":"36917","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36918","messages":"36919","suppressedMessages":"36920","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36921","messages":"36922","suppressedMessages":"36923","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36924","messages":"36925","suppressedMessages":"36926","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36927","messages":"36928","suppressedMessages":"36929","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36930","messages":"36931","suppressedMessages":"36932","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36933","messages":"36934","suppressedMessages":"36935","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36936","messages":"36937","suppressedMessages":"36938","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36939","messages":"36940","suppressedMessages":"36941","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36942","messages":"36943","suppressedMessages":"36944","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36945","messages":"36946","suppressedMessages":"36947","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"36948","messages":"36949","suppressedMessages":"36950","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36951","messages":"36952","suppressedMessages":"36953","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36954","messages":"36955","suppressedMessages":"36956","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36957","messages":"36958","suppressedMessages":"36959","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36960","messages":"36961","suppressedMessages":"36962","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36963","messages":"36964","suppressedMessages":"36965","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36966","messages":"36967","suppressedMessages":"36968","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36969","messages":"36970","suppressedMessages":"36971","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36972","messages":"36973","suppressedMessages":"36974","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36975","messages":"36976","suppressedMessages":"36977","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36978","messages":"36979","suppressedMessages":"36980","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36981","messages":"36982","suppressedMessages":"36983","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36984","messages":"36985","suppressedMessages":"36986","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36987","messages":"36988","suppressedMessages":"36989","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36990","messages":"36991","suppressedMessages":"36992","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36993","messages":"36994","suppressedMessages":"36995","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36996","messages":"36997","suppressedMessages":"36998","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36999","messages":"37000","suppressedMessages":"37001","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37002","messages":"37003","suppressedMessages":"37004","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37005","messages":"37006","suppressedMessages":"37007","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37008","messages":"37009","suppressedMessages":"37010","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37011","messages":"37012","suppressedMessages":"37013","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37014","messages":"37015","suppressedMessages":"37016","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37017","messages":"37018","suppressedMessages":"37019","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37020","messages":"37021","suppressedMessages":"37022","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37023","messages":"37024","suppressedMessages":"37025","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37026","messages":"37027","suppressedMessages":"37028","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37029","messages":"37030","suppressedMessages":"37031","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37032","messages":"37033","suppressedMessages":"37034","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37035","messages":"37036","suppressedMessages":"37037","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37038","messages":"37039","suppressedMessages":"37040","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37041","messages":"37042","suppressedMessages":"37043","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37044","messages":"37045","suppressedMessages":"37046","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37047","messages":"37048","suppressedMessages":"37049","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37050","messages":"37051","suppressedMessages":"37052","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37053","messages":"37054","suppressedMessages":"37055","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37056","messages":"37057","suppressedMessages":"37058","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37059","messages":"37060","suppressedMessages":"37061","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37062","messages":"37063","suppressedMessages":"37064","errorCount":54,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37065","messages":"37066","suppressedMessages":"37067","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37068","messages":"37069","suppressedMessages":"37070","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37071","messages":"37072","suppressedMessages":"37073","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37074","messages":"37075","suppressedMessages":"37076","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37077","messages":"37078","suppressedMessages":"37079","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37080","messages":"37081","suppressedMessages":"37082","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37083","messages":"37084","suppressedMessages":"37085","errorCount":13,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37086","messages":"37087","suppressedMessages":"37088","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37089","messages":"37090","suppressedMessages":"37091","errorCount":8,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37092","messages":"37093","suppressedMessages":"37094","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37095","messages":"37096","suppressedMessages":"37097","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37098","messages":"37099","suppressedMessages":"37100","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37101","messages":"37102","suppressedMessages":"37103","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37104","messages":"37105","suppressedMessages":"37106","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37107","messages":"37108","suppressedMessages":"37109","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37110","messages":"37111","suppressedMessages":"37112","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37113","messages":"37114","suppressedMessages":"37115","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37116","messages":"37117","suppressedMessages":"37118","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37119","messages":"37120","suppressedMessages":"37121","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37122","messages":"37123","suppressedMessages":"37124","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37125","messages":"37126","suppressedMessages":"37127","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37128","messages":"37129","suppressedMessages":"37130","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37131","messages":"37132","suppressedMessages":"37133","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37134","messages":"37135","suppressedMessages":"37136","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37137","messages":"37138","suppressedMessages":"37139","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37140","messages":"37141","suppressedMessages":"37142","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37143","messages":"37144","suppressedMessages":"37145","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37146","messages":"37147","suppressedMessages":"37148","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37149","messages":"37150","suppressedMessages":"37151","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37152","messages":"37153","suppressedMessages":"37154","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37155","messages":"37156","suppressedMessages":"37157","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37158","messages":"37159","suppressedMessages":"37160","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37161","messages":"37162","suppressedMessages":"37163","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37164","messages":"37165","suppressedMessages":"37166","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37167","messages":"37168","suppressedMessages":"37169","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37170","messages":"37171","suppressedMessages":"37172","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37173","messages":"37174","suppressedMessages":"37175","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37176","messages":"37177","suppressedMessages":"37178","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37179","messages":"37180","suppressedMessages":"37181","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37182","messages":"37183","suppressedMessages":"37184","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37185","messages":"37186","suppressedMessages":"37187","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37188","messages":"37189","suppressedMessages":"37190","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37191","messages":"37192","suppressedMessages":"37193","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37194","messages":"37195","suppressedMessages":"37196","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37197","messages":"37198","suppressedMessages":"37199","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37200","messages":"37201","suppressedMessages":"37202","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37203","messages":"37204","suppressedMessages":"37205","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37206","messages":"37207","suppressedMessages":"37208","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37209","messages":"37210","suppressedMessages":"37211","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37212","messages":"37213","suppressedMessages":"37214","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37215","messages":"37216","suppressedMessages":"37217","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37218","messages":"37219","suppressedMessages":"37220","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37221","messages":"37222","suppressedMessages":"37223","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37224","messages":"37225","suppressedMessages":"37226","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37227","messages":"37228","suppressedMessages":"37229","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37230","messages":"37231","suppressedMessages":"37232","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37233","messages":"37234","suppressedMessages":"37235","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37236","messages":"37237","suppressedMessages":"37238","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37239","messages":"37240","suppressedMessages":"37241","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37242","messages":"37243","suppressedMessages":"37244","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37245","messages":"37246","suppressedMessages":"37247","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37248","messages":"37249","suppressedMessages":"37250","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37251","messages":"37252","suppressedMessages":"37253","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37254","messages":"37255","suppressedMessages":"37256","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37257","messages":"37258","suppressedMessages":"37259","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37260","messages":"37261","suppressedMessages":"37262","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37263","messages":"37264","suppressedMessages":"37265","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37266","messages":"37267","suppressedMessages":"37268","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37269","messages":"37270","suppressedMessages":"37271","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37272","messages":"37273","suppressedMessages":"37274","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37275","messages":"37276","suppressedMessages":"37277","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37278","messages":"37279","suppressedMessages":"37280","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37281","messages":"37282","suppressedMessages":"37283","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37284","messages":"37285","suppressedMessages":"37286","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37287","messages":"37288","suppressedMessages":"37289","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37290","messages":"37291","suppressedMessages":"37292","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37293","messages":"37294","suppressedMessages":"37295","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37296","messages":"37297","suppressedMessages":"37298","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37299","messages":"37300","suppressedMessages":"37301","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37302","messages":"37303","suppressedMessages":"37304","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37305","messages":"37306","suppressedMessages":"37307","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37308","messages":"37309","suppressedMessages":"37310","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37311","messages":"37312","suppressedMessages":"37313","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37314","messages":"37315","suppressedMessages":"37316","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37317","messages":"37318","suppressedMessages":"37319","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37320","messages":"37321","suppressedMessages":"37322","errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37323","messages":"37324","suppressedMessages":"37325","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37326","messages":"37327","suppressedMessages":"37328","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37329","messages":"37330","suppressedMessages":"37331","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37332","messages":"37333","suppressedMessages":"37334","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37335","messages":"37336","suppressedMessages":"37337","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37338","messages":"37339","suppressedMessages":"37340","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37341","messages":"37342","suppressedMessages":"37343","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37344","messages":"37345","suppressedMessages":"37346","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37347","messages":"37348","suppressedMessages":"37349","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37350","messages":"37351","suppressedMessages":"37352","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37353","messages":"37354","suppressedMessages":"37355","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37356","messages":"37357","suppressedMessages":"37358","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37359","messages":"37360","suppressedMessages":"37361","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37362","messages":"37363","suppressedMessages":"37364","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37365","messages":"37366","suppressedMessages":"37367","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37368","messages":"37369","suppressedMessages":"37370","errorCount":22,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37371","messages":"37372","suppressedMessages":"37373","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37374","messages":"37375","suppressedMessages":"37376","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37377","messages":"37378","suppressedMessages":"37379","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37380","messages":"37381","suppressedMessages":"37382","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37383","messages":"37384","suppressedMessages":"37385","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37386","messages":"37387","suppressedMessages":"37388","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37389","messages":"37390","suppressedMessages":"37391","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37392","messages":"37393","suppressedMessages":"37394","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37395","messages":"37396","suppressedMessages":"37397","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37398","messages":"37399","suppressedMessages":"37400","errorCount":54,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37401","messages":"37402","suppressedMessages":"37403","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37404","messages":"37405","suppressedMessages":"37406","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37407","messages":"37408","suppressedMessages":"37409","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37410","messages":"37411","suppressedMessages":"37412","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37413","messages":"37414","suppressedMessages":"37415","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37416","messages":"37417","suppressedMessages":"37418","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37419","messages":"37420","suppressedMessages":"37421","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37422","messages":"37423","suppressedMessages":"37424","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37425","messages":"37426","suppressedMessages":"37427","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37428","messages":"37429","suppressedMessages":"37430","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37431","messages":"37432","suppressedMessages":"37433","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37434","messages":"37435","suppressedMessages":"37436","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37437","messages":"37438","suppressedMessages":"37439","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37440","messages":"37441","suppressedMessages":"37442","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37443","messages":"37444","suppressedMessages":"37445","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37446","messages":"37447","suppressedMessages":"37448","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37449","messages":"37450","suppressedMessages":"37451","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37452","messages":"37453","suppressedMessages":"37454","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37455","messages":"37456","suppressedMessages":"37457","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37458","messages":"37459","suppressedMessages":"37460","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37461","messages":"37462","suppressedMessages":"37463","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37464","messages":"37465","suppressedMessages":"37466","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37467","messages":"37468","suppressedMessages":"37469","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37470","messages":"37471","suppressedMessages":"37472","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37473","messages":"37474","suppressedMessages":"37475","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37476","messages":"37477","suppressedMessages":"37478","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37479","messages":"37480","suppressedMessages":"37481","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37482","messages":"37483","suppressedMessages":"37484","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37485","messages":"37486","suppressedMessages":"37487","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37488","messages":"37489","suppressedMessages":"37490","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37491","messages":"37492","suppressedMessages":"37493","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37494","messages":"37495","suppressedMessages":"37496","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37497","messages":"37498","suppressedMessages":"37499","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37500","messages":"37501","suppressedMessages":"37502","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37503","messages":"37504","suppressedMessages":"37505","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37506","messages":"37507","suppressedMessages":"37508","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37509","messages":"37510","suppressedMessages":"37511","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37512","messages":"37513","suppressedMessages":"37514","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37515","messages":"37516","suppressedMessages":"37517","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37518","messages":"37519","suppressedMessages":"37520","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37521","messages":"37522","suppressedMessages":"37523","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37524","messages":"37525","suppressedMessages":"37526","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37527","messages":"37528","suppressedMessages":"37529","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37530","messages":"37531","suppressedMessages":"37532","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37533","messages":"37534","suppressedMessages":"37535","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37536","messages":"37537","suppressedMessages":"37538","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37539","messages":"37540","suppressedMessages":"37541","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37542","messages":"37543","suppressedMessages":"37544","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37545","messages":"37546","suppressedMessages":"37547","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37548","messages":"37549","suppressedMessages":"37550","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37551","messages":"37552","suppressedMessages":"37553","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37554","messages":"37555","suppressedMessages":"37556","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37557","messages":"37558","suppressedMessages":"37559","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37560","messages":"37561","suppressedMessages":"37562","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37563","messages":"37564","suppressedMessages":"37565","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37566","messages":"37567","suppressedMessages":"37568","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37569","messages":"37570","suppressedMessages":"37571","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37572","messages":"37573","suppressedMessages":"37574","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37575","messages":"37576","suppressedMessages":"37577","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37578","messages":"37579","suppressedMessages":"37580","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37581","messages":"37582","suppressedMessages":"37583","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37584","messages":"37585","suppressedMessages":"37586","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37587","messages":"37588","suppressedMessages":"37589","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37590","messages":"37591","suppressedMessages":"37592","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37593","messages":"37594","suppressedMessages":"37595","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37596","messages":"37597","suppressedMessages":"37598","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37599","messages":"37600","suppressedMessages":"37601","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37602","messages":"37603","suppressedMessages":"37604","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37605","messages":"37606","suppressedMessages":"37607","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37608","messages":"37609","suppressedMessages":"37610","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37611","messages":"37612","suppressedMessages":"37613","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37614","messages":"37615","suppressedMessages":"37616","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37617","messages":"37618","suppressedMessages":"37619","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37620","messages":"37621","suppressedMessages":"37622","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37623","messages":"37624","suppressedMessages":"37625","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37626","messages":"37627","suppressedMessages":"37628","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37629","messages":"37630","suppressedMessages":"37631","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37632","messages":"37633","suppressedMessages":"37634","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37635","messages":"37636","suppressedMessages":"37637","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37638","messages":"37639","suppressedMessages":"37640","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37641","messages":"37642","suppressedMessages":"37643","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37644","messages":"37645","suppressedMessages":"37646","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37647","messages":"37648","suppressedMessages":"37649","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37650","messages":"37651","suppressedMessages":"37652","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37653","messages":"37654","suppressedMessages":"37655","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37656","messages":"37657","suppressedMessages":"37658","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37659","messages":"37660","suppressedMessages":"37661","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37662","messages":"37663","suppressedMessages":"37664","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37665","messages":"37666","suppressedMessages":"37667","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37668","messages":"37669","suppressedMessages":"37670","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37671","messages":"37672","suppressedMessages":"37673","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37674","messages":"37675","suppressedMessages":"37676","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37677","messages":"37678","suppressedMessages":"37679","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37680","messages":"37681","suppressedMessages":"37682","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37683","messages":"37684","suppressedMessages":"37685","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37686","messages":"37687","suppressedMessages":"37688","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37689","messages":"37690","suppressedMessages":"37691","errorCount":9,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37692","messages":"37693","suppressedMessages":"37694","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37695","messages":"37696","suppressedMessages":"37697","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37698","messages":"37699","suppressedMessages":"37700","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37701","messages":"37702","suppressedMessages":"37703","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37704","messages":"37705","suppressedMessages":"37706","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37707","messages":"37708","suppressedMessages":"37709","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37710","messages":"37711","suppressedMessages":"37712","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37713","messages":"37714","suppressedMessages":"37715","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37716","messages":"37717","suppressedMessages":"37718","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37719","messages":"37720","suppressedMessages":"37721","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37722","messages":"37723","suppressedMessages":"37724","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37725","messages":"37726","suppressedMessages":"37727","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37728","messages":"37729","suppressedMessages":"37730","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37731","messages":"37732","suppressedMessages":"37733","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37734","messages":"37735","suppressedMessages":"37736","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37737","messages":"37738","suppressedMessages":"37739","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37740","messages":"37741","suppressedMessages":"37742","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37743","messages":"37744","suppressedMessages":"37745","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37746","messages":"37747","suppressedMessages":"37748","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37749","messages":"37750","suppressedMessages":"37751","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37752","messages":"37753","suppressedMessages":"37754","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37755","messages":"37756","suppressedMessages":"37757","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37758","messages":"37759","suppressedMessages":"37760","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37761","messages":"37762","suppressedMessages":"37763","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37764","messages":"37765","suppressedMessages":"37766","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37767","messages":"37768","suppressedMessages":"37769","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37770","messages":"37771","suppressedMessages":"37772","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37773","messages":"37774","suppressedMessages":"37775","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37776","messages":"37777","suppressedMessages":"37778","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37779","messages":"37780","suppressedMessages":"37781","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37782","messages":"37783","suppressedMessages":"37784","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37785","messages":"37786","suppressedMessages":"37787","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37788","messages":"37789","suppressedMessages":"37790","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37791","messages":"37792","suppressedMessages":"37793","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37794","messages":"37795","suppressedMessages":"37796","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37797","messages":"37798","suppressedMessages":"37799","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37800","messages":"37801","suppressedMessages":"37802","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37803","messages":"37804","suppressedMessages":"37805","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37806","messages":"37807","suppressedMessages":"37808","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37809","messages":"37810","suppressedMessages":"37811","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37812","messages":"37813","suppressedMessages":"37814","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37815","messages":"37816","suppressedMessages":"37817","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37818","messages":"37819","suppressedMessages":"37820","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37821","messages":"37822","suppressedMessages":"37823","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37824","messages":"37825","suppressedMessages":"37826","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37827","messages":"37828","suppressedMessages":"37829","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37830","messages":"37831","suppressedMessages":"37832","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37833","messages":"37834","suppressedMessages":"37835","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37836","messages":"37837","suppressedMessages":"37838","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37839","messages":"37840","suppressedMessages":"37841","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37842","messages":"37843","suppressedMessages":"37844","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37845","messages":"37846","suppressedMessages":"37847","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37848","messages":"37849","suppressedMessages":"37850","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37851","messages":"37852","suppressedMessages":"37853","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37854","messages":"37855","suppressedMessages":"37856","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37857","messages":"37858","suppressedMessages":"37859","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37860","messages":"37861","suppressedMessages":"37862","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37863","messages":"37864","suppressedMessages":"37865","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37866","messages":"37867","suppressedMessages":"37868","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37869","messages":"37870","suppressedMessages":"37871","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37872","messages":"37873","suppressedMessages":"37874","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37875","messages":"37876","suppressedMessages":"37877","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37878","messages":"37879","suppressedMessages":"37880","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37881","messages":"37882","suppressedMessages":"37883","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37884","messages":"37885","suppressedMessages":"37886","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37887","messages":"37888","suppressedMessages":"37889","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37890","messages":"37891","suppressedMessages":"37892","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37893","messages":"37894","suppressedMessages":"37895","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37896","messages":"37897","suppressedMessages":"37898","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37899","messages":"37900","suppressedMessages":"37901","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37902","messages":"37903","suppressedMessages":"37904","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37905","messages":"37906","suppressedMessages":"37907","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37908","messages":"37909","suppressedMessages":"37910","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37911","messages":"37912","suppressedMessages":"37913","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37914","messages":"37915","suppressedMessages":"37916","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37917","messages":"37918","suppressedMessages":"37919","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37920","messages":"37921","suppressedMessages":"37922","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37923","messages":"37924","suppressedMessages":"37925","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37926","messages":"37927","suppressedMessages":"37928","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37929","messages":"37930","suppressedMessages":"37931","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37932","messages":"37933","suppressedMessages":"37934","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37935","messages":"37936","suppressedMessages":"37937","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37938","messages":"37939","suppressedMessages":"37940","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37941","messages":"37942","suppressedMessages":"37943","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37944","messages":"37945","suppressedMessages":"37946","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37947","messages":"37948","suppressedMessages":"37949","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37950","messages":"37951","suppressedMessages":"37952","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37953","messages":"37954","suppressedMessages":"37955","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37956","messages":"37957","suppressedMessages":"37958","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37959","messages":"37960","suppressedMessages":"37961","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37962","messages":"37963","suppressedMessages":"37964","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37965","messages":"37966","suppressedMessages":"37967","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37968","messages":"37969","suppressedMessages":"37970","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37971","messages":"37972","suppressedMessages":"37973","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"37974","messages":"37975","suppressedMessages":"37976","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37977","messages":"37978","suppressedMessages":"37979","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37980","messages":"37981","suppressedMessages":"37982","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37983","messages":"37984","suppressedMessages":"37985","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37986","messages":"37987","suppressedMessages":"37988","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37989","messages":"37990","suppressedMessages":"37991","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37992","messages":"37993","suppressedMessages":"37994","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37995","messages":"37996","suppressedMessages":"37997","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37998","messages":"37999","suppressedMessages":"38000","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38001","messages":"38002","suppressedMessages":"38003","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38004","messages":"38005","suppressedMessages":"38006","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38007","messages":"38008","suppressedMessages":"38009","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38010","messages":"38011","suppressedMessages":"38012","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38013","messages":"38014","suppressedMessages":"38015","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38016","messages":"38017","suppressedMessages":"38018","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38019","messages":"38020","suppressedMessages":"38021","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38022","messages":"38023","suppressedMessages":"38024","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38025","messages":"38026","suppressedMessages":"38027","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38028","messages":"38029","suppressedMessages":"38030","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38031","messages":"38032","suppressedMessages":"38033","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38034","messages":"38035","suppressedMessages":"38036","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38037","messages":"38038","suppressedMessages":"38039","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38040","messages":"38041","suppressedMessages":"38042","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38043","messages":"38044","suppressedMessages":"38045","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38046","messages":"38047","suppressedMessages":"38048","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38049","messages":"38050","suppressedMessages":"38051","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38052","messages":"38053","suppressedMessages":"38054","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38055","messages":"38056","suppressedMessages":"38057","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38058","messages":"38059","suppressedMessages":"38060","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38061","messages":"38062","suppressedMessages":"38063","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38064","messages":"38065","suppressedMessages":"38066","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38067","messages":"38068","suppressedMessages":"38069","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38070","messages":"38071","suppressedMessages":"38072","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38073","messages":"38074","suppressedMessages":"38075","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38076","messages":"38077","suppressedMessages":"38078","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38079","messages":"38080","suppressedMessages":"38081","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38082","messages":"38083","suppressedMessages":"38084","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38085","messages":"38086","suppressedMessages":"38087","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38088","messages":"38089","suppressedMessages":"38090","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38091","messages":"38092","suppressedMessages":"38093","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38094","messages":"38095","suppressedMessages":"38096","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38097","messages":"38098","suppressedMessages":"38099","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38100","messages":"38101","suppressedMessages":"38102","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38103","messages":"38104","suppressedMessages":"38105","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38106","messages":"38107","suppressedMessages":"38108","errorCount":8,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38109","messages":"38110","suppressedMessages":"38111","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38112","messages":"38113","suppressedMessages":"38114","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38115","messages":"38116","suppressedMessages":"38117","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38118","messages":"38119","suppressedMessages":"38120","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38121","messages":"38122","suppressedMessages":"38123","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38124","messages":"38125","suppressedMessages":"38126","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38127","messages":"38128","suppressedMessages":"38129","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38130","messages":"38131","suppressedMessages":"38132","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38133","messages":"38134","suppressedMessages":"38135","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38136","messages":"38137","suppressedMessages":"38138","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38139","messages":"38140","suppressedMessages":"38141","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38142","messages":"38143","suppressedMessages":"38144","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38145","messages":"38146","suppressedMessages":"38147","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38148","messages":"38149","suppressedMessages":"38150","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38151","messages":"38152","suppressedMessages":"38153","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38154","messages":"38155","suppressedMessages":"38156","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38157","messages":"38158","suppressedMessages":"38159","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38160","messages":"38161","suppressedMessages":"38162","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38163","messages":"38164","suppressedMessages":"38165","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38166","messages":"38167","suppressedMessages":"38168","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38169","messages":"38170","suppressedMessages":"38171","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38172","messages":"38173","suppressedMessages":"38174","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38175","messages":"38176","suppressedMessages":"38177","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38178","messages":"38179","suppressedMessages":"38180","errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38181","messages":"38182","suppressedMessages":"38183","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38184","messages":"38185","suppressedMessages":"38186","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38187","messages":"38188","suppressedMessages":"38189","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38190","messages":"38191","suppressedMessages":"38192","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38193","messages":"38194","suppressedMessages":"38195","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38196","messages":"38197","suppressedMessages":"38198","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38199","messages":"38200","suppressedMessages":"38201","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38202","messages":"38203","suppressedMessages":"38204","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38205","messages":"38206","suppressedMessages":"38207","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38208","messages":"38209","suppressedMessages":"38210","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38211","messages":"38212","suppressedMessages":"38213","errorCount":83,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38214","messages":"38215","suppressedMessages":"38216","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38217","messages":"38218","suppressedMessages":"38219","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38220","messages":"38221","suppressedMessages":"38222","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38223","messages":"38224","suppressedMessages":"38225","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38226","messages":"38227","suppressedMessages":"38228","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38229","messages":"38230","suppressedMessages":"38231","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38232","messages":"38233","suppressedMessages":"38234","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38235","messages":"38236","suppressedMessages":"38237","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38238","messages":"38239","suppressedMessages":"38240","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38241","messages":"38242","suppressedMessages":"38243","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38244","messages":"38245","suppressedMessages":"38246","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38247","messages":"38248","suppressedMessages":"38249","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38250","messages":"38251","suppressedMessages":"38252","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38253","messages":"38254","suppressedMessages":"38255","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38256","messages":"38257","suppressedMessages":"38258","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38259","messages":"38260","suppressedMessages":"38261","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38262","messages":"38263","suppressedMessages":"38264","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38265","messages":"38266","suppressedMessages":"38267","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38268","messages":"38269","suppressedMessages":"38270","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38271","messages":"38272","suppressedMessages":"38273","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38274","messages":"38275","suppressedMessages":"38276","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38277","messages":"38278","suppressedMessages":"38279","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38280","messages":"38281","suppressedMessages":"38282","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38283","messages":"38284","suppressedMessages":"38285","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38286","messages":"38287","suppressedMessages":"38288","errorCount":35,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38289","messages":"38290","suppressedMessages":"38291","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38292","messages":"38293","suppressedMessages":"38294","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38295","messages":"38296","suppressedMessages":"38297","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38298","messages":"38299","suppressedMessages":"38300","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38301","messages":"38302","suppressedMessages":"38303","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38304","messages":"38305","suppressedMessages":"38306","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38307","messages":"38308","suppressedMessages":"38309","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38310","messages":"38311","suppressedMessages":"38312","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38313","messages":"38314","suppressedMessages":"38315","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38316","messages":"38317","suppressedMessages":"38318","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38319","messages":"38320","suppressedMessages":"38321","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38322","messages":"38323","suppressedMessages":"38324","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38325","messages":"38326","suppressedMessages":"38327","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38328","messages":"38329","suppressedMessages":"38330","errorCount":57,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38331","messages":"38332","suppressedMessages":"38333","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38334","messages":"38335","suppressedMessages":"38336","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38337","messages":"38338","suppressedMessages":"38339","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38340","messages":"38341","suppressedMessages":"38342","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38343","messages":"38344","suppressedMessages":"38345","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38346","messages":"38347","suppressedMessages":"38348","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38349","messages":"38350","suppressedMessages":"38351","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38352","messages":"38353","suppressedMessages":"38354","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38355","messages":"38356","suppressedMessages":"38357","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38358","messages":"38359","suppressedMessages":"38360","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38361","messages":"38362","suppressedMessages":"38363","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38364","messages":"38365","suppressedMessages":"38366","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38367","messages":"38368","suppressedMessages":"38369","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38370","messages":"38371","suppressedMessages":"38372","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38373","messages":"38374","suppressedMessages":"38375","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38376","messages":"38377","suppressedMessages":"38378","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38379","messages":"38380","suppressedMessages":"38381","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38382","messages":"38383","suppressedMessages":"38384","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38385","messages":"38386","suppressedMessages":"38387","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38388","messages":"38389","suppressedMessages":"38390","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38391","messages":"38392","suppressedMessages":"38393","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38394","messages":"38395","suppressedMessages":"38396","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38397","messages":"38398","suppressedMessages":"38399","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38400","messages":"38401","suppressedMessages":"38402","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38403","messages":"38404","suppressedMessages":"38405","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38406","messages":"38407","suppressedMessages":"38408","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38409","messages":"38410","suppressedMessages":"38411","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38412","messages":"38413","suppressedMessages":"38414","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38415","messages":"38416","suppressedMessages":"38417","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38418","messages":"38419","suppressedMessages":"38420","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38421","messages":"38422","suppressedMessages":"38423","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38424","messages":"38425","suppressedMessages":"38426","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38427","messages":"38428","suppressedMessages":"38429","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38430","messages":"38431","suppressedMessages":"38432","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38433","messages":"38434","suppressedMessages":"38435","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38436","messages":"38437","suppressedMessages":"38438","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38439","messages":"38440","suppressedMessages":"38441","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38442","messages":"38443","suppressedMessages":"38444","errorCount":9,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38445","messages":"38446","suppressedMessages":"38447","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38448","messages":"38449","suppressedMessages":"38450","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38451","messages":"38452","suppressedMessages":"38453","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38454","messages":"38455","suppressedMessages":"38456","errorCount":12,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38457","messages":"38458","suppressedMessages":"38459","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38460","messages":"38461","suppressedMessages":"38462","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38463","messages":"38464","suppressedMessages":"38465","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38466","messages":"38467","suppressedMessages":"38468","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38469","messages":"38470","suppressedMessages":"38471","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38472","messages":"38473","suppressedMessages":"38474","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38475","messages":"38476","suppressedMessages":"38477","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38478","messages":"38479","suppressedMessages":"38480","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38481","messages":"38482","suppressedMessages":"38483","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38484","messages":"38485","suppressedMessages":"38486","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38487","messages":"38488","suppressedMessages":"38489","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38490","messages":"38491","suppressedMessages":"38492","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38493","messages":"38494","suppressedMessages":"38495","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38496","messages":"38497","suppressedMessages":"38498","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38499","messages":"38500","suppressedMessages":"38501","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38502","messages":"38503","suppressedMessages":"38504","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38505","messages":"38506","suppressedMessages":"38507","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38508","messages":"38509","suppressedMessages":"38510","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38511","messages":"38512","suppressedMessages":"38513","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38514","messages":"38515","suppressedMessages":"38516","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38517","messages":"38518","suppressedMessages":"38519","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38520","messages":"38521","suppressedMessages":"38522","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38523","messages":"38524","suppressedMessages":"38525","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38526","messages":"38527","suppressedMessages":"38528","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38529","messages":"38530","suppressedMessages":"38531","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38532","messages":"38533","suppressedMessages":"38534","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38535","messages":"38536","suppressedMessages":"38537","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38538","messages":"38539","suppressedMessages":"38540","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38541","messages":"38542","suppressedMessages":"38543","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38544","messages":"38545","suppressedMessages":"38546","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38547","messages":"38548","suppressedMessages":"38549","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38550","messages":"38551","suppressedMessages":"38552","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38553","messages":"38554","suppressedMessages":"38555","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38556","messages":"38557","suppressedMessages":"38558","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38559","messages":"38560","suppressedMessages":"38561","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38562","messages":"38563","suppressedMessages":"38564","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38565","messages":"38566","suppressedMessages":"38567","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38568","messages":"38569","suppressedMessages":"38570","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38571","messages":"38572","suppressedMessages":"38573","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38574","messages":"38575","suppressedMessages":"38576","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38577","messages":"38578","suppressedMessages":"38579","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38580","messages":"38581","suppressedMessages":"38582","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38583","messages":"38584","suppressedMessages":"38585","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38586","messages":"38587","suppressedMessages":"38588","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38589","messages":"38590","suppressedMessages":"38591","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38592","messages":"38593","suppressedMessages":"38594","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38595","messages":"38596","suppressedMessages":"38597","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38598","messages":"38599","suppressedMessages":"38600","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38601","messages":"38602","suppressedMessages":"38603","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38604","messages":"38605","suppressedMessages":"38606","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38607","messages":"38608","suppressedMessages":"38609","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38610","messages":"38611","suppressedMessages":"38612","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38613","messages":"38614","suppressedMessages":"38615","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38616","messages":"38617","suppressedMessages":"38618","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38619","messages":"38620","suppressedMessages":"38621","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38622","messages":"38623","suppressedMessages":"38624","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38625","messages":"38626","suppressedMessages":"38627","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38628","messages":"38629","suppressedMessages":"38630","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38631","messages":"38632","suppressedMessages":"38633","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38634","messages":"38635","suppressedMessages":"38636","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38637","messages":"38638","suppressedMessages":"38639","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38640","messages":"38641","suppressedMessages":"38642","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38643","messages":"38644","suppressedMessages":"38645","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38646","messages":"38647","suppressedMessages":"38648","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38649","messages":"38650","suppressedMessages":"38651","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38652","messages":"38653","suppressedMessages":"38654","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38655","messages":"38656","suppressedMessages":"38657","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38658","messages":"38659","suppressedMessages":"38660","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38661","messages":"38662","suppressedMessages":"38663","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38664","messages":"38665","suppressedMessages":"38666","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38667","messages":"38668","suppressedMessages":"38669","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38670","messages":"38671","suppressedMessages":"38672","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38673","messages":"38674","suppressedMessages":"38675","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38676","messages":"38677","suppressedMessages":"38678","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38679","messages":"38680","suppressedMessages":"38681","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38682","messages":"38683","suppressedMessages":"38684","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38685","messages":"38686","suppressedMessages":"38687","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38688","messages":"38689","suppressedMessages":"38690","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38691","messages":"38692","suppressedMessages":"38693","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38694","messages":"38695","suppressedMessages":"38696","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38697","messages":"38698","suppressedMessages":"38699","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38700","messages":"38701","suppressedMessages":"38702","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38703","messages":"38704","suppressedMessages":"38705","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38706","messages":"38707","suppressedMessages":"38708","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38709","messages":"38710","suppressedMessages":"38711","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38712","messages":"38713","suppressedMessages":"38714","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38715","messages":"38716","suppressedMessages":"38717","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38718","messages":"38719","suppressedMessages":"38720","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38721","messages":"38722","suppressedMessages":"38723","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38724","messages":"38725","suppressedMessages":"38726","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38727","messages":"38728","suppressedMessages":"38729","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38730","messages":"38731","suppressedMessages":"38732","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38733","messages":"38734","suppressedMessages":"38735","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38736","messages":"38737","suppressedMessages":"38738","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38739","messages":"38740","suppressedMessages":"38741","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38742","messages":"38743","suppressedMessages":"38744","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38745","messages":"38746","suppressedMessages":"38747","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38748","messages":"38749","suppressedMessages":"38750","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38751","messages":"38752","suppressedMessages":"38753","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38754","messages":"38755","suppressedMessages":"38756","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38757","messages":"38758","suppressedMessages":"38759","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38760","messages":"38761","suppressedMessages":"38762","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38763","messages":"38764","suppressedMessages":"38765","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38766","messages":"38767","suppressedMessages":"38768","errorCount":8,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38769","messages":"38770","suppressedMessages":"38771","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38772","messages":"38773","suppressedMessages":"38774","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38775","messages":"38776","suppressedMessages":"38777","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38778","messages":"38779","suppressedMessages":"38780","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38781","messages":"38782","suppressedMessages":"38783","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38784","messages":"38785","suppressedMessages":"38786","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38787","messages":"38788","suppressedMessages":"38789","errorCount":11,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38790","messages":"38791","suppressedMessages":"38792","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38793","messages":"38794","suppressedMessages":"38795","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38796","messages":"38797","suppressedMessages":"38798","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38799","messages":"38800","suppressedMessages":"38801","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38802","messages":"38803","suppressedMessages":"38804","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38805","messages":"38806","suppressedMessages":"38807","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38808","messages":"38809","suppressedMessages":"38810","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38811","messages":"38812","suppressedMessages":"38813","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38814","messages":"38815","suppressedMessages":"38816","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38817","messages":"38818","suppressedMessages":"38819","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38820","messages":"38821","suppressedMessages":"38822","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38823","messages":"38824","suppressedMessages":"38825","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38826","messages":"38827","suppressedMessages":"38828","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38829","messages":"38830","suppressedMessages":"38831","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38832","messages":"38833","suppressedMessages":"38834","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38835","messages":"38836","suppressedMessages":"38837","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38838","messages":"38839","suppressedMessages":"38840","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38841","messages":"38842","suppressedMessages":"38843","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38844","messages":"38845","suppressedMessages":"38846","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38847","messages":"38848","suppressedMessages":"38849","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38850","messages":"38851","suppressedMessages":"38852","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38853","messages":"38854","suppressedMessages":"38855","errorCount":9,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38856","messages":"38857","suppressedMessages":"38858","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38859","messages":"38860","suppressedMessages":"38861","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38862","messages":"38863","suppressedMessages":"38864","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38865","messages":"38866","suppressedMessages":"38867","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38868","messages":"38869","suppressedMessages":"38870","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38871","messages":"38872","suppressedMessages":"38873","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38874","messages":"38875","suppressedMessages":"38876","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38877","messages":"38878","suppressedMessages":"38879","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38880","messages":"38881","suppressedMessages":"38882","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38883","messages":"38884","suppressedMessages":"38885","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38886","messages":"38887","suppressedMessages":"38888","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38889","messages":"38890","suppressedMessages":"38891","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38892","messages":"38893","suppressedMessages":"38894","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38895","messages":"38896","suppressedMessages":"38897","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38898","messages":"38899","suppressedMessages":"38900","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38901","messages":"38902","suppressedMessages":"38903","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38904","messages":"38905","suppressedMessages":"38906","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38907","messages":"38908","suppressedMessages":"38909","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38910","messages":"38911","suppressedMessages":"38912","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38913","messages":"38914","suppressedMessages":"38915","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38916","messages":"38917","suppressedMessages":"38918","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38919","messages":"38920","suppressedMessages":"38921","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38922","messages":"38923","suppressedMessages":"38924","errorCount":13,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38925","messages":"38926","suppressedMessages":"38927","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38928","messages":"38929","suppressedMessages":"38930","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38931","messages":"38932","suppressedMessages":"38933","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38934","messages":"38935","suppressedMessages":"38936","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38937","messages":"38938","suppressedMessages":"38939","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38940","messages":"38941","suppressedMessages":"38942","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38943","messages":"38944","suppressedMessages":"38945","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38946","messages":"38947","suppressedMessages":"38948","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38949","messages":"38950","suppressedMessages":"38951","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38952","messages":"38953","suppressedMessages":"38954","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38955","messages":"38956","suppressedMessages":"38957","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38958","messages":"38959","suppressedMessages":"38960","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38961","messages":"38962","suppressedMessages":"38963","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"38964","messages":"38965","suppressedMessages":"38966","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38967","messages":"38968","suppressedMessages":"38969","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38970","messages":"38971","suppressedMessages":"38972","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38973","messages":"38974","suppressedMessages":"38975","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38976","messages":"38977","suppressedMessages":"38978","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38979","messages":"38980","suppressedMessages":"38981","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38982","messages":"38983","suppressedMessages":"38984","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38985","messages":"38986","suppressedMessages":"38987","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38988","messages":"38989","suppressedMessages":"38990","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38991","messages":"38992","suppressedMessages":"38993","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38994","messages":"38995","suppressedMessages":"38996","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38997","messages":"38998","suppressedMessages":"38999","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39000","messages":"39001","suppressedMessages":"39002","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39003","messages":"39004","suppressedMessages":"39005","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39006","messages":"39007","suppressedMessages":"39008","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39009","messages":"39010","suppressedMessages":"39011","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39012","messages":"39013","suppressedMessages":"39014","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39015","messages":"39016","suppressedMessages":"39017","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39018","messages":"39019","suppressedMessages":"39020","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39021","messages":"39022","suppressedMessages":"39023","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39024","messages":"39025","suppressedMessages":"39026","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39027","messages":"39028","suppressedMessages":"39029","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39030","messages":"39031","suppressedMessages":"39032","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39033","messages":"39034","suppressedMessages":"39035","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39036","messages":"39037","suppressedMessages":"39038","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39039","messages":"39040","suppressedMessages":"39041","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39042","messages":"39043","suppressedMessages":"39044","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39045","messages":"39046","suppressedMessages":"39047","errorCount":14,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39048","messages":"39049","suppressedMessages":"39050","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39051","messages":"39052","suppressedMessages":"39053","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39054","messages":"39055","suppressedMessages":"39056","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39057","messages":"39058","suppressedMessages":"39059","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39060","messages":"39061","suppressedMessages":"39062","errorCount":18,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39063","messages":"39064","suppressedMessages":"39065","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39066","messages":"39067","suppressedMessages":"39068","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39069","messages":"39070","suppressedMessages":"39071","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39072","messages":"39073","suppressedMessages":"39074","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39075","messages":"39076","suppressedMessages":"39077","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39078","messages":"39079","suppressedMessages":"39080","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39081","messages":"39082","suppressedMessages":"39083","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39084","messages":"39085","suppressedMessages":"39086","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39087","messages":"39088","suppressedMessages":"39089","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39090","messages":"39091","suppressedMessages":"39092","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39093","messages":"39094","suppressedMessages":"39095","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39096","messages":"39097","suppressedMessages":"39098","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39099","messages":"39100","suppressedMessages":"39101","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39102","messages":"39103","suppressedMessages":"39104","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39105","messages":"39106","suppressedMessages":"39107","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39108","messages":"39109","suppressedMessages":"39110","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39111","messages":"39112","suppressedMessages":"39113","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39114","messages":"39115","suppressedMessages":"39116","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39117","messages":"39118","suppressedMessages":"39119","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39120","messages":"39121","suppressedMessages":"39122","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39123","messages":"39124","suppressedMessages":"39125","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39126","messages":"39127","suppressedMessages":"39128","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39129","messages":"39130","suppressedMessages":"39131","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39132","messages":"39133","suppressedMessages":"39134","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39135","messages":"39136","suppressedMessages":"39137","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39138","messages":"39139","suppressedMessages":"39140","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39141","messages":"39142","suppressedMessages":"39143","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39144","messages":"39145","suppressedMessages":"39146","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39147","messages":"39148","suppressedMessages":"39149","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39150","messages":"39151","suppressedMessages":"39152","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39153","messages":"39154","suppressedMessages":"39155","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39156","messages":"39157","suppressedMessages":"39158","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39159","messages":"39160","suppressedMessages":"39161","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39162","messages":"39163","suppressedMessages":"39164","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39165","messages":"39166","suppressedMessages":"39167","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39168","messages":"39169","suppressedMessages":"39170","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39171","messages":"39172","suppressedMessages":"39173","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39174","messages":"39175","suppressedMessages":"39176","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39177","messages":"39178","suppressedMessages":"39179","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39180","messages":"39181","suppressedMessages":"39182","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39183","messages":"39184","suppressedMessages":"39185","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39186","messages":"39187","suppressedMessages":"39188","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39189","messages":"39190","suppressedMessages":"39191","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39192","messages":"39193","suppressedMessages":"39194","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39195","messages":"39196","suppressedMessages":"39197","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39198","messages":"39199","suppressedMessages":"39200","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39201","messages":"39202","suppressedMessages":"39203","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39204","messages":"39205","suppressedMessages":"39206","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39207","messages":"39208","suppressedMessages":"39209","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39210","messages":"39211","suppressedMessages":"39212","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39213","messages":"39214","suppressedMessages":"39215","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39216","messages":"39217","suppressedMessages":"39218","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39219","messages":"39220","suppressedMessages":"39221","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39222","messages":"39223","suppressedMessages":"39224","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39225","messages":"39226","suppressedMessages":"39227","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39228","messages":"39229","suppressedMessages":"39230","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39231","messages":"39232","suppressedMessages":"39233","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39234","messages":"39235","suppressedMessages":"39236","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39237","messages":"39238","suppressedMessages":"39239","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39240","messages":"39241","suppressedMessages":"39242","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39243","messages":"39244","suppressedMessages":"39245","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39246","messages":"39247","suppressedMessages":"39248","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39249","messages":"39250","suppressedMessages":"39251","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39252","messages":"39253","suppressedMessages":"39254","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39255","messages":"39256","suppressedMessages":"39257","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39258","messages":"39259","suppressedMessages":"39260","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39261","messages":"39262","suppressedMessages":"39263","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39264","messages":"39265","suppressedMessages":"39266","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39267","messages":"39268","suppressedMessages":"39269","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39270","messages":"39271","suppressedMessages":"39272","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39273","messages":"39274","suppressedMessages":"39275","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39276","messages":"39277","suppressedMessages":"39278","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39279","messages":"39280","suppressedMessages":"39281","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39282","messages":"39283","suppressedMessages":"39284","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39285","messages":"39286","suppressedMessages":"39287","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39288","messages":"39289","suppressedMessages":"39290","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39291","messages":"39292","suppressedMessages":"39293","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39294","messages":"39295","suppressedMessages":"39296","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39297","messages":"39298","suppressedMessages":"39299","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39300","messages":"39301","suppressedMessages":"39302","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39303","messages":"39304","suppressedMessages":"39305","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39306","messages":"39307","suppressedMessages":"39308","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39309","messages":"39310","suppressedMessages":"39311","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39312","messages":"39313","suppressedMessages":"39314","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39315","messages":"39316","suppressedMessages":"39317","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39318","messages":"39319","suppressedMessages":"39320","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39321","messages":"39322","suppressedMessages":"39323","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39324","messages":"39325","suppressedMessages":"39326","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39327","messages":"39328","suppressedMessages":"39329","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39330","messages":"39331","suppressedMessages":"39332","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39333","messages":"39334","suppressedMessages":"39335","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39336","messages":"39337","suppressedMessages":"39338","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39339","messages":"39340","suppressedMessages":"39341","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39342","messages":"39343","suppressedMessages":"39344","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39345","messages":"39346","suppressedMessages":"39347","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39348","messages":"39349","suppressedMessages":"39350","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39351","messages":"39352","suppressedMessages":"39353","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39354","messages":"39355","suppressedMessages":"39356","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39357","messages":"39358","suppressedMessages":"39359","errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39360","messages":"39361","suppressedMessages":"39362","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39363","messages":"39364","suppressedMessages":"39365","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39366","messages":"39367","suppressedMessages":"39368","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39369","messages":"39370","suppressedMessages":"39371","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39372","messages":"39373","suppressedMessages":"39374","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39375","messages":"39376","suppressedMessages":"39377","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39378","messages":"39379","suppressedMessages":"39380","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39381","messages":"39382","suppressedMessages":"39383","errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39384","messages":"39385","suppressedMessages":"39386","errorCount":17,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39387","messages":"39388","suppressedMessages":"39389","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39390","messages":"39391","suppressedMessages":"39392","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39393","messages":"39394","suppressedMessages":"39395","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39396","messages":"39397","suppressedMessages":"39398","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39399","messages":"39400","suppressedMessages":"39401","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39402","messages":"39403","suppressedMessages":"39404","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39405","messages":"39406","suppressedMessages":"39407","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39408","messages":"39409","suppressedMessages":"39410","errorCount":12,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39411","messages":"39412","suppressedMessages":"39413","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39414","messages":"39415","suppressedMessages":"39416","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39417","messages":"39418","suppressedMessages":"39419","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39420","messages":"39421","suppressedMessages":"39422","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39423","messages":"39424","suppressedMessages":"39425","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39426","messages":"39427","suppressedMessages":"39428","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39429","messages":"39430","suppressedMessages":"39431","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39432","messages":"39433","suppressedMessages":"39434","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39435","messages":"39436","suppressedMessages":"39437","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39438","messages":"39439","suppressedMessages":"39440","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39441","messages":"39442","suppressedMessages":"39443","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39444","messages":"39445","suppressedMessages":"39446","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39447","messages":"39448","suppressedMessages":"39449","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39450","messages":"39451","suppressedMessages":"39452","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39453","messages":"39454","suppressedMessages":"39455","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39456","messages":"39457","suppressedMessages":"39458","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39459","messages":"39460","suppressedMessages":"39461","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39462","messages":"39463","suppressedMessages":"39464","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39465","messages":"39466","suppressedMessages":"39467","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39468","messages":"39469","suppressedMessages":"39470","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39471","messages":"39472","suppressedMessages":"39473","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39474","messages":"39475","suppressedMessages":"39476","errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39477","messages":"39478","suppressedMessages":"39479","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39480","messages":"39481","suppressedMessages":"39482","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39483","messages":"39484","suppressedMessages":"39485","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39486","messages":"39487","suppressedMessages":"39488","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39489","messages":"39490","suppressedMessages":"39491","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39492","messages":"39493","suppressedMessages":"39494","errorCount":21,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39495","messages":"39496","suppressedMessages":"39497","errorCount":15,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39498","messages":"39499","suppressedMessages":"39500","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39501","messages":"39502","suppressedMessages":"39503","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39504","messages":"39505","suppressedMessages":"39506","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39507","messages":"39508","suppressedMessages":"39509","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39510","messages":"39511","suppressedMessages":"39512","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39513","messages":"39514","suppressedMessages":"39515","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39516","messages":"39517","suppressedMessages":"39518","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39519","messages":"39520","suppressedMessages":"39521","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39522","messages":"39523","suppressedMessages":"39524","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39525","messages":"39526","suppressedMessages":"39527","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39528","messages":"39529","suppressedMessages":"39530","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39531","messages":"39532","suppressedMessages":"39533","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39534","messages":"39535","suppressedMessages":"39536","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39537","messages":"39538","suppressedMessages":"39539","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39540","messages":"39541","suppressedMessages":"39542","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39543","messages":"39544","suppressedMessages":"39545","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39546","messages":"39547","suppressedMessages":"39548","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39549","messages":"39550","suppressedMessages":"39551","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39552","messages":"39553","suppressedMessages":"39554","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39555","messages":"39556","suppressedMessages":"39557","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39558","messages":"39559","suppressedMessages":"39560","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39561","messages":"39562","suppressedMessages":"39563","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39564","messages":"39565","suppressedMessages":"39566","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39567","messages":"39568","suppressedMessages":"39569","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39570","messages":"39571","suppressedMessages":"39572","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39573","messages":"39574","suppressedMessages":"39575","errorCount":25,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39576","messages":"39577","suppressedMessages":"39578","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39579","messages":"39580","suppressedMessages":"39581","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39582","messages":"39583","suppressedMessages":"39584","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39585","messages":"39586","suppressedMessages":"39587","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39588","messages":"39589","suppressedMessages":"39590","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39591","messages":"39592","suppressedMessages":"39593","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39594","messages":"39595","suppressedMessages":"39596","errorCount":76,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39597","messages":"39598","suppressedMessages":"39599","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39600","messages":"39601","suppressedMessages":"39602","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39603","messages":"39604","suppressedMessages":"39605","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39606","messages":"39607","suppressedMessages":"39608","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39609","messages":"39610","suppressedMessages":"39611","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39612","messages":"39613","suppressedMessages":"39614","errorCount":74,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39615","messages":"39616","suppressedMessages":"39617","errorCount":17,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39618","messages":"39619","suppressedMessages":"39620","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39621","messages":"39622","suppressedMessages":"39623","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39624","messages":"39625","suppressedMessages":"39626","errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39627","messages":"39628","suppressedMessages":"39629","errorCount":17,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39630","messages":"39631","suppressedMessages":"39632","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39633","messages":"39634","suppressedMessages":"39635","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39636","messages":"39637","suppressedMessages":"39638","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39639","messages":"39640","suppressedMessages":"39641","errorCount":75,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39642","messages":"39643","suppressedMessages":"39644","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39645","messages":"39646","suppressedMessages":"39647","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39648","messages":"39649","suppressedMessages":"39650","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39651","messages":"39652","suppressedMessages":"39653","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39654","messages":"39655","suppressedMessages":"39656","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39657","messages":"39658","suppressedMessages":"39659","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39660","messages":"39661","suppressedMessages":"39662","errorCount":14,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39663","messages":"39664","suppressedMessages":"39665","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39666","messages":"39667","suppressedMessages":"39668","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39669","messages":"39670","suppressedMessages":"39671","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39672","messages":"39673","suppressedMessages":"39674","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39675","messages":"39676","suppressedMessages":"39677","errorCount":12,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39678","messages":"39679","suppressedMessages":"39680","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39681","messages":"39682","suppressedMessages":"39683","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39684","messages":"39685","suppressedMessages":"39686","errorCount":9,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"39687","messages":"39688","suppressedMessages":"39689","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39690","messages":"39691","suppressedMessages":"39692","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39693","messages":"39694","suppressedMessages":"39695","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39696","messages":"39697","suppressedMessages":"39698","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39699","messages":"39700","suppressedMessages":"39701","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39702","messages":"39703","suppressedMessages":"39704","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39705","messages":"39706","suppressedMessages":"39707","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39708","messages":"39709","suppressedMessages":"39710","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39711","messages":"39712","suppressedMessages":"39713","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39714","messages":"39715","suppressedMessages":"39716","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39717","messages":"39718","suppressedMessages":"39719","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39720","messages":"39721","suppressedMessages":"39722","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39723","messages":"39724","suppressedMessages":"39725","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39726","messages":"39727","suppressedMessages":"39728","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39729","messages":"39730","suppressedMessages":"39731","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39732","messages":"39733","suppressedMessages":"39734","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39735","messages":"39736","suppressedMessages":"39737","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39738","messages":"39739","suppressedMessages":"39740","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39741","messages":"39742","suppressedMessages":"39743","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39744","messages":"39745","suppressedMessages":"39746","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39747","messages":"39748","suppressedMessages":"39749","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39750","messages":"39751","suppressedMessages":"39752","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39753","messages":"39754","suppressedMessages":"39755","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39756","messages":"39757","suppressedMessages":"39758","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39759","messages":"39760","suppressedMessages":"39761","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39762","messages":"39763","suppressedMessages":"39764","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39765","messages":"39766","suppressedMessages":"39767","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39768","messages":"39769","suppressedMessages":"39770","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39771","messages":"39772","suppressedMessages":"39773","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39774","messages":"39775","suppressedMessages":"39776","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39777","messages":"39778","suppressedMessages":"39779","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39780","messages":"39781","suppressedMessages":"39782","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39783","messages":"39784","suppressedMessages":"39785","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39786","messages":"39787","suppressedMessages":"39788","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39789","messages":"39790","suppressedMessages":"39791","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39792","messages":"39793","suppressedMessages":"39794","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39795","messages":"39796","suppressedMessages":"39797","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39798","messages":"39799","suppressedMessages":"39800","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39801","messages":"39802","suppressedMessages":"39803","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39804","messages":"39805","suppressedMessages":"39806","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39807","messages":"39808","suppressedMessages":"39809","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39810","messages":"39811","suppressedMessages":"39812","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39813","messages":"39814","suppressedMessages":"39815","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39816","messages":"39817","suppressedMessages":"39818","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39819","messages":"39820","suppressedMessages":"39821","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39822","messages":"39823","suppressedMessages":"39824","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39825","messages":"39826","suppressedMessages":"39827","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39828","messages":"39829","suppressedMessages":"39830","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39831","messages":"39832","suppressedMessages":"39833","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39834","messages":"39835","suppressedMessages":"39836","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39837","messages":"39838","suppressedMessages":"39839","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39840","messages":"39841","suppressedMessages":"39842","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39843","messages":"39844","suppressedMessages":"39845","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39846","messages":"39847","suppressedMessages":"39848","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39849","messages":"39850","suppressedMessages":"39851","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39852","messages":"39853","suppressedMessages":"39854","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39855","messages":"39856","suppressedMessages":"39857","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39858","messages":"39859","suppressedMessages":"39860","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39861","messages":"39862","suppressedMessages":"39863","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39864","messages":"39865","suppressedMessages":"39866","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39867","messages":"39868","suppressedMessages":"39869","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39870","messages":"39871","suppressedMessages":"39872","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39873","messages":"39874","suppressedMessages":"39875","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39876","messages":"39877","suppressedMessages":"39878","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39879","messages":"39880","suppressedMessages":"39881","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39882","messages":"39883","suppressedMessages":"39884","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39885","messages":"39886","suppressedMessages":"39887","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39888","messages":"39889","suppressedMessages":"39890","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39891","messages":"39892","suppressedMessages":"39893","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39894","messages":"39895","suppressedMessages":"39896","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39897","messages":"39898","suppressedMessages":"39899","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39900","messages":"39901","suppressedMessages":"39902","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39903","messages":"39904","suppressedMessages":"39905","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39906","messages":"39907","suppressedMessages":"39908","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39909","messages":"39910","suppressedMessages":"39911","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39912","messages":"39913","suppressedMessages":"39914","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39915","messages":"39916","suppressedMessages":"39917","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39918","messages":"39919","suppressedMessages":"39920","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39921","messages":"39922","suppressedMessages":"39923","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39924","messages":"39925","suppressedMessages":"39926","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39927","messages":"39928","suppressedMessages":"39929","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39930","messages":"39931","suppressedMessages":"39932","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39933","messages":"39934","suppressedMessages":"39935","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39936","messages":"39937","suppressedMessages":"39938","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39939","messages":"39940","suppressedMessages":"39941","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39942","messages":"39943","suppressedMessages":"39944","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39945","messages":"39946","suppressedMessages":"39947","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39948","messages":"39949","suppressedMessages":"39950","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39951","messages":"39952","suppressedMessages":"39953","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39954","messages":"39955","suppressedMessages":"39956","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39957","messages":"39958","suppressedMessages":"39959","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39960","messages":"39961","suppressedMessages":"39962","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39963","messages":"39964","suppressedMessages":"39965","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39966","messages":"39967","suppressedMessages":"39968","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39969","messages":"39970","suppressedMessages":"39971","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39972","messages":"39973","suppressedMessages":"39974","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39975","messages":"39976","suppressedMessages":"39977","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39978","messages":"39979","suppressedMessages":"39980","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39981","messages":"39982","suppressedMessages":"39983","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39984","messages":"39985","suppressedMessages":"39986","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39987","messages":"39988","suppressedMessages":"39989","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39990","messages":"39991","suppressedMessages":"39992","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39993","messages":"39994","suppressedMessages":"39995","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39996","messages":"39997","suppressedMessages":"39998","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39999","messages":"40000","suppressedMessages":"40001","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40002","messages":"40003","suppressedMessages":"40004","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40005","messages":"40006","suppressedMessages":"40007","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40008","messages":"40009","suppressedMessages":"40010","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40011","messages":"40012","suppressedMessages":"40013","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40014","messages":"40015","suppressedMessages":"40016","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40017","messages":"40018","suppressedMessages":"40019","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40020","messages":"40021","suppressedMessages":"40022","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40023","messages":"40024","suppressedMessages":"40025","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40026","messages":"40027","suppressedMessages":"40028","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40029","messages":"40030","suppressedMessages":"40031","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40032","messages":"40033","suppressedMessages":"40034","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40035","messages":"40036","suppressedMessages":"40037","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40038","messages":"40039","suppressedMessages":"40040","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40041","messages":"40042","suppressedMessages":"40043","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40044","messages":"40045","suppressedMessages":"40046","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40047","messages":"40048","suppressedMessages":"40049","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40050","messages":"40051","suppressedMessages":"40052","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40053","messages":"40054","suppressedMessages":"40055","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40056","messages":"40057","suppressedMessages":"40058","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40059","messages":"40060","suppressedMessages":"40061","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40062","messages":"40063","suppressedMessages":"40064","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40065","messages":"40066","suppressedMessages":"40067","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40068","messages":"40069","suppressedMessages":"40070","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40071","messages":"40072","suppressedMessages":"40073","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40074","messages":"40075","suppressedMessages":"40076","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40077","messages":"40078","suppressedMessages":"40079","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40080","messages":"40081","suppressedMessages":"40082","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40083","messages":"40084","suppressedMessages":"40085","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40086","messages":"40087","suppressedMessages":"40088","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40089","messages":"40090","suppressedMessages":"40091","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40092","messages":"40093","suppressedMessages":"40094","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40095","messages":"40096","suppressedMessages":"40097","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40098","messages":"40099","suppressedMessages":"40100","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40101","messages":"40102","suppressedMessages":"40103","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40104","messages":"40105","suppressedMessages":"40106","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40107","messages":"40108","suppressedMessages":"40109","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40110","messages":"40111","suppressedMessages":"40112","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40113","messages":"40114","suppressedMessages":"40115","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40116","messages":"40117","suppressedMessages":"40118","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40119","messages":"40120","suppressedMessages":"40121","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40122","messages":"40123","suppressedMessages":"40124","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40125","messages":"40126","suppressedMessages":"40127","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40128","messages":"40129","suppressedMessages":"40130","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40131","messages":"40132","suppressedMessages":"40133","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40134","messages":"40135","suppressedMessages":"40136","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40137","messages":"40138","suppressedMessages":"40139","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40140","messages":"40141","suppressedMessages":"40142","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40143","messages":"40144","suppressedMessages":"40145","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40146","messages":"40147","suppressedMessages":"40148","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40149","messages":"40150","suppressedMessages":"40151","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40152","messages":"40153","suppressedMessages":"40154","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40155","messages":"40156","suppressedMessages":"40157","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40158","messages":"40159","suppressedMessages":"40160","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40161","messages":"40162","suppressedMessages":"40163","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40164","messages":"40165","suppressedMessages":"40166","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40167","messages":"40168","suppressedMessages":"40169","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40170","messages":"40171","suppressedMessages":"40172","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40173","messages":"40174","suppressedMessages":"40175","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40176","messages":"40177","suppressedMessages":"40178","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40179","messages":"40180","suppressedMessages":"40181","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40182","messages":"40183","suppressedMessages":"40184","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40185","messages":"40186","suppressedMessages":"40187","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40188","messages":"40189","suppressedMessages":"40190","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40191","messages":"40192","suppressedMessages":"40193","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40194","messages":"40195","suppressedMessages":"40196","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40197","messages":"40198","suppressedMessages":"40199","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40200","messages":"40201","suppressedMessages":"40202","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40203","messages":"40204","suppressedMessages":"40205","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40206","messages":"40207","suppressedMessages":"40208","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40209","messages":"40210","suppressedMessages":"40211","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40212","messages":"40213","suppressedMessages":"40214","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40215","messages":"40216","suppressedMessages":"40217","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40218","messages":"40219","suppressedMessages":"40220","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40221","messages":"40222","suppressedMessages":"40223","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40224","messages":"40225","suppressedMessages":"40226","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40227","messages":"40228","suppressedMessages":"40229","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40230","messages":"40231","suppressedMessages":"40232","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40233","messages":"40234","suppressedMessages":"40235","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40236","messages":"40237","suppressedMessages":"40238","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40239","messages":"40240","suppressedMessages":"40241","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40242","messages":"40243","suppressedMessages":"40244","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40245","messages":"40246","suppressedMessages":"40247","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40248","messages":"40249","suppressedMessages":"40250","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40251","messages":"40252","suppressedMessages":"40253","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40254","messages":"40255","suppressedMessages":"40256","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40257","messages":"40258","suppressedMessages":"40259","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40260","messages":"40261","suppressedMessages":"40262","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40263","messages":"40264","suppressedMessages":"40265","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40266","messages":"40267","suppressedMessages":"40268","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40269","messages":"40270","suppressedMessages":"40271","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40272","messages":"40273","suppressedMessages":"40274","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40275","messages":"40276","suppressedMessages":"40277","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40278","messages":"40279","suppressedMessages":"40280","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40281","messages":"40282","suppressedMessages":"40283","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40284","messages":"40285","suppressedMessages":"40286","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40287","messages":"40288","suppressedMessages":"40289","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40290","messages":"40291","suppressedMessages":"40292","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40293","messages":"40294","suppressedMessages":"40295","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40296","messages":"40297","suppressedMessages":"40298","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40299","messages":"40300","suppressedMessages":"40301","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40302","messages":"40303","suppressedMessages":"40304","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40305","messages":"40306","suppressedMessages":"40307","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40308","messages":"40309","suppressedMessages":"40310","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40311","messages":"40312","suppressedMessages":"40313","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40314","messages":"40315","suppressedMessages":"40316","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40317","messages":"40318","suppressedMessages":"40319","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40320","messages":"40321","suppressedMessages":"40322","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40323","messages":"40324","suppressedMessages":"40325","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40326","messages":"40327","suppressedMessages":"40328","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40329","messages":"40330","suppressedMessages":"40331","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40332","messages":"40333","suppressedMessages":"40334","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40335","messages":"40336","suppressedMessages":"40337","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40338","messages":"40339","suppressedMessages":"40340","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40341","messages":"40342","suppressedMessages":"40343","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40344","messages":"40345","suppressedMessages":"40346","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40347","messages":"40348","suppressedMessages":"40349","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40350","messages":"40351","suppressedMessages":"40352","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40353","messages":"40354","suppressedMessages":"40355","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40356","messages":"40357","suppressedMessages":"40358","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40359","messages":"40360","suppressedMessages":"40361","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40362","messages":"40363","suppressedMessages":"40364","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40365","messages":"40366","suppressedMessages":"40367","errorCount":16,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40368","messages":"40369","suppressedMessages":"40370","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40371","messages":"40372","suppressedMessages":"40373","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40374","messages":"40375","suppressedMessages":"40376","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40377","messages":"40378","suppressedMessages":"40379","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40380","messages":"40381","suppressedMessages":"40382","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40383","messages":"40384","suppressedMessages":"40385","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40386","messages":"40387","suppressedMessages":"40388","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40389","messages":"40390","suppressedMessages":"40391","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40392","messages":"40393","suppressedMessages":"40394","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40395","messages":"40396","suppressedMessages":"40397","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40398","messages":"40399","suppressedMessages":"40400","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40401","messages":"40402","suppressedMessages":"40403","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40404","messages":"40405","suppressedMessages":"40406","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40407","messages":"40408","suppressedMessages":"40409","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40410","messages":"40411","suppressedMessages":"40412","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40413","messages":"40414","suppressedMessages":"40415","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40416","messages":"40417","suppressedMessages":"40418","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40419","messages":"40420","suppressedMessages":"40421","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40422","messages":"40423","suppressedMessages":"40424","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40425","messages":"40426","suppressedMessages":"40427","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40428","messages":"40429","suppressedMessages":"40430","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40431","messages":"40432","suppressedMessages":"40433","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40434","messages":"40435","suppressedMessages":"40436","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40437","messages":"40438","suppressedMessages":"40439","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40440","messages":"40441","suppressedMessages":"40442","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40443","messages":"40444","suppressedMessages":"40445","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40446","messages":"40447","suppressedMessages":"40448","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40449","messages":"40450","suppressedMessages":"40451","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40452","messages":"40453","suppressedMessages":"40454","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40455","messages":"40456","suppressedMessages":"40457","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40458","messages":"40459","suppressedMessages":"40460","errorCount":17,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40461","messages":"40462","suppressedMessages":"40463","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40464","messages":"40465","suppressedMessages":"40466","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40467","messages":"40468","suppressedMessages":"40469","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40470","messages":"40471","suppressedMessages":"40472","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40473","messages":"40474","suppressedMessages":"40475","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40476","messages":"40477","suppressedMessages":"40478","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40479","messages":"40480","suppressedMessages":"40481","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40482","messages":"40483","suppressedMessages":"40484","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40485","messages":"40486","suppressedMessages":"40487","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40488","messages":"40489","suppressedMessages":"40490","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40491","messages":"40492","suppressedMessages":"40493","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40494","messages":"40495","suppressedMessages":"40496","errorCount":56,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40497","messages":"40498","suppressedMessages":"40499","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40500","messages":"40501","suppressedMessages":"40502","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40503","messages":"40504","suppressedMessages":"40505","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40506","messages":"40507","suppressedMessages":"40508","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40509","messages":"40510","suppressedMessages":"40511","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40512","messages":"40513","suppressedMessages":"40514","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40515","messages":"40516","suppressedMessages":"40517","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40518","messages":"40519","suppressedMessages":"40520","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40521","messages":"40522","suppressedMessages":"40523","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40524","messages":"40525","suppressedMessages":"40526","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40527","messages":"40528","suppressedMessages":"40529","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40530","messages":"40531","suppressedMessages":"40532","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40533","messages":"40534","suppressedMessages":"40535","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40536","messages":"40537","suppressedMessages":"40538","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40539","messages":"40540","suppressedMessages":"40541","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40542","messages":"40543","suppressedMessages":"40544","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40545","messages":"40546","suppressedMessages":"40547","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40548","messages":"40549","suppressedMessages":"40550","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40551","messages":"40552","suppressedMessages":"40553","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40554","messages":"40555","suppressedMessages":"40556","errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40557","messages":"40558","suppressedMessages":"40559","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40560","messages":"40561","suppressedMessages":"40562","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40563","messages":"40564","suppressedMessages":"40565","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40566","messages":"40567","suppressedMessages":"40568","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40569","messages":"40570","suppressedMessages":"40571","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40572","messages":"40573","suppressedMessages":"40574","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40575","messages":"40576","suppressedMessages":"40577","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40578","messages":"40579","suppressedMessages":"40580","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40581","messages":"40582","suppressedMessages":"40583","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40584","messages":"40585","suppressedMessages":"40586","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40587","messages":"40588","suppressedMessages":"40589","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40590","messages":"40591","suppressedMessages":"40592","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40593","messages":"40594","suppressedMessages":"40595","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40596","messages":"40597","suppressedMessages":"40598","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40599","messages":"40600","suppressedMessages":"40601","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40602","messages":"40603","suppressedMessages":"40604","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40605","messages":"40606","suppressedMessages":"40607","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40608","messages":"40609","suppressedMessages":"40610","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40611","messages":"40612","suppressedMessages":"40613","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40614","messages":"40615","suppressedMessages":"40616","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40617","messages":"40618","suppressedMessages":"40619","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40620","messages":"40621","suppressedMessages":"40622","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40623","messages":"40624","suppressedMessages":"40625","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40626","messages":"40627","suppressedMessages":"40628","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40629","messages":"40630","suppressedMessages":"40631","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40632","messages":"40633","suppressedMessages":"40634","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40635","messages":"40636","suppressedMessages":"40637","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40638","messages":"40639","suppressedMessages":"40640","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40641","messages":"40642","suppressedMessages":"40643","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40644","messages":"40645","suppressedMessages":"40646","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40647","messages":"40648","suppressedMessages":"40649","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40650","messages":"40651","suppressedMessages":"40652","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40653","messages":"40654","suppressedMessages":"40655","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40656","messages":"40657","suppressedMessages":"40658","errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40659","messages":"40660","suppressedMessages":"40661","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40662","messages":"40663","suppressedMessages":"40664","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40665","messages":"40666","suppressedMessages":"40667","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40668","messages":"40669","suppressedMessages":"40670","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40671","messages":"40672","suppressedMessages":"40673","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40674","messages":"40675","suppressedMessages":"40676","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40677","messages":"40678","suppressedMessages":"40679","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40680","messages":"40681","suppressedMessages":"40682","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40683","messages":"40684","suppressedMessages":"40685","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40686","messages":"40687","suppressedMessages":"40688","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40689","messages":"40690","suppressedMessages":"40691","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40692","messages":"40693","suppressedMessages":"40694","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40695","messages":"40696","suppressedMessages":"40697","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40698","messages":"40699","suppressedMessages":"40700","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40701","messages":"40702","suppressedMessages":"40703","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40704","messages":"40705","suppressedMessages":"40706","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40707","messages":"40708","suppressedMessages":"40709","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40710","messages":"40711","suppressedMessages":"40712","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40713","messages":"40714","suppressedMessages":"40715","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40716","messages":"40717","suppressedMessages":"40718","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40719","messages":"40720","suppressedMessages":"40721","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40722","messages":"40723","suppressedMessages":"40724","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40725","messages":"40726","suppressedMessages":"40727","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40728","messages":"40729","suppressedMessages":"40730","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40731","messages":"40732","suppressedMessages":"40733","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40734","messages":"40735","suppressedMessages":"40736","errorCount":65,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40737","messages":"40738","suppressedMessages":"40739","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40740","messages":"40741","suppressedMessages":"40742","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40743","messages":"40744","suppressedMessages":"40745","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40746","messages":"40747","suppressedMessages":"40748","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40749","messages":"40750","suppressedMessages":"40751","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40752","messages":"40753","suppressedMessages":"40754","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40755","messages":"40756","suppressedMessages":"40757","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40758","messages":"40759","suppressedMessages":"40760","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40761","messages":"40762","suppressedMessages":"40763","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40764","messages":"40765","suppressedMessages":"40766","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40767","messages":"40768","suppressedMessages":"40769","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40770","messages":"40771","suppressedMessages":"40772","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40773","messages":"40774","suppressedMessages":"40775","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40776","messages":"40777","suppressedMessages":"40778","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40779","messages":"40780","suppressedMessages":"40781","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40782","messages":"40783","suppressedMessages":"40784","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40785","messages":"40786","suppressedMessages":"40787","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40788","messages":"40789","suppressedMessages":"40790","errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40791","messages":"40792","suppressedMessages":"40793","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40794","messages":"40795","suppressedMessages":"40796","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40797","messages":"40798","suppressedMessages":"40799","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40800","messages":"40801","suppressedMessages":"40802","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40803","messages":"40804","suppressedMessages":"40805","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40806","messages":"40807","suppressedMessages":"40808","errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"40809","messages":"40810","suppressedMessages":"40811","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40812","messages":"40813","suppressedMessages":"40814","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40815","messages":"40816","suppressedMessages":"40817","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40818","messages":"40819","suppressedMessages":"40820","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40821","messages":"40822","suppressedMessages":"40823","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40824","messages":"40825","suppressedMessages":"40826","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40827","messages":"40828","suppressedMessages":"40829","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40830","messages":"40831","suppressedMessages":"40832","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40833","messages":"40834","suppressedMessages":"40835","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40836","messages":"40837","suppressedMessages":"40838","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40839","messages":"40840","suppressedMessages":"40841","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40842","messages":"40843","suppressedMessages":"40844","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40845","messages":"40846","suppressedMessages":"40847","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40848","messages":"40849","suppressedMessages":"40850","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40851","messages":"40852","suppressedMessages":"40853","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40854","messages":"40855","suppressedMessages":"40856","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40857","messages":"40858","suppressedMessages":"40859","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40860","messages":"40861","suppressedMessages":"40862","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40863","messages":"40864","suppressedMessages":"40865","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40866","messages":"40867","suppressedMessages":"40868","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40869","messages":"40870","suppressedMessages":"40871","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40872","messages":"40873","suppressedMessages":"40874","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40875","messages":"40876","suppressedMessages":"40877","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40878","messages":"40879","suppressedMessages":"40880","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40881","messages":"40882","suppressedMessages":"40883","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40884","messages":"40885","suppressedMessages":"40886","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40887","messages":"40888","suppressedMessages":"40889","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40890","messages":"40891","suppressedMessages":"40892","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40893","messages":"40894","suppressedMessages":"40895","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40896","messages":"40897","suppressedMessages":"40898","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40899","messages":"40900","suppressedMessages":"40901","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40902","messages":"40903","suppressedMessages":"40904","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40905","messages":"40906","suppressedMessages":"40907","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40908","messages":"40909","suppressedMessages":"40910","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40911","messages":"40912","suppressedMessages":"40913","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40914","messages":"40915","suppressedMessages":"40916","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40917","messages":"40918","suppressedMessages":"40919","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40920","messages":"40921","suppressedMessages":"40922","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40923","messages":"40924","suppressedMessages":"40925","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40926","messages":"40927","suppressedMessages":"40928","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40929","messages":"40930","suppressedMessages":"40931","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40932","messages":"40933","suppressedMessages":"40934","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40935","messages":"40936","suppressedMessages":"40937","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40938","messages":"40939","suppressedMessages":"40940","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40941","messages":"40942","suppressedMessages":"40943","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40944","messages":"40945","suppressedMessages":"40946","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/src/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/src/logger.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/src/naming.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/auto-combo-context.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/auto-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/combos.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/config-shim.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/disk-snapshot-perms.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/feature-defaults.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/features.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/fetch-interceptor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/fork-features.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/gemini-sanitize.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/management-read-token.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/model-allowlist.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/multi-instance.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/options-schema.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/provider-id-routing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/scaffold.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tests/usable-combo.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-plugin/tsup.config.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-provider/src/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-provider/tests/index.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/@omniroute/opencode-provider/tsup.config.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/docker/devin-bridge/mock-devin.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/docker/devin-bridge/network-guard/policy.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/docker/devin-bridge/network-guard/proxy.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/docker/devin-bridge/run-contract.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/eslint.complexity-ratchets.config.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/eslint.complexity.config.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/eslint.config.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/eslint.sonarjs.config.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/examples/omniroute-cmd-hello/index.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/examples/plugins/langfuse/index.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/examples/plugins/request-logger/index.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/examples/plugins/theme-manager/index.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/examples/plugins/welcome-banner/index.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/next.config.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/agyModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/anthropicHeaders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/antigravityModelAliases.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/antigravityUpstream.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/audioRegistry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/azureAi.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/bedrock.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/claudeCodeCompatibleIdentity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/claudeWebFingerprint.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/cliFingerprints.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/codexClient.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/codexIdentity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/codexInstructions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/codexQuotaScopes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/constants.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/contextEditing.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/credentialLoader.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/datarobot.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/defaultThinkingSignature.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/embeddingRegistry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/errorConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/freeModelCatalog.data.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/freeModelCatalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/freeTierCatalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/glmProvider.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/grokBuild.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/imageRegistry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/maritalk.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/mediaServiceKinds.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/moderationRegistry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/musicRegistry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/oci.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/ocrRegistry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/ollamaModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerErrorRules.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerFieldStrips.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerHeaderProfiles.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerPluginManifest.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerPluginManifestRegistry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerPluginManifestUrl.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providerRegistry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/alternateFormats.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/adapta-web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/agentrouter/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/agnes/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/agy/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/ai21/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/aihorde/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/aimlapi/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/ainative/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/aion/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/alibaba/cn/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/alibaba/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/ant-ling/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/anthropic/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/antigravity/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/anyapi/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/api-airforce/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/auggie/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/bai/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/baichuan/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/baidu/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/bailian-coding-plan/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/baseten/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/bazaarlink/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/bedrock/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/blackbox/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/blackbox/web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/bluesminds/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/byteplus/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/bytez/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/cerebras/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/charm-hyper/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/chatgpt-web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/cheaperinference/imageModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/cheaperinference/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/chenzk/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/chipotle/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/chutes/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/claude/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/claude/web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/cline/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/clinepass/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/cloudflare-ai/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/clova-studio/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/codebuddy-cn/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/codestral/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/codex/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/cohere/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/command-code/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/copilot-m365-web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/copilot-web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/coze/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/crof/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/cursor/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/dahl/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/databricks/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/deepinfra/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/deepseek/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/deepseek/web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/devin/catalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/devin-cli/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/devin-cli-agentic/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/dgrid/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/dify/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/digitalocean/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/dit/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/doubao/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/doubao/web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/duckduckgo-web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/electronhub/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/factory/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/fastrouter/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/featherless-ai/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/felo-web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/fireworks/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/freeaiapikey/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/freemodel-dev/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/freepik/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/freetheai/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/friendliai/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/g4f-gemini/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/g4f-groq/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/g4f-nvidia/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/g4f-ollama/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/g4f-pollinations/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/galadriel/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/gemini/imageModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/gemini/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/gemini/web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/ghe-copilot/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/gigachat/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/github/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/github/models/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/github/retiredModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/gitlab-duo/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/gitlawb/gmi/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/gitlawb/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/glm/cn/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/glm/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/glm/t/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/grok-cli/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/grok-web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/groq/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/hackclub/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/haiper/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/hcnsec/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/heroku/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/huggingchat/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/huggingface/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/hyperagent/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/hyperbolic/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/ideogram/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/iflytek/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/inception/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/inference-net/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/inner-ai/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/internlm/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kenari/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kie/imageModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kie/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kie/models.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kilo-gateway/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kilocode/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kimi/coding/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kimi/coding/runtime.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kimi/coding-apikey/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kimi/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kimi/web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kimi/web/runtime.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/kiro/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/lambda-ai/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/leonardo/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/liquid/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/llamagate/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/llm-kiwi/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/llm7/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/llmgateway/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/lmarena/directModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/lmarena/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/longcat/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/maritalk/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/meta-llama/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/mimocode/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/minimax/cn/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/minimax/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/minimax/web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/mistral/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/modal/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/modelscope/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/monsterapi/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/moonshot/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/morph/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/muse-spark-web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nanogpt/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nara/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/navy/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nebius/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nlpcloud/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/notion-web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nous-research/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/novita/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nscale/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nube/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/nvidia/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/ollama-cloud/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/openadapter/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/openai/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/opencode/go/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/opencode/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/opencode/zen/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/openrouter/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/openvecta/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/orcarouter/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/ovhcloud/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/perplexity/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/perplexity/web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/pioneer/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/plamo/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/poe/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/pollinations/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/predibase/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/promptql/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/publicai/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/puter/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/qianfan/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/qiniu/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/qoder/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/qwen/web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/qwen-cloud/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/qwen-cloud-token-plan/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/raycast/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/regolo/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/reka/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/requesty/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/routeway/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/sambanova/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/sarvam/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/scaleway/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/sealion/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/segmind/imageModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/segmind/videoModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/sensenova/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/siliconflow/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/snowflake/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/sparkdesk/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/stability-ai/imageModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/stepfun/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/sumopod/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/suno/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/synthetic/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/t3-web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/tencent/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/theoldllm/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/together/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/tokenrouter/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/trae/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/typhoon/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/udio/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/uncloseai/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/unorouter/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/upstage/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/v0-vercel/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/venice/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/veoaifree-web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/vercel-ai-gateway/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/vertex/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/vertex/partner/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/volcengine/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/wafer/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/wandb/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/windsurf/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/writer/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/x5lab/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/xai/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/xai-oauth/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/xiaomi-mimo/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/xiaomi-mimo-token-plan/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/yi/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/yuanbao-web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/zai/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/zai-web/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/zed-hosted/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/zenmux/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/registry/zenmux-free/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/providers/shared.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/registryUtils.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/rerankRegistry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/runway.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/sap.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/searchRegistry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/toolCloaking.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/upscaleRegistry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/videoRegistry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/config/watsonx.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/adapta-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/adobe-firefly.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/antigravity/executeAttempt.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/antigravity/proFallbackChain.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/antigravity/sseCollect.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/antigravity/streamingPassthrough.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/antigravity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/antigravityUpstreamError.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/auggie.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/awsPollyTts.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/azure-openai.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/base/headers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/base/reasoningEffort.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/base.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/bedrock.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/blackbox-web.ts",["40947"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/chatgpt-web/citations.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/chatgpt-web/handoff.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/chatgpt-web/models.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/chatgpt-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/chatgptWebErrors.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/chatgptWebTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/cheaperinference.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/chipotle.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/claude-web/browserTransport.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/claude-web/payload.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/claude-web/session.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/claude-web/stream.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/claude-web/transport.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/claude-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/claudeIdentity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/cliproxyapi.ts",["40948"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/cloudflare-ai.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/codebuddy-cn.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/codex/bodyTimeout.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/codex/quota.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/codex/reasoningSuffix.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/codex/tools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/codex.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/commandCode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/copilot-m365-connection.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/copilot-m365-frames.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/copilot-m365-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/copilot-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/cursor/builtinToolBridge.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/cursor/composer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/cursor/prompt.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/cursor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/dario.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/deepseek-web/stream-format.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/deepseek-web-done-terminator.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/deepseek-web-with-auto-refresh.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/deepseek-web.ts",["40949","40950","40951","40952","40953","40954","40955","40956","40957","40958","40959","40960"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/default/nvidiaConcurrencyGate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/default/urlNormalizers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/default/zaiFormatOverride.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/default.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/devin-agentic/anthropicResponse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/devin-agentic/serializer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/devin-agentic/toolParser.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/devin-agentic/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/devin-cli-agentic.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/devin-cli.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/doubao-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/duckduckgo-web/challenge.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/duckduckgo-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/edgeTts.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/felo-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/firecrawl-fetch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/forceResponsesUpstream.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/gemini-business.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/gemini-web.ts",["40961","40962"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/ghe-copilot.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/github.ts",["40963","40964","40965","40966","40967","40968","40969","40970","40971","40972","40973","40974","40975","40976"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/gitlab.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/gitlabResponses.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/glm.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/grok-cli.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/grok-web/native-tools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/grok-web/text-cleanup.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/grok-web/tool-bridge.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/grok-web/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/grok-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/gtts.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/hailuo-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/huggingchat/jsonlStream.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/huggingchat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/hyperagent.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/inner-ai.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/jina-reader-fetch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kie.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kimi-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kimi.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kimiToolNames.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kiro/eventstream.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kiro.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kiroThinking.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/kiroToolCallValidation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/lmarena/cookie.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/lmarena/models.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/lmarena/response.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/lmarena/stream.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/lmarena.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/microsoft-designer-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/mimocode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/moonshot.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/muse-spark-web/response-parser.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/muse-spark-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/ninerouter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/nlpcloud.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/notion-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/opencode.ts",["40977","40978"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/perplexity-web/protocol.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/perplexity-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/poe-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/pollinations.ts",["40979","40980","40981","40982","40983","40984","40985"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/promptql/eventTree.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/promptql/messageText.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/promptql/threadSticky.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/promptql.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/puter.ts",["40986","40987","40988","40989"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/qoder.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/qwen-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/raycast.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/t3-chat-web.ts",["40990","40991","40992","40993","40994","40995","40996","40997","40998","40999","41000"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/tavily-fetch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/theoldllm.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/tinyfish-fetch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/trae.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/v0-vercel-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/venice-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/veoaifree-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/vertex.ts",["41001","41002","41003"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/vertexMedia.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/windsurf.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/xai.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/yuanbao-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/zai-web.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/zed-hosted.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/executors/zenmux-free.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/audioSpeech.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/audioTranscription.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/audioTranslation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/autoComboCandidates.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/agentRouterProtocol.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/attemptLogging.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/backgroundRedirect.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/cacheUsageMeta.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/cavemanOutputAnalytics.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/ccDiscoveryAliasStrip.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/claudeClassifierCompat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/claudeEffortVariant.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/claudeMessageTypes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/claudeSystemRole.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/claudeToolDefaults.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/claudeUpstreamMessages.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/clientUsageBuffer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/clineResponseEnvelope.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/cliproxyModelMapping.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/cliproxyapiCredentials.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/codexFailover.ts",["41004"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/codexQuota.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/comboContextCache.ts",["41005"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/compressionAnalyticsWrite.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/compressionCacheStats.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/compressionComboPredicates.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/compressionSettings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/compressionUsageReceipt.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/contextEditingTelemetry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/contextEstimation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/cooldownClassification.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/executionCredentials.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/executorClientHeaders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/executorHelpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/executorProxy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/failureUsage.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/gamificationEvent.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/headers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/idempotency.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/jsonBodyToSse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/keyHealth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/logTruncation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/memoryExtraction.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/memorySkillsInjection.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/nonStreamingJsonResponse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/nonStreamingResponseBody.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/nonStreamingResponseHeaders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/nonStreamingResponseParse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/nonStreamingSse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/nonStreamingUsageStats.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/outputStyleTelemetry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/outputTokenBudget.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/passthroughHelpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/passthroughToolNames.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/pluginOnRequest.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/pluginOnResponse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/postCallGuardrailContext.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/quotaShareConsumption.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/requestFormat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/requestSetup.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/responseHeaders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/sanitization.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/semanticCache.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/semanticCacheStore.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/serviceTier.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/skillsFormat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/stageTrace.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamErrorResult.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamFinalize.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamingCost.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamingPipeline.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamingQuotaShare.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamingResponseHeaders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamingSemanticCacheStore.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/streamingUsageStats.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/targetFormat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/telemetryHelpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/thinkingSignatureRecovery.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/toolCallingRequiredCheck.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/unsupportedParamsStrip.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/upstreamBody.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/upstreamExecuteHeaders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore/upstreamTimeouts.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/chatCore.ts",["41006"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/embeddingStructuredInput.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/embeddings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/pollinationsAnonAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/adobeFirefly.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/alibabaImage.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/chatgptWeb.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/comfyUI.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/designerWeb.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/freepik.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/googleImagen.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/haiper.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/huggingface.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/hyperbolic.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/ideogram.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/imagen3.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/leonardo.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/minimax.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/nvidiaNim.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/sdWebUI.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration/providers/segmind.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageGeneration.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageUpscale/adobeFirefly.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageUpscale/shared.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageUpscale/stability.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageUpscale/topaz.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/imageUpscale.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/moderations.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/musicGeneration.ts",["41007"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/ocr.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/openrouterTranscription.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/rerank.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/responseSanitizer/reasoning.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/responseSanitizer.ts",["41008"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/responseTranslator.ts",["41009"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/responsesHandler.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/search/firecrawlSearch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/search/perplexitySearch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/search.ts",["41010","41011","41012","41013","41014","41015","41016","41017","41018","41019","41020","41021","41022","41023","41024","41025","41026","41027","41028","41029","41030","41031","41032","41033","41034","41035","41036","41037","41038","41039","41040","41041","41042","41043"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/sseParser/geminiResponse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/sseParser.ts",["41044"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/usageExtractor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/adobeFireflyHandler.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/dashscopeHandler.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/deepinfraHandler.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/googleFlow.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/googleFlowHandler.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/leonardoHandler.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/novita.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/novitaHandler.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/providers/segmind.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration/xaiGrokImagineHandler.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/videoGeneration.ts",["41045"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/handlers/webFetch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/lib/deepseek-pow-solver.cjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/lib/deepseek-pow.ts",["41046","41047","41048","41049","41050"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/a2aLifecycle.test.ts",["41051"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/advancedTools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/audit.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/cacheTools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/createComboTool.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/dbHealthTool.test.ts",["41052"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/essentialTools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/glmCodingProviderConfig.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/httpAuthContext.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/pricingSync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/routingStrategyTool.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/toolSearch.catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/toolSearch.search.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/toolSearch.signature.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/__tests__/toolSearch.tool.test.ts",["41053","41054"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/audit.ts",["41055"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/catalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/descriptionCompressor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/httpAuthContext.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/httpTransport.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/mcpCallerIdentity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/runtimeHeartbeat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/a2a.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/audit.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/ccrTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/pickFastestModel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/toolDefinition.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/toolSearch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/schemas/tools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/scopeEnforcement.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/server.ts",["41056","41057","41058","41059"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolCardinality.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolCount.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolSearch/catalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolSearch/handler.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolSearch/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolSearch/register.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolSearch/search.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/toolSearch/signature.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/advancedTools.ts",["41060"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/agentSkillTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/compressionTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/gamificationTools.ts",["41061","41062"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/githubSkillTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/localCorpusTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/memoryTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/notionTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/obsidianTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/pickFastestModel.ts",["41063"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/pluginTools.ts",["41064"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/poolTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/mcp-server/tools/skillTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/antigravity-quota-family.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/chatgptTlsClient.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/claudeTlsClient.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/fail-fast-concurrency-gate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/grokTlsClient.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/manifestAdapter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/specificityDetector.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/tierResolver.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/__tests__/volumeDetector.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/accountFallback/cooldownCap.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/accountFallback/exactModelLock.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/accountFallback/lockoutEviction.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/accountFallback/nonRetryableUpstream.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/accountFallback.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/accountSelector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/accountSemaphore.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/adaptation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/config.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/controller.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/cost.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/queue.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/requestFeatures.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/runtime.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/admission/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/adobeFireflyBrowserLogin.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/adobeFireflyClient.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/adobeFireflyModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/adobeFireflyUpscale.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/agentrouterQuotaFetcher.ts",["41065"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravity429Engine.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityClientProfile.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityCredits.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityHeaderScrub.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityHeaders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityIdentity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityProjectBootstrap.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityProjectPersist.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityQuotaFamily.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/antigravityVersion.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/apiKeyRotator.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/__tests__/autoCombo.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/__tests__/chaosEngine.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/__tests__/chaosVirtualCombo.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/__tests__/providerDiversity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/__tests__/speedRanking.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/__tests__/taskFitness-pattern-order-8603.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/autoPrefix.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/builtinCatalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/candidateOverrides.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/chaosEngine.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/complexityRouter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/engine.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/modePacks.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/modelFamily.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/paidModelFilter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/persistence.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/pipelineRouter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/providerDiversity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/providerRegistryAccessor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/requestControls.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/resilienceCandidateFilter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/routerStrategy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/scoring.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/selfHealing.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/speedRanking.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/suffixComposition.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/taskFitness.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoCombo/virtualFactory.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/autoRefreshDaemon.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/backgroundTaskDetector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/bailianQuotaFetcher.ts",["41066"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/batchProcessor.ts",["41067","41068","41069","41070","41071","41072","41073","41074","41075","41076","41077","41078","41079","41080","41081","41082","41083","41084","41085","41086"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/bedrock.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/browserBackedChat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/browserPool.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/ccBridgeTransforms.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/ccOpenAiMediaBlocks.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/ccWireImageBuiltins.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/chatgptImageCache.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/chatgptTlsClient.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeAdaptiveThinking.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeCCH.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeCompatible.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeCompatibleBeta.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeCompatibleThinkingDisplay.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeConstraints.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeExtraRemap.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeFingerprint.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeObfuscation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeCodeToolRemapper.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeHaikuConstraints.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeTlsClient.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeTurnstileSolver.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeUsageCooldown.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/claudeWebAutoRefresh.ts",["41087","41088","41089"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/clinepassModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/cloudCodeHeaders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/cloudCodeThinking.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/codeAssistSubscription.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/codexQuotaFetcher.ts",["41090"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/codexUsageQuotas.ts",["41091"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/codexVerbosity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/applyStrategyOrdering.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/autoConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/autoStrategy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/comboCompatFallback.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/comboCooldownRetry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/comboData.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/comboPredicates.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/comboSetup.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/comboStructure.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/comboVisibility.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/concurrencyCaps.ts",["41092"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/context.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/contextOverrideGate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/contextRequirements.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/dispatchPrelude.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/failureTracker.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/fingerprintExpansion.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/fusionPanel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/headroomRanking.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/knownContextOverflow.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/pinRecovery.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/promptCacheAffinity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/providerWildcard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/quotaExhaustionCutoff.ts",["41093"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/quotaScoring.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/quotaShareConcurrency.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/quotaShareInflight.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/quotaShareStrategy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/quotaStrategies.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/resolveAutoStrategy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/responseValidation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/rrState.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/runtimeUnitCapacity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/runtimeUnits.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/sessionStickiness.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/shadowRouting.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/strategyDispatch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/targetExhaustion.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/targetResolution.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/targetSorters.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/targetTimeoutRunner.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/unavailableRetryGate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo/validateQuality.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/combo.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/comboAgentMiddleware.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/comboConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/comboManifestMetrics.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/comboMetrics.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/adaptiveCompression/computeTarget.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/adaptiveCompression/ladder.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/adaptiveCompression/resolveAdaptivePlan.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/adaptiveCompression/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/aggressive.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/bodyAdapter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/cacheAwareConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/cachingAware.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/caveman.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/cavemanRules.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/deriveDefaultPlan.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/diffHelper.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engineBreakdown.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engineCatalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/cavemanAdapter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/ccr/ccrQuery.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/ccr/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/ccr/protocolInstruction.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/codexResponses/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/encoderComparison.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/gcf/decode_generic.ts",["41094","41095","41096","41097","41098","41099","41100","41101","41102","41103","41104","41105","41106","41107","41108","41109","41110","41111","41112","41113","41114","41115"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/gcf/generic.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/gcf/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/gcf/scalar.ts",["41116"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/smartcrusher.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/tabular.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/headroom/toon.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/ionizer/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/ionizer/sample.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/llm/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/llmlingua/constants.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/llmlingua/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/llmlingua/modelStore.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/llmlingua/onnxWorker.ts",[],["41117","41118","41119","41120"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/llmlingua/ultraEntry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/llmlingua/worker.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/mcpAccessibility/collapseRepeated.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/mcpAccessibility/constants.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/mcpAccessibility/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/omniglyphAdapter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/omniglyphSingleMode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/readLifecycle/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/registry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/relevance/configSchema.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/relevance/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/relevance/scorer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/codeStripper.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/commandDetector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/configSchema.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/deduplicator.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/discover.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/filterLoader.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/filterSchema.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/grouper.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/learn.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/lineFilter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/rawOutput.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/renderers/gitDiff.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/renderers/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/renderers/structuredTable.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/renderers/terraformPlan.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/renderers/testGreen.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/renderers/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/smartTruncate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/splitCompositeCommand.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/tomlCompatibility.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/rtk/verify.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/session-dedup/fuzzy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/session-dedup/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/engines/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/entrypointWrap.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/aggregate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/corpus.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/costMeter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/executorModelClient.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/fidelityCheck.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/grader.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/judge.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/report.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/runner.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/savings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/seedCorpus.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/eval/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/exclusions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/fidelityGate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/fidelityGateStep.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/hardBudget.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/harness/benchmark.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/harness/budgetGate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/harness/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/harness/measure.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/harness/replay.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/harness/runner.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/languageDetector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/lite.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/liveZone.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/messageContent.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/outputMode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/outputStyles/apply.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/outputStyles/backCompat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/outputStyles/catalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/outputStyles/telemetry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/pipelineEngineBreaker.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/pipelineGuards.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/planResolution.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/prefixFreeze.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/preservation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/preserveSystemPromptMode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/progressiveAging.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/quantumLock/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/quantumLock/quantumLock.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/quantumLock/quantumLockStep.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/quantumLock/quantumPatterns.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/quantumLock/strategyWrap.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/resolveCompressionPlan.ts",["41121","41122"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/resultMemo.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/riskGate/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/riskGate/riskGate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/riskGate/riskGateStep.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/riskGate/riskPatterns.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/riskGate/strategyWrap.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/ruleLoader.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/stackedStepCore.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/stats.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/stepDetailConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/strategySelector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/summarizer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/toolResultCompressor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/ultra.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/ultraHeuristic.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/compression/validation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/contextHandoff.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/contextManager.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/credentialGate.ts",["41123"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/crofUsageFetcher.ts",["41124"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/cursorSessionManager.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/deepseekQuotaFetcher.ts",["41125"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/defaultReasoningEffort.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/deviceTracker.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/emergencyFallback.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/errorClassifier.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/evalRouting.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/firecrawlQuotaFetcher.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/freeModelQuotaFetcher.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/freeWebSearch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/fusion.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/geminiRateLimitTracker.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/geminiThoughtSignatureStore.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/genericQuotaFetcher.ts",["41126"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/gigachatAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/githubCopilotModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/gpt5SamplingGuard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/grokClearance.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/grokCliQuotaFetcher.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/grokCliQuotaFrame.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/grokQuotaFetcher.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/grokTlsClient.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/hfModelSuggestions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/httpBackedChatFingerprint.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/hyperagentModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/inAppLoginService.ts",["41127","41128"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/intentClassifier.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/ipFilter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/keyGroupAuth.ts",["41129"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/kiroExternalIdp.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/kiroModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/kiroRegion.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/learnedThinkingCaps.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/lmarenaTlsClient.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/manifestAdapter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/mimoThinking.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/model.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/modelCapabilities.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/modelDeprecation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/modelFamilyFallback.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/modelStrip.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/modelscopePolicy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/newApiAggregatorQuotaFetcher.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/notionStreamParser.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/notionThreadSessions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/notionTlsClient.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/notionTranscriptBuilder.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/notionWebFallbackModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/notionWebModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/opencodeOllamaUsage.ts",["41130"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/opencodeQuotaFetcher.ts",["41131"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/opencodeReasoningSanitizer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/openrouterFreeWindow.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/openrouterQuotaFetcher.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/payloadRules.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/perplexityTlsClient.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/pipeline.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/promptql/jwt.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/promptqlModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/provider.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/providerCooldownTracker.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/providerCostData.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/providerDefaultRateLimit.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/providerRequestDefaults.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/proxyAutoSelector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/qoderCli.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/qoderCliResolve.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/quotaFetchThrottle.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/quotaMonitor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/quotaPreflight.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/quotaResetParsing.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/quotaTextCooldowns.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/quotaTrackersBatch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/qwenThinking.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/rateLimitManager/admission.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/rateLimitManager/headers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/rateLimitManager.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/rateLimitSemaphore.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/raycast.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/reasoningCache.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/reasoningTokenBuffer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/refreshSerializer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/requestDedup.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/responseModelEcho.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/responsesInputSanitizer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/retryAfterJson.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/roleNormalizer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/rollingRpmGate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/rotationConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/searchCache.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionManager.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/fingerprintRotator.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/poolRegistry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/session.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/sessionFactory.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/sessionPool.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/sessionPool/webExecutorWrapper.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/signatureCache.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/slidingWindowLimiter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/specificityDetector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/specificityRules.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/specificityTypes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/streamRecovery.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/systemPrompt.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/systemTransforms.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/targetRequestSanitizer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/taskAwareRouter.ts",["41132","41133","41134","41135"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/taskAwareRouting.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/thinkingBudget.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tierConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tierResolver.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tierTypes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tlsClientDownloadDir.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tlsClientProxy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenExtractionConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenLimitCounter.ts",["41136"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/casGuard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/circuitBreaker.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/claudeOAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/cline.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/codebuddyCn.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/codex.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/copilot.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/github.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/gitlabDuo.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/google.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/kimiCoding.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/kiro.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/qoder.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/providers/windsurf.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/rotationMap.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh/shared.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/tokenRefresh.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/toolLatencyTracker.ts",["41137"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/toolLimitDetector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/toolSchemaSanitizer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/adobeFirefly.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/antigravity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/antigravityWeeklyQuota.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/bailian.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/claude.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/codebuddy-cn.ts",["41138","41139"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/codex.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/crof.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/cursor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/deepseek.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/firecrawl.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/github.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/glm.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/grokCli.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/hyperagent.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/kimi.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/kiro.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/minimax.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/nanogpt.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/opencode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/openrouter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/promptql.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/qoder.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/quota.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/scalars.ts",["41140"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/vertex.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/xai.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/xaiOauth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage/xiaomi-mimo.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/usage.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/v0QuotaFetcher.ts",["41141"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/volumeDetector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/wafRateLimit.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/webFetchInterception.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/webSearchFallback.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/webSearchRouting.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/webSessionPoolHealth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/wildcardRouter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/workflowFSM.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/services/xaiOauthQuotaFetcher.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/shared/zedAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/transformer/responsesTransformer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/bootstrap.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/deepseekWebTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/formats.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/__tests__/maxTokensHelper.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/__tests__/schemaCoercion.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/claudeHelper.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/geminiHelper.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/geminiToolsSanitizer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/jsonUtil.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/maxTokensHelper.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/openaiHelper.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/responsesApiHelper.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/schemaCoercion.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/strictSystemHoist.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/toolCallHelper.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/helpers/toolCallShim.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/image/sizeMapper.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/paramSupport.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/registry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/antigravity-to-openai.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/claude-to-gemini.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/claude-to-openai.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/gemini-to-openai.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-responses/additionalTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-responses/helpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-responses/namespaceFlatten.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-responses/toResponses.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-responses.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-claude/sanitizeToolResultId.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-claude/thinkingBudget.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-claude/toolResultAdjacency.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-claude.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-cursor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-gemini/helpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-gemini.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-kiro/adaptiveThinking.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-kiro/messageHelpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/request/openai-to-kiro.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/claude-to-openai.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/cursor-to-openai.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/gemini-to-claude.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/gemini-to-openai.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/kiro-to-openai.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-responses/eventEmitter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-responses/pureHelpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-responses/requestToolIdentity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-responses/synthesizeCompletedToolCalls.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-responses/toolSchemas.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-responses.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-to-antigravity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-to-claude.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-to-gemini-sse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/openai-to-gemini.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/response/responsesToolItem.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/translator/webTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/types.d.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/agentGoalPolicy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/aiSdkCompat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/anthropicHost.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/audioResponse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/awsSigV4.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/bypassHandler.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/bypassResponse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cacheControlPolicy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/ccDiscoveryAliases.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/claudeCodeMetaRequests.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/claudeEffortVariants.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/clinepassEnvelope.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/comfyuiClient.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/composerToolCalls.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cors.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cursorAgentCliVersion.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cursorAgentProtobuf/nativeTodoWrite.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cursorAgentProtobuf/wire.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cursorAgentProtobuf.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cursorChecksum.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cursorImages.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/cursorVersionDetector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/diagnostics.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/earlyStreamKeepalive.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/error.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/estimateSize.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/finishReason.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/flattenToolHistory.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/functionalGatewayMirrors.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/headers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/heapPressure.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/jsonSize.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/jsonToSse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/keepaliveThreshold.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/kieTask.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/kimiDevice.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/kiroSanitizer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/logger.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/networkProxy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/nextAuthCookie.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/noThinkingAlias.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/number.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/ollamaTransform.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/openAIStreamChunk.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/opencodeHeaders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/passthroughTailProcessor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/progressTracker.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/providerRequestLogging.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/proxyDispatcher.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/proxyDispatcherCache.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/proxyFallback.ts",["41142"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/proxyFamily.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/proxyFamilyResolve.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/proxyFetch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/publicCreds.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/reasoningContentInjector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/reasoningFields.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/reasoningPlaceholder.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/registeredEffortVariants.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/requestLogger.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/resourcePressure.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/resourcePressurePolicy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/resourcePressureSampler.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/responsesCommentaryDrop.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/responsesEndpoint.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/responsesInputNormalization.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/responsesStatePolicy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/responsesStreamHelpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/segmindClient.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/setupPolyfill.ts",["41143","41144","41145","41146","41147"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/sha3-512.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/sleep.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/socksConnectorWithFamily.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/sseHeartbeat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/stream.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/streamErrorFormat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/streamFailureFinalization.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/streamHandler.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/streamHelpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/streamPayloadCollector.ts",["41148"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/streamReadiness.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/streamReadinessPolicy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/syncedEffortVariants.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/textualToolCall.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/thinkCloseMarker.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/thinkTagParser.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/tlsClient.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/toolCallArguments.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/toolSources.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/upstreamErrorPassthrough.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/upstreamResponseHeaders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/urlSanitize.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/open-sse/utils/usageTracking.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/playwright.config.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/postcss.config.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/prettier.config.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/public/sw.js",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/source.config.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/BootstrapBanner.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/HomePageClient.tsx",["41149"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/HomeProviderTopologySection.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/KimiSponsorBanner.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/TierCoverageWidget.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/a2a/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/acp-agents/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/activity/ActivityFeedClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/activity/components/ActivityFeed.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/activity/components/ActivityItem.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/activity/components/DayHeader.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/activity/components/EventTypeFilter.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/activity/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/agent-skills/AgentSkillsPageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/agent-skills/components/CoverageBar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/agent-skills/components/McpA2aLinksBar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/agent-skills/components/SkillCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/agent-skills/components/SkillPreviewPane.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/agent-skills/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/AutoRoutingAnalyticsTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/CacheHealthTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/ComboHealthTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/CompressionAnalyticsTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/ProviderUtilizationTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/RouteExplainabilityTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/SearchAnalyticsTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/combo-health/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/components/DiversityScoreCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/components/ProviderCharts.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/compression/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/evals/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/loading.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/search/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/analytics/utilization/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-endpoints/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/ApiManagerPageClient.tsx",[],["41150"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/apiManagerPageStorage.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/apiManagerPageUtils.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/apiManagerScopes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/components/ApiKeyFilterBar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/components/ApiKeyFilterChip.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/components/BypassProviderQuotaToggle.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/components/ChaosModeAccessToggle.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/components/UsageLimitSettings.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/api-manager/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/audit/A2aAuditTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/audit/ComplianceTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/audit/McpAuditTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/audit/a2a/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/audit/mcp/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/audit/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/auto-combo/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/BatchDetailModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/BatchListTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/FileDetailModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/FilesListTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/batch-utils.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/BatchConceptCard.tsx",[],["41151"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/ExpirationBadge.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/FilesConceptCard.tsx",[],["41152"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/NewBatchWizard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/ProgressBarBicolor.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/UploadFileModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/useBatchActions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/wizard/CostEstimateStep.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/wizard/CsvMappingStep.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/wizard/DestinationStep.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/wizard/InputStep.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/wizard/JsonlValidationStep.tsx",[],["41153"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/files/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/__tests__/CachePage.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/__tests__/CachePerformance.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/__tests__/CacheTrends.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/__tests__/IdempotencyLayer.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/__tests__/MemoryCards.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/components/CacheEntriesTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/components/CachePerformance.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/components/CacheTrends.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/components/IdempotencyLayer.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/components/MemoryCards.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/components/ReasoningCacheTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/media/MediaPageClient.tsx",[],["41154","41155","41156","41157","41158","41159","41160"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/media/mediaProviderModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/media/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cache/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/changelog/components/ChangelogViewer.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/changelog/components/NewsViewer.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/changelog/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/ChaosConfigPageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/chaosPageTypes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/components/ChaosBasicSettingsFields.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/components/ChaosConfigActionsBar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/components/ChaosModeSelector.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/components/ChaosProviderOverridesPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/components/ChaosStatusMessage.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/components/ChaosTestResultsPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/useChaosConfigData.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/useChaosConfigPage.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/useChaosConfigPersistence.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/chaos/useChaosTestRun.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-agents/CliAgentsPageClient.tsx",["41161","41162","41163","41164"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-agents/[id]/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-agents/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/CliCodePageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/[id]/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/AntigravityToolCard.tsx",["41165"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/ClaudeCcDiscoveryInfoButton.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/ClaudeClassifierCompatToggle.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/ClaudeGatewayOnboardingBlock.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/ClaudeToolCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/CliProfileAutoSyncToggles.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/CliStatusBadge.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/ClineToolCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/CliproxyapiToolCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/CodexToolCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/CopilotToolCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/CustomCliCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/DefaultToolCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/DroidToolCard.tsx",[],["41166"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/HermesAgentToolCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/KiloToolCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/OpenClawToolCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/ToolDetailClient.tsx",[],["41167"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/codexButtonState.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/codexToolOptions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/customCliConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/index.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cloud-agents/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/AutoComboCatalog.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/BuilderIntelligentStep.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/ComboControlCenterClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/FieldLabelWithHelp.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/IntelligentComboPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/KimiComboPresetCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/ReasoningTokenBufferToggle.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/ResponseValidationEditor.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/WeightTotalBar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/[id]/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/error.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/kimiComboPreset.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/ComboLiveStudio.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/comboFlowModel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/fleetAggregation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/nodes/ProviderCascadeNode.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/nodes/RequestNode.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/nodes/ResponseNode.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/nodes/StrategyNode.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/live/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/loading.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/parts.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/playground/ComboPlaygroundClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/playground/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/combos/useComboProxyAssignments.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/components/BadgeToast.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/exclusions/ExclusionsPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/exclusions/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/live/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/CompareView.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/CompressionAnnotation.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/CompressionCockpit.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/DiffPane.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/EncoderComparisonTable.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/PlayView.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/PlaygroundInput.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/QuantumLockBadge.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/RiskGateBadge.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/SaliencyHeatmap.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/WaterfallInspector.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/compressionFlowModel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/nodes/EngineNode.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/nodes/IoNode.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/compression/studio/useCompressionReplay.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/CompressionStylesTile.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/aggressive/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/caveman/CavemanContextPageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/caveman/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/ccr/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/combos/CompressionCombosPageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/combos/CompressionHub.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/combos/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/headroom/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/lite/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/llmlingua/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/omniglyph/OmniglyphContextPageClient.tsx",[],["41168"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/omniglyph/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/omniglyph/sampleData.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/rtk/RtkContextPageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/rtk/RtkLearnDiscoverCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/rtk/RtkTomlImportCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/rtk/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/session-dedup/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/settings/CompressionPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/settings/EngineGuidanceDetail.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/settings/adaptiveTargetLabel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/settings/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/context/ultra/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/CostOverviewTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/budget/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/components/ApiKeyUsageLimitCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/components/CostCharts.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/components/MetricCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/components/TopListCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/costExplorerParams.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/costExplorerUtils.ts",["41169"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/pricing/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/QuotaSharePageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/AccountQuotaRow.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/AllocationTable.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/BurnRateChart.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/BurnRateChartInner.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/CreatePoolModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/DimensionBar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/PoolCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/PoolWizard.tsx",[],["41170","41171","41172"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/QuotaConceptCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/QuotaEndpointsCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/StackedAllocationBar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/components/UsageLogCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/hooks/useLocalStoragePoolMigration.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/hooks/usePoolUsage.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/hooks/usePools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/hooks/usePoolsUsageAggregate.ts",[],["41173","41174"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/quota-share/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/costs/useApiKeyUsageLimits.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/discovery/DiscoveryPageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/discovery/__tests__/DiscoveryPageClient.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/discovery/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/ApiEndpointsTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/VscodeTokenAliasCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/__tests__/ApiEndpointsTab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/__tests__/EndpointPageClient.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/components/A2ADashboard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/components/MCPDashboard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/components/NotionSourceCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/components/ObsidianSourceCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/endpoint/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/free-provider-rankings/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/free-tiers/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/gamification/admin/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/health/ProviderHealthAutopilotCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/health/ProviderHealthMatrixCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/health/TelemetryCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/health/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/homeAppearance.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/kimiSponsorBannerGate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/leaderboard/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/limits/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/logs/CompressionLogTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/logs/activity/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/logs/console/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/logs/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/logs/proxy/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/logs/timeline/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/mcp/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/MediaProviderPageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/[kind]/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/EmbeddingExampleCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/ImageExampleCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/LlmChatCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/MediaProviderHeader.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/MediaProviderKindNav.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/MusicExampleCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/OcrExampleCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/PlaygroundCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/ServiceKindTabs.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/SttExampleCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/TtsExampleCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/VideoExampleCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/WebFetchExampleCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/WebSearchExampleCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/components/mediaKinds.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/media-providers/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/EditMemoryModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/EmbeddingSourceSelector.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/MemoryConceptCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/MemoryEngineStatus.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/QdrantConfigCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/RerankConfigCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/RetrievePreview.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/tabs/EngineTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/tabs/MemoriesTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/components/tabs/PlaygroundTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/hooks/useEngineStatus.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/hooks/useMemorySettings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/memory/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/OmniSkillsPageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/components/OmniExecutionsTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/components/OmniMarketplaceTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/components/OmniSandboxTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/components/OmniSkillCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/components/OmniSkillsList.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/components/SkillInspectorPane.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/omni-skills/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/onboarding/components/TierFlowDiagram.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/onboarding/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/onboarding/steps/TierTour.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/PlaygroundStudio.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/CompareColumn.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/ExportCodeModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/ImprovePromptButton.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/MarkdownMessage.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/ParamSliders.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/PresetPicker.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/ProviderMetrics.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/ReasoningControls.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/StructuredOutputEditor.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/StudioConfigPane.tsx",[],["41175","41176","41177"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/StudioTopBar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/TokenCostCounter.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/ToolsBuilder.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/modelSelection.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/reasoningControlUtils.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/tabs/ApiTab.tsx",["41178"],["41179","41180"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/tabs/BuildTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/tabs/ChatTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/tabs/CompareTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/components/tabs/build/BuildWizard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/hooks/useImprovePrompt.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/hooks/usePresets.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/hooks/useStreamMetrics.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/hooks/useStructuredOutput.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/hooks/useToolsBuilder.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/playground/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/plugins/[name]/config/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/plugins/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/profile/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/provider-stats/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/ProviderDetailPageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/ProviderDetailPageClient.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/connectionRowAutoSyncToggle.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/modelVisibilityToolbarActiveCount.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/passthroughModelRowDisplayName.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/passthroughTestHelpers.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/phase1e.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/phase1f.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/providerModelsSectionVisibilityKey.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/useConnectionAutoSync.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/useModelImportHandlers.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/__tests__/useModelVisibilityHandlers.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/codexPlanLabel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/AdaptaTutorialModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/BatchTestResultsModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/CompatibleModelsSection.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/CompatibleNodeCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ConnectionRow.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ConnectionsHeaderToolbar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ConnectionsListPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/CoolingConnectionsPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/CustomModelsSection.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/EmptyConnectionsPlaceholder.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ExternalLinkModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ImportProgressModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/KimiCodeAuthMethodModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ModelCompatPopover.tsx",[],["41181"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ModelRow.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/NoAuthProviderControls.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/OpenRouterPresetInput.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/PassthroughModelRow.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/PassthroughModelsSection.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderCcAliasSection.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderExtraPanels.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderInterceptionSection.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderModalsPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderModelsSection.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderPageHeader.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderParamFilterSection.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderPlaygroundPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ProviderQuotaVisibilityToggle.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/SearchProviderCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/SiliconFlowEndpointModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/UpstreamProxyCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/WebSessionCredentialGuide.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/ZedImportCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/__tests__/phase1d.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/connectionRowHelpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/AddApiKeyModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/AgentrouterConsoleFields.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/AlibabaProviderRegionField.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/CcCompatibleRequestDefaultsFields.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/EditCompatibleNodeModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/EditConnectionModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/GlmTeamQuotaFields.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/ImportClaudeAuthModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/ImportCodexAuthModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/ImportGrokCliAuthModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/NewApiAggregatorFields.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/ProviderTierField.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/QuotaScrapingFields.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/__tests__/authImportModals.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/__tests__/connModals.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/__tests__/editCompatibleNodeModal.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/ccCompatibleRequestDefaults.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/commandCodeAuthPhase.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/computeConnectionDefaultName.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/connectionProviderSpecificData.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/glmTeamQuotaProviderData.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/m365Tier.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/modals/providerTierFieldApi.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/components/passthroughAlias.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/connectionsSearchFilter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/modelImportWarning.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useApiKeySave.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useAuthFileHandlers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useCommandCodeAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useConnectionAutoSync.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useConnectionDeleteConfirm.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useConnectionGate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useExternalLinkFlow.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useModelCompatState.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useModelImportHandlers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useModelVisibilityHandlers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useProviderConnections.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useProviderModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useProviderNodeActions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useProviderQuotaVisibility.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useProviderSettings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/hooks/useReorderByAvailability.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/providerCredentialText.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/providerDetailConstants.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/providerInputParsers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/providerPageHelpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/[id]/webSessionCredentials.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/AddCompatibleProviderModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/CategoryDot.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/CodexCliGuideModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/HighlightableProviderCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/ImportProvidersFromFileModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/NoAuthProvidersSection.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/ProviderCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/ProviderCountBadge.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/ProviderDisplayModeControl.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/ProviderSummaryCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/RiskNoticeModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/__tests__/providerCardAudioBadge.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/onboarding/ProviderOnboardingWizard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/onboarding/providerOnboardingApi.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/onboarding/providerOnboardingCatalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/onboarding/providerOnboardingHref.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/parseProviderImportFile.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/components/useImportProvidersFromFile.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/context/openRouterProviderStatsContext.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/error.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/featuredProviders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/hooks/useApiKey.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/hooks/useProviderModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/hooks/useProviderUrlFilters.ts",[],["41182","41183"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/hooks/useRiskAcknowledged.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/hooks/useSyncedModelsByProvider.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/loading.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/new/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/providerCompactMode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/providerPageHighlightUtils.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/providerPageStorage.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/providerPageUtils.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/[name]/embed/[[...path]]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/ApiKeyField.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/AutoRestartAdoptedToggle.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/AutoStartToggle.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/CliproxyConnectionPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/CliproxyModelMappingEditor.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/CliproxyProviderExposureCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/DarioAccountPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/NinerouterEmbedFrame.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/NinerouterInstallWizard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/NinerouterModelList.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/NinerouterProviderExposureCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/ServiceLifecycleButtons.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/ServiceLogsPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/components/ServiceStatusCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/hooks/useServiceLogs.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/hooks/useServiceStatus.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/tabs/BifrostServiceTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/tabs/CliproxyServiceTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/tabs/DarioServiceTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/tabs/MuxServiceTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/services/tabs/NinerouterServiceTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/providers/utils/buildCurl.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/quota/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/radar/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/radar/setup/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/relay/RelayProxyClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/relay/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/runtime/RuntimePageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/runtime/components/ModelCooldownsCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/runtime/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/SearchToolsClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/ProviderCatalog.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/ProviderComparison.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/RerankPanel.tsx",[],["41184"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/ResultsPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/ScrapeResult.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/SearchConceptCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/SearchForm.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/SearchHistory.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/SearchToolsConfigPane.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/SearchToolsTopBar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/tabs/CompareTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/tabs/ScrapeTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/components/tabs/SearchTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/hooks/useScrapeFetch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/search-tools/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/access-tokens/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/advanced/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/ai/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/appearance/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/cache/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/AccessTokensTab.tsx",[],["41185"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/AccountEmailVisibilitySetting.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/AppearanceTab.tsx",["41186","41187","41188","41189"],["41190"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/AuthzSection.tsx",["41191"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/AutoDisableCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/BackgroundDegradationTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/CacheSettingsTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/CacheStatsCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ClaudeFastModeTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/CliproxyapiSettingsTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/CodexAutoPingTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/CodexFastTierTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ComboDefaultsTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ComplianceTab.tsx",[],["41192"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/CompressionSettingsTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/CompressionTokenSaverCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/DatabaseBackupRetentionCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/DebugModeCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/FallbackChainsEditor.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/FeatureFlagCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/FeatureFlagsGrid.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/FusionDefaultsFields.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/IPFilterSection.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/LogToolSourcesCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/MemorySkillsTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/MitmProxyTab.tsx",["41193"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ModelAliasesTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ModelAliasesUnified.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ModelCapabilityOverridesTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ModelLockoutCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ModelsDevSyncTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/OneproxyTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/PayloadRulesTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/PoliciesPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/PricingTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProviderAccountRoutingCard.tsx",["41194"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProxyBatchActions.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProxyBulkImportModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProxyCheckboxCell.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProxyHealthCell.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProxyRegistryManager.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProxyStatusBadge.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ProxyTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/RedisLauncherPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/RequestLimitsTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ResilienceFields.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ResilienceTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ResponsesStatePolicyTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/RoutingStrategyCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/RoutingTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/SecurityTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/SessionInfoCard.tsx",["41195"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/SidebarTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/SystemPromptTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/SystemStorageTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/ThinkingBudgetTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/UsageTokenBufferTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/VisionBridgeSettingsTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/parseBulkProxyImport.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/DenoRelayModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/DocumentationTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/FreePoolTab.tsx",[],["41196","41197"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/FreeProxyRow.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/GlobalConfigTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/SourceToggleBar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/SubscriptionTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/VercelRelayModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxyRegistryTypes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxyStrategyOptions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/systemTransformsHermesDefaults.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/useProxyBatchOperations.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/useProxyBulkImport.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/useProxyPoolModal.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/error.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/feature-flags/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/general/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/loading.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/pricing/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/resilience/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/routing/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/security/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/sidebar/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/system/1proxy/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/system/mitm-proxy/error.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/system/mitm-proxy/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/system/proxy/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tokens/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/AgentBridgePageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/AgentBridgeMaintenanceCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/AgentBridgeServerCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/AgentCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/AgentList.tsx",["41198","41199","41200"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/BypassListEditor.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/EmptyStateNoProviders.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/ModelMappingTable.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/ModelSelectorModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/RiskNoticeBanner.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/SetupWizard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/UpstreamCaField.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/shared/AgentIcon.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/shared/CertStatusIcon.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/components/shared/DnsStatusBadge.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/hooks/useAgentBridgeState.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/hooks/useMitmSudoPrompt.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/normalizeState.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/agent-bridge/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/TrafficInspectorPageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/CaptureModesToolbar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/CustomHostsManager.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/DetailsPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/HttpProxySnippetCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/RequestRow.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/RequestStreamingList.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/TopBarControls.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/chat/ChatBubble.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/chat/MessageContent.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/chat/ToolCallBlock.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/chat/ToolResultBlock.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/session/HistoricSessionBanner.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/session/SessionPicker.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/session/SessionRecorderBar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/AgentEmoji.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/AnnotationField.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/ContextColorBar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/HeaderTable.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/JsonViewer.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/SecretMaskToggle.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/SseEventList.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/TimingWaterfall.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/shared/TokenBadge.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/ConversationTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/HeadersTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/LlmDetailsTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/RequestBodyTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/ResponseBodyTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/StatsCharts.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/StatsTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/components/tabs/TimingTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useAnnotations.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useReplay.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useResizablePanels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useSessionRecorder.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useSystemProxyExitGuard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useTrafficFilters.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useTrafficStream.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/hooks/useVirtualList.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/tools/traffic-inspector/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/TranslatorPageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/MonitorTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/ResultNarrated.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/SimpleControls.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/TranslateFlowDiagram.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/TranslateTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/TranslatorConceptCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/advanced/AdvancedSection.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/advanced/CompressionPreviewAccordion.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/advanced/PipelineView.tsx",[],["41201"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/advanced/RawJsonPanel.tsx",[],["41202"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/advanced/StreamTransformerAccordion.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/components/advanced/TestBenchAccordion.tsx",[],["41203"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/exampleTemplates.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/hooks/useAvailableModels.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/hooks/useProviderOptions.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/hooks/useTranslateDeepLink.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/hooks/useTranslateSession.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/translator/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/BudgetTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/BudgetTelemetryCards.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/EvalsTab.tsx",[],["41204"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/FreeBudgetCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/CodexResetCreditsModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/ProviderLimitCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/ProviderUsdCostModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaCardGrid.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaCutoffModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaMiniBar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaProgressBar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaTable.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/constants.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/formatters.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/i18nFallback.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/parts/QuotaCardBody.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/parts/QuotaCardExpanded.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/parts/QuotaCardHeader.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/parts/QuotaEnvGroup.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/providerColumns.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/quotaParsing.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/useCodexResetCreditRedemption.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/useQuotaVisibility.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/useVisibleQuotaData.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/RateLimitStatus.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/components/SessionsTab.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/usage/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/WebhooksPageClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/__tests__/webhook-wizard.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/AddWebhookWizard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/HowItWorksSidebar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/WebhookCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/WebhookDeliveriesPanel.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/WebhooksList.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/shared/DeliveryStatusBadge.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/shared/EventChecklist.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/shared/HmacRecipeBlock.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/shared/IntegrationCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/shared/PayloadPreview.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/steps/Step1ChooseIntegration.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/steps/Step2ConfigureIntegration.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/steps/Step3EventsAndTest.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/steps/integrations/CustomConfigForm.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/steps/integrations/DiscordConfigForm.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/steps/integrations/SlackConfigForm.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/components/steps/integrations/TelegramConfigForm.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/webhooks/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/home/ProviderQuotaWidget.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/home/ProviderTopology.tsx",[],["41205"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/home/page.tsx",["41206"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/home/topologyLabel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/home/topologyUtils.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/layout.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/.well-known/agent.json/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/400/layout.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/400/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/401/layout.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/401/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/403/layout.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/403/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/408/layout.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/408/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/429/layout.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/429/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/500/layout.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/500/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/502/layout.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/502/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/503/layout.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/503/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/a2a/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/[...omnirouteApiCatchAll]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/a2a/status/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/a2a/tasks/[id]/cancel/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/a2a/tasks/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/a2a/tasks/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/acp/agents/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/admin/concurrency/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/agent-skills/[id]/raw/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/agent-skills/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/agent-skills/coverage/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/agent-skills/generate/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/agent-skills/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/analytics/auto-routing/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/analytics/compression/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/analytics/diversity/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/assess/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/auth/csrf/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/auth/login/route.ts",["41207"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/auth/logout/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/auth/oidc/callback/route.ts",["41208"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/auth/oidc/login/route.ts",["41209"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/auth/status/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/batches/[id]/route.ts",["41210"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/batches/route.ts",["41211"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cache/entries/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cache/reasoning/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cache/route.ts",["41212"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cache/stats/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/chaos/config/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/chaos/run/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli/connect/route.ts",["41213"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli/tokens/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli/tokens/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli/whoami/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/_lib/jsoncConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/all-statuses/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/antigravity-mitm/alias/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/antigravity-mitm/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/apply/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/backups/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/claude-settings/route.ts",["41214"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/cline-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/codewhale-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/codex-profiles/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/codex-settings/route.ts",["41215"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/config/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/crush-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/deepseek-tui-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/detect/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/droid-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/forge-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/grok-build-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/guide-settings/[toolId]/route.ts",[],["41216"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/hermes-agent-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/jcode-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/keys/route.ts",["41217"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/kilo-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/letta-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/logs/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/omp-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/openclaw/auto-order/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/openclaw-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/pi-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/qwen-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/runtime/[toolId]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/smelt-settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cli-tools/status/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cloud/auth/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cloud/credentials/update/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cloud/model/resolve/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/cloud/models/alias/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/codex/connect/[token]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/combos/[id]/route.ts",["41218"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/combos/auto/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/combos/builder/options/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/combos/metrics/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/combos/reorder/route.ts",["41219"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/combos/route.ts",["41220"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/combos/test/route.ts",["41221"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compliance/audit-log/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compression/compare/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compression/compare/verify/route.ts",["41222"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compression/engines/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compression/language-packs/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compression/preview/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compression/retrieve/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/compression/rules/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/analytics/engine/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/analytics/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/caveman/config/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/combos/[id]/assignments/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/combos/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/combos/default/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/combos/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/rtk/config/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/rtk/discover/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/rtk/filters/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/rtk/import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/rtk/learn/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/rtk/raw-output/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/context/rtk/test/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/copilot/chat/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/dahl/tokens/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/db/health/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/db-backups/export/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/db-backups/exportAll/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/db-backups/import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/db-backups/route.ts",["41223"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/discovery/results/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/discovery/results/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/discovery/scan/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/discovery/verify/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/docs/codex-cli/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/docs/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/evals/[suiteId]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/evals/route.ts",["41224"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/evals/suites/[suiteId]/route.ts",["41225"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/evals/suites/route.ts",["41226"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/fallback/chains/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/files/[id]/content/route.ts",["41227"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/files/route.ts",["41228"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/free-models/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/free-provider-rankings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/free-tier/summary/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/anomalies/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/badges/earned/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/badges/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/federation/leaderboard/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/federation/score/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/invite/redeem/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/invite/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/leaderboard/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/level/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/notifications/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/rotate/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/servers/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/stream/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/gamification/transfer/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/github-skills/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/guardrails/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/guardrails/test/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/headroom/start/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/headroom/status/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/headroom/stop/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/health/degradation/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/health/ping/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/init/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/intelligence/sync/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/internal/codex-responses-ws/compression.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/internal/codex-responses-ws/history.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/internal/codex-responses-ws/modelResolution.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/internal/codex-responses-ws/route.ts",["41229"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/issue-agent/runs/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/[id]/devices/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/[id]/regenerate/route.ts",["41230"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/[id]/reveal/route.ts",["41231"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/[id]/route.ts",["41232"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/[id]/usage-limits/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/groups/[id]/keys/route.ts",["41233"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/groups/[id]/permissions/route.ts",["41234"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/groups/[id]/route.ts",["41235"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/groups/route.ts",["41236"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/keys/route.ts",["41237"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/local/redis/redisRuntime.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/local/redis/start/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/local/redis/status/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/local/redis/stop/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/logs/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/logs/console/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/logs/detail/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/logs/export/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/mcp/audit/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/mcp/audit/stats/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/mcp/sse/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/mcp/status/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/mcp/stream/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/mcp/tools/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/embedding-providers/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/engine-status/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/health/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/reindex/route.ts",["41238"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/retrieve-preview/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/memory/summarize/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/middleware/hooks/[name]/route.ts",["41239"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/middleware/hooks/route.ts",["41240"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/model-capability-overrides/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/model-combo-mappings/[id]/route.ts",["41241"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/model-combo-mappings/route.ts",["41242"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/models/alias/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/models/catalog/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/models/openrouter-catalog/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/models/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/models/test/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/models/test-all/route.ts",["41243"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/monitoring/health/route.ts",["41244"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/network/info/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/[provider]/[action]/keychainImportOnly.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/[provider]/[action]/remoteOAuthHint.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/[provider]/[action]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/[provider]/paste-credentials/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/cliproxy-import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/codex/import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/codex/import-token/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/cursor/auto-import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/cursor/import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/kiro/api-key/helpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/kiro/api-key/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/kiro/auto-import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/kiro/import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/kiro/social-authorize/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/kiro/social-exchange/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/raycast/auto-import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/raycast/import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/oauth/trae/import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/openapi/spec/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/openapi/try/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/playground/improve-prompt/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/playground/presets/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/playground/presets/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/playground/simulate-route/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/plugins/[name]/activate/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/plugins/[name]/config/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/plugins/[name]/deactivate/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/plugins/[name]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/plugins/marketplace/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/plugins/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/plugins/scan/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/policies/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/pricing/defaults/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/pricing/models/route.ts",["41245"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/pricing/route.ts",["41246"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/pricing/sync/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/provider-metrics/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/provider-models/route.ts",["41247"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/provider-nodes/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/provider-nodes/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/provider-nodes/urlGuard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/provider-nodes/validate/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/provider-stats/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/cc-alias/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/claude-auth/apply-local/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/claude-auth/export/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/codex-auth/apply-local/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/codex-auth/export/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/interception-rules/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/login/route.ts",["41248"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/discovery/codex.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/discovery/helpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/discovery/normalizers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/discovery/providerModelsConfig.ts",["41249"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/discovery/providerSets.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/discoveryClientVersion.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/discoveryConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/route.ts",["41250"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/models/staleEncryptionGuard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/param-filters/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/refresh/route.ts",["41251"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/route.ts",["41252"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/sync-models/degradedLocalCatalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/sync-models/route.ts",["41253"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/test/cliRuntimeProviderMap.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/test/mistralAmbiguousAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/test/oauthTestConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/[id]/test/route.ts",["41254"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/agy-auth/apply-local/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/agy-auth/import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/agy-auth/import-bulk/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/agy-auth/zip-extract/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/bulk/route.ts",["41255"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/bulk-web-session/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/claude-auth/import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/claude-auth/import-bulk/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/claude-auth/zip-extract/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/client/route.ts",["41256"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/codex-auth/import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/codex-auth/import-bulk/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/codex-auth/zip-extract/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/command-code/auth/apply/route.ts",["41257"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/command-code/auth/callback/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/command-code/auth/shared.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/command-code/auth/start/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/command-code/auth/status/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/expiration/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/health-autopilot/actions/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/health-autopilot/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/health-matrix/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/import/route.ts",["41258"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/openrouter-stats/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/quota-windows/route.ts",["41259"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/test-batch/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/validate/route.ts",["41260"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/zed/discover/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/zed/import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/providers/zed/manual-import/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/proxy-fallback/test/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/groups/[id]/route.ts",["41261"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/groups/route.ts",["41262"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/keys/[id]/models/route.ts",["41263"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/plans/[connectionId]/route.ts",["41264"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/plans/route.ts",["41265"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/pools/[id]/log/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/pools/[id]/route.ts",["41266"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/pools/[id]/usage/route.ts",["41267"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/pools/route.ts",["41268"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/quota/preview/route.ts",["41269"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/radar/catalog/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/radar/settings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/radar/sync/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/rate-limit/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/rate-limits/route.ts",["41270"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/relay/tokens/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/relay/tokens/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/resilience/model-cooldowns/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/resilience/reset/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/resilience/route.ts",["41271"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/restart/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/routing/decisions/[requestId]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/search/providers/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/search/stats/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/_lib.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/auto-restart-adopted/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/auto-start/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/install/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/models/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/provider-expose/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/restart/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/rotate-key/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/start/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/status/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/stop/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/9router/update/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/[name]/logs/route.ts",["41272"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/_shared/installRoute.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/_lib.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/auto-restart-adopted/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/auto-start/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/install/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/restart/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/start/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/status/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/stop/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/bifrost/update/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/_lib.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/auto-restart-adopted/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/auto-start/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/install/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/provider-expose/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/restart/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/start/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/status/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/stop/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/cliproxy/update/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/_lib.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/admin/_lib.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/admin/accounts/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/admin/import-from-omniroute/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/admin/login-complete/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/admin/login-start/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/auto-restart-adopted/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/auto-start/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/install/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/restart/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/start/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/status/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/stop/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/dario/update/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/_lib.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/auto-restart-adopted/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/auto-start/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/install/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/restart/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/start/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/status/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/stop/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/services/mux/update/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/session-pools/[provider]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/session-pools/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/sessions/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/__tests__/memory.test.ts",["41273"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/__tests__/settings.test.ts",["41274"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/authz-inventory/route.ts",["41275"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/auto-disable-accounts/route.ts",["41276"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/background-degradation/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/cache-config/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/cache-metrics/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/cc-discovery-metrics/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/combo-defaults/route.ts",["41277"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/compression/mcp-accessibility/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/compression/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/compression/rules/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/compression/run-telemetry/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/database/refresh-stats/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/database/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/database/vacuum/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/export-json/route.ts",["41278"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/favicon/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/feature-flags/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/free-proxies/[id]/add-to-pool/route.ts",["41279"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/free-proxies/bulk-add-to-pool/route.ts",["41280"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/free-proxies/route.ts",["41281"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/free-proxies/stats/route.ts",["41282"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/free-proxies/sync/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/import-json/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/ip-filter/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/lkgp-cache/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/local-corpus/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/memory/route.ts",["41283"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/mitm/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/model-aliases/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/models-dev/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/notion/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/obsidian/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/obsidian/webdav/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/oneproxy/rotate/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/oneproxy/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/payload-rules/route.ts",["41284"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/[id]/repair-relay/route.ts",["41285"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/assignments/route.ts",["41286"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/auto-test/route.ts",["41287"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/batch-activate/route.ts",["41288"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/batch-delete/route.ts",["41289"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/bulk-assign/route.ts",["41290"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/bulk-import/route.ts",["41291"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/egress/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/health/route.ts",["41292"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/migrate/route.ts",["41293"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/pool/route.ts",["41294"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxies/route.ts",["41295"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxy/cloudflare-deploy/route.ts",["41296"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxy/deno-deploy/route.ts",["41297"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxy/route.ts",["41298"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxy/test/relayTestResult.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxy/test/route.ts",["41299"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/proxy/vercel-deploy/route.ts",["41300"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/purge-call-logs/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/purge-detailed-logs/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/purge-logs/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/purge-quota-snapshots/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/purge-request-history/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/purge-usage-history/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/qdrant/cleanup/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/qdrant/embedding-models/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/qdrant/health/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/qdrant/route.ts",["41301"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/qdrant/search/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/quota-store/route.ts",["41302"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/reasoning-routing-rules/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/reasoning-routing-rules/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/reasoning-routing-rules/simulate/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/require-login/route.ts",["41303"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/route.ts",["41304","41305"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/system-prompt/route.ts",["41306"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/task-routing/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/thinking-budget/route.ts",["41307"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/settings/tier-config/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/shutdown/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/collect/chaos/route.ts",["41308"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/collect/detect/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/collect/install/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/executions/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/install/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/marketplace/install/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/marketplace/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/skillssh/install/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/skills/skillssh/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/storage/health/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/sync/bundle/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/sync/cloud/route.ts",["41309"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/sync/initialize/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/sync/tokens/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/sync/tokens/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/synced-available-models/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/system/env/repair/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/system/version/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tags/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/telemetry/summary/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/token-health/route.ts",["41310"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/agents/[id]/detect/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/agents/[id]/detected-models/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/agents/[id]/dns/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/agents/[id]/mappings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/agents/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/agents/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/bypass/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/cert/download/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/cert/regenerate/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/cert/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/config/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/diagnose/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/repair/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/server/route.ts",["41311"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/state/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/tproxy/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/upstream-ca/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/agent-bridge/upstream-ca/test/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/capture-modes/http-proxy/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/capture-modes/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/capture-modes/system-proxy/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/capture-modes/tls-intercept/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/export.har/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/hosts/[host]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/hosts/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/internal/ingest/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/requests/[id]/annotation/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/requests/[id]/replay/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/requests/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/requests/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/sessions/[id]/export.har/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/sessions/[id]/requests/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/sessions/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/sessions/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tools/traffic-inspector/ws/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/translator/detect/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/translator/history/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/translator/send/route.ts",["41312"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/translator/transform-stream/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/translator/translate/route.ts",["41313"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/cloudflared/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/ngrok/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/check/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/disable/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/enable/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/install/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/login/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/routeUtils.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/tunnels/tailscale/start-daemon/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/upstream-proxy/[providerId]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/[connectionId]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/analytics/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/budget/bulk/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/budget/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/cache-health/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/call-logs/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/call-logs/route.ts",["41314"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/codex-reset-credit/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/combo-forecast/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/combo-health/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/combo-health-autopilot/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/combo-health-dashboard/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/combo-scoring-inspector/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/history/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/logs/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/model-latency-stats/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/om-usage/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/provider-limits/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/provider-window-costs/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/proxy-logs/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/quota/route.ts",["41315"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/request-logs/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/requests-by-provider-date/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/route-explain/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/token-limits/route.ts",["41316"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/usage/utilization/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/[...omnirouteCatchAll]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/_helpers/apiKeyScope.ts",["41317"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/_shared/audioProviderNodes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/_shared/mediaGenerationRoute.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/_shared/rateLimit.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/_shared/specialtyCatalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/accounts/[id]/limits/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/agents/credentials/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/agents/health/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/agents/tasks/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/agents/tasks/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/antigravity/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/api/chat/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/audio/speech/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/audio/transcriptions/route.ts",["41318"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/audio/translations/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/auto-combo/[channel]/candidates/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/batches/[id]/cancel/route.ts",["41319"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/batches/[id]/route.ts",["41320"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/batches/delete-completed/route.ts",["41321"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/batches/formatBatchResponse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/batches/parseListLimit.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/batches/route.ts",["41322"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/chat/completions/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/chatgpt-web/image/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/combos/projectCombo.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/combos/route.ts",["41323"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/completions/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/completions/textCompletionTransform.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/embeddings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/files/[id]/content/route.ts",["41324"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/files/[id]/route.ts",["41325"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/files/route.ts",["41326"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/images/edits/route.ts",["41327","41328"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/images/generations/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/images/upscale/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/issues/report/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxies/assignments/route.ts",["41329"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxies/bulk-assign/route.ts",["41330"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxies/health/route.ts",["41331"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxies/route.ts",["41332"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxy-subscriptions/[id]/nodes/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxy-subscriptions/[id]/refresh/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxy-subscriptions/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/management/proxy-subscriptions/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/me/status/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/messages/count_tokens/route.ts",["41333"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/messages/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/[...model]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/aliasBackedModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalog.ts",["41334"],["41335"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogCache.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogDedupe.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogHelpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogOpenrouter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogOrder.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogProviderMaps.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogRequest.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogResponse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogSyncedCoverage.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/catalogVision.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/ccAliasPredicate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/functionalGatewayPredicate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/modelById.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/models/syncedCapabilities.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/moderations/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/music/generations/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/ocr/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/provider-plugin-manifest/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/providers/[provider]/chat/completions/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/providers/[provider]/embeddings/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/providers/[provider]/images/generations/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/providers/[provider]/limits/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/providers/[provider]/models/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/providers/suggested-models/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/quotas/check/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/registered-keys/[id]/revoke/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/registered-keys/[id]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/registered-keys/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/relay/chat/completions/bifrost/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/relay/chat/completions/bifrostCooldown.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/relay/chat/completions/relaySecurity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/relay/chat/completions/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/relay/chat/completions/routingBackend.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/relay/chat/completions/streamFinalizer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/rerank/route.ts",["41336"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/responses/[...path]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/responses/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/search/analytics/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/search/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/videos/generations/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/api/chat/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/api/show/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/api/tags/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/api/version/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/chat/completions/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/combos/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/familyFirstModelIds.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/modelPresentation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/models/route.ts",["41337"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/reasoningMetadata.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/responses/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/serviceTierVariants.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/tokenizedRequest.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/usableChatModel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/v1/chat/completions/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/[token]/v1/models/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/combos/[token]/[[...slug]]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/contextSanitizer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/api/chat/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/api/show/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/api/tags/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/api/version/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/chat/completions/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/combos/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/familyFirstModelIds.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/modelPresentation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/models/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/reasoningMetadata.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/responses/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/serviceTierVariants.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/tokenizedRequest.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/v1/chat/completions/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/vscode/raw/[token]/v1/models/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/web/fetch/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1/ws/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1beta/models/[...path]/convertGeminiToInternal.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1beta/models/[...path]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/v1beta/models/route.ts",["41338"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/version-manager/check-update/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/version-manager/install/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/version-manager/request.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/version-manager/restart/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/version-manager/start/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/version-manager/status/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/version-manager/stop/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/vnc-session/[...params]/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/vnc-session/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/webhooks/[id]/deliveries/route.ts",["41339"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/webhooks/[id]/route.ts",["41340"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/webhooks/[id]/test/route.ts",["41341","41342"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/webhooks/route.ts",["41343"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/api/webhooks/validate-url/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/auth/callback/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/authorize/parseCallback.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/authorize/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/callback/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/connect/codex/[token]/CodexConnectClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/connect/codex/[token]/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/[...slug]/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/api/search/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/api-explorer/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/components/ApiExplorerClient.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/components/DocsPageAnalytics.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/components/FeedbackWidget.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/layout.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/lib/openapi.generated.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/docs/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/error.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/forbidden/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/forgot-password/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/global-error.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/healthz/route.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/AnimatedBackground.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/Features.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/FlowAnimation.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/Footer.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/GetStarted.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/HeroSection.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/HowItWorks.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/components/Navigation.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/landing/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/layout.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/loading.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/login/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/maintenance/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/manifest.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/not-found.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/offline/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/privacy/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/status/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/terms/page.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/assessment/assessor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/assessment/categorizer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/assessment/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/assessment/migration.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/assessment/selfHealer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/assessment/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/comboResolver.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/configAudit.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/connectionModelRules.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/costRules.ts",["41344"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/degradation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/fallbackPolicy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/lockoutPolicy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/modelAvailability.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/omnirouteResponseMeta.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/persistence/comboRepositories.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/pipeline.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/policyEngine.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/prompts.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/providerExpiration.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/quotaCache.ts",["41345"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/responses.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/tagRouter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/domain/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/hooks/useLiveCompression.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/hooks/useLiveDashboard.ts",["41346","41347"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/hooks/usePreviewCompression.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/hooks/useProviderBreakerHealth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/i18n/config.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/i18n/detectBrowserLocale.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/i18n/request.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/instrumentation-node.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/instrumentation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/routingLogger.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/skills/costAnalysis.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/skills/healthReport.ts",["41348"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/skills/listCapabilities.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/skills/providerDiscovery.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/skills/quotaManagement.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/skills/smartRouting.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/streaming.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/taskExecution.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/a2a/taskManager.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/accessTokens/scopes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/acp/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/acp/manager.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/acp/registry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/agentSkills/catalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/agentSkills/cliRegistryParser.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/agentSkills/generator.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/agentSkills/openapiParser.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/agentSkills/schemas.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/agentSkills/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/comboErrorResponse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/errorResponse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/internalServiceAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/modelTestRunner.ts",["41349"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/proxyRegistryRouteHandlers.ts",["41350"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/requireCliToolsAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/requireManagementAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/api/serverErrorMessage.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/apiBridgeServer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/apiKeyExposure.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/arenaEloSync.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/audit/activityIcons.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/audit/highLevelActions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/audit/timeline.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/auth/managementPassword.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/batches/costEstimator.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/batches/csvToJsonl.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/batches/dispatch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/batches/retryFailed.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/batches/schemas.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/batches/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/batches/validateJsonl.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/benchmarks.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/build-profile/featureDisabled.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cacheControlSettings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cacheLayer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/catalog/openrouterCatalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/catalog/openrouterProviderStats.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/ccDiscoveryAliasResolve.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/chaos/chaosConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/chaos/chaosExecutor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/claudeProfileAutoSync.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/codexProfileAutoSync.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/claude.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/cline.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/codex.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/continue.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/hermes-agent.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/hermes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/hermesHome.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/kilocode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/config-generator/opencode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/doctor/checks.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/log-streamer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cli-helper/tool-detector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cliTools/batchStatusCache.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cliTools/checkToolConfigStatus.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/agents/codex.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/agents/cursor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/agents/devin.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/agents/jules.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/api.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/baseAgent.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/credentials.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/db.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/julesApi.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/registry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudAgent/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudSync.stub.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudSync.ts",["41351"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/cloudflaredTunnel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/autoPromote.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/builderDraft.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/builderOptions.ts",["41352"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/comboContext.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/compositeTiers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/controlCenter.ts",["41353"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/intelligentRouting.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/invariants.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/modelNameCollision.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/steps.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/combos/testHealth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/compliance/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/compliance/noLog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/compliance/providerAudit.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/compression/judgeModelClient.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/config/hotReload.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/config/runtimeSettings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/consoleInterceptor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/container.ts",["41354"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/contextWindowResolver.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/copilot/codegraphKnowledge.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/copilot/commandClassification.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/copilot/engine.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/copilot/systemPrompt.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/copilot/tools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/credentialHealth/cache.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/credentialHealth/scheduler.ts",["41355"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/dataPaths.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/__tests__/quotaSnapshots.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/_rowTypes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/accessTokens.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/adapters/betterSqliteAdapter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/adapters/bunSqliteAdapter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/adapters/driverFactory.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/adapters/nodeSqliteAdapter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/adapters/nodeSqliteShared.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/adapters/sqljsAdapter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/adapters/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/agentBridgeBypass.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/agentBridgeMappings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/agentBridgeState.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeyColumnFallbacks.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeyContextSources.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeyGroups.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeyUsageLimitFields.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeys/modelPermissions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeys/rowParsers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeys/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/apiKeys.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/autoCandidateOverrides.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/backup.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/batches.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/callLogStats.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/caseMapping.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/ccDiscoveryAliases.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/ccDiscoveryMetrics.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/ccrBlocks.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/cleanup/usagePurge.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/cleanup.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/cliToolState.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/comboForecast.ts",["41356"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/combos.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/commandCodeAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/compression.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/compressionAnalytics.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/compressionCacheStats.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/compressionCombos.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/compressionContextBudget.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/compressionDetailNormalizers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/compressionRunTelemetry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/contextHandoffs.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/core.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/creditBalance.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/databaseSettings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/detailedLogs.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/discovery.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/discoveryResults.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/domainState.ts",["41357"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/encryption.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/evals.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/featureFlags.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/files.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/freeProxies.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/functionalGatewayMirrors.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/gamification.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/healthCheck.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/inspectorCustomHosts.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/inspectorSessions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/interceptionRules.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/jsonMigration.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/localCorpus.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/memoryVec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/middleware.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/migrationRunner/constants.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/migrationRunner/extraDirs.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/migrationRunner.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/modelCapabilityOverrides.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/modelComboMappings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/modelContextOverrides.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/modelIntelligence.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/models/activeSyncedCatalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/models/aliases.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/models/compat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/models/mitmAlias.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/models/shared.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/models/synced.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/models.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/notion.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/obsidian.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/omp.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/oneproxy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/optimizationSettings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/paramFilters.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/playgroundPresets.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/pluginMetrics.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/plugins.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/probeUtils.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/prompts.ts",["41358"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providerLimits.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providerNodeSelect.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providerPlans.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providerStats.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers/columns.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers/deletion.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers/lazyConnectionView.ts",["41359"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers/migrations.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers/nodes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers/rateLimit.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers/usageIdentityReconciliation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/providers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxies/guards.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxies/mappers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxies/registryGeneration.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxies/rotation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxies/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxies.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxyLatency.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxyLogs.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/proxySubscriptions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/quotaConsumption.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/quotaGroups.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/quotaModelCaps.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/quotaPools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/quotaResetEvents.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/quotaSnapshots.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/radar.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/readCache.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/reasoningCache.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/reasoningRoutingRules.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/recovery.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/registeredKeys.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/relayProbeStats.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/relayProxies.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/repositories/routingConfigRepositories.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/repositories/sqliteComboRepository.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/repositories/sqliteModelComboMappingRepository.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/schemaColumns.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/secrets.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/semanticCache.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/serviceModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/sessionAccountAffinity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/settings/cacheMetrics.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/settings/lkgp.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/settings/noAuthProxyFallback.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/settings/pricing.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/settings/shared.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/settings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/skills.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/stateReset.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/stats.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/syncTokens.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/tierConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/tokenLimits.ts",["41360"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/upstreamProxy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/usageAnalytics/sources.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/usageAnalytics.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/usageLogs.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/usageSummary.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/vacuumScheduler.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/versionManager.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/webSessionDedup.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/webhookDeliveries.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/db/webhooks.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/discovery/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/display/names.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/display/useProviderNodeMap.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/docsI18nPath.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/docsSanitizer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/embeddings/familyGuard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/embeddings/service.ts",["41361"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/env/runtimeEnv.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/evals/evalRunner/builtinSuites.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/evals/evalRunner.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/evals/runtime.ts",["41362"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/events/eventBus.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/events/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProviderRankings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProviderRankingsAuthType.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/iplocate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/oneproxy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/proxifly.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/scheduler.ts",["41363"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/syncCycle.ts",["41364"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/freeProxyProviders/webshare.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/antiCheat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/badges.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/events.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/invites.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/leaderboard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/notifications.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/servers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/sharing.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/streaks.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gamification/xp.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/gracefulShutdown.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/base.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/credentialMasker.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/piiMasker.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/promptInjection.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/registry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/visionBridge.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/visionBridgeCredentials.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/visionBridgeHelpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/guardrails/visionBridgeRouter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/headroom/detect.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/headroom/process.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/idempotencyLayer.ts",["41365"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/images/imageRouteModel.ts",["41366"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/initCloudSync.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/inspector/agentBridgeMaintenanceApi.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/inspector/captureState.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/inspector/configPortability.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/inspector/harExport.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/inspector/matchesTrafficFilter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/inspector/secretMask.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/inspector/tproxyCaptureApi.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/ipUtils.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/issueAgent/audit.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/issueAgent/execution.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/issueAgent/githubExport.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/issueAgent/recordedTriage.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/jobs/backupScheduleJob.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/jobs/budgetResetJob.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/jobs/cronMatch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/jobs/reasoningCacheCleanupJob.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/localCorpus/configured.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/localCorpus/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/localDb.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/localHealthCheck.ts",["41367"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/logEnv.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/logPayloads.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/logRotation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/machineToken.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/__tests__/generic-backend.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/__tests__/injection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/__tests__/qdrant-wiring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/__tests__/retrieval.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/__tests__/schemas.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/backend.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/cache.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/embedding/cache.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/embedding/index.ts",["41368"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/embedding/remote.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/embedding/staticPotion.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/embedding/transformersLocal.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/embedding/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/extraction.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/genericBackend.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/injection.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/manager.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/obsidianBackend.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/qdrant.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/reindex.ts",["41369"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/retrieval/scoring.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/retrieval.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/schemas.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/settings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/sqliteBackend.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/store.ts",["41370"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/summarization.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/typedDecay.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/vectorStore.ts",["41371"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/memory/verify.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/middleware/cliTokenAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/middleware/registry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/middleware/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/modelAliasResolver.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/modelAliasSeed.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/modelCapabilities.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/modelMetadataRegistry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/modelsDevSync/transform.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/modelsDevSync.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/monitoring/comboHealthAutopilot.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/monitoring/observability.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/monitoring/providerHealthAutopilot.ts",["41372","41373"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/monitoring/providerHealthMatrix.ts",["41374"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/ngrokTunnel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/notion/api.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/codexDeviceFlow.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/config/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/connectionPersistence.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/constants/oauth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/credentialBlob.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/deviceFlowTickets.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/gitlab.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/kiroConnectionIdentity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/kiroSocialPoll.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/pasteCredentials.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/agy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/antigravity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/claude.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/cline.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/codebuddy-cn.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/codex.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/cursor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/ghe-copilot.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/github.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/gitlab-duo.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/grok-cli-oauth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/grok-cli.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/kilocode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/kimi-coding.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/kiro.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/qoder.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/raycast.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/trae.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/windsurf.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/xai-oauth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/zed-hosted.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers/zed.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/providers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/services/codexImport.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/services/cursor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/services/kiro.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/services/raycast.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/services/raycastLocal.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/agyAuthImport.ts",["41375"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/banner.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/claudeAuthFile.ts",["41376"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/claudeAuthImport.ts",["41377"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/claudeAuthZipExtract.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/cliProxyAuthImport.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/codexAuthFile.ts",["41378"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/codexAuthImport.ts",["41379"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/codexAuthZipExtract.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/codexConnectionSelection.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/codexSessionImport.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/googleLoopbackHint.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/grokCliAuthJson.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/jsonZipExtract.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/loopbackTunnel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/pkce.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/pkceLoopbackWarning.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/server.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oauth/utils/ui.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/obsidian/api.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/obsidianSync.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oneproxyRotator.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/oneproxySync.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/piiSanitizer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/playground/codeExport.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/playground/promptImprover.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/playground/streamMetrics.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/playground/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/devMode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/doctor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/errors.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/hooks.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/loader.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/logger.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/manager.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/manifest.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/marketplace.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/scanner.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/sdk.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/testRunner.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/plugins/watcher.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/pricingSync.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/promptCache/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/promptCache/prefixAnalyzer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providerModels/cursorAgent.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providerModels/geminiModelsParser.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providerModels/managedAvailableModels.ts",["41380"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providerModels/managedModelImport.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providerModels/modelDiscovery.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/catalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/claudeExtraUsage.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/claudeFastMode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/codexConnectionDefaults.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/codexFastTier.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/imageValidation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/managedAvailableModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/modelListingCapability.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/nvidiaValidationModel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/requestDefaults.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/serviceKindIndex.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/staticModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/anthropicFormat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/audioMiscProviders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/cloudProviders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/cozeError.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/directChatProbe.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/embeddingProviders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/headers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/kiro.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/metaAi.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/openaiFormat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/searchProviders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/specialtyInline.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/transport.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/urlHelpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/webCookie.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/webProvidersA.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation/webProvidersB.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/validation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/webCookieAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/xai/thinking.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/xai/translators/claude.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/xai/translators/gemini.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/xai/translators/openai-chat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/providers/xai/translators/openai-responses.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxyEgress.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxyHealth/decision.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxyHealth/scheduler.ts",["41381"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxyHealth/statusPolicy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxyHealth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxyLogger.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxyRelay/cloudflareWorkerScript.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/coreEndpoint.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/due.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/fetchGuard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/fetchRetry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/needsCore.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/parse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/schema.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/scopes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/subscriptionService.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/proxySubscription/url.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/QuotaStore.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/accountBuckets.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/burnRate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/connectionProvider.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/connectionRecovery.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/dimensions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/enforce.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/fairShare.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/planRegistry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/planResolver.ts",["41382"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/quotaCombos.ts",["41383"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/quotaKey.ts",["41384"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/quotaModelNaming.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/redisQuotaStore.ts",["41385"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/saturationSignals.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/spendRecorder.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/sqliteQuotaStore.ts",["41386"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/storeFactory.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/quota/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/radar/applyFeed.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/radar/feedSchema.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/radar/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/radar/pinnedKeys.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/radar/sync.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/radar/verify.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/reasoningRouting/input.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/reasoningRouting/policy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/resilience/modelLockoutSettings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/resilience/settings/normalize.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/resilience/settings/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/resilience/settings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/routerEval/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/runtime/ports.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/search/executeWebSearch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/security/localEndpoints.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/semanticCache.ts",["41387"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/serverLifecycle.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/ServiceSupervisor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/apiKey.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/bootstrap.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/embedPath.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/embedWsProxy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/healthCheck.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/htmlRewriter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/installers/bifrost.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/installers/cliproxy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/installers/dario.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/installers/mux.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/installers/ninerouter.stub.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/installers/ninerouter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/installers/utils.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/modelSync.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/portProbe.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/providerPlugins/registry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/providerPlugins/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/quotaAutoPing.ts",["41388"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/registry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/reverseProxy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/ringBuffer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/serviceBackends.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/services/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/__tests__/integration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/a2a.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/builtin/browser.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/builtins.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/containerProvider.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/custom.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/executor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/githubCollector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/hybrid.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/injection.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/interception.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/providerSettings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/registry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/sandbox.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/schemas.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/skillssh.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/skills/webFetchExecution.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/source.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/spend/batchWriter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/sseTextTransform.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/streamingPiiTransform.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/sync/bundle.ts",["41389"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/sync/tokens.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/system/autoUpdate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/system/globalPackagePath.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/system/versionCheck.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/system/versionCompare.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/tailscaleTunnel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/tokenHealthCheck.ts",["41390"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/tokenHealthCheckCopilot.ts",["41391"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/toolPolicy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/translator/streamTransform.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/translatorEvents.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/accountIdentity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/aggregateHistory.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/apiKeySelfService.ts",["41392"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/apiKeyUsageLimits.ts",["41393"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/cacheHealth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/callLogApiKeyContext.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/callLogArtifacts.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/callLogs/format.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/callLogs.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/callLogsBoundedQueries.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/codexResetCredits.ts",["41394"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/comboForecast.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/comboHealth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/comboHealthDashboard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/comboScoringInspector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/completedRequestDetails.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/costCalculator.ts",["41395"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/fetcher.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/flatRateProviders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/internalUsageCommand.ts",["41396"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/migrations.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/pendingRequestScope.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/providerDisplayNames.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/providerLimits/chunkedSpacingSync.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/providerLimits/quotaNormalize.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/providerLimits.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/providerLimitsCache.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/providerWindowCosts.ts",["41397"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/resilienceExplain.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/routeExplain.ts",["41398"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/tokenAccounting.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/usageEvents.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/usageHistory/helpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/usageHistory.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usage/usageStats.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usageAnalytics.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/usageDb.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/versionManager/binaryManager.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/versionManager/healthMonitor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/versionManager/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/versionManager/processManager.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/versionManager/releaseChecker.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vncSession/harvest.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vncSession/manifest.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vncSession/service.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vscode/familyFirstModelIds.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vscode/modelPresentation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vscode/reasoningMetadata.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vscode/serviceTierVariants.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/vscode/tokenizedRequest.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/webhookDispatcher.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/webhooks/eventDescriptions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/webhooks/integrations/discord.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/webhooks/integrations/slack.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/webhooks/integrations/telegram.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/ws/handshake.ts",["41399"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/zed-oauth/confirmedAccounts.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/zed-oauth/credentialFingerprint.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/zed-oauth/dockerDetect.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/zed-oauth/importUtils.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/zed-oauth/keychain-reader.stub.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/lib/zed-oauth/keychain-reader.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/middleware/promptInjectionGuard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/_internal/aliasConfig.cjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/_internal/bypass.cjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/_internal/forwardTarget.cjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/_internal/ingest.cjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/_internal/rootCaShim.cjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/_internal/standaloneRouting.cjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/aliasConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/cert/generate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/cert/install.stub.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/cert/install.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/cert/migration.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/cert/rootCa.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/dataDir.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/antigravity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/claudeCode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/codex.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/copilot.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/cursor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/kiro.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/openCode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/detection/zed.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/dns/dnsConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/dns/provision.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/antigravity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/base.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/claudeCode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/codex.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/copilot.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/cursor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/kiro.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/openCode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/trae.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/handlers/zed.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/agentBridgeHook.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/buffer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/contextKey.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/conversationNormalizer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/diagnostics.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/httpProxyServer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/kindDetector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/llmMetadataExtractor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/pricing.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/processAttribution.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/sseMerger.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/systemProxyConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/inspector/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/manager.runtime.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/manager.stub.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/manager.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/maskSecrets.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/passthrough.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/privilegedMitmStep.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/repair.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/sanitizeHeaders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/server.cjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/socketTimeouts.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/stopDnsTeardown.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/sudoGate.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/systemCommands.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/antigravity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/claudeCode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/codex.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/copilot.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/cursor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/ghe-copilot.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/kiro.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/openCode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/trae.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/targets/zed.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/caTrust.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/captureManager.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/captureMode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/commands.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/dynamicCert.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/setup.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/tlsCapture.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/tproxy/transparentSocket.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/mitm/upstreamTrust.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/models/index.ts",["41400"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/proxy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/scripts/backfillAggregation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/auth/loginGuard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/accessScopes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/accessTokenAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/assertAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/classify.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/context.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/csrf.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/headers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/peerStamp.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/pipeline.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/policies/clientApi.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/policies/management.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/policies/public.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/routeGuard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/authz/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/cors/origins.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/origin/publicOrigin.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/ws/liveServer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/ws/liveServerAllowList.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server/ws/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/server-init.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Avatar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Badge.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/BasePathNetworkProvider.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Breadcrumbs.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Button.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Card.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Checkbox.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/CloudSyncStatus.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Collapsible.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/CollapsibleSection.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ColumnToggle.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/CommandPalette.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ConsoleLogViewer.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/CursorAuthModal.tsx",["41401"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/DataTable.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/DegradationBadge.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/DistributeProxiesButton.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/DistributeProxiesButton.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/EmptyState.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ErrorPageScaffold.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/FilterBar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Footer.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Header.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/InfoTooltip.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Input.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/KiroAuthModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/KiroOAuthWrapper.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/KiroSocialOAuthModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/LanguageSelector.tsx",["41402"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/LinkifiedText.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Loading.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/LocaleAutoDetect.tsx",[],["41403"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/MaintenanceBanner.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ManualConfigModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Modal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ModelRoutingSection.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ModelSelectField.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ModelSelectModal.tsx",[],["41404"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/MonacoEditor.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/NavigationProgress.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/NoAuthAccountCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/NoAuthProviderCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/NoAuthProviderToggle.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/NotificationToast.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/OAuthModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/OAuthModalPanels.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/OmniRouteLogo.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/PresetSlider.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/PricingModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ProviderCooldownCard.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ProviderIcon.tsx",[],["41405","41406"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ProviderTestSlideOver.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ProxyConfigModal.tsx",["41407"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ProxyLogDetail.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ProxyLogger.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/PwaRegister.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/RaycastAuthModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ReasoningRoutingRules.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/RequestLoggerDetail.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/RequestLoggerV2.tsx",["41408","41409","41410","41411","41412","41413"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/RequestTimeline.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/RiskNoticeModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/SegmentedControl.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Select.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Sidebar.search.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Sidebar.tsx",["41414"],["41415"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/SkillsConceptCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/SystemMonitor.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Textarea.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ThemeProvider.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/ThemeToggle.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Toggle.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/TokenHealthBadge.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/Tooltip.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/TraeAuthModal.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/UsageAnalytics.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/UsageStats.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/ApiKeyFilterDropdown.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/CustomRangePicker.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/ModelTable.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/RequestCountByProviderDateTable.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/RequestCountDateFilter.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/RequestCountTable.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/TimeRangeSelector.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/chartColors.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/charts.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/index.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/modelBreakdownSort.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/rechartsCore.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/rechartsDonuts.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/rechartsUsageCharts.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/requestCountSort.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/analytics/useProviderDailyUsage.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/cli/CliComparisonCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/cli/CliConceptCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/cli/CliToolCard.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/cli/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/compression/ComboCompressionModeSelect.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/compression/CompressionPipelineEditor.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/compression/EngineConfigForm.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/compression/EngineConfigPage.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/compression/compressionPipelineModel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/APIReference.stories.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/APIReference.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/Callout.stories.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/Callout.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/CodeBlock.stories.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/CodeBlock.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/DocsBreadcrumbs.stories.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/DocsBreadcrumbs.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/DocsSidebar.stories.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/DocsSidebar.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/DocsThemeProvider.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/Tabs.stories.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/Tabs.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/docs/tokens.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/flow/FlowCanvas.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/flow/StatusDot.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/flow/edgeStyles.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/index.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/layouts/AuthLayout.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/layouts/DashboardLayout.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/layouts/index.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/lobeProviderIcons.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/logTableStyles.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/modelSelectModalHelpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/oauthBlobSubmit.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/oauthModal/GheConfigStep.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/oauthModal/GitlabDuoSetupStep.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/oauthModal/OAuthErrorStep.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/oauthModal/OAuthWaitingStep.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/proxyAssignment.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/proxyAssignment.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/requestLoggerPreferences.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/components/requestLoggerSignature.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/agentSkills.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/alibabaProviderRegions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/antigravityClientProfile.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/apiKeyPolicyScopes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/appConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/batch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/batchEndpoints.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/bodySize.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/claudeCodeClient.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/cliCompatProviders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/cliTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/cliToolsGrokBuild.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/clientIdentityProfiles.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/codexClient.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/colors.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/comboConfigMode.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/config.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/dashboardCsrf.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/endpointCategories.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/errorCodes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/featureFlagDefinitions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/gitlabDuoSetupMessage.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/headers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/homeWidgets.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/managementScopes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/mcpScopes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/mitmToolHosts.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/modal.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/modelCompat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/modelSpecs.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/models.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/openRouterPreset.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/pricing/default-pricing.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/pricing/frontier-labs.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/pricing/inference-hosts.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/pricing/oauth-subscriptions.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/pricing/regional.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/pricing/shared-tiers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/pricing.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/apikey/enterprise-cloud.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/apikey/frontier-labs.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/apikey/gateways.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/apikey/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/apikey/inference-hosts.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/apikey/regional.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/apikey/specialty-media.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/audio.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/cloud-agent.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/local.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/noauth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/oauth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/search.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/system.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/upstream-proxy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers/web-cookie.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/providers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/publicApiRoutes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/quotaAutoPing.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/responsesPreviousResponseId.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/routingStrategies.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/selfServiceScopes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/serviceKinds.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/sidebarGroupVisibility.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/sidebarVisibility/sections.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/sidebarVisibility/types.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/sidebarVisibility.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/spawnCapablePrefixes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/statusColors.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/upstreamHeaders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/visionBridgeDefaults.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/constants/visionModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/contracts/quota.ts",["41416"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/hooks/__tests__/useDisplayBaseUrl.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/hooks/cli/useToolBatchStatuses.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/hooks/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/hooks/useCopyToClipboard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/hooks/useDisplayBaseUrl.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/hooks/useElectron.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/hooks/useTheme.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/http/apiErrorMessage.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/lib/persistLocale.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/middleware/bodySizeGuard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/middleware/chatBodyAdmission.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/middleware/correlationId.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/middleware/requireJsonContentType.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/network/outboundUrlGuard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/network/outboundUrlGuardPolicy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/network/remoteImageFetch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/network/safeOutboundFetch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/platform/windowsProcess.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/providers/webSessionCredentials.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/reasoning/effortStandardization.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/resilience/peerRouting.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/agentBridge.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/cliCatalog.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/inspector.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/memory.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/playground.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/qdrant.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/quota.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/searchTools.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/schemas/validation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/apiKeyResolver.ts",["41417"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/backupService.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/claudeCliConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/cliInstallFallback.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/cliRuntime.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/cliRuntimeGrokBuild.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/cliRuntimeHealthcheckPath.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/cliRuntimeKnownPath.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/cloudSyncScheduler.ts",["41418"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/codexCatalogRevalidation.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/codexDiscoveryPolicy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/droidCustomModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/initializeCloudSync.ts",["41419"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/loginShellPath.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/modelSyncScheduler.ts",["41420"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/opencodeConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/providerLimitsSyncScheduler.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/services/qwenCodeConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/types/cliBatchStatus.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/types/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/types/pagination.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/types/utilization.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/a11yAudit.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/api.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/apiAuth.ts",["41421"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/apiKey.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/apiKeyPolicy.ts",["41422"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/apiResponse.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/basePath.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/basePathFetch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/bulkApiKeyParser.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/circuitBreaker.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/classify429.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/cliCompat.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/clientApiRouteAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/clineAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/clipboard.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/cloud.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/cn.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/codexBaseUrl.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/codexConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/compatibleProviderId.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/compressionHeaderEcho.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/connectionStatus.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/cors.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/costEstimator.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/dashboardCsrf.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/envBoolean.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/featureFlags.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/fetchError.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/fetchTimeout.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/formatting.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/freeModels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/globPattern.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/grokBilling.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/injectionSeverity.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/inputSanitizer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/linkify.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/logRedaction.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/logger.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/machine.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/machineId.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/maskEmail.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/modelCatalogSearch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/noAuthProviders.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/nodeRuntimeSupport.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/numeric.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/parseApiKeys.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/providerConnectionStatus.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/providerCredentialRequirement.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/providerDisplayLabel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/providerFallbackColor.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/providerHints.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/providerModelAliases.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/providerQuotaVisibility.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/rateLimiter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/releaseNotes.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/requestId.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/requestTelemetry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/requestTimeout.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/resolveOmniRouteBaseUrl.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/runtimeTimeouts.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/secretsValidator.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/secureRandom.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/serviceTierLabels.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/shuffleDeck.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/sidebarExpansionState.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/sidebarRouteMatch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/sidebarSearch.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/streamTracker.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/structuredLogger.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/testProcess.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/tiktokenCounter.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/turkishText.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/upstreamError.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/utils/wsPath.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/compressionConfigSchemas.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/freeProxySchemas.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/helpers.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/oneproxySchemas.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/providerSchema.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/providerSpecificData.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/apiV1.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/auth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/cli.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/cloud.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/combo.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/evals.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/gemini.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/keys.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/misc.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/payloadRules.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/pricing.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/provider.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/proxy.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/reasoningRouting.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/routing.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/settings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas/translator.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/schemas.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/shared/validation/settingsSchemas.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/autoRouting.ts",["41423"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/chat/clientRawRequest.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/chat.ts",["41424"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/chatAdmission.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/chatHelpers.ts",["41425"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/chatPredicates.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/comboFailureLogging.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/reasoningRouting.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/rejectedRequestUsage.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/requestBody.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/handlers/resolveRoutingModel.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/auth.ts",["41426","41427"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/cooldownAwareRetry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/googApiKeyAuth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/headerReader.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/imageCredentialRetry.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/model.ts",["41428","41429"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/noAuthProviderSettings.ts",["41430"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/noAuthProviderSiblings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/noAuthProxyResolution.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/requestResourceHealth.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/sessionAffinityPin.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/streamState.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/services/tokenRefresh.ts",["41431"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/utils/backpressure.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/sse/utils/logger.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/store/emailPrivacyStore.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/store/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/store/notificationStore.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/store/themeStore.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/types/databaseSettings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/types/global.d.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/types/index.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/types/provider.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/types/sqljs.d.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/_cp_mock_hook.mts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/_cp_mock_module.mts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/_helpers/readSrc.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/_setup/isolateDataDir.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/_setup/vitestUiPolyfills.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/benchmarks/pipeline-accuracy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/boundary/gemini-double-escaping.live.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/boundary/gemini-midstream-503-e2e.live.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/boundary/gemma4-multiturn.live.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/boundary/gemma4-newline-investigation.live.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/boundary/openclaw-omniroute-tool-boundary.live.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/a11y-resilience.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/a11y.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/agent-bridge-traffic-cross.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/agent-bridge.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/agent-skills-page.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/analytics-tabs.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/api-keys-flow.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/api.spec.ts",["41432","41433","41434"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/combo-live-studio.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/combo-unification.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/combos-flow.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/compression-studio.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/ecosystem.test.ts",["41435","41436","41437","41438","41439","41440","41441","41442","41443","41444","41445","41446","41447","41448","41449","41450","41451"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/error-pages.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/group-b-activity-feed.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/group-b-quota-plans-config.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/group-b-quota-share-pools.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/group-b-redirect-logs-activity.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/helpers/dashboardAuth.ts",["41452","41453"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/helpers/mockUpstreamServer.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/memory-engine.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/memory-qdrant-routes.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/memory-settings.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/navigation.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/playground-compare.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/playground-studio.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/protocol-clients.test.ts",["41454","41455","41456","41457","41458","41459"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/protocol-visibility.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/providers-bailian-coding-plan.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/providers-management.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/proxy-registry.smoke.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/resilience-plan-alignment.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/responsive.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/responsiveSpecs.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/search-tools-studio.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/settings-toggles.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/skills-marketplace.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/smoke.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/system-failover.test.ts",["41460","41461"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/traffic-inspector.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/translator-friendly.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/e2e/visual-resilience-smoke.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/fixtures/compression/session-dedup-memory-7849.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/fixtures/devin-bridge/e2e-workspace/.claude/hooks/log-tool.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/fixtures/devin-bridge/e2e-workspace/math.js",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/fixtures/devin-bridge/e2e-workspace/math.test.js",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/fixtures/sanitizerFixtures.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/fixtures/welcome-banner-plugin/index.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/golden-set/compression-caveman-v2.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/golden-set/compression-quality.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/golden-set/compression-savings.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/golden-set/compression-upstream-parity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/helpers/fakeUpstreamStream.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/helpers/faultyUpstream.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/helpers/goldenSnapshot.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/helpers/managementSession.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/helpers/persistence/comboRepositoryConformance.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/helpers/propertyConfig.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/helpers/translationFixtures.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/homolog/ui/api-key-flow.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/homolog/ui/auth.setup.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/homolog/ui/playwright.config.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/homolog/ui/routes.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/_chatPipelineCallLogs.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/_chatPipelineHarness.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/_comboRoutingHarness.ts",["41462","41463","41464"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/active-request-completion.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/agent-bridge-bypass-flow.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/agent-bridge-cert-flow.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/agent-bridge-mappings.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/agent-bridge-routes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/agent-skills-content.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/agent-skills-discovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/aihorde-load-test.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/all-statuses-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/antigravity-projectid-discovery-persist-8491.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/api-keys.test.ts",["41465","41466","41467","41468","41469","41470","41471","41472","41473","41474","41475","41476","41477","41478","41479","41480","41481","41482","41483","41484","41485","41486","41487"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/api-routes-critical.test.ts",["41488","41489","41490","41491","41492","41493","41494","41495","41496","41497","41498","41499","41500","41501","41502","41503","41504","41505","41506","41507","41508","41509","41510","41511","41512","41513","41514","41515","41516","41517","41518","41519","41520","41521","41522","41523","41524","41525","41526"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/audit-log-level-filter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/batch-e2e-rate-limit.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/batch-processor-escaping.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/chat-pipeline.test.ts",["41527","41528","41529","41530","41531","41532","41533","41534","41535","41536","41537","41538","41539","41540","41541","41542","41543","41544","41545","41546"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/chatcore-compression-integration.test.ts",["41547","41548","41549","41550","41551","41552","41553","41554","41555"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/chatcore-context-window-boundary.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-codewhale.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-deepseek-tui.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-forge.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-grok-build.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-jcode.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-letta.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-omp.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-pi.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cli-settings-smelt.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/codex-chat-reasoning-http-e2e.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-failover-e2e.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-live/_liveHarness.ts",["41556","41557","41558","41559","41560","41561","41562","41563","41564","41565"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-live/auto.live.test.ts",["41566","41567","41568","41569","41570","41571","41572","41573","41574","41575","41576","41577","41578","41579","41580","41581","41582","41583","41584","41585","41586","41587"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-live/cost-and-fusion.live.test.ts",["41588","41589","41590","41591","41592","41593","41594","41595","41596","41597","41598","41599","41600","41601","41602","41603","41604","41605","41606","41607","41608","41609","41610","41611","41612","41613","41614","41615","41616"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-live/ordered.live.test.ts",["41617","41618","41619","41620"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/auto.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/context-relay-codex.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/context-relay-handoff.test.ts",["41621","41622"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/cost-and-context.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/fusion.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/ordered.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/quota-aware.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/quota-share.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-matrix/weighted.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-provider-exhaustion.test.ts",["41623","41624","41625","41626","41627","41628","41629","41630","41631","41632","41633","41634","41635","41636","41637","41638","41639","41640","41641"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/combo-routing-e2e.test.ts",["41642","41643","41644","41645","41646","41647","41648"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/compression-pipeline.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/cursor-e2e.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/files-api.test.ts",["41649"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/fingerprint-expansion.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/free-models-benchmark.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/free-models-tpm-stress.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/freeModelBenchmarkShared.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/gemini-combo-cooldown-wait.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/gemini-large-context-tpm.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/gemini-live-429-classification.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/gemini-malformed-function-call-stream.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/gemini-rate-limit-classification.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/gemini-tool-call-escaping.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/heap-growth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/historical-tool-call-leak.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/integration-wiring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/live-gemini-agentic-loop.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/live-gemini-nonstream.test.ts",["41650"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/live-gemini-workload.test.ts",["41651"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/live-gemini.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/live-ws-startup.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/liveGeminiShared.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/llama-cpp-provider.test.ts",["41652","41653","41654","41655"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/manifest-routing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/memory-embedding-providers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/memory-engine-status.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/memory-pipeline.test.ts",["41656"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/memory-reindex.test.ts",["41657"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/memory-retrieve-preview.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/memory-route-put.test.ts",["41658"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/memory-summarize.test.ts",["41659"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/mimocode-proxy.integration.test.ts",["41660","41661","41662","41663","41664","41665","41666","41667","41668","41669","41670","41671","41672"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/modelsDevSync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/monitoring-health-cache.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/newly-enabled-providers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/obsidian-plugin-e2e.test.ts",["41673","41674","41675","41676","41677","41678","41679","41680","41681","41682","41683","41684"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/performance-regression.test.ts",["41685"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/pipeline-combo.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/playground-improve-prompt.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/playground-presets-crud.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/playground-presets-zod.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/plugins-lifecycle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/presets-dashboard-auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/provider-journey.contract.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/proxy-context-passthrough.test.ts",["41686","41687","41688","41689","41690","41691","41692","41693","41694"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/proxy-pipeline.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/proxy-registry-flow.test.ts",["41695","41696","41697","41698","41699","41700","41701","41702","41703"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/qdrant-routes.test.ts",["41704","41705","41706","41707","41708","41709","41710","41711","41712","41713","41714","41715","41716","41717","41718","41719","41720","41721","41722"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/quota-plans-crud.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/quota-pool-usage-provider-resolution.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/quota-pools-crud.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/quota-pools-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/quota-preview.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/quota-routes-error-sanitization.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/quota-store-settings.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/reasoning-routing-pipeline.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/resilience-chaos.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/resilience-http-e2e.test.ts",["41723","41724","41725"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/search-providers-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/security-hardening.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/services/cliproxy-coexistence.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/services/full-lifecycle.int.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/services/route-guard-services.int.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/skills-pipeline.test.ts",["41726","41727","41728","41729","41730","41731","41732","41733","41734","41735","41736","41737","41738","41739"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/sse-correctness.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/stream-recovery-wiring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/test-model-compression-off-6240.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-capture-modes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-error-sanitization.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-hosts.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-internal-ingest.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-localonly.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-requests.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-session-requests.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-sessions.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/traffic-inspector-ws.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/integration/v1-contracts-behavior.test.ts",["41740","41741","41742","41743","41744","41745","41746","41747","41748","41749"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/live/deepseek-web-live.test.ts",["41750","41751"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/load/k6-soak.js",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/load/proxy-load.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/scratch_test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/theoldllm-stress.test.ts",["41752","41753","41754","41755","41756","41757","41758","41759","41760","41761"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/translator/testFromFile.ts",["41762","41763","41764"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/7993-noauth-proxy-routing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8134-github-t5-fallback-filter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8169-lite-word-boundary-truncation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8189-classifier-compat-auto-narrow.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8200-perplexity-web-401-cooldown.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8200-perplexity-web-cookie-rotation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8231-gemini-civic-integrity-default.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8247-accountfallback-model-unhealthy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8248-accountfallback-nvidia-degraded.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8295-namespace-leaf-collision.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8326-compatible-id-regex.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8327-models-owned-by-prefix.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8328-topology-custom-providers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8331-usage-buffer-inflation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8332-combo-vision-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8336-audit-loopback-login.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8350-hermes-oauth-usage-400.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8368-image-token-context.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8370-priority-affinity-reorder.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8374-plugins-status-optional.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8376-econnrefused-breaker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8385-perkey-proxy-global-toggle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8388-compression-detail-persist.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8395-plugin-hooks-fire.test.ts",[],["41765"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8396-cooldown-429-cap.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8431-multiwindow-quota-eviction.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8488-capability-filter-fail-closed.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8510-adobe-firefly-edits-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8560-responses-image-compaction.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8594-compress-image-token-stringify.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8676-monsterapi-deprecation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8958-alias-backed-node-prefix.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/8989-perplexity-catalog-mode-repro.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/9232-purge-proxy-assignments-on-delete.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/9474-claude-code-oauth-mismap.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/9536-usage-misreporting-openai-to-claude.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/9545-gpt56-reasoning-tools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/9551-proxyfetch-no-proxy-context-bypass.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/9560-turbopack-nft-lazy-module-fs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/9568-gemini-tool-casing-mismatch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/AutoComboCatalog.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/SkillsConceptCard.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/_fixtures/tsx-runtime-modern-syntax.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/_mitmHandlerHarness.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/_mocks/settings.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/a2a-auth-timing-safe.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/a2a-cost-analysis-numeric-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/a2a-enabled-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/a2a-routing-logger.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/access-scopes-infer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/access-token-scopes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/access-tokens-db.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-concurrency-cap.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-fallback-anthropic-quota.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-fallback-cf1010-no-retry-8775.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-fallback-lockout-eviction.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-fallback-retry-after-json.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-fallback-route-restriction-403.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-fallback-service.test.ts",["41766"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/account-selector.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/accountSemaphore.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/accountfallback-ratelimit-400-4976.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/acp-agents-route.test.ts",["41767","41768"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/acp-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/active-request-stream-chunks-lifecycle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-controller.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-cost.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-domain.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-features.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-lifecycle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-queue.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-route-matrix.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adaptive-admission-runtime.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/admin-audit-events.test.ts",["41769","41770","41771","41772","41773","41774","41775","41776","41777","41778","41779"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adobe-firefly-browser-login.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adobe-firefly-jwt-redos-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adobe-firefly.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/advanced-fase07-09.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/adversarialPii.test.ts",["41780","41781"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-cert-install-fallback-4546.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-cert-route-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-cert-trust-sudo-gate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-config-portability.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-detected-models-8656.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-dns-params-7271.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-dns-per-agent-8466.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-dns-route-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-dns-sudo-gate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-dns-toggle-method-7157.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-maintenance-api.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-mappings-sync-8656.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-repair-route-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-repair-sudo-gate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-server-route-dynamic-import.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-state-full-payload-8656.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-state-normalize-3318.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-bridge-targets-serializable.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-card-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-goal-policy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agent-skills-page.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentSkillTools-mcp.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentSkills-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentSkills-cliRegistryParser.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentSkills-generator.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentSkills-openapiParser.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentSkills-routes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentSkills-schemas.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentbridge-antigravity-cert-hosts-6494.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentbridge-mitm-router-key-6403.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentrouter-cc-wire-image.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentrouter-chatcore-protocols.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentrouter-executor-protocols.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentrouter-live-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentrouter-models-discovery-7016.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agentrouter-quota-fetcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agnes-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agy-auth-import.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agy-gemini-3696-tier-passthrough.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agy-gemini-400-3229.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agy-pro-fallback-chain-3786.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agy-projectid-ui.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agy-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/agy-usage-quota.test.ts",["41782","41783","41784","41785"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/aihorde-tools-unsupported-provider-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/airforce-v1-double-prefix-5899.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/alibaba-image-media.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/alibaba-provider-regions.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/alibaba-video-media.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/alternate-formats.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/anthropic-cache-fingerprint.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/anthropic-compat-validation-v1-messages.test.ts",["41786","41787","41788"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/anthropic-header-dedupe-1475.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/anthropic-official-baseurl-host.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/anthropic-stream-thinking-close-marker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/anthropic-thinking-signature-recovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/anthropic-toolcall-args-6459.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-429-quota-cooldown.test.ts",["41789","41790"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-429-quota-tdd.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-claude-prefill-strip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-client-identity-paths.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-client-profile.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-credits.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-discovery-bootstrap.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-executor-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-finish-reason-normalization.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-format-detection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-headers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-image-catalog-separation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-local-usage-fallback-3821.test.ts",["41791","41792","41793","41794"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-missing-project-chat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-mitm-model-resolution.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-model-aliases.test.ts",["41795","41796","41797"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-native-toolcall-collect.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-oauth-client-profile.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-oauth-no-pkce-no-openid.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-oauth-postexchange-nonblocking.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-orphan-toolresult-6026.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-orphan-tooluse-7752.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-prefer-stored-project.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-projectid.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-quota-skipping.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-refresh-empty-token-3850.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-retired-public-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-retry-hook.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-safetysettings-5003.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-server-side-tools-6914.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-sse-collect-socket-release-4309.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-streaming-error-body-sanitized-2461.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-streaming-passthrough.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-strip-builtin-tools-funcdecls-1095.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-strip-output-config-1944.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-strip-thinking-fields-1926.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-tool-cloak-server-side-invocations.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-tool-cloaking.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-usage-fetcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-usage-service.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-version.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/antigravity-weekly-quota-4017.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/api-catchall-json-404.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/authz-inventory.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/auto-combo-candidates-route-7819.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/cli-tools/detect.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/combo-002-first-field.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/combo-error-response.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/compression/compression-api.test.ts",[],["41798"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/compression/rtk-learn-discover-routes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/compression/rtk-toml-import-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/compression-engines-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/compression-preview-caveman-and-stacked-6425.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/compression-preview-engine.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/context-analytics-engine-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/context-combos-default-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/discovery-routes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/free-proxies-list-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/free-proxies-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/providers-import-route-6836.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/proxies-repair-relay.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/root-catchall-json-404.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/server-error-message.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/services/9router-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/services/9router-provider-expose.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/services/9router-status-reveal.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/services/cliproxy-provider-expose.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/settings-audit.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/sync-models-readiness.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/v1/bifrost-cooldown.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/v1/bifrost-sidecar.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/v1/provider-plugin-manifest-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/v1/relay-routing-backend.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/v1/relay-stream-finalizer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/v1-catchall-json-404.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/v1-me-status-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/validated-json-body.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api/webhooks/webhook-url-ssrf-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-docs-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-error-message-5340.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-lifecycle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-mask-fix.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-policy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-provider-quota-bypass-scope.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-regeneration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-reveal-route.test.ts",["41799","41800","41801","41802","41803","41804","41805","41806"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-rotator-health.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-scope-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-self-service.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-usage-limits.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-key-utils-public-surface.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-keys-create-no-hang-6570.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-malformed-json-400.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-manager-filters.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-manager-key-visibility.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-manager-mask-key-passthrough.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-manager-page-static.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-manager-quota-keys-section.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-manager-scope-preservation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-manager-usage-command.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-models-hide-paid-6328.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-parse-response.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/api-routes-lib.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikey-connection-health-check.test.ts",["41807"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikey-policy-default-rate-limits.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikeypolicy-disable-non-public.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikeypolicy-quota-only.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikeys-allowed-quotas.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikeys-disable-non-public.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikeys-model-permissions-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikeys-row-parsers-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apikeys-usage-command.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/appearance-widget-settings-schema.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/apply-executor-proxy-info-5217.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/approvalGate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/arena-cookie-validation-redirect-7542.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/arena-elo-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audio-provider-nodes-selection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audio-speech-fishaudio.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audio-speech-handler.test.ts",["41808","41809","41810","41811","41812","41813","41814","41815","41816"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audio-transcription-handler.test.ts",["41817","41818","41819","41820","41821","41822","41823","41824","41825"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audio-transcription-openrouter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audio-transcriptions-combo-resolution.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audio-translations-route.test.ts",["41826","41827","41828","41829","41830","41831"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audit-activity-icons.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audit-allowlist-real-actions.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audit-eventtype-i18n.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audit-high-level-actions.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/audit-timeline.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auggie-executor.test.ts",["41832","41833","41834","41835","41836","41837","41838","41839","41840"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auggie-win32-spawn-6304.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth/loginGuard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-antigravity-account-retry-v2.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-clear-account-error.test.ts",["41841","41842","41843","41844","41845"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-clear-provider-routes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-disable-cooling-2997.test.ts",["41846","41847","41848","41849","41850","41851","41852","41853","41854","41855","41856"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-extract-api-key.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-login-route.test.ts",["41857"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-noauth-fallback-loop-3061.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-ollama-cloud-per-model-403-3027.test.ts",["41858","41859","41860","41861","41862","41863","41864","41865","41866","41867","41868"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-opencode-zen-noauth-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-policy-embeddings-webfetch-7785.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-redirect-login.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auth-terminal-status.test.ts",["41869","41870","41871","41872","41873","41874","41875","41876","41877","41878","41879","41880","41881","41882","41883"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/classify.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/client-api-policy-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/client-api-policy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/csrf.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/discovery-routes-local-only.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/ip-filter-enforcement-6131.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/management-policy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/pipeline.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/probe-9033-repro.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/proxy-contract.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/public-origin.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/public-policy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/route-guard-local-prefix.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/route-guard-skills-collect.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/route-guard-version-get-exemption.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/route-guard-vnc-session-local-only.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/routeGuard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/authz/spawn-capable-prefixes-client-safe.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-candidate-overrides-7819.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-candidate-overrides-regression-7819.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-candidate-pool-filter-7819.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-budget-fallback-3470.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-codex-responses-3509.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-context-advertising.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-credentialed-model-pool.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-engine.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-hidden-models-4558.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-request-controls-6024.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combo-scoring-clamp.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combos-enhanced-4235.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combos-free-models-routes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-combos-suffixes-4235.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-custom-provider-5873.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-empty-pool-fastfail-6458.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-family-classification-8866.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-routing-settings-resolve.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-update-mode-detection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-update-runtime.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/auto-update.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoCombo/free-alias-intelligence-8601.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoCombo/paid-model-filter-6512.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoCombo/paid-tier-auto-id-6328.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoCombo/provider-family-combos.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoCombo/static-table-longest-match-8603.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoCombo/suffixComposition-4517.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoCombo/tieredRotation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoPrefix.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autocombo-unification.test.ts",["41884"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autostart-cli-shorthand-3331.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/autoupdate-npm-win32-5542.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/azure-openai-executor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/azureAiMultiModelTest.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/background-task-detector.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/backpressure.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bai-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/baidu-qianfan-website-urls-6271.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bailian-coding-plan-media.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bailian-coding-plan-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bailian-quota-fetcher.test.ts",["41885","41886","41887","41888","41889","41890","41891","41892","41893","41894","41895","41896","41897","41898","41899","41900","41901","41902","41903","41904","41905"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bailian-schema-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bailian-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/balance-e2e-shards.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bare-model-autopick.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/base-executor-buildheaders-extra-keys-8493.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/base-executor-sanitize-effort.test.ts",["41906","41907","41908","41909","41910","41911","41912","41913","41914","41915","41916","41917","41918","41919","41920","41921","41922","41923","41924","41925","41926","41927","41928","41929","41930","41931","41932","41933","41934","41935","41936","41937","41938","41939","41940","41941","41942","41943","41944","41945","41946","41947","41948","41949","41950","41951","41952","41953"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/base-executor-waf-retry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/base-headers-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/base-reasoning-effort-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/base-thinking-budget-config-5312.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-a-domain.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-b-final.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-deletion-route-logic.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-deletion.test.ts",["41954"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-file-download.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-list-limit-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-maybe-throttle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-processor-expiration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-processor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-status-cache.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch-status-logic.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch_api.test.ts",["41955","41956","41957","41958","41959","41960","41961"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batch_results.test.ts",["41962","41963"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/batches-f9-helpers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bazaarlink-provider-integrity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bedrock-image-log-redaction-7297.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bin-omniroute-mcp.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/binary-manager-extract-zip-5590.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/binaryManager.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/blackbox-web-validated-token.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/blackbox-web.test.ts",["41964","41965","41966","41967","41968","41969","41970","41971","41972","41973"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/blackbox.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/body-read-timeout.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/body-size-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/body-timeout-integration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bootstrap-env.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/browser-pool-optional-import.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/browserBackedChat-matcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/browserPool-proxy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/budget-route-auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/budget-schema-empty-limits-3537.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bug-7940-gemini-retrydelay.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bug-8020-codex-peek-body-timeout.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bug-8029-promptql-issuer-substring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/allowlist-helper.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/assemble-standalone.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/backend-only-smoke-workflows.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-bundle-size.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-circular-deps.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-codeql-ratchet.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-cognitive-complexity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-complexity-rule-count.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-complexity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-dashboard-typecheck.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-dead-code.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-licenses.test.ts",["41974","41975","41976","41977","41978"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-lockfile.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-mutation-ratchet.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-mutation-test-coverage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-openapi-breaking.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-pr-evidence.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-secrets.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-test-runner-api.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-tracked-artifacts.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-type-coverage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-vuln-ratchet.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/check-workflows.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/docker-next-channel-8576.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/electron-release-latest-yml.repro.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/mcp-bundle-no-eager-ioredis.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/mitm-server-bundle-contents.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/mutation-radiography.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/opencode-plugin-esm-only.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/optional-transformers-dependency.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/resolve-npm-entry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/should-promote-latest-5301.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build/sync-changelog-i18n.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build-bundler-default-turbopack.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build-next-isolated-windows-home-2402.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/build-next-isolated.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/buildCurl.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bulk-add-keys-no-overwrite-2587.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bulk-api-key-parser-cloudflare.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bulk-paste-api-keys.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bulk-web-session-import.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bulkApiKeyParser.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bypass-handler.test.ts",["41979","41980"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bypass-response-claude-merge.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/bytez-validation-5422.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cache-config-route-8219.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cache-control-claude-providers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cache-control-policy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cache-metrics.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cache-sweeps.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-cap.test.ts",["41981","41982","41983","41984","41985","41986","41987","41988","41989","41990","41991","41992","41993","41994","41995","41996","41997","41998","41999","42000","42001","42002","42003","42004","42005","42006","42007","42008","42009","42010","42011","42012","42013","42014","42015","42016","42017","42018","42019","42020","42021","42022","42023"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-detailed-tokens.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-file-rotation.test.ts",["42024","42025","42026","42027","42028"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-oom-unbounded-5618.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-provider-display.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-startup.test.ts",["42029"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-stream-debug.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-log-trim-sql-vars-5217.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-logs-correlation-sort.test.ts",["42030","42031","42032"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-logs-correlation-substring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-logs-pagination.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-logs-requested-model.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/call-logs-session-tag.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/calllogs-format-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cap-thinking-budget-gemini-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/capture-critical-db-state.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/card-hover-visible.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/case-collision-6584.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-helpers-extraction.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-hide-auto-no-think.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-order-contract.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-order-helper.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-pricing-lookup-index-8697.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-pricing-surface-8018.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-synced-static-preservation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-updates-v3829-kimi-qwen.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/catalog-updates-v3x.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/caveman-packs-de-fr-ja.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/caveman-packs-zh-wenyan.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-bridge-openai-image-7777.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-bridge-tool-pair-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-bridge-transforms.test.ts",["42033","42034","42035","42036","42037","42038","42039","42040","42041","42042","42043","42044","42045","42046","42047","42048","42049","42050","42051","42052","42053","42054","42055","42056","42057","42058","42059","42060","42061","42062","42063"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-compatible-model-catalog.test.ts",["42064","42065"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-compatible-provider.test.ts",["42066","42067","42068","42069","42070","42071","42072","42073","42074","42075","42076","42077","42078","42079","42080","42081","42082","42083","42084","42085","42086","42087","42088","42089","42090","42091","42092","42093","42094","42095","42096","42097","42098","42099","42100","42101","42102"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-discovery-alias-api.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-discovery-alias-resolve.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-discovery-alias-strip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-discovery-aliases-append.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-discovery-aliases-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-discovery-aliases-gate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cc-discovery-metrics.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ccr-durable-store-9061.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ccr-protocol-instruction.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/changelog-fragments.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chaos-api-routes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chaos-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chaos-executor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/charm-hyper-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-adaptive-admission-binding.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-admission-wrapper.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-auth-log-redaction.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-body-admission.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-build-client-raw-request.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-combo-live-test.test.ts",["42103","42104","42105","42106","42107","42108"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-completions-parse-once-7847.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-completions-route-shape-gate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-content-type-6414.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-context-relay.test.ts",["42109","42110","42111","42112","42113","42114","42115","42116","42117","42118"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-cooldown-aware-retry.test.ts",["42119","42120","42121","42122","42123","42124","42125","42126","42127","42128"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-core-intercept-fetch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-early-schema-validation-6412.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-helpers.test.ts",["42129","42130","42131","42132","42133","42134","42135","42136","42137","42138","42139","42140","42141"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-messages-validation-6402.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-non-string-model-6407.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-openai-compat-providers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-rate-limit-body-lock.test.ts",["42142","42143"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-rejects-image-only-model.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-request-body-parse-once-4380.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-route-coverage.test.ts",["42144","42145","42146","42147","42148","42149","42150","42151","42152","42153","42154","42155","42156","42157","42158"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-route-edge-cases.test.ts",["42159","42160","42161","42162"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chat-safetynet-reqid-6097.test.ts",["42163","42164"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-attempt-logging.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-background-redirect.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-cache-usage-meta.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-caveman-output-analytics.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-claude-effort-variant.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-claude-upstream-messages.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-client-usage-buffer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-codex-quota.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-combo-context-limit-8378.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-combo-context-override-rescue.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-compression-analytics-write.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-compression-cache-stats.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-compression-combo-predicates.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-compression-integration.test.ts",["42165","42166","42167","42168"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-compression-settings.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-compression-usage-receipt.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-context-editing-telemetry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-context-estimation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-execution-credentials.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-executor-client-headers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-executor-helpers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-executor-proxy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-extracted-modules-3821.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-failure-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-gamification-event.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-headers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-imports-cleanly.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-json-body-to-sse.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-key-health.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-log-truncation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-memory-extraction.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-memory-pressure.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-memory-skills-injection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-model-output-cap-wiring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-non-streaming-response-body.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-non-streaming-response-parse.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-non-streaming-sse.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-non-streaming-usage-stats.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-nonstreaming-json-response.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-nonstreaming-response-headers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-output-style-telemetry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-passthrough-tool-names.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-plugin-onrequest.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-plugin-onresponse.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-postcall-guardrail-context.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-quota-share-consumption.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-request-format.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-request-setup.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-sanitization.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-semantic-cache-store.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-semantic-cache.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-service-tier.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-skills-format.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-stage-trace.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-stream-error-result.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-stream-finalize.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-streaming-cache-store.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-streaming-cost.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-streaming-pipeline.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-streaming-quota-share.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-streaming-response-headers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-streaming-usage-stats.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-strip-stale-headers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-target-format.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-telemetry-helpers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-tool-calling-required-check.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-translation-paths.test.ts",["42169","42170","42171","42172","42173","42174","42175","42176","42177","42178","42179","42180","42181","42182","42183","42184","42185","42186","42187","42188","42189","42190","42191","42192","42193","42194","42195","42196","42197","42198","42199","42200","42201","42202"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-unsupported-params-strip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-upstream-body.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-upstream-execute-headers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatcore-upstream-timeouts.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-image-cache.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-async-image-ws-shapes-7357.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-citations-escape.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-citations.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-handoff-resume.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-image-silentdrop.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-models-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-sha3-boringssl-5531.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web-tools-5240.test.ts",["42203","42204","42205","42206","42207","42208"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chatgpt-web.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cheaperinference-executor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cheaperinference-image-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cheaperinference-provider-registration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-changelog-integrity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-cognitive-complexity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-complexity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-db-rules-classification.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-db-rules.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-dead-code.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-deps.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-docs-counts-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-docs-symbols.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-duplication.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-env-doc-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-error-helper.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-fabricated-docs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-fetch-targets.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-file-size.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-install-upgrade-convergence.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-known-symbols.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-migration-numbering.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-openapi-breaking-ratchet.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-openapi-routes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-pack-boot.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-pr-evidence.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-provider-consistency.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-public-creds.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-route-guard-membership.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-rtl-ratchet.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-test-discovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-test-masking-selfref-6634.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-test-masking.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-tool-config-status.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/check-type-coverage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chenzk-provider-2437.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chipotle-executor.test.ts",["42209","42210","42211"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/chutes-registry-baseurl-7621.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/circuit-breaker-abort-provider-trip-7907.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/circuit-breaker-client-abort.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/circuit-breaker-failure-kind.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/circuit-breaker-registry-cap.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/circuit-breaker-stream-controller-4602.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/classify-pr-changes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/classify429.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-adaptive-sampling-params.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-adaptive-thinking-normalize.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-atu-effort-leak-9505.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-beta-client-header-3415.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-beta-flags-2454.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-cache-control-passthrough.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-classifier-compat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-cli-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-cli-defaults.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-code-compatible-helpers.test.ts",["42212","42213"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-code-compatible-request.test.ts",["42214","42215","42216","42217","42218","42219","42220","42221","42222","42223","42224","42225","42226","42227","42228","42229","42230","42231","42232","42233","42234","42235","42236","42237","42238","42239","42240"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-code-meta-requests.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-code-obfuscation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-code-parity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-code-rendering-fixes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-code-tool-remapper-flag-leak.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-codex-identity-version-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-context-1m-client-beta-forward.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-context-1m-supported-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-effort-suffix-strip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-effort-variants.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-empty-stream-error-3685.test.ts",["42241","42242","42243","42244"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-extra-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-fast-mode.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-gemini-thought-signature-8979.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-haiku-no-adaptive-thinking.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-helper-minimax-output-config.test.ts",["42245","42246","42247"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-identity-version-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-import-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-native-passthrough-tools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-oauth-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-oauth-tool-cloak.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-oauth-usage-429-backoff.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-oauth-vps-endpoints.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-passthrough-stream-boolean.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-passthrough-thinking-2454.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-prepare-request-preserve-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-profile-auto-sync-gate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-server-tool-name-preserve.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-stream-reconstructed-body.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-thinking-tool-choice-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-to-gemini-budget-tokens-zero-6813.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-to-openai-image-toolresult.test.ts",["42248","42249","42250","42251","42252","42253","42254","42255"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-to-openai-system-role-6954.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-to-openai-think-close-5123.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-tool-result-pairing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-tool-search-beta-3974.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-tool-type-default-2195.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-auto-refresh.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-browser-transport.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-executor-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-live-alignment.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-payload-runtime.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-session.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-slow-first-byte.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-sonnet5-registry-6209.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-stream.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-transport.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web-turnstile-ua-mismatch-7548.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claude-web.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claudeAuthFile.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/claudeAuthImport.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cleanup-column-fix.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/alias-resolver-7791.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/autostart-linux.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/autostart-macos-launchctl.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/autostart-windows.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/autostart.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/launch-claude-exe-windows-9454.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/launch-codex-windows-spawn-args.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/launch-codex.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/launch-command.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/launch-windows-spawn-args.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-aider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-claude.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-cline.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-codex.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-continue.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-crush.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-cursor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-goose.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-kilo.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-opencode.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-qwen.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/setup-roo.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli/tray.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-a2a-invoke-commands.test.ts",["42256","42257","42258","42259","42260","42261","42262","42263","42264","42265","42266","42267","42268","42269","42270","42271"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-audit-commands.test.ts",["42272","42273","42274","42275","42276","42277","42278","42279","42280","42281","42282","42283","42284","42285","42286"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-auth-export-command.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-backup-command.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-batches-commands.test.ts",["42287","42288","42289","42290","42291","42292","42293","42294","42295","42296","42297","42298","42299","42300","42301","42302"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-catalog-acpspawnable.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-catalog-counts.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-catalog-display-contract.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-catalog-newentries.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-catalog-removed.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-catalog-schema.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-chat.test.ts",["42303","42304","42305","42306","42307","42308","42309","42310","42311","42312","42313","42314","42315","42316","42317","42318","42319"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-clipboard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-cloud-commands.test.ts",["42320","42321","42322","42323","42324","42325","42326","42327","42328","42329","42330","42331","42332","42333","42334","42335","42336","42337"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-combo-command.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-combo-suggest-commands.test.ts",["42338","42339","42340","42341","42342","42343","42344","42345","42346","42347","42348","42349","42350","42351","42352","42353"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-completion-dynamic.test.ts",["42354","42355","42356","42357","42358","42359","42360","42361","42362","42363","42364"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-compression-commands.test.ts",["42365","42366","42367","42368","42369","42370","42371","42372","42373","42374","42375","42376","42377","42378","42379","42380","42381","42382","42383","42384","42385","42386","42387","42388","42389","42390","42391","42392","42393","42394","42395","42396"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-connect-helpers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-context-eng-commands.test.ts",["42397","42398","42399","42400","42401","42402","42403","42404","42405","42406","42407","42408","42409","42410","42411","42412","42413","42414","42415"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-contexts.test.ts",[],["42416","42417"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-cost.test.ts",["42418","42419","42420","42421","42422","42423","42424","42425","42426","42427","42428","42429","42430","42431","42432","42433"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-dashboard-open-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-dashboard-port.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-data-dir-env-loading.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-data-dir-env.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-doctor-command.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-doctor-liveness-fallback-6162.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-doctor-rooturl-windows-5844.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-electron-to-cli-migration-server-env-7302.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-entrypoint.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-environment-helpers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-environment.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-eval-commands.test.ts",["42434","42435","42436","42437","42438","42439","42440","42441","42442","42443","42444","42445","42446","42447","42448","42449","42450","42451","42452","42453","42454","42455"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-exit-codes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-expanded-commands.test.ts",["42456"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-files-commands.test.ts",["42457","42458","42459","42460","42461","42462","42463","42464","42465","42466","42467","42468"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-fingerprints.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-health-monitoring-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-helper/config-generator.test.ts",["42469","42470"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-helper/hermes-home-env.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-helper/tool-detector-win32-7279.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-helper/tool-detector.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-helper-tool-detector-paths-6162.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-i18n-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-io.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-ipv4-first-dns-2699.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-keys-command.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-lang-commands.test.ts",["42471"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-login-antigravity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-login-push-remote.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-logs-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-machine-token.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-mcp-call-commands.test.ts",["42472","42473","42474","42475","42476","42477","42478","42479","42480","42481","42482","42483","42484","42485","42486","42487"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-memory-commands.test.ts",["42488","42489","42490","42491","42492","42493","42494","42495","42496","42497","42498","42499","42500","42501","42502","42503","42504","42505"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-memory-types.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-memory.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-mitm-schema.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-model-config-schema.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-models-command.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-nodes-commands.test.ts",["42506","42507","42508","42509","42510","42511","42512","42513","42514","42515","42516","42517","42518","42519","42520","42521","42522","42523","42524"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-oauth-commands.test.ts",["42525","42526","42527","42528","42529","42530","42531","42532","42533","42534","42535","42536","42537","42538","42539","42540","42541","42542"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-oneproxy-commands.test.ts",["42543","42544","42545","42546","42547","42548","42549","42550","42551","42552","42553","42554","42555","42556","42557","42558","42559","42560","42561","42562","42563","42564"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-open-command.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-openapi-codegen.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-openapi-commands.test.ts",["42565","42566","42567","42568","42569","42570"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-output-render-table.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-output.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-plugin-system.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-policy-commands.test.ts",["42571","42572","42573","42574","42575","42576","42577","42578","42579","42580","42581","42582","42583","42584","42585","42586","42587","42588","42589","42590"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-pricing-commands.test.ts",["42591","42592","42593","42594","42595","42596","42597","42598","42599","42600","42601","42602","42603","42604","42605","42606"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-process-supervisor-spawn-error-8091.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-process-supervisor.test.ts",["42607","42608","42609","42610","42611","42612"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-program.test.ts",["42613","42614","42615","42616"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-providers-command.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-providers-metrics.test.ts",["42617","42618","42619","42620","42621","42622","42623","42624","42625","42626","42627","42628","42629","42630","42631"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-providers-rotate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-redis-command.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-remote-mode.test.ts",["42632","42633","42634","42635","42636"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-repl.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-resilience-commands.test.ts",["42637","42638","42639","42640","42641","42642","42643","42644","42645","42646","42647","42648","42649","42650","42651","42652"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-runtime-detection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-runtime-extended.test.ts",["42653"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-runtime-imports-packaged-5227.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-runtime-known-path-shortcircuit-7774.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-runtime.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-serve-hostname.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-serve-port.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-serve-readiness-timeout-6321.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-serve-startup-time.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-serve-stop-command.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-serve-version-banner.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-server-commands.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-sessions-commands.test.ts",["42654","42655","42656","42657","42658","42659","42660","42661","42662","42663","42664","42665"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-setup-command.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-setup-opencode-nested-alias-7682.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-setup-opencode.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-simulate.test.ts",["42666","42667","42668","42669","42670","42671","42672","42673","42674","42675","42676","42677","42678"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-skills-commands.test.ts",["42679","42680","42681","42682","42683","42684","42685","42686","42687","42688","42689","42690","42691","42692","42693","42694","42695","42696","42697","42698","42699","42700"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-spinner.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-sqlite-bindings-not-found-7868.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-sqlite-no-fallback-7586.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-stop-supervisor-respawn-9455.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-storage-key-bootstrap.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-storage-key-provision.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-stream.test.ts",["42701","42702","42703","42704","42705","42706","42707","42708","42709","42710","42711","42712","42713"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-sync-commands.test.ts",["42714","42715","42716","42717","42718","42719","42720","42721","42722","42723","42724","42725","42726","42727","42728","42729","42730","42731","42732","42733","42734"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tags-commands.test.ts",["42735","42736","42737","42738","42739","42740","42741","42742","42743","42744","42745","42746","42747","42748","42749","42750","42751"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-telemetry-commands.test.ts",["42752","42753","42754","42755","42756","42757"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tool-detector-imports.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tools-auth-hardening.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tools-crush.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tools-i18n.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tools-keys-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tools-schema.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tools-settings-jsonc.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-translator-commands.test.ts",["42758","42759","42760","42761","42762","42763","42764","42765","42766","42767","42768","42769","42770","42771","42772","42773"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tray-systray2.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tray.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-tui.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-update-global-paths-3295.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-update-notifier.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-update-prefer-online-4376.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-update-shadow-install-9475.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-usage.test.ts",["42774","42775","42776","42777","42778","42779","42780","42781","42782","42783","42784","42785","42786","42787","42788","42789","42790"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-version-fastpath.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-waitForServer.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cli-webhooks-commands.test.ts",["42791","42792","42793","42794","42795","42796","42797","42798","42799","42800","42801","42802","42803","42804","42805","42806","42807","42808","42809","42810","42811","42812","42813"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cliRuntime-codex-shebang-8036.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cliRuntime-symlink-escape-7753.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/client-identity-profiles.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cline-catalog-models-3321.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cline-force-stream.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cline-response-envelope.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cline-workos-auth-token-shape.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/clinepass-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/clinepass-thinking-budget.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cliproxy-auth-import-1934.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cliproxyapi-dedicated-credential-7645.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cliproxyapi-executor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cliproxyapi-fallback-wiring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cliproxyapi-model-mapping-dispatch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-agent-cors-failclosed.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-agent-credentials-api.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-agent-credentials.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-agent-cursor-4227.test.ts",["42814","42815"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-agent-health-api.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-agent-tasks-route-auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloud-write-auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudAgent-types.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudflare-ai-catalog-8717.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudflare-ai-image-parts-6390.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudflare-ai-neuron-exhaustion-6980.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudflare-models-uuid-4259.test.ts",["42816","42817","42818"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudflare-worker-upload-content-type-6416.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudflaredTunnel-extended.test.ts",["42819","42820","42821"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cloudflaredTunnel.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/code-assist-subscription.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codebuddy-cn-provider.test.ts",["42822","42823","42824"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codebuddy-reasoning-optin.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-auth-import-expiry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-auth-import-userid-dedup-6301.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-banked-reset-credits-5199.test.ts",["42825","42826","42827","42828","42829","42830","42831"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-base-url.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-cache-key.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-capacity-limit-merge.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-catalog-revalidation-runtime.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-catalog-revalidation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-compact-strip-include-6805.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-config-hooks-migration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-connection-defaults.test.ts",["42832","42833","42834","42835","42836","42837","42838","42839","42840","42841","42842","42843","42844","42845","42846","42847"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-connection-edit-6562.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-custom-tool-image-output-7698.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-device-flow-tickets.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-device-flow.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-drop-nonstandard-events.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-effort-alias-priority.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-effort-model-echo-3697.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-executor-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-failover.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-fast-tier.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-finalize-tokens.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-free-plan-image-generation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-gpt55-effort-routing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-gpt55-routing-5887.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-gpt56-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-import-refresh-validation-7522.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-import-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-import-token-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-manual-refresh-rotating-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-models-catalog-refresh.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-oauth-refresh-persist-6352.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-oauth-remote-host-hint-7523.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-orphaned-tool-outputs-2928.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-peek-nonsse-body-untouched-7536.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-plan-label-2570.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-profile-auto-sync-gate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-quota-fetcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-quota-selection-hydration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-quota-sync-no-proactive-refresh.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-reset-credits.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-responses-passthrough-strip-3317.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-responses-ws-memory.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-responses-ws-model-resolution.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-session-affinity-reset-aware-5903.test.ts",["42848"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-session-json-import-6636.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-spark-image-generation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-sse-capacity-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-sse-peek-body-double-read.test.ts",[],["42849"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-stream-false.test.ts",["42850","42851","42852","42853"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-synced-bare-model-routing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-system-message-image-8089.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-tool-card-button-state.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-tools-regex-lookaround.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-tools-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-usage-quotas-latent-window.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-usage-quotas-review-window.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-usage-windows.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-verbosity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-ws-http-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codex-ws-policy-enforcement-6564.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codexAuthFile.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codexAuthImport.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codexAuthImportBulk.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codexAuthZipExtract.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/codexBulkImport.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/collect-metrics-module-coverage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/colocate-optionals.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/auto-quota-cutoff.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/auto-status-penalty-4540.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/combo-context.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/combo-exhausted-skip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/combo-failure-tracker-session-isolation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/combo-failure-tracker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/combo-target-exhaustion.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/combo-target-timeout-standards.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/context-requirements-integration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/effective-max-concurrency.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/pin-recovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/quota-share-concurrency.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/recovery-hint.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo/strict-context-failopen-8786.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-499-abort.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-account-allowlist-3266.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-antigravity-missing-project-reset-8486.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-apply-strategy-ordering-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-attempt-body-isolation-7847.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-auto-candidate-expansion.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-auto-config-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-auto-promote.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-body-specific-400-stop-4279.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-bracket-names.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-breaker-429.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-builder-draft.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-builder-effort-variants-8072.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-builder-eligible-connection-2057.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-builder-fingerprint-expansion.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-builder-model-source-5477.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-builder-opencode-prefix.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-builder-options-route.test.ts",["42854","42855","42856","42857","42858"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-cache-invalidation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-cleanup-stale-connection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-context-length.test.ts",["42859","42860"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-context-prefix-resolution.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-context-relay.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-context-requirements.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-context-window-filter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-control-center.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-cooldown-retry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-cost-blending.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-custom-provider-resolution.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-description-5005.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-diagnostics-trace.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-disable-session-stickiness.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-dispatch-prelude.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-empty-content-failover-5085.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-failure-log-message.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-fallback-token-estimate-7847.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-fingerprint-expansion.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-fingerprint-pin-6696.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-flatten-anthropic-tool-messages.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-forecast.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-fusion-config-warn-6455.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-fusion-strategy-comboref-6764.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-fusion-strategy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-headroom-ranking.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-headroom-strategy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-health-dashboard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-health-route.test.ts",["42861","42862","42863"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-hedging.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-hidden-leaf-routing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-id-resolution-4446.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-input-bound-failure-8375.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-input-bound-heterogeneous-8375.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-least-used-account.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-lockout-quota-reset-6863.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-max-depth-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-model-lockout-honors-reset-1308.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-model-name-collision-8530.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-model-scoped-400-advance.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-name-codex-responses-rewrite.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-omnimodel-tag-stripping.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-param-validation-fallback-4519.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-pin-health-gate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-pipeline-strategy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-pipeline.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-prescreen.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-priority-quota-exhaustion-cutoff-5923.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-projection-capabilities-3979.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-provider-cooldown-sibling.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-provider-cooldown.test.ts",["42864","42865","42866"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-provider-diversity-wiring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-provider-wildcard.test.ts",["42867","42868","42869","42870","42871","42872","42873","42874","42875","42876","42877","42878","42879","42880","42881","42882","42883","42884"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-proxy-assignments-parse-7149.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-quality-validator-reasoning.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-quota-share-cooldown-wait.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-quota-soft-penalty.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-resolve-auto-strategy-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-resource-404-health.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-response-validation-failover.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-response-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-responses-sse-failure-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-round-robin-streaming-lock-3811.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-roundrobin-compat-fallback-6238.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-routes-composite-tiers.test.ts",["42885","42886","42887","42888","42889","42890","42891","42892","42893","42894"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-routing-engine.test.ts",["42895","42896","42897","42898","42899","42900","42901","42902","42903","42904","42905","42906","42907","42908","42909","42910","42911","42912","42913","42914","42915","42916","42917","42918","42919","42920","42921","42922","42923","42924","42925","42926","42927","42928","42929","42930","42931","42932","42933","42934","42935","42936","42937","42938","42939","42940","42941","42942","42943","42944","42945","42946","42947","42948","42949","42950","42951","42952","42953","42954","42955","42956","42957","42958","42959","42960","42961","42962","42963","42964","42965","42966","42967","42968","42969","42970","42971","42972","42973","42974","42975","42976","42977","42978","42979","42980","42981","42982","42983","42984","42985","42986","42987","42988","42989","42990","42991","42992","42993","42994","42995","42996","42997","42998","42999","43000","43001","43002","43003","43004","43005","43006","43007","43008","43009","43010","43011","43012","43013","43014","43015","43016","43017","43018","43019","43020","43021","43022","43023","43024","43025","43026","43027","43028","43029","43030","43031","43032","43033","43034","43035","43036","43037","43038","43039","43040","43041","43042","43043","43044","43045","43046","43047","43048","43049","43050","43051","43052","43053","43054","43055","43056","43057","43058","43059","43060","43061","43062","43063","43064","43065","43066","43067","43068","43069","43070","43071","43072","43073","43074","43075","43076","43077","43078","43079","43080","43081","43082","43083","43084","43085","43086","43087","43088","43089","43090","43091","43092","43093","43094","43095","43096","43097","43098","43099","43100","43101","43102","43103","43104","43105","43106","43107","43108","43109","43110","43111","43112","43113","43114","43115","43116","43117","43118","43119","43120","43121","43122","43123","43124","43125","43126","43127","43128","43129","43130","43131","43132","43133","43134","43135","43136","43137","43138","43139","43140","43141","43142","43143","43144","43145","43146","43147","43148","43149","43150","43151","43152","43153","43154","43155","43156","43157","43158","43159","43160","43161"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-rr-fallback-advance-948.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-rr-session-stickiness-3825.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-rr-sticky-9router.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-runtime-unit-concurrency.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-same-provider-cascade.test.ts",["43162"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-scope-proxy-dead-7149.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-scoring-inspector.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-select-all-batch-8526.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-selected-connection-success.test.ts",[],["43163","43164","43165","43166","43167","43168","43169","43170","43171","43172","43173","43174"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-session-stickiness.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-sessionless-pin-3825.test.ts",["43175","43176","43177","43178","43179","43180","43181","43182","43183","43184","43185","43186","43187","43188","43189","43190","43191"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-skip-conn-disable-plugin-block-7806.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-speed-telemetry-6875.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-stickiness-responses-input-7270.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-strategies.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-strategy-fallbacks.test.ts",["43192","43193","43194","43195","43196","43197","43198","43199","43200","43201","43202","43203","43204","43205","43206","43207","43208","43209","43210","43211","43212","43213","43214","43215","43216","43217","43218","43219","43220","43221","43222","43223","43224"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-stream-readiness-fallback.test.ts",["43225","43226","43227","43228","43229","43230","43231","43232","43233","43234","43235","43236","43237","43238","43239","43240","43241"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-streaming-empty-content-failover.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-streaming-openai-no-finish-reason-7285.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-strict-random-distribution-3959.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-target-defensive-modelstr.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-target-resolution-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-target-timeout-runner.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-target-token-limit-8716.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-task-aware.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-test-health.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-test-route.test.ts",["43242","43243","43244","43245","43246","43247","43248","43249","43250","43251"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-thinking-disabled-fable5-3554.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combo-vision-aware-routing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/combos-quota-protected.test.ts",["43252","43253","43254","43255"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/comfyui-baseurl-override-6928.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/command-code-auth-assist.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/command-code-executor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/command-code-maxtokens-negative-5166.test.ts",["43256","43257","43258"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/command-code-mimo-v2-5-safety.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/command-code-registry-vision.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/command-code-user-array-5166.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/command-code-vision.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/commandClassification.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/completions-body-model-echo.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/completions-provider-removed.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/completions-text-format-3571.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/complexity-aware-scoring-wiring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/complexity-router.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compliance-audit-route.test.ts",["43259"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compliance-index.test.ts",["43260","43261","43262","43263","43264"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compliance-noLog-cycle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compose-redis-loopback-bind.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/composer-tool-calls.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/composite-tiers-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/active-combo-dispatch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/active-combo-integration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/adaptive-chatcore-source-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/adaptive-compute-target.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/adaptive-context-budget-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/adaptive-panel-target.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/adaptive-resolve-plan.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/adaptive-select-plan-wiring.test.ts",["43265","43266","43267"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/aggressive-fidelity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/aggressive.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/applycompression-bailout-optin.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/bailout.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/benchmark.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/body-adapter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/cache-aware-preserve-mode.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/cachingAware.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-db.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-dedup.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-engine.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-hedging.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-preservation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-rules.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-structural.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/caveman-v379.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/cavemanSharedBoundaries.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-cross-tenant.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-eviction-scope-9146.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-marker-retrieve.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-mcp-integration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-mcp-principal-5649.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-non-mcp-full-prompt-loss-7746.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-retrieval-ramp.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccr-skip-tool-outputs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccrQuery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ccrRanged.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/codestripper-lazy-ts-7096.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/codex-responses.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/combos-engine-ui-schema-parity-4955.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compareRoute.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-aggressive.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-benchmark-cli.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-budget-gate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-combos-db.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-engines-map-migration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-header-dispatch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-preview-api.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-preview-auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-registry-clear.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-step-streaming.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compression-tool-cardinality-env.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compressionAnalytics.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compressionAnnotation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compressionChannel.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/compressionMcpTools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/context-compression-api.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/context-editing-telemetry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/context-editing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/db.test.ts",["43268","43269","43270","43271","43272","43273","43274","43275","43276","43277","43278","43279","43280","43281","43282","43283"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/derive-default-plan.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/derived-pipeline-integration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/diffHelper.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/encoderComparison.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/engine-breakdown-synthesis.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/engine-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/engine-enabled-toggle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/engine-guidance-7530.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/engine-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-aggregate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-corpus.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-cost-meter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-grader.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-judge.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-report.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-runner.test.ts",["43284"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-savings.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-seed-corpus.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/eval-selftest.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/fidelityCheck.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/fidelityGate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/fidelityGateStacked.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/fidelityGateTypes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/fuzzyDedup.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/gcf-benchmark.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/gcf-inline-array-quote.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/golden-eval.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/hard-budget.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/harness.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/headroom-developer-role-2132.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/headroom-minrows-persist-8056.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/headroom-smartcrusher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/heatmap-build.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/image-aware-tokens.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ionizerEngine.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ionizerGateSkip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ionizerSample.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/language-detect-select.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/language-packs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/lite.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/live-zone.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/llm-compressor-engine.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/llmlingua-failopen.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/llmlingua-model-store.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/llmlingua-ultra-entry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/llmlingua-worker-resolution.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/llmlingua-worker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/mcp-accessibility-config.test.ts",[],["43285","43286","43287"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/mcp-description-compressor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/mcpAccessibility-anchors.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/mcpAccessibility-clamp.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/mcpAccessibility-config-bounds.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/mcpAccessibility.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/mode-and-pipeline.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/omniglyph-adapter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/omniglyph-chatcore-plumbing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/omniglyph-import.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/omniglyph-plumbing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/omniglyph-registries.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/omniglyph-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/omniglyph-single-mode.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/output-styles-apply.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/output-styles-backcompat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/output-styles-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/output-styles-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/output-styles-wiring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/outputMode.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/pipeline-circuit-breaker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/pipeline-integration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ponytail-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/prefix-freeze.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/preservation-redos-4795.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/preserve-system-prompt-mode-db.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/preserve-system-prompt-mode.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/preview-fallback-reasons-6461.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/preview-outer-engine-token-reconcile-6488.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/previewRouteBreakdown.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/previewRouteFidelity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/previewRouteFuzzy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/previewRouteIonizer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/previewRoutePipeline.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/previewRouteTokens.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/previewRouteToon.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/progressiveAging.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/quantumLockDetect.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/quantumLockIntegration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/quantumLockStep.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/read-lifecycle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/relevance-engine.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/relevance-scorer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/repro-6479-6491-null-stats-silent-drop.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/repro-6480-noop-guard-misfire.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/resolve-compression-plan.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/responses-orphan-tool-call.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/result-memo.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/retrieveRoute.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/retrieveRouteRanged.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/riskGateDetect.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/riskGateIntegration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/riskGateStep.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-anthropic-tool-result.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-cache-control-preserve.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-code-stripper.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-command-detector.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-command-samples.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-comments.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-custom-filters.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-deduplicator.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-discover-redos.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-dsl-pipeline.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-engine.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-file-read-no-truncate-4559.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-filter-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-filter-deduplicate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-filter-loader-resilience.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-filter-redos-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-grouping-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-grouping.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-intensity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-learn.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-line-filter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-loader-dir-resolution-5089.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-mcp-tools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-raw-output-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-raw-output.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-render-gitdiff.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-render-table.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-render-terraform.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-render-testgreen.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-renderers-integration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-smart-truncate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-strip-comments.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-toml-compatibility.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-truncate-preserve.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rtk-verify.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/rule-loader.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/session-dedup-intra-message-6467.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/session-dedup-memory-7849.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/session-dedup.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/sessionDedupFuzzy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/smartcrusherToon.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/splitCompositeCommand.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/stacked-async.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/stacked-pipeline-engines-fallback-6463.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/stats.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/strategySelector-cache-aware.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/strategySelector.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/summarizer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/toolResultCompressor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/toon.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/types.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ultra-code-preservation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ultra-slm-tier.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/ultra.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression/validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-cache-guard-3955.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-cli-rest-fallback-6571.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-exclusions.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-header-echo-6422.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-noop-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-pipeline-inflation-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-pipeline-model.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-run-telemetry-auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-settings-cache.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-tokens.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compression-unknown-engine-validation-6485.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/compute-connection-default-name-6499.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/config-hot-reload.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/connection-cache-override-6880.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/connection-level-upstream-headers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/connection-model-rules.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/connection-reorder-by-availability.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/connection-row-last-error-visibility.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/connection-row-rtl-margin.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/connection-status-filter-active-2526.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/console-log-levels.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-editing-executor-injection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-editing-relays.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-editing-streaming-telemetry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-handoff.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-manager.test.ts",["43288","43289","43290","43291","43292","43293","43294","43295","43296","43297"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-pinning-tool-calls.test.ts",["43298","43299","43300","43301","43302"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-window-reconcile-persisted-overrides.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/context-window-reconcile.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cooldown-aware-retry-budget.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cooldown-epoch-string-3954.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-agent-antigravity-parity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-codegraph-knowledge.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-free-quota-not-inverted.test.ts",["43303","43304","43305","43306"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-gemini-claude-route-no-responses.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-m365-edu-writeatcursor-6210.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-m365-enterprise-6334.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-m365-enterprise-invocation-7870.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-m365-web-executor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-m365-web-logging-6210.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-m365-web-silent-empty-7858.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-runOmniRouteCli.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/copilot-web-executor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/combo.property.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/fakeUpstreamStream.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/fixtures.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/goldenSnapshot.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/sanitizers.property.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/sse-parser.property.test.ts",[],["43307","43308"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/translation.golden.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/correctness/translators.property.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cors/origins.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cost-explorer-params.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cost-explorer-utils.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/coze-validation-error-5426.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/credential-health-active-connections-9180.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/credential-health-boot-wiring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/credential-hint-copy-3180-3091.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/credential-masker-guardrail.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/crof-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/crof-usage-fetcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/crof-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/crypto-randomuuid-polyfill.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/csp-lan-ws-5083.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-agent-cli-version.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-agent-exec-router.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-agent-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-agent-protobuf.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-agent-session.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-agent-system-prompt.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-agent-tool-calls.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-builtin-tool-bridge.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-composer-thinking.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-executor-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-image-input.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-model-effort-suffix-7289.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-protobuf-wire-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-registry-claude-families.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-streaming.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-usage-fetcher.test.ts",["43309"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/cursor-version-detector.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/custom-cli-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/custom-endpoint-paths.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/custom-endpoint-system-prompt.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/custom-headers-provider-nodes.test.ts",["43310","43311","43312","43313","43314","43315"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/custom-model-target-format.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/custom-provider-combo-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dahl-manual-api-key.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dahl-provider-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dahl-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dahl-tokens-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/agentrouter-connection-modal-fields.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/components/BatchDetailModal.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/components/ExpirationBadge.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/components/NewBatchWizard.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/components/ProgressBarBicolor.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/components/UploadFileModal.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/components/useBatchActions.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/concept-cards.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/list-regression.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/batch/sanitization.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/context-parent-redirect-5298.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/crypto-randomuuid-polyfill.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/hydration-extension-attrs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/material-icons-self-hosted.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providerPageStorage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providers/services/api-key-field.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providers/services/auto-start-toggle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providers/services/cliproxy-model-mapping.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providers/services/cliproxy-tab.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providers/services/mux-tab.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providers/services/ninerouter-tab.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard/providers/services/page.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard-localization-contract.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard-shell-tabs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashboard-sidebar-desktop-visible.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashscope-cache-control-openai-2069.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dashscope-text-models-discovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dast-method-not-allowed.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/data-dir-writable-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/database-settings-maintenance.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/api-keys.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/compressionRunTelemetry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/context-editing-telemetry-record.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/default-combo-toggle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/discovery-results.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/encryption-error-handling.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/migration-071.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/no-migration-collisions.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/notion.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/obsidian.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/omp.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/per-engine-analytics.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/per-engine-breakdown-analytics.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/quota-pools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/repositories/sqliteComboRepositories.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/serviceModels.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/stats-virtual-table.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/vacuum-scheduler.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db/weak-rng-fixes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-adapters/betterSqliteAdapter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-adapters/bunSqliteAdapter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-adapters/cliSqlite.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-adapters/driverFactory.test.ts",[],["43316","43317"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-adapters/nodeSqliteShared.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-adapters/sqljsAdapter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-agent-bridge-bypass.test.ts",["43318"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-agent-bridge-mappings.test.ts",["43319"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-agent-bridge-state.test.ts",["43320"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-api-key-groups.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-apiKeys-crud.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-backup-autobackup-setting-5871.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-backup-extended.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-backups-skills-3500.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-call-log-stats-3500.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-case-mapping-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-cleanup-xp-audit-log.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-cleanup.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-cli-tool-state.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-combos-crud.test.ts",["43321","43322","43323","43324","43325","43326","43327","43328","43329"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-command-code-auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-compression-cache-stats.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-context-handoffs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-core-extended.test.ts",["43330","43331","43332","43333","43334"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-core-init.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-core-migration.test.ts",["43335","43336","43337","43338","43339","43340","43341"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-core-native-error.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-core-temp-store-pragma.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-core.test.ts",["43342","43343","43344","43345"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-credit-balance.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-detailed-logs.test.ts",["43346","43347","43348","43349"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-domainState-crud.test.ts",["43350","43351","43352","43353","43354"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-driver-bundling-externals.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-driver-logs-english-5103.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-encryption.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-gamification-federation-3500.test.ts",["43355"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-health-check.test.ts",["43356","43357","43358","43359","43360","43361","43362","43363","43364","43365","43366","43367","43368","43369","43370","43371","43372","43373","43374","43375","43376","43377","43378","43379","43380","43381","43382","43383","43384"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-health-route.test.ts",["43385","43386","43387","43388","43389","43390","43391"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-import-ebusy-5406.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-import-max-size-4719.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-import-resilient-driver-3025.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-inspector-custom-hosts.test.ts",["43392"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-inspector-sessions.test.ts",["43393"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-logs-cache-3500.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-middleware.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-migration-runner-account-identity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-migration-runner-extra-dirs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-migration-runner.test.ts",["43394","43395","43396","43397","43398","43399","43400","43401","43402","43403","43404","43405"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-migration-version-uniqueness.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-migrationrunner-constants-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-model-aliases-cascade.test.ts",["43406"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-model-context-overrides.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-models-crud.test.ts",["43407","43408"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-models-extended.test.ts",["43409","43410","43411","43412","43413"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-models-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-playground-presets.test.ts",["43414"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-provider-cookie-dedup-3368.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-provider-daily-usage-4009.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-provider-limits.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-provider-plans.test.ts",["43415"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-provider-stats.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-providers-access-token-1290.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-providers-cross-idp-dedup-2244.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-providers-crud.test.ts",["43416","43417","43418","43419","43420","43421","43422","43423","43424","43425","43426","43427","43428","43429","43430","43431","43432","43433"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-providers-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-proxies-crud.test.ts",["43434","43435","43436","43437","43438","43439"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-proxies-family.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-proxies-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-quota-consumption.test.ts",["43440"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-quota-migrations-idempotency.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-quota-pools.test.ts",["43441"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-quota-snapshots.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-read-cache.test.ts",["43442"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-recovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-registered-keys.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-registeredKeys-crud.test.ts",["43443","43444","43445","43446","43447","43448","43449","43450"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-reset-module-state.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-schema-columns-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-secrets.test.ts",["43451"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-session-account-affinity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-settings-crud.test.ts",["43452","43453","43454","43455","43456","43457","43458","43459","43460","43461","43462","43463","43464","43465","43466","43467","43468","43469","43470","43471"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-settings-extended.test.ts",["43472","43473","43474","43475","43476","43477","43478"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-settings-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-sqljs-close-poison-7494.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-sqljs-preinit-ordering-gap-7288.test.ts",[],["43479"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-state-reset.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-sync-tokens.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-tier-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-upstreamProxy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-usage-analytics-3500.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-usageanalytics-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-versionManager.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/db-webhooks.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ddg-circuit-breaker-null-content-6999-7000.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/decrypt-stale-key-hint-6148.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-pow-solver-strict.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-quota-fetcher.test.ts",["43480","43481","43482","43483","43484","43485","43486","43487"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-autorefresh-401-response.test.ts",["43488","43489","43490","43491"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-executor-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-rolling-window-2942.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-session-persistence-2942.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-tool-result-prompt-4712.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-tools-execute-2820.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-tools-execute.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-tools-nameless-5154.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web-tools-variants.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deepseek-web.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/default-reasoning-effort-6879.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/default-url-normalizers-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/delete-provider-connection-purges-key-health-7740.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/deno-deploy-relay-path-ssrf.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/derive-discovery-config-5087.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/design-grid-background.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/designer-web-empty-response-502.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dev-ensure-native-sqlite.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dev-origins-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dev-script-heap-limit.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/device-tracker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/devin-bridge-live-runtime.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/devin-bridge-network-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/devin-cli-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/devin-cloud-agent-validator-6142.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dgrid-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/diagnostics-claude-thinking-5108.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/diagnostics.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/digitalocean-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/direct-dispatcher-pipelining-4580.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/discontinued-providers-2026.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/display-and-error-utils.test.ts",["43492","43493","43494","43495"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dns-config-generic.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/docker-base-path-patch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/docker-ensure-base-path.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/docker-healthcheck-3151.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/docker-healthcheck-base-path.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/docker-llmlingua-optionals-9166.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dockerfile-base-path-arg.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dockerfile-better-sqlite3-node-gyp-6700.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dockerfile-build-heap-4076.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/dockerignore-docs-coverage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/docs/skillManifestsLint.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/domain-branch-hardening.test.ts",["43496"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/domain-cost-rules.test.ts",["43497","43498","43499"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/domain-degradation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/domain-fallback-policy.test.ts",["43500"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/domain-lockout-policy.test.ts",["43501"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/domain-persistence.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/droid-custom-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/duckduckgo-challenge-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/duckduckgo-domain-4037.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/duckduckgo-vqd-429-misclassification-6996.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/duckduckgo-web-executor.test.ts",["43502","43503","43504","43505","43506","43507","43508","43509"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/duckduckgo-web-model-catalog-8000.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/early-stream-keepalive.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/earlyStreamKeepalive.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/edgetts-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/effort-thinking-standardization-6241.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-main.test.ts",["43510","43511"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-packaging.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-preload.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-processtree.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-rebuild-spawn-win.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-release-desktop-channel-8949.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-remote-server.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-resolve-node-executable-7941.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-resolve-server-entry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/electron-smoke-script.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embed-ws-host-empty-messages-5110.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embedding-family-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embedding-rerank-provider-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-combo-dimensions.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-combo-family-reject.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-cost-telemetry-headers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-flatten-single-row-9089.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-gemini-dimensions.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-handler.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-lan-noauth-6925.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-multimodal-7956.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-nvidia-input-type.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-proxy-forwarding.test.ts",["43512"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/embeddings-route-apikeymeta-6929.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/emergency-fallback-service.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/empty-choices-no-inject.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/empty-content-stopreason-3572.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/empty-response-hardening.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/empty-stream-no-content-8649.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/empty-tool-name-loop.test.ts",["43513","43514","43515","43516","43517","43518","43519","43520"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/encrypted-reasoning-summary-7243.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/encryption.spec.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/endpoint-categories.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/endpoint-restrictions-policy.test.ts",["43521","43522","43523"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/env-docs-input-sanitizer-8093.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/error-boundary-stack.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/error-classification.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/error-classifier.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/error-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/error-message-sanitization.test.ts",["43524","43525","43526","43527","43528","43529","43530","43531","43532","43533","43534","43535","43536","43537","43538","43539","43540","43541","43542"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/error-sensitive-redaction.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/errorClassifier-noauth-403-6315.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/errorclassifier-antigravity-403.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/eslint-import-boundaries.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/estimateSizeFast.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/evalrunner-builtinsuites-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/evals-history.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/evals-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/event-bus.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/eviction-guards-apiKeyRotator.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/eviction-guards-codexQuotaFetcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/execute-chat-resource-pressure-breaker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-adapta-web.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-agy.test.ts",["43543"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-antigravity-credits.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-antigravity-protocol.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-antigravity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-azure-ai-responses.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-base-utils.test.ts",["43544","43545","43546","43547","43548"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-bedrock.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-claude-identity.test.ts",["43549","43550","43551"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-cloudflare-ai.test.ts",["43552","43553","43554","43555"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-codex-gpt56-lite-ultra.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-codex-gpt56.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-codex.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-command-code.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-deepseek-web-auto-refresh.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-default-anthropic-auth-8653.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-default-anthropic-compatible-bearer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-default-base.test.ts",["43556","43557","43558","43559","43560","43561","43562","43563","43564","43565","43566","43567","43568","43569","43570","43571","43572","43573","43574","43575","43576","43577","43578","43579","43580","43581","43582","43583","43584","43585","43586","43587","43588","43589","43590","43591","43592","43593","43594","43595","43596","43597"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-default-strip-client-metadata.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-devin-cli-acp-protocol-8406.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-devin-cli-agentic-acp.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-devin-cli-agentic-core.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-devin-cli.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-doubao-web.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-firecrawl-fetch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-github-prefill-sanitize.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-github.test.ts",["43598","43599","43600","43601","43602","43603","43604"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-gitlab.test.ts",["43605","43606","43607","43608"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-hailuo-web.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-huggingchat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-hyperagent.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-inner-ai.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-kimi-web-decoder.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-kimi-web.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-kimi.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-kiro.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-nlpcloud.test.ts",["43609","43610"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-notion-web-thread-sessions.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-notion-web.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-nous-research.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-poe-web.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-pollinations.test.ts",["43611","43612","43613","43614"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-promptql.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-puter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-qwen-web.test.ts",["43615","43616","43617","43618","43619","43620","43621","43622","43623","43624","43625","43626","43627","43628","43629","43630","43631","43632","43633","43634","43635","43636","43637","43638","43639","43640","43641","43642","43643","43644","43645","43646","43647","43648","43649","43650","43651","43652","43653","43654"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-strip-stainless-openai-compat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-tinyfish-fetch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-v0-vercel-web.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-venice-web.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-vertex-extended.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-web-cookie-sweep.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-xai.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executor-zai-web.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/executors-strip-unsupported-params.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/export-json-hide-paid-combos-6328.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/factory-provider-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/faulty-upstream.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-flags-settings.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-triage/args.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-triage/classify.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-triage/delivered.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-triage/frontmatter.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-triage/integration.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-triage/lifecycle.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/feature-triage/resync.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/featured-providers-rank.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/felo-web-executor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fetch-error-message.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fetch-timeout.test.ts",["43655","43656","43657","43658","43659","43660","43661"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/field-400-downgrade.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/file-deletion.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/file-expiration-policy.test.ts",["43662","43663"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/finishReason.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/firecrawl-executor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/firecrawl-quota-fetcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/firecrawl-search.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/firecrawl-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fireworks-model-id-prefix.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fix-2130-system-passthrough.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fix-bare-model-precedence.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fix-bare-routing-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fix-error-message-candidates.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fix-synced-model-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fix-tls-client-node-binary-7802.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fix-tool-adjacency.test.ts",["43664","43665","43666","43667"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fixes-p1.test.ts",["43668","43669","43670","43671","43672","43673","43674","43675","43676","43677","43678","43679","43680","43681","43682","43683","43684","43685","43686","43687"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/flat-rate-cost-5552.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/format-provider-error-cause.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/format-reset-countdown.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/formatting-public-surface.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/forwarded-header-budget.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-catalog-2026-07-expansion.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-model-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-note-freshness.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-provider-rankings-custom-models-6368.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-providers-batch-2026-07.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-proxies-add-to-pool.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-proxies-db.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-proxies-list-search.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-proxy-auto-sync-scheduler.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-proxy-providers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-proxy-sync-cycle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-tier-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-tier-providers-wave1-b.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-tier-providers-wave1-c.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-tier-summary-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-tier-used-this-month.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/free-web-search.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/freeProviderRankings-authtype-6915.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/freeProviderRankings-filters.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/freeProviderRankings.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/freemodel-quota-fetcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/freepik-image-handler.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/functional-gateway-mirrors-append.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/functional-gateway-mirrors-db.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/functional-gateway-predicate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fusion-judge-model-6455.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fusion-judge-own-intelligence.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fusion-judge-survivor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fusion-panel-size-cap-1905.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fusion-partial-panel-failure-6454.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/fusion-tools-bypass-6771.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/g13-combo-chatcore-golden.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/g4f-space-gateway-6650.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/aggregate-profile-3484.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/antiCheat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/badge-unlock-once-3472.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/badges.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/db-gamification.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/events.test.ts",["43688"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/federation-auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/invites.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/leaderboard.test.ts",["43689","43690","43691"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/sharing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/streaks.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification/xp.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gamification-display-contract.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-antigravity-pattern-preserved.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-business-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-cli-ansi-sanitization.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-cli-deprecation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-cli-legacy-refresh.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-finish-reason-normalization.test.ts",["43692","43693","43694"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-helper-audio-input-912.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-helper-http-image-url-port344.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-helper.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-imagen-predict.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-malformed-function-call-finish-reason-2462.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-midstream-error-4177.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-midstream-nonstreaming-responses.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-midstream-responses.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-models-parser.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-multipleof-2309.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-signatureless-text-mode.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-strict-tool-schema.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-thinking-budget-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-thinking-budget-zero-6813.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-to-openai-function-response.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-tool-choice.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-tool-params-object-3357.test.ts",["43695","43696"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-web-cookie-rotation-7676.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-web-missing-browser-3516.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-web-multiturn-context-8371.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-web-tool-calling-7286.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gemini-web.test.ts",["43697","43698","43699","43700","43701","43702","43703","43704"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gen-contributors.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/generic-quota-fetcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ghe-copilot-targetformat-parity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ghe-copilot.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-claude-reasoning-effort-granular.test.ts",["43705","43706","43707","43708","43709","43710","43711","43712","43713"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-collector.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-copilot-claude-native-messages.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-copilot-gpt-4o-mini.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-copilot-model-discovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-copilot-retired-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-models-curated-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-models-request-compat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-skill-tools-mcp.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/github-skills-route-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gitlab-duo-oauth-setup-8688.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gitlab-duo-toolcalls-6051.test.ts",["43714","43715","43716","43717","43718","43719"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gitlab-tool-exchange-bounded-6220.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gitlab-tool-result-feedback-6220.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gitlawb-provider.test.ts",["43720","43721"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/glm-executor-max-tokens-clamp-7364.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/glm-executor.test.ts",["43722","43723","43724","43725","43726","43727","43728","43729","43730","43731","43732","43733","43734","43735","43736","43737","43738","43739","43740"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/glm-provider-model-import-route.test.ts",["43741","43742","43743"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/glm-team-quota.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/glm-think-close-marker-leak.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/glob-pattern-6540.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/global-package-path.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/google-flow-video-4569.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gpt-max-input-tokens-6191.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gpt5-sampling-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gpt5-tools-reasoning-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gptoss-provider-inference-5852.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/graceful-shutdown-sighup-8045.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-auth-json-paste-7610.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-device-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-function-call-output-sanitize-7611.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-oauth-test-supported-7610.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-oauth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-proactive-refresh-7610.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-provider-limits-ui.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-provider-limits.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-proxy-selection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-quota-fetcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-quota-frame.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-reasoning-strip-6288.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-responses-compat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-cli-strip-params.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-quota-fetcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-web-cloudflare-classification.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-web-executor-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grok-web.test.ts",["43744","43745","43746","43747","43748","43749","43750","43751","43752","43753","43754","43755","43756","43757","43758","43759","43760","43761","43762","43763","43764","43765","43766","43767","43768"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/grokweb-cookie-ua-hint-7567.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/groq-field-strip-wiring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/group-provider-permission.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/gtts-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/injection-extraction.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/injection-route-coverage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/vision-bridge-callmodel.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/vision-bridge-sse-and-reasoning.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/visionBridge.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/visionBridgeHelpers.callVisionModel.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/visionBridgeHelpers.extractImageParts.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/visionBridgeHelpers.replaceImageParts.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/visionBridgeHelpers.resolveImageAsDataUri.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails/visionBridgeRouter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails-api-3496.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guardrails-void-no-change-contract.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guide-settings-apikey-null-3552.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/guide-settings-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/hcnsec-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/head-request-closes-6400.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/head-request-v1-models-6400.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/headers-normalize.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/headroom-codex-quota-snapshot-6379.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/headroom-detect.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/headroom-proxy-lifecycle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/headroom-responses-format.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/health-ping-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/healthMonitor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/healthz-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/heap-autocalibrate-5172.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/heap-benchmark-corpus.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/heap-pressure.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/hf-model-suggestions.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/hide-paid-models-settings-schema.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/home-no-autorouting-banner.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/home-page-client-hook-imports-4759.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/home-provider-topology-default-4596.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/home-provider-topology-live-state.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/homolog-admin-client.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/homolog-parity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/homolog-promptfoo-ctrf.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/homolog-provider-tiers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/homolog-sse-parser.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/huggingchat-jsonl-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/huggingchat-model-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-block-extra-usage-copy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-cli-namespaces.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-detect-browser-locale.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-glossary-consistency-check.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-hardcoded-pt-dashboard-6761.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-missing-placeholder-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-nest-dotted-keys.test.ts",["43769","43770","43771","43772"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-provider-filter-keys-6290.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-provider-visibility-filter-keys-6694.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-pt-br.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-quota-share-english.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-ui-value-drift.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/i18n-vi-completeness.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/idempotency-fusion-collision.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/idempotency.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-compat-node-alias-shadow.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-edits-multipart-3273.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-generation-baseurl-3205.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-generation-fetch-timeout.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-generation-handler.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-generation-route-auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-generation-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-model-not-in-chat-catalog-6457.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-registry-gpt56.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-routes-combo-edits-3214-3215.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-text-to-image-modality.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/image-upscale.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inclusionai-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/injection-guard-scan-bound-3932.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/injection-system-prompt-leak-heuristic-4041.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inner-ai-find-model.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/input-sanitizer-pii-redaction.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-agent-bridge-hook.test.ts",["43773","43774","43775"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-buffer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-context-key.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-conversation-normalizer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-har-export.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-http-proxy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-kind-detector.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-llm-metadata.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-pricing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-process-attribution.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-sse-merger.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-system-proxy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/inspector-types.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/instrumentation-database-closed-6560.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/instrumentation-live-ws.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/instrumentation-node-boot-db-failure.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/instrumentation-process-title.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/instrumentation-warm-catalog-cache.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/intent-classifier-pipeline.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/intercept-fetch-resolver.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/interception-rules.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/internal-service-auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/internal-usage-command.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ip-filter-persistence-6131.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ip-filter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ipUtils.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/isLocalStreamLifecycleError-abort-shape.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/isolate-datadir.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-6343-v0-web-alias-collision.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-6623-opencode-mimo-reasoning-details-nonstream.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-6638-ollama-quota.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-6662-repro.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-6686-quota-preflight-coverage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-7071-ollama-session-quota.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-7284-connection-test-masks-429.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-7705-tool-use-id-mismatch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-7793-env-doc-sync-repro.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-7856-copilot-reasoning-text-nonstream.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-7859-gemini-web-redirect-valid.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-9407-gemini-web-validation-false-positive.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-agent-audit.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-agent-execution.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-agent-github-export.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-agent-route-execution.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-agent-runner.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-agent-runs-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/issue-fixes-v3.7.9.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/jina-reader-executor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/json-migration-combos.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/json-size-exactness.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/json-to-sse-3089.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/keepalive-cleanup-8140.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/keepalive-threshold.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kenari.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/key-health-402-disable-5239.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kie-audio-transcription-result.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kie-executor-routing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kie-task-helpers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kilocode-anonymous-fallback-4019.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-cn-region-baseurl.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-coding-apikey-quota-4435.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-coding-model-discovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-coding-translator.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-combo-preset.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-k2.7-code-registration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-native-reasoning-injected-1480.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-partner-aff-links.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-quota-reset-recovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-sponsor-banner-version-gate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kimi-web-models-discovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-api-key-route-helpers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-api-key-service.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-auto-import-idc-2059.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-auto-import-name-dedup-3615.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-available-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-builder-id-import-3333.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-catalog-real-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-claude-sonnet-5-2267.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-connection-identity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-continue-filler-5231.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-eventstream-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-external-idp.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-gpt56-family-registration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-iam-profilearn-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-iam-region.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-idc-cross-region.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-import-error-3589.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-import-overwrite-9435.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-long-tool-description-docs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-model-aliases.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-multi-account-isolation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-overage-usage-4469.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-region-ssrf-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-social-poll.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-sso-cache-direct-clientid-1253.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-streaming-finish-reason-3980.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-system-reminder-2306.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-tool-args-streaming.test.ts",["43776"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-tool-call-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-tool-schema-sanitize-1375.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-toolresult-compression.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-usage-empty-breakdown-3506.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiro-windows-auto-import-3363.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/kiroThinking.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ladder-engine-maps-6533.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/latency-stats-ttft-6875.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/launch-codex-windows-spawn-6312.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/learned-thinking-caps.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/batches/costEstimator.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/batches/csvToJsonl.test.ts",[],["43777"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/batches/retryFailed.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/batches/schemas.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/batches/validateJsonl.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/connection-cooldown-summary.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/consoleInterceptor-epipe.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/consoleInterceptor-writes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/jobs/backupScheduleJob.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/jobs/cronMatch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/machineToken.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/managementCliToken.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lib/quota-reset-events.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/limiter-lifecycle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/list-uncovered-commits.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/listCapabilities-a2a.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/live-model-catalog-reconciliation-8926.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/live-ws-cookie-parse.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/live-ws-eaddrinuse-6324.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/live-ws-public-url.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/live-ws-standalone-wiring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/livews-forward-backoff-4604.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/llama-cpp-local-url.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/llamacpp-model-delete.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/llm-selector-custom-vision-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/llm7-byteplus-models-fetch-3976.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lmarena-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lmarena-split-cookie-4271.test.ts",["43778"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/lmstudio-embedding-provider-7601.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/local-aliases-precedence.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/local-corpus-index.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/local-corpus-tools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/local-redis-runtime.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/log-export-routes.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/log-redaction.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/log-retention.test.ts",["43779","43780","43781","43782","43783","43784","43785","43786","43787","43788","43789","43790"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/log-rotation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/logenv-datadir-path-6197.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/logger-redaction-wiring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/logger-write-after-datadir-removed-6360.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/login-bootstrap-route.test.ts",["43791","43792","43793","43794","43795","43796","43797","43798","43799","43800"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/login-shell-path-3321.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/m365-bizchat-frames-4042.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/m365-connection-4042.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/m365-tier-selector-6334.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/m365-tone-model-variants.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/m365-web-token-extraction-7078.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mac-update-manifest-merge.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/machine-id.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/main-server-keepalive-timeout-7003.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/main-server-timeouts-parity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/managed-available-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/managed-model-import.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/management-auth-docs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/management-auth-hardening.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/management-password-insecure-default.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/management-password.test.ts",["43801","43802","43803","43804"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/manual-config-modal-clipboard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/maritalk-model-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mark-account-unavailable-numeric-epoch-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mask-email.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/masked-200-exhaustion-fallback-6427.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/materialize-bundled-symlinks.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp/serverSmartFilter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp/tool-cardinality.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp/tool-definition-reexport.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-connect-scope.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-extra-forward-6178.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-memory-tools-strategy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-model-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-pool-tools-3368.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-published-files-closure-3578.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-server-entry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-server-hollow-dist-deps.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-session-sweep.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-sse-response-headers-8277.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-tool-collections-shape.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-tool-count-dedup-6854.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mcp-web-fetch-tool.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/media-body-arraybuffer-backing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/media-cost-headers-handlers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/media-cost-headers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/media-provider-ordering.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory/typed-decay.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-cache-safe-injection.test.ts",["43805","43806","43807","43808"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-cache.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-embedding-cache.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-embedding-list-providers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-embedding-remote.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-embedding-resolve.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-embedding-static-potion.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-embedding-transformers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-engine-status.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-extraction.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-glm-injection.test.ts",["43809"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-needs-reindex.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-reindex-batch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-retrieval-hybrid.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-retrieval-rerank.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-retrieval-semantic.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-retrieve-preview.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-route.test.ts",["43810","43811"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-schemas-roundtrip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-settings-default.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-settings-extended.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-settings.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-stats-api.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-store-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-store.test.ts",["43812"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-summarization-older-than.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-summarization.test.ts",["43813","43814"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-system-first-6135.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-tools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vec-meta.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vectorstore-crud.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vectorstore-ensure-ready.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vectorstore-int8-quant.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vectorstore-load.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vectorstore-rrf.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vectorstore-stats.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/memory-vectorstore-upsert-self-heal.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/merge-train-plan.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/messages-count-tokens-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/microsoft-designer-web-6672.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/middleware-header-strip-5849.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/middleware-hook-sandbox-5872.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/middleware-hooks-error-sanitization.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/migration-107-quota-share-strategy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/migration-safety-abort-6260.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mimo-thinking-normalize.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mimocode-executor.test.ts",["43815","43816","43817","43818","43819","43820","43821","43822","43823","43824","43825","43826","43827","43828","43829","43830","43831","43832","43833","43834","43835","43836","43837","43838","43839","43840","43841","43842","43843","43844","43845","43846","43847","43848","43849","43850","43851","43852","43853","43854","43855","43856","43857","43858","43859","43860","43861","43862","43863","43864","43865","43866","43867","43868","43869","43870","43871","43872"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/minimax-coding-plan-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/minimax-image-provider-2482.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/minimax-m3-maxtokens.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/minimax-m3-model-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/minimax-media-servicekinds.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/minimax-thinking-signature-2706.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/minimax-tts-1043.test.ts",["43873","43874","43875","43876","43877","43878"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mistral-strip-reasoning-content-1649.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mistral-trailing-assistant.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-alias-config-shim.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-antigravity-reasoning-effort-override.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-cert-install-mode-9442.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-cert-mac-fingerprint.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-cert-migration-6684.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-cert-removal-wiring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-detection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-diagnostics.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-dns-graceful-degrade-6127.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-dnsConfig.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-forward-target.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-antigravity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-base.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-claudeCode.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-codex.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-copilot.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-cursor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-kiro.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-openCode.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-trae.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-handler-zed.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-hosts-cleanup-on-exit.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-ingest-route-sanitize.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-ingest-shim.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-manager-bypass-json.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-manager-cleanup-symmetry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-manager-repair.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-manager-stub.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-masksecrets.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-passthrough.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-privileged-steps-sudo-gate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-root-ca-leaf-issuance-6684.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-root-ca-persistence-6684.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-sanitize-headers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-server-claude-code-routing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-server-connect.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-server-loop-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-server-timeouts.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-start-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-startup-error-3606.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-stop-dns-before-kill-1809.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-stub-alias-6344.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-sudo-gate-822.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-sudo-graceful-degrade.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-system-commands-prefix-3641.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-systemCommands-no-sudo.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-targets-resolve.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-targets-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-tool-hosts.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-upstream-ca-wiring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mitm-upstream-trust.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/mixedbread-embedding-provider-6660.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modal-credential-combine.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modal-validation-model-prefill.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modalCost.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-alias-provider-resolution.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-alias-route.test.ts",["43879","43880","43881","43882","43883","43884"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-alias-seed.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-aliases-globalthis-5777.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-aliases-settings-route-selfheal.test.ts",["43885","43886","43887","43888"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-breakdown-sort-8769.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capabilities-kimi-k3-vision-8250.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capabilities-mimo-vision-override.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capabilities-mistral-vision-sync-4073.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capabilities-path-shaped-vision-8032.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capabilities-provider-unsupported-tools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capabilities-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capabilities-specialty-8016.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-capability-overrides.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-catalog-name-disambiguation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-catalog-search.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-catalog-source.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-combo-mappings-db.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-combo-mappings.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-connid-prefix-normalization-6772.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-context-override-readpath.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-cooldowns-route-auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-cooldowns-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-cross-proxy-compat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-deprecation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-discovery-reasoning-levels.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-family-fallback-notation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-intelligence-db.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-latency-stats-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-listing-capability-5420.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-lockout-decay.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-lockout-exact-cooldown-cap.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-lockout-max-cooldown.test.ts",["43889","43890","43891","43892"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-metadata-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-output-cap-synced-fallthrough-6714.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-parse.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-pricing-litellm-gap-9364.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-resolver.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-select-all-confirm-threshold-8526.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-select-hidden-map-helpers-9203.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-select-null-alias-guard-2247.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-select-passthrough-alias-485.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-spec-lookup-index-8697.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-strip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-sync-custom-preservation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-sync-route.test.ts",["43893","43894","43895","43896","43897","43898","43899","43900","43901","43902","43903","43904","43905","43906","43907","43908"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-sync-scheduler.test.ts",["43909"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-test-route.test.ts",["43910","43911","43912"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-test-runner-compression-off-6240.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-test-runner.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/model-token-limit-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-auto-combos-4164.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-block-auto-5192.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-combo-metadata.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-envkey-6406.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-exact-dup-4424.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-functional-gateway.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-hidden-combo-leaves.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-hide-paid.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-low-noise-flag.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-catalog-route.test.ts",["43913","43914","43915","43916","43917","43918","43919","43920","43921","43922","43923","43924","43925","43926","43927","43928","43929","43930","43931","43932","43933","43934","43935","43936","43937","43938","43939","43940","43941","43942","43943","43944","43945","43946","43947","43948","43949","43950","43951","43952","43953","43954","43955","43956","43957","43958","43959","43960","43961","43962","43963","43964","43965","43966","43967","43968","43969","43970","43971","43972","43973","43974","43975","43976","43977","43978","43979","43980","43981","43982","43983","43984","43985","43986","43987","43988","43989","43990","43991"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-dev-pricing-memoization-8697.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/models-test-error-shape.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modelsDevSync-extended.test.ts",["43992","43993"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modelsDevSync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modelscope-policy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modelscope-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modelsdev-specialty-keying-8017.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modelsdevsync-transform-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/moderations-handler.test.ts",["43994","43995","43996","43997","43998","43999","44000"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/modular-schemas.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/monaco-editor-import-path.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/moonshot-k3.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/morph-provider-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/multipart-body-arraybuffer-backing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/muse-spark-cookie-copy-5449.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/muse-spark-response-parser-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/muse-spark-web-continuation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/muse-spark-ws-auth-token-9502.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/music-generation-handler.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/namespace-tool-identity-integration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nanobanana-image-generation.test.ts",["44001","44002"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nanobanana-image-handler.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/native-binary-compat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/new-content-providers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/newapi-aggregator-preflight-dispatch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/newapi-aggregator-quota-fetcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/next-config.test.ts",["44003","44004","44005"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nightly-compat-node26-webpack-8090.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ninerouter-embed-port-6205.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ninerouter-executor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/no-memory-header.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/no-src-open-sse-alias.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/no-thinking-alias.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noAuthProxyResolution.relayAuth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-autocombo-allowlist.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-autocombo-exclude-7622.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-autocombo-hidden-7620.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-autocombo-lockout-7623.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-blocked-partition-5183.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-imported-models-3200.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-provider-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/noauth-proxy-resolution.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/node-runtime-support.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/non-streaming-sse-terminal-typescan-4459.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nonstream-usage-cache-tokens.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nonstreaming-gemini-family-response-projection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/normalize-base-path.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/notification-toast-coercion.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/notificationStore.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/notion-api.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/notion-thread-idor-7900.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/notion-tools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/notion-web-models-discovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/npm-publish-artifact-provenance.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/npm-runtime-deps-fumadocs-mdx-7661.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nube-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/numeric-helpers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-catalog-drift.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-minimax-m3-removed-3329.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-minimax-thinking-strip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-nim-catalog-expansion-2373.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-nim-image.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-nim-registry-6108.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-nim-validator.test.ts",["44006","44007"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-passthrough-models-6773.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-quota-phase1.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-strip-prompt-cache-key.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-tool-compatibility-2840.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-validation-bypass-proxy-3226.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/nvidia-validation-model-3116.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-callback-path-doc.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-connection-persistence-codex-dedup.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-connection-test-codex-endpoint.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-connection-test-timeout.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-connection-tokenexpiresat-5326.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-credential-blob.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-cursor-auto-import.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-device-code-endpoints.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-device-code-error-transparency.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-error-linkify-5486.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-google-loopback-guidance.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-grok-cli-browser.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-keychain-import-only-6041.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-keychain-import-only-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-kiro-idc.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-kiro.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-lan-loopback-guidance.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-legacy-services-removed.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-modal-codex-lan-ip-8046.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-modal-grok-cli-browser-login-7013.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-modal-grok-cli-paste-7610.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-modal-typescript-regressions.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-paste-credentials-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-paste-credentials.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-providers-config.test.ts",["44008","44009"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-providers-error-handling.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-redirect-uri-mismatch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-refresh-connection-dedup-8059.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-refresh-error-resilience.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-test-config-8408.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oauth-trae.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/observability-fase04.test.ts",["44010"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/observability-payloads.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/obsidian-api.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/obsidian-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/obsidian-plugin-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/obsidian-tools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/obsidian-webdav-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ocr-route.test.ts",["44011","44012","44013","44014","44015","44016","44017","44018"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/oidc-callback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ollama-cloud-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ollama-cloud-weekly-quota-cooldown-3709.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ollama-local-embedding-2824.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ollama-local-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ollama-transform.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/omni-skills-page.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/omniroute-decision-header.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/omniroute-meta-fallback-attempts.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/omniroute-response-meta.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/onboarding-step-titles-i18n-4698.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/onboarding-wizard-details-link-6145.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/onboarding-wizard-route-5427.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-developer-role-normalize.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-gpt56-catalog.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-gpt56-responses-routing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-responses-only-models-5842.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-responses-reasoning-effort.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-responses-request-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-responses-single-text-content-string.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-responses-subagent-strip-2446.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-responses-verbosity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-style-providers-4239-4155-3841.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-bare-tool.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-empty-messages-5245.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-file-attachments.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-glm-split-tool-name-2077.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-redacted-replay-5312.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-strip-empty-signature-6953.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-strip-empty.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-strip-temperature-thinking.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-claude-thinking-budget-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-gemini-gemma-thinking.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-gemini-helpers-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-to-kiro-helpers-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openai-tool-opaque-object-schema.test.ts",["44019","44020","44021","44022"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openapi-coverage.test.ts",["44023"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openapi-security-tiers.test.ts",["44024","44025","44026","44027","44028","44029","44030","44031"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openapi-spec-example-body.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openapi-spec-route.test.ts",["44032"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openapi-try-route.test.ts",["44033","44034","44035","44036","44037","44038"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openapi-ws-endpoint.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-cli-headers-synthesis-5997.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-deepseek-reasoning-injected.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-executor.test.ts",["44039"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-free-tier-catalog-stale-6998.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-go-catalog-alignment.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-go-effort-aliases-6922.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-go-effort-aliases-8353.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-go-quota-no-zai.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-go-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-noauth-models-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-proxy-rotation-4954.test.ts",["44040","44041","44042","44043","44044","44045"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-quota-fetcher.test.ts",["44046"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-strip-client-metadata-1442.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencode-zen-alias-combo-e2e.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/opencodeReasoningSanitizer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-context-length-3202.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-embeddings-catalog-6976.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-free-window-wiring-6842.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-midstream-error-chunk.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-provider-stats.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-quota-6842.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openrouter-vision-sync-4264.test.ts",["44047","44048","44049","44050"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/openvecta-provider-registration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ops-scripts.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/orphaned-tool-filter.test.ts",["44051","44052","44053","44054"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/outbound-url-guard-feature-flag.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/output-token-budget-model-cap.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/output-token-budget.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pack-artifact-entrypoint-closures.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pack-artifact-policy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pack-artifact-server-ws-closure.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pagination.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/paid-model-target-6540.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/paid-model-target-routes-6540.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/param-filters-apply.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/param-filters-auto-learn.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/param-filters-db.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/parse-model-defensive.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/parse-provider-import-6836.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/passthrough-alias-1850.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/payload-rules-restart-persistence.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/payload-rules-route.test.ts",["44055","44056","44057","44058","44059","44060","44061"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/payload-rules.test.ts",["44062","44063"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/peer-routing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pending-counter-drift-8141.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/perplexity-key-validation-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/perplexity-tls-client.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/perplexity-web-executor-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/perplexity-web-model-mappings.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/perplexity-web-streaming-tools-5927.test.ts",["44064","44065"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/perplexity-web.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/persist-429-cooldown-account-fallback.test.ts",["44066","44067","44068","44069","44070","44071","44072"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pick-internal-api-key-6372.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pii-opt-in-default.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/piiReproduction.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/piiSanitizer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/piiSanitizerIpv6.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pioneer-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pipeline-router.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pipeline.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plan3-p0.test.ts",["44073","44074","44075","44076","44077","44078","44079","44080","44081","44082","44083","44084","44085","44086","44087","44088","44089","44090","44091","44092"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-code-export.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-key-policy-3503.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-model-filter-3505.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-model-qualify.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-model-selection-3731.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-prompt-improver.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-reasoning-controls-6241.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-schemas.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/playground-stream-metrics.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-analytics.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-api-routes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-config-route.test.ts",["44093"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-config-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-db.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-dev-mode.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-doctor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-edge-cases.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-errors.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-fs-safety.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-hook-payload-chaining-3286.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-hooks-rate-limit.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-hooks.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-index.test.ts",["44094","44095","44096","44097","44098","44099","44100","44101","44102"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-loader-ipc.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-loader.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-logger.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-manager-lifecycle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-manager-restart-reload-7806.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-manager.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-manifest.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-marketplace.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-metrics.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-permissions.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-route-error-sanitization.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-scanner.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-set-enabled-shim-3473.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-signing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-tools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-upgrade.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/plugins-welcome-banner-e2e.test.ts",["44103"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/podman-machine-guidance-8497.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/poe-api-executor-regression.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/poe-provider-models-baseurl.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/policy-engine.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pollinations-image-anon-fallback-8085.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pollinations-jsonmode-3981.test.ts",["44104","44105","44106"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/postinstall-support.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pr-self-target-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-ag-flash-tiers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-cc-anthropic-rates.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-constants-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-route-sources.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-sync-cross-instance.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-sync-extended.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-sync-status-7955.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricing-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/pricingSync.modal.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-6409-turbopack-memory-doc.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-6699-jules-executor-misroute.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-6835-cyclebreaker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-6835-oom-uncapped.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-7134-claude-web-empty-error-body.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-7293-strict-system-hoist.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-9064-code-execution-beta.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-9408-tool-use-protocol.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-9541-repro.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/probe-9575-tool-name-case.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/processManager.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/progress-tracker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/prompt-cache-affinity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/prompt-cache-prefix-analyzer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/prompt-injection-guard-db-flag.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/prompt-injection-guard.test.ts",["44107","44108","44109"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/prompt-required-routes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-add-ux-i18n-import-warning.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-alias-transitive-5918.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-alias-uniqueness.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-apikey-cap-6715.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-audit.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-columns.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-connection-apikey-dedup.test.ts",["44110"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-connection-healthcheck-interval-zero.test.ts",["44111","44112","44113","44114","44115","44116"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-connection-status.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-connections-fetch-url-2998.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-connections-pagination-2998.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-connections-quota-threshold.test.ts",["44117"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-connections-ui-regression.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-credential-requirement.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-detect-format-endpoint.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-display-label.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-endpoints-friendliai-novita.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-error-rules.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-field-strips.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-filters-url-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-header-profiles.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-health-matrix.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-hints.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-icon-arena-themed.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-learn-more-link.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-401-reauth-hint.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-accesstoken-fallback-on-refresh-failure.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-apikey-proxy-context.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-chunked-spacing-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-force-refresh-imported.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-local-apikey-sync-spacing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-oauth-sequential-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-provider-filter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-proxy-fail-closed.test.ts",["44118","44119","44120"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-recovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-rotating-expired-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-sanitize-scope-3821.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-sync-scheduler-public-surface.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-limits-ui.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-metadata-5461-5470-5534.test.ts",["44121","44122","44123"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-metrics-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-model-filter-live-catalog-7250.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-context-window-override-4125.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-custom-merge-6247.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-discovery-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-management-route.test.ts",["44124","44125","44126","44127"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-qwen-web-redirect-6267.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-route-codex.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-route-lan-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-route.test.ts",["44128","44129","44130","44131","44132","44133","44134","44135","44136","44137","44138","44139","44140","44141","44142","44143","44144","44145","44146","44147","44148","44149","44150","44151","44152","44153","44154","44155","44156","44157","44158","44159","44160","44161","44162","44163","44164","44165","44166","44167","44168","44169","44170","44171","44172","44173","44174","44175","44176","44177","44178","44179","44180","44181"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-token-limits.test.ts",["44182","44183"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-v1-route.test.ts",["44184"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-models-vision-override-1904.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-node-dedup-4746.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-node-icon-url.test.ts",["44185","44186","44187","44188","44189","44190"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-node-select-4421.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-nodes-route.test.ts",["44191","44192","44193","44194","44195","44196","44197","44198","44199","44200","44201","44202","44203"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-nodes-validate-docker-hint.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-nodes-validate-modelid.test.ts",["44204","44205","44206","44207","44208","44209","44210","44211"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-nodes-vibeproxy-preset.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-onboarding-href.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-onboarding-wizard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-page-helpers-3501.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-plugin-manifest-url.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-plugin-manifest.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-proxy-lazy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-quota-visibility.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-quota-widget-icon-prop.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-rate-limit-overrides-schema.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-freetheai.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-github-copilot-gpt-4.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-github-copilot-gpt-4o.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-github-copilot-targetformat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-kilocode-format.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-llm7-cohere.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-models-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-openai-gemini-expanded-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-registry-qwen-vision.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-request-capture-toolname-antigravity-4181.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-request-capture-toolname-map-4091.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-request-failure-pipeline.test.ts",["44212","44213","44214","44215","44216","44217"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-request-logging.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-route-schemas.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-scoped-aliases.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-scoped-chat-completions-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-scoped-models-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-section-visibility.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-service-kind-filter-4240.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-service.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-settings-default.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-setup-links-5572.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-specific-data-schema.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-sweep-live-discovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-target-format-badge-4475.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-test-account-deactivated.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-test-mistral-401-classify.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-tier-field-helpers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-translate-path-golden.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-azure-vertex.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-branches.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-firepass-403.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-hardening.test.ts",["44218","44219","44220","44221","44222","44223"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-image-only.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-qwen-web-5855.test.ts",["44224"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-specialty.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-ssrf-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-tinyfish.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-web-cookie-auth007.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-validation-webfetch-4401.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-wafer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/provider-window-costs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providerlimits-quotanormalize-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-autosync-ssrf-323.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-batch-update.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-bulk-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-constants-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-free-tier-filter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-page-data-timeout.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-page-utils-kimi.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-page-utils.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-route-managed-catalog.test.ts",["44225","44226","44227","44228"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-test-route-cli-map.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-validate-route.test.ts",["44229","44230","44231","44232"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/providers-yuanbao-web.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-assigned-unavailable-6246.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-autoselect-optin-3332.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-batch-routes-5918.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-bulk-import-dedup-7594.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-bypass-scope-guard-3226.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-concurrency-keepalive-regression.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-connection-test.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-dispatcher-cache-cap.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-dispatcher-family.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-egress-isolation-bdd.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-egress-validate-pool-default.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-egress-visibility.test.ts",["44233","44234","44235","44236","44237","44238","44239","44240","44241","44242"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-fallback-cache-key.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-fallback-candidates-listproxies-shape.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-fallback-ssrf.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-family-migration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-family-resolve-cache.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-family-resolve.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-family.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-fetch.test.ts",["44243"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-health-6246.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-health-decide-action-6246.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-health-ipv6.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-health-scheduler-listproxies-shape.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-logger-client-ip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-logs-egress-ip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-logs-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-management-v1-route.test.ts",["44244","44245","44246","44247","44248","44249","44250","44251","44252","44253","44254","44255","44256","44257","44258","44259","44260","44261","44262","44263","44264","44265"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-nested-context-skip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-noauth-provider-6272.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-pool-cloudflare-workers-deployer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-pool-deno-deploy-relay.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-pool-rotation-6365.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-pool-route-6365.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-pool-sync-4878.test.ts",["44266"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-registry-manager.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-registry-route-handlers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-registry.test.ts",["44267","44268","44269","44270","44271","44272","44273","44274","44275","44276","44277","44278","44279","44280","44281","44282","44283","44284","44285","44286","44287","44288","44289","44290","44291","44292","44293","44294","44295","44296","44297","44298","44299","44300","44301","44302","44303","44304","44305","44306","44307","44308","44309","44310","44311","44312","44313","44314","44315","44316","44317","44318","44319","44320"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-relay-mappers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-relay-test-error-5716.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-resolution-status-filter.test.ts",["44321","44322","44323"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-rotation-latency.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-subscriptions-route-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxy-types-socks5-runtime-3508.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.coreEndpoint.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.due.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.fetchGuard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.fetchRetry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.needsCore.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.parse.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.scopes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.service.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxySubscription.url.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxyfetch-caller-abort-log-suppression.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxyfetch-retry-fresh-socket-4252.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxyfetch-undici-retry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/proxyfetch-vercel-relay-2743.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/public-api-routes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/public-client-ids-3493.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/publicCreds.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/publicai-not-keyless-3558.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qdrant-schemas.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qianfan-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qiniu-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-cli.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-display-label.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-executor.test.ts",["44324","44325","44326"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-jobtoken-exchange-4683.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-oauth-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-test-runtime-disambiguation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-unwrap-error-envelope.test.ts",["44327","44328","44329"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qoder-usage-quota.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qodercli-windows-resolve-6263.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quality-rail-gate-membership.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quality-ratchet.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-account-buckets.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-account-quota-row.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-auto-ping.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-burn-rate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-cache-hydrate-5015.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-cache-is-exhausted-per-window-5923.test.ts",["44330","44331","44332","44333","44334","44335"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-cache-snapshot-dedup-4438.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-card-expanded-fixed-order-6687.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-card-expanded-loading-placeholder.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-card-expanded-sort-collapse.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-card-grid-density-6815.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-card-grid-horizontal-layout.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-card-grid-mobile-7072.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-catalog-filter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-combo-balancing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-combo-cli-providers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-combo-groups.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-combos-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-concept-card-i18n.test.ts",["44336","44337"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-connection-recovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-constrain-connections.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-deactivate-toggle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-deterministic-order.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-dimensions.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-edit-opens-wizard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-email-privacy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-endpoints-card.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-enforce-await-store.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-enforce.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-epsilon-unconfigured-allow.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-equal-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-exclusive-catalog-4806.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-exclusive-catalog-short-circuit.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-exclusivity-reconcile.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-fair-share.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-fetch-throttle-6009.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-fetch-throttle-scope-6911.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-group-allocations.test.ts",[],["44338","44339"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-group-scope.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-groups-crud.test.ts",["44340"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-groups-migration.test.ts",["44341"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-groups-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-groups-ui.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-helpers.test.ts",["44342"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-key-models-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-key-resolve.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-model-naming.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-monitor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-multiprovider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-parsing-claude-extra-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-per-key-model-hotpath.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-per-key-model.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-plan-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-plan-resolver.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-plans-route-retired.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-policy-generalization.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-connections.test.ts",["44343"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-delete-prune.test.ts",["44344","44345"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-log-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-single-provider.test.ts",["44346","44347","44348","44349","44350","44351","44352","44353","44354"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-update-full.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-usage-shape.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-wizard-edit.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-wizard-multi.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-pool-wizard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-preflight.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-redis-store.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-saturation-anthropic-oauth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-saturation-signals.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-saturation-token-headers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-schemas.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-share-bugfixes-v388.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-share-grid.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-share-layout-v2.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-share-strategy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-sharing-fixes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-spend-recorder.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-sqlite-store.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-store-factory.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-store-pool-total.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-streaming-consumption-usd.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-summed-budget.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/quota-token-expiry-display.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-cloud-image-media.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-cloud-token-plan-media.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-cloud-video-media.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-code-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-settings-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-web-content-array-serialization.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-web-cookie-validation-3958.test.ts",["44355"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/qwen-web-models-discovery-3931.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/radar-api-routes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/radar-apply-feed.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/radar-db.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/radar-flag-default.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/radar-inertia.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/radar-page-state.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/radar-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limit-enhanced.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limit-manager.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limit-provider-default.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limit-queue-timeout-lockout.test.ts",["44356","44357","44358","44359"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limit-queue-timeout-message-4165.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limit-wedge-recovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limiter-eviction-4041.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limiter-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rate-limiter-redis-optional.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rateLimitManager-idle-eviction.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rateLimitSemaphore.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ratelimit-admission-control-6593.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ratelimit-reservoir-refresh.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ratelimitmanager-headers-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/raycast-auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/raycast-local-extract.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reactive-context-compaction-policy.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-cache-truncation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-cache.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-cost-double-billing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-placeholder-strip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-replay-big-pickle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-routing-api.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-routing-decision-guards.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-routing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-token-buffer-6274.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-token-buffer-9507.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoning-token-source-6187.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reasoningContentInjector.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/redirects-cli-renames.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-buildHeaders-default.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-buildHeaders-opencode.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-buildHeaders-preamble.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-effortLevel.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-opencodeHeaders.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-registryFactory.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-resolveBaseUrl.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refactor-urlSanitize.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refresh-serializer-spacing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/refresh-serializer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/regional-provider-cn-notices-5462.test.ts",["44360","44361"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/registry-direct-exports.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/registry-utils.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/regolo-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rehome-open-prs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rejected-request-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/relay-check-rate-limit-existing-token.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/relay-deploy-5128.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/relay-minified-fn-6149.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/relay-probe-stats.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/relay-test-result-awareness.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/release-cycle-base-resolver.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/release-green-docs-drift-7253.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/release-notes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/releaseChecker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/remaining-tasks.test.ts",["44362"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/remote-image-fetch-dns-rebinding.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/remote-image-fetch-pin-dns-connection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/remote-image-fetch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/replace-custom-models-preserve-hidden-5086.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6142-devin-cloud-agent-unwired.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6377-agentrouter-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6524.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6557-noauth-connection-disable-ignored.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6576-kiro-thinking-unsupported-model.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6637-kimi-token-limit.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6692-sticky-terminal.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6701-claude-detect-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6912-volcengine-max-completion-tokens.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6951.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6952-commentary.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6953.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6957.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-6975.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-7023.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-7268-401-model-not-supported-lockout.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-7387-sticky-quota-exhausted.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-7503-no-choices.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-7764-collapsed-quota-order.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-7820-amazon-q-static-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-7847-bound-client-raw-request.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-8065-quota-cache-cross-instance.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-8136-antigravity-400-model-not-supported-lockout.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-8429-capability-canonicalization.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-8430.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-8522.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-8956.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-9406-claude-web-429-valid.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-9500-reasoning-separator.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-9550-amazon-q-alias-resolution.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/repro-antigravity-404-family-cooldown-hijack.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-defaults-store-session.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-log-detail-layout.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-log-detail-stream.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-log-migration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-log-payloads.test.ts",["44363","44364","44365","44366"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-logger-bounded-clone.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-logger-bounded-idempotence.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-logger-endpoints.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-logger-preferences.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/request-logger-signature.test.ts",["44367","44368","44369","44370","44371","44372","44373","44374"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/requesty-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/require-management-auth-access-token.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rerank-object-documents-response-path.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rerank-openrouter-6574.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rerank-providers-5332.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rerank-proxy-pinning-7350.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rerank-voyage-7809.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rerank.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reset-connection-backoff.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reset-password-cli-6261-6258.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-provider-cooldown-api-3556.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-settings-combo-cooldown-wait.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-settings-normalize-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-settings-provider-breaker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-settings-quota-preflight.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-settings-quota-share-concurrency.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-settings-stream-recovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-settings-upstream429-breaker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-stream-recovery-feature-flags.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resilience-tab-response-fields.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolve-bare-model-to-connection-default-474.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolve-model-alias-index-8697.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolve-omniroute-base-url.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolve-proxy-family.test.ts",["44375","44376","44377","44378","44379","44380","44381","44382","44383","44384"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolve-routing-model.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolve-stream-flag.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolve-web-provider-host.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resolveComboContextLimit.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resource-pressure-policy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resource-pressure-runtime.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resource-pressure-sampler.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/resource-pressure.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/response-model-echo-1311.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/response-openai-responses-purehelpers-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/response-sanitizer.test.ts",["44385","44386","44387","44388","44389","44390","44391","44392","44393","44394","44395","44396","44397","44398","44399","44400","44401","44402","44403","44404","44405","44406","44407","44408","44409","44410","44411","44412","44413","44414","44415","44416","44417","44418","44419","44420","44421","44422","44423","44424","44425","44426","44427","44428","44429","44430","44431","44432","44433","44434","44435","44436","44437","44438","44439","44440","44441","44442","44443","44444","44445","44446","44447","44448","44449","44450","44451","44452","44453","44454","44455","44456","44457","44458","44459","44460","44461","44462","44463","44464","44465","44466","44467"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-active-stream-custom-tool.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-additional-tools.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-chat-assistant-role-first-chunk.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-chat-namespace-identity-map.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-chat-namespace-qualified-name.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-chat-translation-gaps.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-combo-resolution-3227.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-commentary-event-frame-6561.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-commentary-passthrough-6199.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-default-text-format.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-handler.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-input-item-status-8083.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-input-sanitizer-name.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-nameless-hosted-tool-filter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-namespace-flatten.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-parse-once-4041.test.ts",["44468","44469","44470","44471","44472","44473"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-reasoning-close-before-message-466.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-state-policy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-strip-truncation-2311.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-textless-terminal-3948.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-to-claude-whitespace-9170.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-tool-search-call-skip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-transformer-dense-output.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-transformer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-translation-fixes.test.ts",["44474","44475","44476","44477","44478","44479","44480","44481","44482","44483","44484","44485","44486","44487","44488","44489","44490","44491","44492","44493","44494","44495","44496","44497","44498","44499","44500","44501","44502","44503","44504","44505","44506","44507","44508"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-usage-trailing-6906.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-ws-proxy-compression-parity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-ws-proxy-headers.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-ws-proxy-multi-turn-history.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responses-ws-proxy.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/responsesanitizer-reasoning-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/retrieval-scoring-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/reverse-models-dev-providers-8697.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/review-reviews-v3814-fixes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/risk-notice-acknowledged.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/risk-notice-modal-button-import.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/role-normalizer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rotation-config-omniroute.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-edge-coverage.test.ts",["44509","44510","44511","44512","44513","44514","44515","44516","44517","44518","44519","44520","44521","44522","44523","44524","44525","44526","44527","44528","44529","44530","44531","44532","44533","44534","44535","44536","44537","44538","44539","44540","44541","44542","44543","44544","44545","44546","44547","44548","44549","44550","44551","44552","44553","44554","44555","44556","44557","44558","44559","44560","44561","44562","44563","44564","44565"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-error-sanitization-v382.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-explainability.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-acp-agents-local-only.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-forge-jcode-settings-local-only.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-grok-build-settings-local-only.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-loopback-via-proxy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-middleware-local-only.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-plugins-local-only.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-private-lan.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-provider-login-local-only.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/route-guard-qwen-settings-local-only.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval-check.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval-cli.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval-compare.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval-e2e-chain.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval-patch-compare.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval-search.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval-trends.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-eval.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/router-strategies.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/routing-settings-ux-6147.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rtk-enable-renderers-6703.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rtk-gradle-dotnet-filters.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rtk-new-filters.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/rule12-error-sanitization-sweep.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/run-next-node-env.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/run-next-playwright.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime/live-ws-default.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime/magicBytes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime/sqliteRuntime-node26-compat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime/sqliteRuntime.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime-config-globalthis-5312.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime-deps-save-exact-no-prune.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime-env-max-old-space.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime-env.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime-ports.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/runtime-timeouts.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/safe-outbound-fetch.test.ts",["44566","44567","44568","44569","44570","44571","44572","44573","44574"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/safe-resolve-proxy-fail-closed.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sanitizer-residual-policy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/save-call-log-persistence.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/schema-coercion.test.ts",["44575","44576","44577","44578","44579","44580","44581","44582","44583","44584","44585","44586"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-cache-ttl-zero.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-handler-duckduckgo.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-handler-extended.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-handler-perplexity-options.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-provider-validation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-providers-static-model-catalog-7529.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-route.test.ts",["44587","44588","44589","44590","44591","44592","44593"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-select-provider-searxng-bug-9543.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/search-tools-schemas.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/secure-random-routing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/build-profile-stubs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/cloud-sync-hmac.test.ts",["44594","44595","44596","44597","44598"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/docs-path-traversal.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/docs-sanitization.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/elevated-powershell-no-encoded.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/live-server-allowlist.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/local-endpoints.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/zed-credential-fingerprint.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security/zed-import-two-step.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security-docs-truthfulness-8097.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security-fase01.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/security-hashkey.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/segmind-image-video-provider-6656.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/select-impacted-tests.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/self-inflicted-upstream-timeout.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/semantic-cache.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sensenova-image-provider-2233.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sensenova-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/serial/combo-health-autopilot.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/serial/combo-quota-share-cooldown-wait-timing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/serial/combo-strategy-fallbacks-half-open-timing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/serial/glm-coding-plan-monthly-3580.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/serial/provider-health-autopilot.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/serial/quota-division-blocks.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/serve-node-options-preserve-5238.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-backends.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-batch-processor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-combo-metrics.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-context-handoff.test.ts",["44599"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-context-manager.test.ts",["44600"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-intent-classifier.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-payload-rules.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-provider-plugin-manifest.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-provider-plugin-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-quota-monitor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-reasoning-cache.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-session-manager.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-system-transforms.test.ts",["44601","44602","44603"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-thinking-budget.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-tier-labels.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-token-limit-counter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-token-refresh.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/service-worker-navigation-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/ServiceSupervisor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/bifrost-route-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/bifrost-routing-backend.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/combo-metrics-memory.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/embed-proxy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/embedWsProxy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/emergency-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/end-to-end-shape.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/fusion-min-panel-and-failure-detail.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/geminiRateLimitTracker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/htmlRewriter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/install-route-helper.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/installers/bifrost-transport-version-format.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/installers/bifrost.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/installers/cliproxy-resolve-spawn-args-6877.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/installers/cliproxy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/installers/mux.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/installers/ninerouter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/installers/runNpm-shell-5379.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/lifecycle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/logs-sse.test.ts",["44604","44605","44606","44607","44608","44609","44610"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/modelSync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/providerCooldownTracker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services/ringBuffer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/services-branch-hardening.test.ts",["44611"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/session-affinity-generic-7274.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/session-manager-sweep.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/session-manager.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/session-pool-modular.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/session-pool-rest-api.test.ts",["44612","44613","44614"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/session-pool.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings/authz-bypass.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings/probe-8950-set-password.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings-api.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings-cas-7784.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings-i18n-keys.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings-route-password.test.ts",["44615","44616","44617"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings-schema-routing-strategies.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings-transform-schema.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/settings-ui-layout-static.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/setup-open-code-win32-shell.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/analytics-recharts-lazy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/basePath.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/basePathFetch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/components/AutoRoutingBanner.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/components/KiroAuthModal.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/components/ProxyConfigModal.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/machineId.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared/structuredLogger-raw-write-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared-api-utils.test.ts",["44618","44619","44620","44621","44622","44623","44624","44625"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared-clipboard.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/shared-schemas.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-back-compat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-cli-renames.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-costs-quota-plans.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-costs-section.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-customization.test.ts",["44626","44627","44628","44629","44630","44631","44632","44633","44634","44635","44636"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-icon-accents-3812.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-monitoring-reorg.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-prefetch-policy-8281.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-quota-share-placement.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-route-match.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-search-filter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-tools-group.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sidebar-visibility.test.ts",["44637"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/signature-cache-bypass.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/signature-cache.test.ts",["44638"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/silent-sse-close-7699.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/siliconflow-model-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/siliconflow-registry-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-builtins-sandbox.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-collect-routes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-executor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-injection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-interception.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-provider-setting.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-routes-error-sanitization.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-routes.test.ts",["44639","44640","44641","44642","44643","44644","44645","44646","44647"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-schemas.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skills-skillssh.test.ts",["44648","44649","44650","44651","44652","44653","44654"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/skip-provider-breaker-consumer-2743.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sliding-window-limiter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/small-vps-docs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/socks-connector-family.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/socks-handshake-timeout-5109.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/socks5-default-on.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sonar-quality-gate-fixes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/source-scanner-guards.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/spark-openai-compatible-endpoint-7942.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/specialty-model-catalog-routes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/specificity-rules.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/speechmatics-transcription-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/spend-batch-writer.test.ts",["44655"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sqlite-repair-discoverability-3476.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sqljs-build-warning-8135.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sre-oncall-rotation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sre-redact-logs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sre-tcp-close-analyzer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-auth-antigravity-credits.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-auth-resource-404.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-auth.test.ts",["44656","44657","44658","44659","44660","44661","44662","44663","44664","44665","44666","44667","44668"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-error-passthrough-3324.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-finish-reason-synthesis-7800.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-heartbeat-integration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-heartbeat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-nonstream-accept-5305.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-parser-numeric-ids.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-parser.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sse-shim-contract.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sseHeartbeat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sseTextTransform.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/standalone-server-ws-keepalive-timeout-7003.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/start-ws-server-cwd-4055.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/startup-stale-cooldown-recovery.test.ts",["44669"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/static-constants-public-surface.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/static-models-venice-web-6269.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stepfun-mono-fallback-and-sidebar-hydration-7743.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sticky-affinity-failover-6219.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stmt-cache-lru.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-continuation-wiring.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-continuation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-early-eof-affinity-8928.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-early-eof-breaker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-early-eof-retry-3758.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-failure-499-classification.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-handler-catch-logging-8143.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-handler-client-disconnect.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-handler.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-helpers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-non-json-sse.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-numeric-ids.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-onfailure-callback-logging.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-options-nonstreaming-3884.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-payload-collector.test.ts",["44670","44671"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-prompt-tokens-zero-upstream.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-readiness-policy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-readiness.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-recovery.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-request-body-size-mark-7045.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-strip-responses-lifecycle-echo.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-utilities.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/stream-utils.test.ts",["44672","44673","44674","44675","44676","44677","44678","44679","44680","44681","44682","44683","44684","44685"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/streamHelpers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/streaming-empty-content-block-1382.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/streaming-reasoning-dedup-5786.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/streamingPiiInitialization.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/streamingPiiTransform.test.ts",["44686","44687","44688","44689","44690","44691","44692","44693","44694","44695","44696","44697","44698","44699","44700","44701","44702","44703"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/strict-random-deck.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/strip-reasoning-blobs-agentic-context-1599.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/strip-reasoning-header.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/structured-logger-dedup-bound.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/suggested-models-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sumopod-x5lab-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/supervisor-policy-4425.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sweep-stale-fragments.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-bundle.test.ts",["44704","44705"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-env-bundled-require-5006.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-env.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-models-degraded-local-catalog-5460-5465.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-next-cycle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-reasoning-supported-efforts-7694.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-routes.test.ts",["44706","44707","44708","44709","44710"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-search-to-url-8624.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/sync-wiki.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/synced-capability-warmup-8697.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/synced-model-delete-persist-3199.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/synced-model-hide-persist-3782.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/synthetic-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/system-prompt.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/system-role-extraction.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/system-transforms.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/system-trust-test-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/system-version-cache-8278.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/system-version-check-4100.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t06-schema-hardening.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t07-no-log-key-config.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t08-allowed-connections.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t08-mcp-scope-enforcement.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t09-a2a-lifecycle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t12-pricing-updates.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t13-stale-quota-display.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t14-proxy-fast-fail.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t16-gemini-enum-type-string.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t19-codex-responses-empty-content.test.ts",["44711","44712","44713","44714"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t23-t24-fallback-resilience.test.ts",["44715"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t25-provider-validation-modelid-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t26-ai-sdk-accept-header-compat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t27-github-copilot-response-format.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t28-model-catalog-updates.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t29-vertex-sa-json-executor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t3-chat-web-credentials.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t3-chat-web.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t30-kiro-400-model-unavailable.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t31-t33-t34-t38-model-specs.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t3chat-web-cookie-hint-5465.test.ts",["44716"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t40-opencode-cli-tools-integration.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t42-image-size-to-aspect-ratio.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t43-gemini-tool-call-no-thought-signature.test.ts",["44717","44718","44719","44720"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/t44-antigravity-thought-signature-preserved.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tag-routing.test.ts",["44721"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tailscale-authkey.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tailscaleTunnel.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/task-fitness-missing-table-8603.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/task-router-auto-intent-8602.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/task-routing-config-restore-8601.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/telemetry-auto-cleanup-6848.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/telemetry-summary-route.test.ts",["44722"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/termux-android-cache-dir.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/termux-android-playwright-static-import-7265.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/test-all-model-status.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/test-all-results-i18n.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/test-masking-release-scale.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/test-process-detection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/test-scoped-selection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/test-serial-quarantine.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/textual-toolcall-sanitizer-false-positive.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/theoldllm-body-double-read-3296.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/theoldllm-context-length-4184.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/theoldllm-model-refresh-5181.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/theoldllm-provider-proxy.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/theoldllm-request-token-3491.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/think-close-marker-responses-format.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/think-close-marker-suppress-5245.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/think-tag-parser.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/thinking-budget-boot-wiring-5312.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/thinking-budget-globalthis-5312.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/thinking-budget-groq-3258.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/thinking-budget-hydration-5312.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/thinking-budget.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/thundering-herd.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tier-config-provider-override-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tier-coverage-widget-provider-override.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tier-resolver-provider-override.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tiktoken-counter.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tls-client-download-dir-8579.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tls-client-node-docker-binary-7802.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tls-client-proxy-fail-closed.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tls-options.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tls-profiles-valid-5591.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tlsClient-circuit-breaker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-accounting-input-fix.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-health-check-circuit-breaker.test.ts",["44723","44724","44725"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-health-check-devin-cli-8407.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-health-check-sweep.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-health-check-tickms-defined.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-health-check.test.ts",["44726","44727","44728","44729","44730","44731","44732","44733","44734","44735"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-health-no-refresh-token-expired-5326.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-limits.test.ts",["44736"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-refresh-cas-guard-4038.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-refresh-cas-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-refresh-circuit-breaker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-refresh-race-comprehensive.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-refresh-rotation-map.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-refresh-route-service.test.ts",["44737","44738","44739","44740","44741","44742","44743","44744","44745","44746"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/token-refresh-service.test.ts",["44747","44748","44749","44750","44751","44752","44753","44754","44755","44756","44757","44758","44759","44760","44761","44762","44763"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tokenExtractionConfig.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tokenHealthCheck-batchSize.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tokenHealthCheck-transient.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-call-arguments.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-latency-tracker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-limit-detector.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-name-case-preserve-4307.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-request-sanitization.test.ts",["44764","44765","44766","44767","44768","44769","44770","44771","44772","44773","44774","44775"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-schema-sanitizer.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-search-filtered-responses-to-chat-7532.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tool-source-diagnostics.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tools-filter-anthropic-format.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tooltip-portal-behavior.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/topology-active-requests-3507.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/topology-connection-health.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/topology-filtering-and-click.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/topology-label-3198.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/topology-request-lifecycle-emit.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-build-native.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-ca-trust.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-capture-api.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-capture-manager.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-capture-mode.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-commands.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-dynamic-cert.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-setup.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-tls-capture.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tproxy-transparent-socket.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/trae-executor.test.ts",["44776","44777","44778","44779","44780","44781","44782"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/trae-publiccred.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/traffic-filter-live.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/transform-stream-hwm.test.ts",["44783","44784","44785","44786","44787"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-ai-sdk-image-parts.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-antigravity-to-openai.test.ts",["44788","44789","44790","44791"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-claude-helper-thinking.test.ts",["44792","44793","44794","44795","44796","44797","44798","44799","44800","44801","44802","44803","44804","44805","44806","44807","44808","44809","44810","44811","44812"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-claude-to-gemini.test.ts",["44813","44814","44815","44816","44817","44818","44819","44820","44821","44822","44823","44824","44825","44826","44827"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-claude-to-openai-orphan-tool-4385.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-claude-to-openai-strip-billing-header.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-claude-to-openai.test.ts",["44828"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-format-detection-2949.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-advanced-section.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-compression.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-concept-card.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-deeplink.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-i18n-keys.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-integration.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-monitor-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-page-client.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-pipeline-view.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-raw-json-panel.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-result-narrated.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-session.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-simple-controls.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-stream-transformer.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-test-bench.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-friendly-translate-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-gemini-audio-input.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-gemini-consecutive-role-2191.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-gemini-schema-pattern-property.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-gemini-thinking-budget-6943.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-gemini-to-openai.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-helper-branches.test.ts",["44829","44830","44831","44832","44833","44834","44835","44836","44837","44838","44839","44840","44841","44842","44843","44844","44845","44846","44847","44848","44849","44850","44851","44852","44853"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-helper-tool-description-coercion.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-json-util.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-mistral-strip-echo-fields.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-responses-custom-tool-1007.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-responses-empty-input-419.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-responses-image-output-8459.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-responses-req.test.ts",["44854","44855","44856","44857","44858","44859","44860","44861","44862","44863","44864","44865","44866","44867","44868","44869","44870","44871","44872","44873","44874","44875","44876","44877","44878","44879","44880","44881","44882","44883","44884","44885","44886","44887","44888","44889","44890","44891","44892","44893","44894","44895","44896","44897","44898","44899","44900","44901","44902","44903","44904","44905","44906","44907","44908","44909","44910","44911","44912","44913","44914","44915","44916","44917","44918","44919","44920","44921","44922","44923","44924","44925","44926","44927","44928","44929"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-to-claude-empty-reasoning.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-to-claude.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-to-cursor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-to-gemini-defaults.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-to-gemini-sse.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-to-gemini.test.ts",["44930","44931","44932","44933","44934","44935","44936","44937","44938","44939","44940","44941","44942","44943","44944","44945","44946","44947","44948","44949","44950","44951","44952","44953","44954","44955","44956","44957","44958","44959","44960","44961","44962","44963","44964","44965","44966","44967","44968","44969","44970","44971","44972","44973","44974","44975","44976","44977","44978","44979","44980","44981","44982","44983","44984","44985","44986","44987","44988","44989","44990","44991","44992","44993","44994","44995","44996","44997","44998","44999","45000","45001","45002","45003"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-openai-to-kiro.test.ts",["45004","45005","45006","45007","45008","45009","45010","45011","45012","45013","45014","45015","45016","45017","45018","45019","45020"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-redacted-thinking-model-aware-4479.test.ts",["45021","45022","45023","45024","45025","45026"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-request-openai-responses.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-antigravity-thinking-boundary.test.ts",["45027","45028","45029","45030","45031","45032"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-claude-to-openai.test.ts",["45033","45034","45035","45036","45037","45038","45039","45040","45041","45042","45043","45044","45045","45046","45047","45048","45049"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-cursor-to-openai.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-empty-string-tool-arg.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-gemini-to-claude.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-gemini-to-openai.test.ts",["45050","45051","45052","45053","45054","45055","45056","45057","45058","45059","45060","45061","45062","45063","45064","45065","45066","45067","45068","45069","45070","45071","45072","45073","45074","45075","45076","45077","45078","45079","45080","45081","45082","45083","45084","45085","45086","45087","45088","45089","45090","45091","45092","45093","45094","45095","45096","45097","45098","45099","45100","45101","45102","45103","45104","45105","45106","45107","45108","45109","45110","45111","45112","45113","45114","45115","45116","45117","45118","45119","45120","45121","45122","45123","45124"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-kiro-to-openai.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-openai-responses-completed-synthesis.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-openai-responses-namespace-identity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-openai-responses-roundtrip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-openai-responses.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-openai-to-antigravity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-openai-to-claude.test.ts",["45125","45126","45127","45128","45129","45130","45131","45132","45133","45134","45135","45136","45137","45138"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-resp-openai-to-gemini.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-same-format-null-flush.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-stream-transform.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-strip-client-metadata-1157.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-thinking-provider-compat-2043.test.ts",["45139","45140","45141","45142","45143","45144","45145","45146","45147","45148","45149","45150"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-tool-call-shim.test.ts",["45151","45152","45153","45154"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-toolcall-helper.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-tools-anthropic-shape.test.ts",["45155","45156","45157","45158","45159","45160","45161","45162","45163"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/translator-xiaomi-mimo-reasoning-replay-1321.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tray-kill-orphan-pid.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tray-systray-loader-4605.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/triage-bugs-2026-08-02.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tryBackedChat.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ts7-executor-override-signatures.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ts7-executor-result-contract.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ts7-executor-shared-shapes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ts7-open-sse-type-fixes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tsconfig-ts7-readiness.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/tsx-runtime-transform-5757.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/turbopack-cache-heal-6289.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/turkishText.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/types-barrel-model-cooldown.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/AcpAgentsPage.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/AntigravityToolCard-model-aliases.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/ClaudeClassifierCompatToggle.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/ClaudeToolCard-manual-config-fallback.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/CliAgentsPage.test.tsx",[],["45164"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/CliCodePage.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/CliComparisonCard.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/CliConceptCard.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/CliToolCard.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/CompressionHub-patch-only.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/CoolingConnectionsPanel.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/HermesAgentToolCard-model-aliases.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/LocaleAutoDetect-refresh.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/OpenClawToolCard-manual-config-fallback.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/ProviderIcon-icon-url.test.tsx",[],["45165"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/ProxyRegistryManager-tdz-render.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/ToolDetailClient.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/activity-page-redirect.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/add-api-key-modal-free-models.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/add-api-key-modal-unsupported-save-5565.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/add-api-key-modal-validation-error-5088.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/agent-bridge-page.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/agent-bridge-server-card-a11y.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/agent-card-risk-modal.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/agent-card.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/allocation-table.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/authz-cors-banner.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/burn-rate-chart.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/bypass-list-editor.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/cache-settings-tab-bounds-8219.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/cli-agents-detail-page.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/cli-code-detail-page.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/cli-tools-no-mitm-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/combo-compression-mode-select.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/combo-defaults-fusion-5598.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/combo-form-deselect-handler.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/combo-form-select-all-handlers.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/combo-response-validation-editor.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/comboFlowModel-breakers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/comboFlowModel-cooldown.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/comboFlowModel.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/comboLiveStudio.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/combos-error-boundary.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/combos-page-smoke.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compareView.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compatible-provider-apikey-setup.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compliance-tab-actor-filter.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-combos-routing-mode-6760.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-exclusions-page.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-guidance-7530.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-log-namespace.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-pipeline-editor.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-replay-reducer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-replay-speed.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-settings-page.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compression-settings-tab-consolidation.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionAnnotation.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionCockpit.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionFlowModel.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionHub-active-selector.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionHub-context-editing.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionHub.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionPanel.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionStylesPanel.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionStylesTile.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/compressionUltraTier.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/confirm-delete-connection-7361.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/connection-row-proxy-name-7643.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/connection-row-token-badge-5836.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/connectionsSearchFilter.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/conversation-tab-separators.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/conversation-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/costs-toplistcard-legacy-free-label-7272.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/dashboard-csrf-fetch.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/diffPane.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/edgeStyles.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/edit-connection-modal-free-models.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/edit-memory-modal.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/embedding-source-selector.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/engine-pages.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/engine-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/engineConfigForm.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/engineConfigPage.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/engineNode.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/evals-tab-smoke.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/fidelityGateToggle.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/fleetAggregation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/flowCanvas.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/free-budget-card.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/free-pool-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/free-provider-rankings-page-authtype-6915.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/fuzzyDedupToggle.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/grok-device-oauth-modal.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/hermes-agent-config-loop.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/hermes-agent-opencode-free.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/highlightableProviderCard.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/historic-session-banner.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/home-page-client-dashboard-smoke-4615.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/home-provider-topology-section-4606.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/home-topology-hidden-4596.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/home-topology-last-used-node-color.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/home-update-error-render-5991.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/home-update-step-warning-color-amber.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/ionizerLane.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/issue-7845-log-detail-structured-error.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/kimiComboPresetCard.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/kimiSponsorBanner.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/live-compression-accumulate.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/livePage.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/lobe-provider-icons-stepfun.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/logs-page-detail-modal-reopen-on-close.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/markdown-message.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/memories-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/memory-page.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/mitm-proxy-error-boundary.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/mitm-proxy-moved-page.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-alias-edit.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-select-field-6540.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-select-modal-connection-filter.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-select-modal-deselect.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-select-modal-hidden-models-7156.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-select-modal-keep-open.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-select-modal-select-all.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-select-modal-zero-config.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/model-visibility-toolbar-free.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/namedCombos-active-badge.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/noauth-account-card.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/oauth-callback-postmessage-scope.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/omniglyphContextPage.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/onboarding-public-endpoint.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/open-sse-alias.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playView.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-api-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-build-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-chat-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-compare-column.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-compare-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-config-pane.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-export-modal.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-improve-prompt-button.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-model-search-4086.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-preset-picker.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-structured-output-editor.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-studio.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-token-cost-counter.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/playground-tools-builder.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/pool-card.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/previewToRunModel.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/provider-breaker-health-hook.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/provider-quota-widget-auto-refresh-label-4611.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/providerCardHandle.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/providerCardKimiPartnerAccent.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/providerCascadeNode.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/providerIconKimiLogomark.test.tsx",[],["45166"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/providerPageHeaderKimiPartnerLink.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/providerPageHighlightLogic.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/proxy-config-modal-saved-sort-default-7643.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/qdrant-config-card.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/quantumLockBadge.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/quick-start-api-keys-link-5695.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/quota-cutoff-modal-draft-reset-7889.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/quota-share-delete-error.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/quota-share-page.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/request-logger-autorefresh-visibility-3972.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/rerank-config-card.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/riskGateBadge.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/rtkLearnDiscoverCard.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/rtkTomlImportCard.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/rtl-logical-classes.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/runtime-page-client.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/saliencyHeatmap.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/same-context-filter.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/search-tools-compare-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/search-tools-concept-card.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/search-tools-provider-catalog.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/search-tools-scrape-result.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/search-tools-scrape-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/search-tools-search-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/search-tools-studio.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/session-recorder-bar.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/setup-wizard.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/sidebar-engine-items.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/sidebar-proxy-expansion.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/stacked-allocation-bar.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/stats-tab.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/status-dot.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/studio-pages.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/studioTabs.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/system-storage-manual-vacuum.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/timeline-page-detail-deeplink.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/timing-i18n.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/toonEncoderTable.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/traffic-inspector-page.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-improve-prompt.test.tsx",[],["45167"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-local-storage-pool-migration.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-model-visibility-handlers-test-all.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-pools-usage-aggregate.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-presets.test.tsx",[],["45168"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-resizable-panels.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-session-recorder.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-stream-metrics.test.tsx",[],["45169"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-structured-output.test.tsx",[],["45170"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-system-proxy-exit-guard.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-tools-builder.test.tsx",[],["45171"],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-traffic-stream.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-virtual-list.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/usePreviewCompression.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/useToolBatchStatuses.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/waterfallInspector.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/web-session-cookie-modal-size-6265.test.tsx",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui-value-drift-cosmetic.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/universal-handoff.test.ts",["45172","45173","45174","45175","45176","45177","45178","45179","45180","45181","45182","45183","45184","45185","45186","45187"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/unorouter-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/upstream-ca-test-route-3488.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/upstream-error-passthrough.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/upstream-headers-sanitize.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/upstream-response-headers-strip.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/upstream-retry-hints-toggle.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/upstream-timeout-model-override.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/url-sanitize.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage/usageHistoryDedup.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-account-analytics-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-account-identity.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-analytics-model-dedup-7535.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-analytics-provider-display-name-7534.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-analytics-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-analytics.test.ts",["45188","45189","45190","45191","45192"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-antigravity-family-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-bailian-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-cache-health-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-cache-health.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-crof-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-deepseek-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-endpoint-dimension.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-events.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-extractor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-families-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-github-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-glm-family-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-history-db.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-history-reset.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-migrations-legacy-archive-safety.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-migrations.test.ts",["45193","45194","45195","45196","45197","45198","45199","45200","45201","45202","45203","45204","45205","45206","45207","45208","45209"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-minimax-family-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-nanogpt-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-opencode-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-pending-sweep.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-providers.test.ts",["45210","45211","45212"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-qoder-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-quota-core-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-quota-row-visibility.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-scalars-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-service-antigravity-credits.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-service-deepseek.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-service-hardening.test.ts",["45213","45214","45215","45216","45217","45218","45219","45220","45221","45222","45223","45224","45225","45226","45227","45228","45229","45230","45231","45232","45233","45234","45235","45236","45237","45238","45239","45240","45241","45242","45243","45244","45245","45246","45247","45248","45249","45250","45251","45252","45253","45254","45255","45256","45257","45258","45259","45260","45261","45262","45263","45264","45265","45266","45267","45268"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-token-buffer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-utils.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-vertex-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-xai-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usage-xiaomi-mimo-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/usagehistory-helpers-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/useApiKey.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v0-quota-fetcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-chat-completions-content-type-6414.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-combos-projection.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-completions-model-header-match-6426.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-models-aliases-included.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-models-auth-leak-9320.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-models-by-id-4674.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-models-catalog-generation-race.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-models-catalog-ttl.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-models-concurrent-6408.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-models-discovery-conformance.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-ws-bridge.test.ts",["45269","45270"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1-ws-route.test.ts",["45271","45272","45273","45274"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1beta-gemini-tool-calling-6222.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v1beta-models-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v388-phase1-screen-fixes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v388-phase3-memory.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v388-phase4-playground.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/v388-quota-share-usage-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validate-release-green.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validate-response-quality.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-audio-misc-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-badge-unsupported-5442.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-cloud-providers-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-format-validators-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-helpers-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-kiro-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-search-embedding-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-specialty-inline-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-web-cookie-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/validation-web-providers-split.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/veoaifree-video-route.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/veoaifree-web-executor.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/verbosity-prompt-cache-key-provider-gate-7533.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vercel-ai-gateway-media.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vercel-deploy-relay-path-ssrf.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vercel-deploy-sso-protection-check.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vercel-gateway-models-fetch-4249.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/verify-published.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/verify-ratchet-bank.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/version-compare-client-safe.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/version-manager-request.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/version-manager.test.ts",["45275"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/versionManager-orchestrator.test.ts",["45276","45277"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vertex-express-apikey.test.ts",["45278","45279"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vertex-functioncall-id-3440.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vertex-media.test.ts",["45280","45281","45282"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vertex-oauth-scopes.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vertex-spend-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vertex-tts.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/video-deepinfra-6653.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/video-generation-handler.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/video-novita-6658.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/video-xai-grok-imagine.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/virtual-auto-combo.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-bridge-cc-no-reroute.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-bridge-env-override.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-bridge-policy-reroute-6640.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-bridge-preserve-on-failure-4012.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-bridge-settings-schema.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-compression-authoritative-capability-7237.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-detection-consistency.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vision-models-cc-fragments.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/visionBridgeDefaults.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vnc-session.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vps-runner-variable-scope.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-context-sanitizer.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-responses-models.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-shared-metadata.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-token-in-url-warning.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-token-routes-gpt56.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-token-routes-responses-listing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-token-routes.test.ts",["45283","45284","45285","45286","45287","45288","45289","45290","45291","45292","45293","45294","45295","45296","45297","45298","45299","45300","45301","45302","45303","45304","45305","45306","45307","45308","45309","45310","45311","45312","45313","45314","45315","45316","45317","45318","45319","45320","45321","45322","45323","45324","45325","45326","45327","45328","45329","45330","45331","45332","45333","45334","45335","45336","45337","45338","45339","45340","45341","45342","45343","45344","45345","45346","45347"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/vscode-tokenized-request.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/wafRateLimit.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/waitForServer-tcp-fallback-6800.test.mjs",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-cookie-auth.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-cookie-providers-new.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-cookie-validation-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-cookie-validation-false-positive-7857.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-cookie-validation-proxy-7058.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-fetch-dispatch.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-fetch-handler.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-fetch-interception.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-fetch-quota-fallback.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-runtime-env.test.ts",["45348"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-search-fallback-format.test.ts",["45349"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-search-tool-routing-4481.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-session-credentials.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-session-dedup-3368.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-session-pool-health.test.ts",["45350","45351"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-session-provider-link-6316.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-tools-translation-2820.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-tools-translation-3260.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/web-tools-translation.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webdav-server-3485.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-abort-timer-cleanup.test.ts",["45352","45353","45354","45355","45356"],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-deliveries-db.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-discord-dispatcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-dispatcher-routing.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-edit-wizard-regression.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-event-descriptions.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-metadata-guard-3269.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-private-optin-3269.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-slack-dispatcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-ssrf-guard.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webhook-telegram-dispatcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/webshare-sync.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/wildcard-alias-settings-not-applied-7693.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/wildcard-router.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/windows-cert-identity-7275.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/windows-hide-child-process-spawns-8131.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/windows-process-stop-8045.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/windsurf-devin-executors.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/workflows-no-foreign-fork-publishers.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-agent-tools-passthrough.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-exact-cost-2453.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-oauth-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-oauth-quota-fetcher.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-oauth-test-supported.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-oauth-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-translators.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xai-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xiaomi-mimo-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xiaomi-mimo-selftrack-usage.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/xiaomi-providers-registry.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zai-catalog-glm52.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zai-execution-credentials-target-format-7364.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zai-glm-max-tokens-clamp-7364.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zai-glm-target-format-override.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zai-validator.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zai-web-chat-endpoint-8014-probe.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zai-web-models-discovery-7678.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zed-docker-detect.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zed-hosted-think-close-marker.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zed-import-utils.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zed-oauth-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zed-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zenmux-free-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zenmux-models-fetch-4202.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/zenmux-provider.test.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/vitest.config.ts",[],[],"/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/vitest.mcp.config.ts",[],[],{"ruleId":"45357","severity":2,"message":"45358","line":383,"column":39,"nodeType":"45359","messageId":"45360","endLine":383,"endColumn":42,"suggestions":"45361"},{"ruleId":"45357","severity":2,"message":"45358","line":386,"column":11,"nodeType":"45359","messageId":"45360","endLine":386,"endColumn":14,"suggestions":"45362"},{"ruleId":"45357","severity":2,"message":"45358","line":238,"column":42,"nodeType":"45359","messageId":"45360","endLine":238,"endColumn":45,"suggestions":"45363"},{"ruleId":"45357","severity":2,"message":"45358","line":244,"column":39,"nodeType":"45359","messageId":"45360","endLine":244,"endColumn":42,"suggestions":"45364"},{"ruleId":"45357","severity":2,"message":"45358","line":280,"column":34,"nodeType":"45359","messageId":"45360","endLine":280,"endColumn":37,"suggestions":"45365"},{"ruleId":"45357","severity":2,"message":"45358","line":281,"column":34,"nodeType":"45359","messageId":"45360","endLine":281,"endColumn":37,"suggestions":"45366"},{"ruleId":"45357","severity":2,"message":"45358","line":282,"column":34,"nodeType":"45359","messageId":"45360","endLine":282,"endColumn":37,"suggestions":"45367"},{"ruleId":"45357","severity":2,"message":"45358","line":332,"column":55,"nodeType":"45359","messageId":"45360","endLine":332,"endColumn":58,"suggestions":"45368"},{"ruleId":"45357","severity":2,"message":"45358","line":393,"column":36,"nodeType":"45359","messageId":"45360","endLine":393,"endColumn":39,"suggestions":"45369"},{"ruleId":"45357","severity":2,"message":"45358","line":399,"column":33,"nodeType":"45359","messageId":"45360","endLine":399,"endColumn":36,"suggestions":"45370"},{"ruleId":"45357","severity":2,"message":"45358","line":472,"column":49,"nodeType":"45359","messageId":"45360","endLine":472,"endColumn":52,"suggestions":"45371"},{"ruleId":"45357","severity":2,"message":"45358","line":493,"column":24,"nodeType":"45359","messageId":"45360","endLine":493,"endColumn":27,"suggestions":"45372"},{"ruleId":"45357","severity":2,"message":"45358","line":494,"column":22,"nodeType":"45359","messageId":"45360","endLine":494,"endColumn":25,"suggestions":"45373"},{"ruleId":"45357","severity":2,"message":"45358","line":495,"column":19,"nodeType":"45359","messageId":"45360","endLine":495,"endColumn":22,"suggestions":"45374"},{"ruleId":"45357","severity":2,"message":"45358","line":449,"column":18,"nodeType":"45359","messageId":"45360","endLine":449,"endColumn":21,"suggestions":"45375"},{"ruleId":"45357","severity":2,"message":"45358","line":482,"column":42,"nodeType":"45359","messageId":"45360","endLine":482,"endColumn":45,"suggestions":"45376"},{"ruleId":"45357","severity":2,"message":"45358","line":36,"column":47,"nodeType":"45359","messageId":"45360","endLine":36,"endColumn":50,"suggestions":"45377"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":56,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":59,"suggestions":"45378"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":55,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":58,"suggestions":"45379"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":78,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":81,"suggestions":"45380"},{"ruleId":"45357","severity":2,"message":"45358","line":119,"column":41,"nodeType":"45359","messageId":"45360","endLine":119,"endColumn":44,"suggestions":"45381"},{"ruleId":"45357","severity":2,"message":"45358","line":119,"column":76,"nodeType":"45359","messageId":"45360","endLine":119,"endColumn":79,"suggestions":"45382"},{"ruleId":"45357","severity":2,"message":"45358","line":119,"column":82,"nodeType":"45359","messageId":"45360","endLine":119,"endColumn":85,"suggestions":"45383"},{"ruleId":"45357","severity":2,"message":"45358","line":214,"column":61,"nodeType":"45359","messageId":"45360","endLine":214,"endColumn":64,"suggestions":"45384"},{"ruleId":"45357","severity":2,"message":"45358","line":229,"column":47,"nodeType":"45359","messageId":"45360","endLine":229,"endColumn":50,"suggestions":"45385"},{"ruleId":"45357","severity":2,"message":"45358","line":229,"column":53,"nodeType":"45359","messageId":"45360","endLine":229,"endColumn":56,"suggestions":"45386"},{"ruleId":"45357","severity":2,"message":"45358","line":236,"column":19,"nodeType":"45359","messageId":"45360","endLine":236,"endColumn":22,"suggestions":"45387"},{"ruleId":"45357","severity":2,"message":"45358","line":251,"column":22,"nodeType":"45359","messageId":"45360","endLine":251,"endColumn":25,"suggestions":"45388"},{"ruleId":"45357","severity":2,"message":"45358","line":264,"column":42,"nodeType":"45359","messageId":"45360","endLine":264,"endColumn":45,"suggestions":"45389"},{"ruleId":"45357","severity":2,"message":"45358","line":264,"column":48,"nodeType":"45359","messageId":"45360","endLine":264,"endColumn":51,"suggestions":"45390"},{"ruleId":"45357","severity":2,"message":"45358","line":327,"column":11,"nodeType":"45359","messageId":"45360","endLine":327,"endColumn":14,"suggestions":"45391"},{"ruleId":"45357","severity":2,"message":"45358","line":330,"column":6,"nodeType":"45359","messageId":"45360","endLine":330,"endColumn":9,"suggestions":"45392"},{"ruleId":"45357","severity":2,"message":"45358","line":19,"column":29,"nodeType":"45359","messageId":"45360","endLine":19,"endColumn":32,"suggestions":"45393"},{"ruleId":"45357","severity":2,"message":"45358","line":37,"column":41,"nodeType":"45359","messageId":"45360","endLine":37,"endColumn":44,"suggestions":"45394"},{"ruleId":"45357","severity":2,"message":"45358","line":37,"column":77,"nodeType":"45359","messageId":"45360","endLine":37,"endColumn":80,"suggestions":"45395"},{"ruleId":"45357","severity":2,"message":"45358","line":37,"column":83,"nodeType":"45359","messageId":"45360","endLine":37,"endColumn":86,"suggestions":"45396"},{"ruleId":"45357","severity":2,"message":"45358","line":95,"column":19,"nodeType":"45359","messageId":"45360","endLine":95,"endColumn":22,"suggestions":"45397"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":24,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":27,"suggestions":"45398"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":24,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":27,"suggestions":"45399"},{"ruleId":"45357","severity":2,"message":"45358","line":35,"column":29,"nodeType":"45359","messageId":"45360","endLine":35,"endColumn":32,"suggestions":"45400"},{"ruleId":"45357","severity":2,"message":"45358","line":52,"column":41,"nodeType":"45359","messageId":"45360","endLine":52,"endColumn":44,"suggestions":"45401"},{"ruleId":"45357","severity":2,"message":"45358","line":52,"column":78,"nodeType":"45359","messageId":"45360","endLine":52,"endColumn":81,"suggestions":"45402"},{"ruleId":"45357","severity":2,"message":"45358","line":52,"column":84,"nodeType":"45359","messageId":"45360","endLine":52,"endColumn":87,"suggestions":"45403"},{"ruleId":"45357","severity":2,"message":"45358","line":241,"column":23,"nodeType":"45359","messageId":"45360","endLine":241,"endColumn":26,"suggestions":"45404"},{"ruleId":"45357","severity":2,"message":"45358","line":241,"column":64,"nodeType":"45359","messageId":"45360","endLine":241,"endColumn":67,"suggestions":"45405"},{"ruleId":"45357","severity":2,"message":"45358","line":242,"column":23,"nodeType":"45359","messageId":"45360","endLine":242,"endColumn":26,"suggestions":"45406"},{"ruleId":"45357","severity":2,"message":"45358","line":242,"column":65,"nodeType":"45359","messageId":"45360","endLine":242,"endColumn":68,"suggestions":"45407"},{"ruleId":"45357","severity":2,"message":"45358","line":243,"column":23,"nodeType":"45359","messageId":"45360","endLine":243,"endColumn":26,"suggestions":"45408"},{"ruleId":"45357","severity":2,"message":"45358","line":243,"column":67,"nodeType":"45359","messageId":"45360","endLine":243,"endColumn":70,"suggestions":"45409"},{"ruleId":"45357","severity":2,"message":"45358","line":246,"column":22,"nodeType":"45359","messageId":"45360","endLine":246,"endColumn":25,"suggestions":"45410"},{"ruleId":"45357","severity":2,"message":"45358","line":258,"column":40,"nodeType":"45359","messageId":"45360","endLine":258,"endColumn":43,"suggestions":"45411"},{"ruleId":"45357","severity":2,"message":"45358","line":258,"column":78,"nodeType":"45359","messageId":"45360","endLine":258,"endColumn":81,"suggestions":"45412"},{"ruleId":"45357","severity":2,"message":"45358","line":265,"column":21,"nodeType":"45359","messageId":"45360","endLine":265,"endColumn":24,"suggestions":"45413"},{"ruleId":"45357","severity":2,"message":"45358","line":436,"column":62,"nodeType":"45359","messageId":"45360","endLine":436,"endColumn":65,"suggestions":"45414"},{"ruleId":"45357","severity":2,"message":"45358","line":158,"column":21,"nodeType":"45359","messageId":"45360","endLine":158,"endColumn":24,"suggestions":"45415"},{"ruleId":"45357","severity":2,"message":"45358","line":166,"column":71,"nodeType":"45359","messageId":"45360","endLine":166,"endColumn":74,"suggestions":"45416"},{"ruleId":"45357","severity":2,"message":"45358","line":198,"column":29,"nodeType":"45359","messageId":"45360","endLine":198,"endColumn":32,"suggestions":"45417"},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":3,"endColumn":65},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":1,"endColumn":56},{"ruleId":"45418","severity":2,"message":"45419","line":266,"column":1,"nodeType":"45420","messageId":"45421","endLine":266,"endColumn":98},{"ruleId":"45357","severity":2,"message":"45358","line":117,"column":19,"nodeType":"45359","messageId":"45360","endLine":117,"endColumn":22,"suggestions":"45422"},{"ruleId":"45423","severity":2,"message":"45424","line":70,"column":1,"nodeType":"45425","messageId":"45426","endLine":72,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":24,"column":1,"nodeType":"45425","messageId":"45426","endLine":32,"endColumn":2},{"ruleId":"45357","severity":2,"message":"45358","line":95,"column":31,"nodeType":"45359","messageId":"45360","endLine":95,"endColumn":34,"suggestions":"45427"},{"ruleId":"45357","severity":2,"message":"45358","line":97,"column":41,"nodeType":"45359","messageId":"45360","endLine":97,"endColumn":44,"suggestions":"45428"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":9,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":12,"suggestions":"45429"},{"ruleId":"45357","severity":2,"message":"45358","line":169,"column":9,"nodeType":"45359","messageId":"45360","endLine":169,"endColumn":12,"suggestions":"45430"},{"ruleId":"45357","severity":2,"message":"45358","line":177,"column":36,"nodeType":"45359","messageId":"45360","endLine":177,"endColumn":39,"suggestions":"45431"},{"ruleId":"45357","severity":2,"message":"45358","line":201,"column":9,"nodeType":"45359","messageId":"45360","endLine":201,"endColumn":12,"suggestions":"45432"},{"ruleId":"45357","severity":2,"message":"45358","line":212,"column":36,"nodeType":"45359","messageId":"45360","endLine":212,"endColumn":39,"suggestions":"45433"},{"ruleId":"45357","severity":2,"message":"45358","line":629,"column":9,"nodeType":"45359","messageId":"45360","endLine":629,"endColumn":12,"suggestions":"45434"},{"ruleId":"45357","severity":2,"message":"45358","line":637,"column":36,"nodeType":"45359","messageId":"45360","endLine":637,"endColumn":39,"suggestions":"45435"},{"ruleId":"45357","severity":2,"message":"45358","line":654,"column":9,"nodeType":"45359","messageId":"45360","endLine":654,"endColumn":12,"suggestions":"45436"},{"ruleId":"45357","severity":2,"message":"45358","line":662,"column":36,"nodeType":"45359","messageId":"45360","endLine":662,"endColumn":39,"suggestions":"45437"},{"ruleId":"45357","severity":2,"message":"45358","line":685,"column":9,"nodeType":"45359","messageId":"45360","endLine":685,"endColumn":12,"suggestions":"45438"},{"ruleId":"45357","severity":2,"message":"45358","line":693,"column":36,"nodeType":"45359","messageId":"45360","endLine":693,"endColumn":39,"suggestions":"45439"},{"ruleId":"45357","severity":2,"message":"45358","line":713,"column":9,"nodeType":"45359","messageId":"45360","endLine":713,"endColumn":12,"suggestions":"45440"},{"ruleId":"45357","severity":2,"message":"45358","line":719,"column":36,"nodeType":"45359","messageId":"45360","endLine":719,"endColumn":39,"suggestions":"45441"},{"ruleId":"45357","severity":2,"message":"45358","line":748,"column":9,"nodeType":"45359","messageId":"45360","endLine":748,"endColumn":12,"suggestions":"45442"},{"ruleId":"45357","severity":2,"message":"45358","line":754,"column":36,"nodeType":"45359","messageId":"45360","endLine":754,"endColumn":39,"suggestions":"45443"},{"ruleId":"45357","severity":2,"message":"45358","line":775,"column":9,"nodeType":"45359","messageId":"45360","endLine":775,"endColumn":12,"suggestions":"45444"},{"ruleId":"45357","severity":2,"message":"45358","line":786,"column":36,"nodeType":"45359","messageId":"45360","endLine":786,"endColumn":39,"suggestions":"45445"},{"ruleId":"45357","severity":2,"message":"45358","line":817,"column":9,"nodeType":"45359","messageId":"45360","endLine":817,"endColumn":12,"suggestions":"45446"},{"ruleId":"45357","severity":2,"message":"45358","line":828,"column":36,"nodeType":"45359","messageId":"45360","endLine":828,"endColumn":39,"suggestions":"45447"},{"ruleId":"45357","severity":2,"message":"45358","line":867,"column":9,"nodeType":"45359","messageId":"45360","endLine":867,"endColumn":12,"suggestions":"45448"},{"ruleId":"45357","severity":2,"message":"45358","line":874,"column":36,"nodeType":"45359","messageId":"45360","endLine":874,"endColumn":39,"suggestions":"45449"},{"ruleId":"45357","severity":2,"message":"45358","line":896,"column":9,"nodeType":"45359","messageId":"45360","endLine":896,"endColumn":12,"suggestions":"45450"},{"ruleId":"45357","severity":2,"message":"45358","line":903,"column":36,"nodeType":"45359","messageId":"45360","endLine":903,"endColumn":39,"suggestions":"45451"},{"ruleId":"45357","severity":2,"message":"45358","line":1030,"column":19,"nodeType":"45359","messageId":"45360","endLine":1030,"endColumn":22,"suggestions":"45452"},{"ruleId":"45357","severity":2,"message":"45358","line":1031,"column":16,"nodeType":"45359","messageId":"45360","endLine":1031,"endColumn":19,"suggestions":"45453"},{"ruleId":"45357","severity":2,"message":"45358","line":1075,"column":9,"nodeType":"45359","messageId":"45360","endLine":1075,"endColumn":12,"suggestions":"45454"},{"ruleId":"45357","severity":2,"message":"45358","line":1128,"column":17,"nodeType":"45359","messageId":"45360","endLine":1128,"endColumn":20,"suggestions":"45455"},{"ruleId":"45357","severity":2,"message":"45358","line":1160,"column":9,"nodeType":"45359","messageId":"45360","endLine":1160,"endColumn":12,"suggestions":"45456"},{"ruleId":"45357","severity":2,"message":"45358","line":1375,"column":31,"nodeType":"45359","messageId":"45360","endLine":1375,"endColumn":34,"suggestions":"45457"},{"ruleId":"45357","severity":2,"message":"45358","line":1377,"column":9,"nodeType":"45359","messageId":"45360","endLine":1377,"endColumn":12,"suggestions":"45458"},{"ruleId":"45357","severity":2,"message":"45358","line":1416,"column":17,"nodeType":"45359","messageId":"45360","endLine":1416,"endColumn":20,"suggestions":"45459"},{"ruleId":"45357","severity":2,"message":"45358","line":1507,"column":17,"nodeType":"45359","messageId":"45360","endLine":1507,"endColumn":20,"suggestions":"45460"},{"ruleId":"45423","severity":2,"message":"45424","line":151,"column":1,"nodeType":"45425","messageId":"45426","endLine":158,"endColumn":2},{"ruleId":"45357","severity":2,"message":"45358","line":206,"column":17,"nodeType":"45359","messageId":"45360","endLine":206,"endColumn":20,"suggestions":"45461"},{"ruleId":"45357","severity":2,"message":"45358","line":9,"column":25,"nodeType":"45359","messageId":"45360","endLine":9,"endColumn":28,"suggestions":"45462"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":9,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":12,"suggestions":"45463"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":19,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":22,"suggestions":"45464"},{"ruleId":"45357","severity":2,"message":"45358","line":121,"column":17,"nodeType":"45359","messageId":"45360","endLine":121,"endColumn":20,"suggestions":"45465"},{"ruleId":"45357","severity":2,"message":"45358","line":131,"column":16,"nodeType":"45359","messageId":"45360","endLine":131,"endColumn":19,"suggestions":"45466"},{"ruleId":"45357","severity":2,"message":"45358","line":80,"column":12,"nodeType":"45359","messageId":"45360","endLine":80,"endColumn":15,"suggestions":"45467"},{"ruleId":"45357","severity":2,"message":"45358","line":17,"column":39,"nodeType":"45359","messageId":"45360","endLine":17,"endColumn":42,"suggestions":"45468"},{"ruleId":"45357","severity":2,"message":"45358","line":35,"column":34,"nodeType":"45359","messageId":"45360","endLine":35,"endColumn":37,"suggestions":"45469"},{"ruleId":"45357","severity":2,"message":"45358","line":36,"column":35,"nodeType":"45359","messageId":"45360","endLine":36,"endColumn":38,"suggestions":"45470"},{"ruleId":"45423","severity":2,"message":"45424","line":195,"column":1,"nodeType":"45425","messageId":"45426","endLine":203,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":166,"column":1,"nodeType":"45425","messageId":"45426","endLine":168,"endColumn":2},{"ruleId":"45357","severity":2,"message":"45358","line":1044,"column":48,"nodeType":"45359","messageId":"45360","endLine":1044,"endColumn":51,"suggestions":"45471"},{"ruleId":"45357","severity":2,"message":"45358","line":1071,"column":47,"nodeType":"45359","messageId":"45360","endLine":1071,"endColumn":50,"suggestions":"45472"},{"ruleId":"45357","severity":2,"message":"45358","line":1175,"column":53,"nodeType":"45359","messageId":"45360","endLine":1175,"endColumn":56,"suggestions":"45473"},{"ruleId":"45423","severity":2,"message":"45424","line":79,"column":1,"nodeType":"45425","messageId":"45426","endLine":87,"endColumn":2},{"ruleId":"45357","severity":2,"message":"45358","line":20,"column":51,"nodeType":"45359","messageId":"45360","endLine":20,"endColumn":54,"suggestions":"45474"},{"ruleId":"45357","severity":2,"message":"45358","line":34,"column":63,"nodeType":"45359","messageId":"45360","endLine":34,"endColumn":66,"suggestions":"45475"},{"ruleId":"45423","severity":2,"message":"45424","line":66,"column":1,"nodeType":"45425","messageId":"45426","endLine":69,"endColumn":2},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":50,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":53,"suggestions":"45476"},{"ruleId":"45423","severity":2,"message":"45424","line":75,"column":1,"nodeType":"45425","messageId":"45426","endLine":82,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":76,"column":1,"nodeType":"45425","messageId":"45426","endLine":83,"endColumn":2},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":71},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":19,"endColumn":24},{"ruleId":"45357","severity":2,"message":"45358","line":181,"column":83,"nodeType":"45359","messageId":"45360","endLine":181,"endColumn":86,"suggestions":"45477"},{"ruleId":"45357","severity":2,"message":"45358","line":181,"column":89,"nodeType":"45359","messageId":"45360","endLine":181,"endColumn":92,"suggestions":"45478"},{"ruleId":"45357","severity":2,"message":"45358","line":292,"column":34,"nodeType":"45359","messageId":"45360","endLine":292,"endColumn":37,"suggestions":"45479"},{"ruleId":"45357","severity":2,"message":"45358","line":465,"column":59,"nodeType":"45359","messageId":"45360","endLine":465,"endColumn":62,"suggestions":"45480"},{"ruleId":"45423","severity":2,"message":"45424","line":624,"column":7,"nodeType":"45481","messageId":"45426","endLine":628,"endColumn":2},{"ruleId":"45357","severity":2,"message":"45358","line":645,"column":33,"nodeType":"45359","messageId":"45360","endLine":645,"endColumn":36,"suggestions":"45482"},{"ruleId":"45357","severity":2,"message":"45358","line":645,"column":64,"nodeType":"45359","messageId":"45360","endLine":645,"endColumn":67,"suggestions":"45483"},{"ruleId":"45357","severity":2,"message":"45358","line":663,"column":55,"nodeType":"45359","messageId":"45360","endLine":663,"endColumn":58,"suggestions":"45484"},{"ruleId":"45357","severity":2,"message":"45358","line":700,"column":12,"nodeType":"45359","messageId":"45360","endLine":700,"endColumn":15,"suggestions":"45485"},{"ruleId":"45357","severity":2,"message":"45358","line":701,"column":20,"nodeType":"45359","messageId":"45360","endLine":701,"endColumn":23,"suggestions":"45486"},{"ruleId":"45357","severity":2,"message":"45358","line":781,"column":55,"nodeType":"45359","messageId":"45360","endLine":781,"endColumn":58,"suggestions":"45487"},{"ruleId":"45357","severity":2,"message":"45358","line":823,"column":54,"nodeType":"45359","messageId":"45360","endLine":823,"endColumn":57,"suggestions":"45488"},{"ruleId":"45357","severity":2,"message":"45358","line":823,"column":68,"nodeType":"45359","messageId":"45360","endLine":823,"endColumn":71,"suggestions":"45489"},{"ruleId":"45357","severity":2,"message":"45358","line":844,"column":12,"nodeType":"45359","messageId":"45360","endLine":844,"endColumn":15,"suggestions":"45490"},{"ruleId":"45357","severity":2,"message":"45358","line":845,"column":12,"nodeType":"45359","messageId":"45360","endLine":845,"endColumn":15,"suggestions":"45491"},{"ruleId":"45357","severity":2,"message":"45358","line":846,"column":20,"nodeType":"45359","messageId":"45360","endLine":846,"endColumn":23,"suggestions":"45492"},{"ruleId":"45357","severity":2,"message":"45358","line":875,"column":25,"nodeType":"45359","messageId":"45360","endLine":875,"endColumn":28,"suggestions":"45493"},{"ruleId":"45357","severity":2,"message":"45358","line":879,"column":35,"nodeType":"45359","messageId":"45360","endLine":879,"endColumn":38,"suggestions":"45494"},{"ruleId":"45357","severity":2,"message":"45358","line":17,"column":9,"nodeType":"45359","messageId":"45360","endLine":17,"endColumn":12,"suggestions":"45495"},{"ruleId":"45357","severity":2,"message":"45358","line":161,"column":33,"nodeType":"45359","messageId":"45360","endLine":161,"endColumn":36,"suggestions":"45496"},{"ruleId":"45357","severity":2,"message":"45358","line":163,"column":12,"nodeType":"45359","messageId":"45360","endLine":163,"endColumn":15,"suggestions":"45497"},{"ruleId":"45423","severity":2,"message":"45424","line":275,"column":1,"nodeType":"45425","messageId":"45426","endLine":282,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":33,"column":1,"nodeType":"45425","messageId":"45426","endLine":40,"endColumn":2},{"ruleId":"45418","severity":2,"message":"45419","line":22,"column":1,"nodeType":"45420","messageId":"45421","endLine":22,"endColumn":65},{"ruleId":"45418","severity":2,"message":"45419","line":22,"column":1,"nodeType":"45420","messageId":"45421","endLine":22,"endColumn":65},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":47,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":50,"suggestions":"45498"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":32,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":35,"suggestions":"45499"},{"ruleId":"45357","severity":2,"message":"45358","line":112,"column":23,"nodeType":"45359","messageId":"45360","endLine":112,"endColumn":26,"suggestions":"45500"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":36,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":39,"suggestions":"45501"},{"ruleId":"45357","severity":2,"message":"45358","line":211,"column":39,"nodeType":"45359","messageId":"45360","endLine":211,"endColumn":42,"suggestions":"45502"},{"ruleId":"45357","severity":2,"message":"45358","line":222,"column":5,"nodeType":"45359","messageId":"45360","endLine":222,"endColumn":8,"suggestions":"45503"},{"ruleId":"45357","severity":2,"message":"45358","line":313,"column":27,"nodeType":"45359","messageId":"45360","endLine":313,"endColumn":30,"suggestions":"45504"},{"ruleId":"45357","severity":2,"message":"45358","line":315,"column":19,"nodeType":"45359","messageId":"45360","endLine":315,"endColumn":22,"suggestions":"45505"},{"ruleId":"45357","severity":2,"message":"45358","line":333,"column":32,"nodeType":"45359","messageId":"45360","endLine":333,"endColumn":35,"suggestions":"45506"},{"ruleId":"45357","severity":2,"message":"45358","line":384,"column":5,"nodeType":"45359","messageId":"45360","endLine":384,"endColumn":8,"suggestions":"45507"},{"ruleId":"45357","severity":2,"message":"45358","line":386,"column":15,"nodeType":"45359","messageId":"45360","endLine":386,"endColumn":18,"suggestions":"45508"},{"ruleId":"45357","severity":2,"message":"45358","line":437,"column":40,"nodeType":"45359","messageId":"45360","endLine":437,"endColumn":43,"suggestions":"45509"},{"ruleId":"45357","severity":2,"message":"45358","line":444,"column":40,"nodeType":"45359","messageId":"45360","endLine":444,"endColumn":43,"suggestions":"45510"},{"ruleId":"45357","severity":2,"message":"45358","line":500,"column":46,"nodeType":"45359","messageId":"45360","endLine":500,"endColumn":49,"suggestions":"45511"},{"ruleId":"45357","severity":2,"message":"45358","line":538,"column":39,"nodeType":"45359","messageId":"45360","endLine":538,"endColumn":42,"suggestions":"45512"},{"ruleId":"45357","severity":2,"message":"45358","line":587,"column":35,"nodeType":"45359","messageId":"45360","endLine":587,"endColumn":38,"suggestions":"45513"},{"ruleId":"45357","severity":2,"message":"45358","line":626,"column":31,"nodeType":"45359","messageId":"45360","endLine":626,"endColumn":34,"suggestions":"45514"},{"ruleId":"45357","severity":2,"message":"45358","line":684,"column":13,"nodeType":"45359","messageId":"45360","endLine":684,"endColumn":16,"suggestions":"45515"},{"ruleId":"45357","severity":2,"message":"45358","line":689,"column":34,"nodeType":"45359","messageId":"45360","endLine":689,"endColumn":37,"suggestions":"45516"},{"ruleId":"45357","severity":2,"message":"45358","line":767,"column":77,"nodeType":"45359","messageId":"45360","endLine":767,"endColumn":80,"suggestions":"45517"},{"ruleId":"45357","severity":2,"message":"45358","line":769,"column":16,"nodeType":"45359","messageId":"45360","endLine":769,"endColumn":19,"suggestions":"45518"},{"ruleId":"45357","severity":2,"message":"45358","line":796,"column":36,"nodeType":"45359","messageId":"45360","endLine":796,"endColumn":39,"suggestions":"45519"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":66,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":69,"suggestions":"45520"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":52,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":55,"suggestions":"45521","suppressions":"45522"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":49,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":52,"suggestions":"45523","suppressions":"45524"},{"ruleId":"45357","severity":2,"message":"45358","line":69,"column":87,"nodeType":"45359","messageId":"45360","endLine":69,"endColumn":90,"suggestions":"45525","suppressions":"45526"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":53,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":56,"suggestions":"45527","suppressions":"45528"},{"ruleId":"45357","severity":2,"message":"45358","line":8,"column":48,"nodeType":"45359","messageId":"45360","endLine":8,"endColumn":51,"suggestions":"45529"},{"ruleId":"45357","severity":2,"message":"45358","line":24,"column":43,"nodeType":"45359","messageId":"45360","endLine":24,"endColumn":46,"suggestions":"45530"},{"ruleId":"45357","severity":2,"message":"45358","line":77,"column":40,"nodeType":"45359","messageId":"45360","endLine":77,"endColumn":43,"suggestions":"45531"},{"ruleId":"45423","severity":2,"message":"45424","line":69,"column":1,"nodeType":"45425","messageId":"45426","endLine":76,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":78,"column":1,"nodeType":"45425","messageId":"45426","endLine":85,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":55,"column":1,"nodeType":"45425","messageId":"45426","endLine":62,"endColumn":2},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":21,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":24,"suggestions":"45532"},{"ruleId":"45357","severity":2,"message":"45358","line":149,"column":19,"nodeType":"45359","messageId":"45360","endLine":149,"endColumn":22,"suggestions":"45533"},{"ruleId":"45418","severity":2,"message":"45419","line":15,"column":1,"nodeType":"45420","messageId":"45421","endLine":15,"endColumn":76},{"ruleId":"45423","severity":2,"message":"45424","line":53,"column":1,"nodeType":"45425","messageId":"45426","endLine":61,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":122,"column":1,"nodeType":"45425","messageId":"45426","endLine":129,"endColumn":2},{"ruleId":"45357","severity":2,"message":"45358","line":288,"column":19,"nodeType":"45359","messageId":"45360","endLine":288,"endColumn":22,"suggestions":"45534"},{"ruleId":"45357","severity":2,"message":"45358","line":299,"column":41,"nodeType":"45359","messageId":"45360","endLine":299,"endColumn":44,"suggestions":"45535"},{"ruleId":"45357","severity":2,"message":"45358","line":311,"column":38,"nodeType":"45359","messageId":"45360","endLine":311,"endColumn":41,"suggestions":"45536"},{"ruleId":"45357","severity":2,"message":"45358","line":373,"column":9,"nodeType":"45359","messageId":"45360","endLine":373,"endColumn":12,"suggestions":"45537"},{"ruleId":"45418","severity":2,"message":"45419","line":16,"column":1,"nodeType":"45420","messageId":"45421","endLine":23,"endColumn":24},{"ruleId":"45357","severity":2,"message":"45358","line":55,"column":32,"nodeType":"45359","messageId":"45360","endLine":55,"endColumn":35,"suggestions":"45538"},{"ruleId":"45357","severity":2,"message":"45358","line":150,"column":17,"nodeType":"45359","messageId":"45360","endLine":150,"endColumn":20,"suggestions":"45539"},{"ruleId":"45357","severity":2,"message":"45358","line":191,"column":19,"nodeType":"45359","messageId":"45360","endLine":191,"endColumn":22,"suggestions":"45540"},{"ruleId":"45423","severity":2,"message":"45424","line":17,"column":8,"nodeType":"45425","messageId":"45426","endLine":25,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":68,"column":1,"nodeType":"45425","messageId":"45426","endLine":75,"endColumn":2},{"ruleId":"45418","severity":2,"message":"45419","line":13,"column":1,"nodeType":"45420","messageId":"45421","endLine":13,"endColumn":100},{"ruleId":"45357","severity":2,"message":"45358","line":6,"column":22,"nodeType":"45359","messageId":"45360","endLine":6,"endColumn":25,"suggestions":"45541"},{"ruleId":"45357","severity":2,"message":"45358","line":6,"column":62,"nodeType":"45359","messageId":"45360","endLine":6,"endColumn":65,"suggestions":"45542"},{"ruleId":"45357","severity":2,"message":"45358","line":21,"column":28,"nodeType":"45359","messageId":"45360","endLine":21,"endColumn":31,"suggestions":"45543"},{"ruleId":"45357","severity":2,"message":"45358","line":27,"column":8,"nodeType":"45359","messageId":"45360","endLine":27,"endColumn":11,"suggestions":"45544"},{"ruleId":"45357","severity":2,"message":"45358","line":32,"column":18,"nodeType":"45359","messageId":"45360","endLine":32,"endColumn":21,"suggestions":"45545"},{"ruleId":"45423","severity":2,"message":"45424","line":46,"column":1,"nodeType":"45425","messageId":"45426","endLine":53,"endColumn":2},{"ruleId":"45546","severity":2,"message":"45547","line":171,"column":6,"nodeType":"45548","endLine":171,"endColumn":59,"suggestions":"45549"},{"ruleId":"45546","severity":2,"message":"45550","line":262,"column":6,"nodeType":"45548","endLine":262,"endColumn":8,"suggestions":"45551","suppressions":"45552"},{"ruleId":"45553","severity":2,"message":"45554","line":23,"column":9,"nodeType":null,"endLine":23,"endColumn":21,"suppressions":"45555"},{"ruleId":"45553","severity":2,"message":"45556","line":32,"column":9,"nodeType":null,"endLine":32,"endColumn":21,"suppressions":"45557"},{"ruleId":"45546","severity":2,"message":"45558","line":50,"column":6,"nodeType":"45548","endLine":50,"endColumn":23,"suggestions":"45559","suppressions":"45560"},{"ruleId":"45423","severity":2,"message":"45561","line":335,"column":6,"nodeType":"45562","messageId":"45426","endLine":335,"endColumn":50,"suppressions":"45563"},{"ruleId":"45423","severity":2,"message":"45561","line":337,"column":7,"nodeType":"45562","messageId":"45426","endLine":337,"endColumn":52,"suppressions":"45564"},{"ruleId":"45423","severity":2,"message":"45561","line":339,"column":7,"nodeType":"45562","messageId":"45426","endLine":339,"endColumn":49,"suppressions":"45565"},{"ruleId":"45423","severity":2,"message":"45561","line":341,"column":7,"nodeType":"45562","messageId":"45426","endLine":341,"endColumn":51,"suppressions":"45566"},{"ruleId":"45423","severity":2,"message":"45561","line":343,"column":7,"nodeType":"45562","messageId":"45426","endLine":343,"endColumn":44,"suppressions":"45567"},{"ruleId":"45568","severity":2,"message":"45569","line":392,"column":13,"nodeType":"45570","endLine":396,"endColumn":15,"suppressions":"45571"},{"ruleId":"45546","severity":2,"message":"45572","line":490,"column":6,"nodeType":"45548","endLine":490,"endColumn":8,"suggestions":"45573","suppressions":"45574"},{"ruleId":"45423","severity":2,"message":"45561","line":40,"column":29,"nodeType":"45562","messageId":"45426","endLine":40,"endColumn":64},{"ruleId":"45423","severity":2,"message":"45561","line":41,"column":27,"nodeType":"45562","messageId":"45426","endLine":41,"endColumn":60},{"ruleId":"45423","severity":2,"message":"45561","line":42,"column":29,"nodeType":"45562","messageId":"45426","endLine":42,"endColumn":71},{"ruleId":"45423","severity":2,"message":"45561","line":43,"column":31,"nodeType":"45562","messageId":"45426","endLine":43,"endColumn":68},{"ruleId":"45546","severity":2,"message":"45575","line":65,"column":6,"nodeType":"45548","endLine":65,"endColumn":26,"suggestions":"45576"},{"ruleId":"45423","severity":2,"message":"45561","line":293,"column":23,"nodeType":"45562","messageId":"45426","endLine":293,"endColumn":62,"suppressions":"45577"},{"ruleId":"45553","severity":2,"message":"45578","line":97,"column":7,"nodeType":null,"endLine":97,"endColumn":23,"suppressions":"45579"},{"ruleId":"45568","severity":2,"message":"45569","line":111,"column":13,"nodeType":"45570","endLine":120,"endColumn":15,"suppressions":"45580"},{"ruleId":"45423","severity":2,"message":"45561","line":158,"column":14,"nodeType":"45562","messageId":"45426","endLine":158,"endColumn":82},{"ruleId":"45546","severity":2,"message":"45581","line":268,"column":6,"nodeType":"45548","endLine":268,"endColumn":27,"suggestions":"45582","suppressions":"45583"},{"ruleId":"45546","severity":2,"message":"45584","line":315,"column":6,"nodeType":"45548","endLine":315,"endColumn":38,"suggestions":"45585","suppressions":"45586"},{"ruleId":"45546","severity":2,"message":"45587","line":327,"column":6,"nodeType":"45548","endLine":327,"endColumn":30,"suggestions":"45588","suppressions":"45589"},{"ruleId":"45546","severity":2,"message":"45590","line":72,"column":6,"nodeType":"45548","endLine":72,"endColumn":40,"suggestions":"45591","suppressions":"45592"},{"ruleId":"45546","severity":2,"message":"45593","line":72,"column":7,"nodeType":"45562","endLine":72,"endColumn":39,"suppressions":"45594"},{"ruleId":"45546","severity":2,"message":"45595","line":122,"column":6,"nodeType":"45548","endLine":122,"endColumn":42,"suggestions":"45596","suppressions":"45597"},{"ruleId":"45546","severity":2,"message":"45598","line":134,"column":6,"nodeType":"45548","endLine":134,"endColumn":65,"suggestions":"45599","suppressions":"45600"},{"ruleId":"45546","severity":2,"message":"45593","line":134,"column":27,"nodeType":"45562","endLine":134,"endColumn":64,"suppressions":"45601"},{"ruleId":"45546","severity":2,"message":"45602","line":343,"column":9,"nodeType":"45481","endLine":350,"endColumn":4,"suggestions":"45603"},{"ruleId":"45568","severity":2,"message":"45569","line":161,"column":15,"nodeType":"45570","endLine":165,"endColumn":17,"suppressions":"45604"},{"ruleId":"45568","severity":2,"message":"45569","line":662,"column":25,"nodeType":"45570","endLine":666,"endColumn":27,"suppressions":"45605"},{"ruleId":"45546","severity":2,"message":"45606","line":165,"column":6,"nodeType":"45548","endLine":165,"endColumn":22,"suggestions":"45607","suppressions":"45608"},{"ruleId":"45546","severity":2,"message":"45609","line":62,"column":6,"nodeType":"45548","endLine":62,"endColumn":20,"suggestions":"45610","suppressions":"45611"},{"ruleId":"45546","severity":2,"message":"45612","line":73,"column":6,"nodeType":"45548","endLine":73,"endColumn":20,"suggestions":"45613","suppressions":"45614"},{"ruleId":"45423","severity":2,"message":"45561","line":36,"column":31,"nodeType":"45562","messageId":"45426","endLine":36,"endColumn":68,"suppressions":"45615"},{"ruleId":"45546","severity":2,"message":"45616","line":56,"column":6,"nodeType":"45548","endLine":56,"endColumn":8,"suggestions":"45617","suppressions":"45618"},{"ruleId":"45568","severity":2,"message":"45569","line":572,"column":19,"nodeType":"45570","endLine":579,"endColumn":21},{"ruleId":"45568","severity":2,"message":"45569","line":642,"column":19,"nodeType":"45570","endLine":646,"endColumn":21},{"ruleId":"45568","severity":2,"message":"45569","line":666,"column":19,"nodeType":"45570","endLine":673,"endColumn":21},{"ruleId":"45568","severity":2,"message":"45569","line":742,"column":19,"nodeType":"45570","endLine":746,"endColumn":21},{"ruleId":"45546","severity":2,"message":"45619","line":65,"column":6,"nodeType":"45548","endLine":65,"endColumn":8,"suggestions":"45620","suppressions":"45621"},{"ruleId":"45423","severity":2,"message":"45561","line":66,"column":9,"nodeType":"45562","messageId":"45426","endLine":66,"endColumn":52},{"ruleId":"45546","severity":2,"message":"45622","line":40,"column":6,"nodeType":"45548","endLine":40,"endColumn":8,"suggestions":"45623","suppressions":"45624"},{"ruleId":"45625","severity":2,"message":"45626","line":304,"column":15,"nodeType":"45570","endLine":311,"endColumn":16},{"ruleId":"45546","severity":2,"message":"45627","line":87,"column":5,"nodeType":"45548","endLine":87,"endColumn":18,"suggestions":"45628"},{"ruleId":"45546","severity":2,"message":"45629","line":73,"column":6,"nodeType":"45548","endLine":73,"endColumn":8,"suggestions":"45630"},{"ruleId":"45553","severity":2,"message":"45631","line":52,"column":16,"nodeType":null,"endLine":52,"endColumn":34,"suppressions":"45632"},{"ruleId":"45553","severity":2,"message":"45633","line":101,"column":5,"nodeType":null,"endLine":101,"endColumn":13,"suppressions":"45634"},{"ruleId":"45423","severity":2,"message":"45561","line":50,"column":10,"nodeType":"45562","messageId":"45426","endLine":50,"endColumn":47},{"ruleId":"45423","severity":2,"message":"45561","line":51,"column":10,"nodeType":"45562","messageId":"45426","endLine":51,"endColumn":45},{"ruleId":"45423","severity":2,"message":"45561","line":52,"column":35,"nodeType":"45562","messageId":"45426","endLine":52,"endColumn":62},{"ruleId":"45546","severity":2,"message":"45635","line":133,"column":6,"nodeType":"45548","endLine":133,"endColumn":8,"suggestions":"45636","suppressions":"45637"},{"ruleId":"45546","severity":2,"message":"45638","line":45,"column":6,"nodeType":"45548","endLine":45,"endColumn":8,"suggestions":"45639","suppressions":"45640"},{"ruleId":"45546","severity":2,"message":"45641","line":497,"column":6,"nodeType":"45548","endLine":497,"endColumn":8,"suggestions":"45642","suppressions":"45643"},{"ruleId":"45546","severity":2,"message":"45622","line":491,"column":6,"nodeType":"45548","endLine":491,"endColumn":8,"suggestions":"45644","suppressions":"45645"},{"ruleId":"45546","severity":2,"message":"45646","line":320,"column":5,"nodeType":"45548","endLine":320,"endColumn":46,"suggestions":"45647","suppressions":"45648"},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":3,"endColumn":45},{"ruleId":"45418","severity":2,"message":"45419","line":4,"column":1,"nodeType":"45420","messageId":"45421","endLine":4,"endColumn":51},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":67},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":51},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":42},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":45},{"ruleId":"45418","severity":2,"message":"45419","line":11,"column":1,"nodeType":"45420","messageId":"45421","endLine":11,"endColumn":51},{"ruleId":"45418","severity":2,"message":"45419","line":4,"column":1,"nodeType":"45420","messageId":"45421","endLine":4,"endColumn":51},{"ruleId":"45418","severity":2,"message":"45419","line":17,"column":1,"nodeType":"45420","messageId":"45421","endLine":17,"endColumn":47},{"ruleId":"45418","severity":2,"message":"45419","line":16,"column":1,"nodeType":"45420","messageId":"45421","endLine":16,"endColumn":47},{"ruleId":"45423","severity":2,"message":"45561","line":140,"column":9,"nodeType":"45562","messageId":"45426","endLine":142,"endColumn":36,"suppressions":"45649"},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":3,"endColumn":44},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":9,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":63},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":8,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":4,"column":1,"nodeType":"45420","messageId":"45421","endLine":4,"endColumn":85},{"ruleId":"45418","severity":2,"message":"45650","line":6,"column":1,"nodeType":"45420","messageId":"45421","endLine":6,"endColumn":79},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":11,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":3,"endColumn":76},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":96},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":53},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":57},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":43},{"ruleId":"45418","severity":2,"message":"45651","line":4,"column":1,"nodeType":"45420","messageId":"45421","endLine":4,"endColumn":72},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":50},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":47},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":7,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":3,"endColumn":97},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":8,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":12,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":3,"endColumn":78},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":8,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":6,"column":1,"nodeType":"45420","messageId":"45421","endLine":6,"endColumn":60},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":8,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":8,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":10,"column":1,"nodeType":"45420","messageId":"45421","endLine":14,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":10,"column":1,"nodeType":"45420","messageId":"45421","endLine":10,"endColumn":80},{"ruleId":"45418","severity":2,"message":"45419","line":17,"column":1,"nodeType":"45420","messageId":"45421","endLine":17,"endColumn":50},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":75},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":3,"endColumn":93},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":9,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":14,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":10,"column":1,"nodeType":"45420","messageId":"45421","endLine":10,"endColumn":91},{"ruleId":"45418","severity":2,"message":"45652","line":23,"column":1,"nodeType":"45420","messageId":"45421","endLine":23,"endColumn":76},{"ruleId":"45418","severity":2,"message":"45419","line":14,"column":1,"nodeType":"45420","messageId":"45421","endLine":19,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":65},{"ruleId":"45418","severity":2,"message":"45419","line":7,"column":1,"nodeType":"45420","messageId":"45421","endLine":12,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":65},{"ruleId":"45418","severity":2,"message":"45419","line":4,"column":1,"nodeType":"45420","messageId":"45421","endLine":9,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":31,"column":1,"nodeType":"45420","messageId":"45421","endLine":31,"endColumn":75},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":56},{"ruleId":"45418","severity":2,"message":"45419","line":7,"column":1,"nodeType":"45420","messageId":"45421","endLine":7,"endColumn":65},{"ruleId":"45418","severity":2,"message":"45419","line":27,"column":1,"nodeType":"45420","messageId":"45421","endLine":27,"endColumn":75},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":3,"endColumn":51},{"ruleId":"45418","severity":2,"message":"45419","line":11,"column":1,"nodeType":"45420","messageId":"45421","endLine":11,"endColumn":75},{"ruleId":"45418","severity":2,"message":"45419","line":25,"column":1,"nodeType":"45420","messageId":"45421","endLine":25,"endColumn":85},{"ruleId":"45418","severity":2,"message":"45419","line":18,"column":1,"nodeType":"45420","messageId":"45421","endLine":18,"endColumn":57},{"ruleId":"45418","severity":2,"message":"45419","line":22,"column":1,"nodeType":"45420","messageId":"45421","endLine":22,"endColumn":58},{"ruleId":"45418","severity":2,"message":"45419","line":22,"column":1,"nodeType":"45420","messageId":"45421","endLine":26,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":20,"column":1,"nodeType":"45420","messageId":"45421","endLine":20,"endColumn":51},{"ruleId":"45418","severity":2,"message":"45419","line":18,"column":1,"nodeType":"45420","messageId":"45421","endLine":18,"endColumn":65},{"ruleId":"45418","severity":2,"message":"45419","line":16,"column":1,"nodeType":"45420","messageId":"45421","endLine":16,"endColumn":41},{"ruleId":"45418","severity":2,"message":"45419","line":19,"column":1,"nodeType":"45420","messageId":"45421","endLine":19,"endColumn":55},{"ruleId":"45418","severity":2,"message":"45419","line":28,"column":1,"nodeType":"45420","messageId":"45421","endLine":28,"endColumn":41},{"ruleId":"45418","severity":2,"message":"45419","line":4,"column":1,"nodeType":"45420","messageId":"45421","endLine":4,"endColumn":82},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":80},{"ruleId":"45423","severity":2,"message":"45561","line":95,"column":33,"nodeType":"45562","messageId":"45426","endLine":95,"endColumn":78},{"ruleId":"45418","severity":2,"message":"45653","line":22,"column":1,"nodeType":"45420","messageId":"45421","endLine":22,"endColumn":71},{"ruleId":"45418","severity":2,"message":"45653","line":14,"column":1,"nodeType":"45420","messageId":"45421","endLine":14,"endColumn":71},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":45},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":61},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":61},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":8,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":4,"column":1,"nodeType":"45420","messageId":"45421","endLine":4,"endColumn":74},{"ruleId":"45418","severity":2,"message":"45419","line":6,"column":1,"nodeType":"45420","messageId":"45421","endLine":6,"endColumn":74},{"ruleId":"45418","severity":2,"message":"45419","line":5,"column":1,"nodeType":"45420","messageId":"45421","endLine":12,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":3,"endColumn":51},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":61},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":48},{"ruleId":"45418","severity":2,"message":"45419","line":4,"column":1,"nodeType":"45420","messageId":"45421","endLine":4,"endColumn":59},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":1,"endColumn":100},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":75},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":45},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":49},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":1,"endColumn":56},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":1,"endColumn":45},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":1,"endColumn":53},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":1,"endColumn":68},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":7,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":1,"endColumn":45},{"ruleId":"45418","severity":2,"message":"45419","line":6,"column":1,"nodeType":"45420","messageId":"45421","endLine":6,"endColumn":45},{"ruleId":"45418","severity":2,"message":"45419","line":6,"column":1,"nodeType":"45420","messageId":"45421","endLine":6,"endColumn":45},{"ruleId":"45418","severity":2,"message":"45653","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":9,"endColumn":34},{"ruleId":"45418","severity":2,"message":"45419","line":12,"column":1,"nodeType":"45420","messageId":"45421","endLine":12,"endColumn":46},{"ruleId":"45418","severity":2,"message":"45419","line":6,"column":1,"nodeType":"45420","messageId":"45421","endLine":6,"endColumn":45},{"ruleId":"45418","severity":2,"message":"45419","line":6,"column":1,"nodeType":"45420","messageId":"45421","endLine":6,"endColumn":61},{"ruleId":"45418","severity":2,"message":"45419","line":26,"column":1,"nodeType":"45420","messageId":"45421","endLine":26,"endColumn":61},{"ruleId":"45418","severity":2,"message":"45419","line":4,"column":1,"nodeType":"45420","messageId":"45421","endLine":4,"endColumn":61},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":82},{"ruleId":"45418","severity":2,"message":"45654","line":15,"column":1,"nodeType":"45420","messageId":"45421","endLine":15,"endColumn":89},{"ruleId":"45418","severity":2,"message":"45419","line":6,"column":1,"nodeType":"45420","messageId":"45421","endLine":6,"endColumn":48},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":61},{"ruleId":"45418","severity":2,"message":"45419","line":30,"column":1,"nodeType":"45420","messageId":"45421","endLine":30,"endColumn":67},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":100},{"ruleId":"45418","severity":2,"message":"45419","line":8,"column":1,"nodeType":"45420","messageId":"45421","endLine":8,"endColumn":56},{"ruleId":"45418","severity":2,"message":"45419","line":21,"column":1,"nodeType":"45420","messageId":"45421","endLine":21,"endColumn":58},{"ruleId":"45418","severity":2,"message":"45419","line":8,"column":1,"nodeType":"45420","messageId":"45421","endLine":8,"endColumn":56},{"ruleId":"45418","severity":2,"message":"45419","line":10,"column":1,"nodeType":"45420","messageId":"45421","endLine":10,"endColumn":56},{"ruleId":"45418","severity":2,"message":"45419","line":5,"column":1,"nodeType":"45420","messageId":"45421","endLine":5,"endColumn":56},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":56},{"ruleId":"45418","severity":2,"message":"45419","line":16,"column":1,"nodeType":"45420","messageId":"45421","endLine":22,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":1,"endColumn":51},{"ruleId":"45418","severity":2,"message":"45419","line":22,"column":1,"nodeType":"45420","messageId":"45421","endLine":22,"endColumn":80},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":55},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":55},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":56},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":81},{"ruleId":"45418","severity":2,"message":"45419","line":11,"column":1,"nodeType":"45420","messageId":"45421","endLine":11,"endColumn":43},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":57},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":73},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":87},{"ruleId":"45418","severity":2,"message":"45419","line":27,"column":1,"nodeType":"45420","messageId":"45421","endLine":27,"endColumn":59},{"ruleId":"45418","severity":2,"message":"45655","line":29,"column":1,"nodeType":"45420","messageId":"45421","endLine":29,"endColumn":80},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":1,"endColumn":100},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":1,"endColumn":56},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":1,"endColumn":53},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":1,"endColumn":45},{"ruleId":"45418","severity":2,"message":"45656","line":5,"column":1,"nodeType":"45420","messageId":"45421","endLine":5,"endColumn":70},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":12,"endColumn":24},{"ruleId":"45423","severity":2,"message":"45561","line":440,"column":17,"nodeType":"45562","messageId":"45426","endLine":440,"endColumn":54,"suppressions":"45657"},{"ruleId":"45418","severity":2,"message":"45419","line":13,"column":1,"nodeType":"45420","messageId":"45421","endLine":13,"endColumn":56},{"ruleId":"45423","severity":2,"message":"45561","line":131,"column":49,"nodeType":"45562","messageId":"45426","endLine":131,"endColumn":117},{"ruleId":"45418","severity":2,"message":"45419","line":8,"column":1,"nodeType":"45420","messageId":"45421","endLine":8,"endColumn":56},{"ruleId":"45418","severity":2,"message":"45419","line":8,"column":1,"nodeType":"45420","messageId":"45421","endLine":8,"endColumn":59},{"ruleId":"45418","severity":2,"message":"45419","line":11,"column":1,"nodeType":"45420","messageId":"45421","endLine":11,"endColumn":80},{"ruleId":"45418","severity":2,"message":"45419","line":8,"column":1,"nodeType":"45420","messageId":"45421","endLine":8,"endColumn":44},{"ruleId":"45418","severity":2,"message":"45419","line":15,"column":1,"nodeType":"45420","messageId":"45421","endLine":15,"endColumn":55},{"ruleId":"45418","severity":2,"message":"45419","line":10,"column":1,"nodeType":"45420","messageId":"45421","endLine":10,"endColumn":60},{"ruleId":"45423","severity":2,"message":"45424","line":100,"column":1,"nodeType":"45425","messageId":"45426","endLine":107,"endColumn":2},{"ruleId":"45418","severity":2,"message":"45419","line":20,"column":1,"nodeType":"45420","messageId":"45421","endLine":20,"endColumn":92},{"ruleId":"45546","severity":2,"message":"45658","line":274,"column":6,"nodeType":"45548","endLine":274,"endColumn":94,"suggestions":"45659"},{"ruleId":"45546","severity":2,"message":"45660","line":274,"column":31,"nodeType":"45562","endLine":274,"endColumn":49},{"ruleId":"45423","severity":2,"message":"45424","line":39,"column":1,"nodeType":"45425","messageId":"45426","endLine":41,"endColumn":2},{"ruleId":"45418","severity":2,"message":"45419","line":11,"column":1,"nodeType":"45420","messageId":"45421","endLine":11,"endColumn":49},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":9,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":82},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":9,"endColumn":24},{"ruleId":"45423","severity":2,"message":"45424","line":101,"column":1,"nodeType":"45425","messageId":"45426","endLine":103,"endColumn":2},{"ruleId":"45418","severity":2,"message":"45661","line":26,"column":1,"nodeType":"45420","messageId":"45421","endLine":26,"endColumn":44},{"ruleId":"45418","severity":2,"message":"45419","line":20,"column":1,"nodeType":"45420","messageId":"45421","endLine":20,"endColumn":56},{"ruleId":"45423","severity":2,"message":"45424","line":43,"column":1,"nodeType":"45425","messageId":"45426","endLine":45,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":65,"column":1,"nodeType":"45425","messageId":"45426","endLine":72,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":45,"column":1,"nodeType":"45425","messageId":"45426","endLine":53,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":26,"column":1,"nodeType":"45425","messageId":"45426","endLine":33,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":59,"column":1,"nodeType":"45425","messageId":"45426","endLine":66,"endColumn":2},{"ruleId":"45418","severity":2,"message":"45419","line":14,"column":1,"nodeType":"45420","messageId":"45421","endLine":19,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":4,"column":1,"nodeType":"45420","messageId":"45421","endLine":4,"endColumn":58},{"ruleId":"45418","severity":2,"message":"45419","line":25,"column":1,"nodeType":"45420","messageId":"45421","endLine":25,"endColumn":51},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":6,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":13,"column":1,"nodeType":"45420","messageId":"45421","endLine":13,"endColumn":45},{"ruleId":"45418","severity":2,"message":"45419","line":21,"column":1,"nodeType":"45420","messageId":"45421","endLine":21,"endColumn":56},{"ruleId":"45418","severity":2,"message":"45419","line":14,"column":1,"nodeType":"45420","messageId":"45421","endLine":14,"endColumn":56},{"ruleId":"45418","severity":2,"message":"45419","line":8,"column":1,"nodeType":"45420","messageId":"45421","endLine":8,"endColumn":56},{"ruleId":"45418","severity":2,"message":"45419","line":6,"column":1,"nodeType":"45420","messageId":"45421","endLine":10,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":13,"column":1,"nodeType":"45420","messageId":"45421","endLine":13,"endColumn":56},{"ruleId":"45418","severity":2,"message":"45662","line":12,"column":1,"nodeType":"45420","messageId":"45421","endLine":17,"endColumn":21},{"ruleId":"45418","severity":2,"message":"45419","line":7,"column":1,"nodeType":"45420","messageId":"45421","endLine":7,"endColumn":65},{"ruleId":"45423","severity":2,"message":"45424","line":116,"column":1,"nodeType":"45425","messageId":"45426","endLine":123,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":136,"column":1,"nodeType":"45425","messageId":"45426","endLine":143,"endColumn":2},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":5,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":3,"endColumn":65},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":5,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":3,"endColumn":65},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":5,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":7,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":14,"column":1,"nodeType":"45420","messageId":"45421","endLine":14,"endColumn":75},{"ruleId":"45418","severity":2,"message":"45419","line":15,"column":1,"nodeType":"45420","messageId":"45421","endLine":15,"endColumn":49},{"ruleId":"45418","severity":2,"message":"45419","line":15,"column":1,"nodeType":"45420","messageId":"45421","endLine":15,"endColumn":65},{"ruleId":"45418","severity":2,"message":"45419","line":11,"column":1,"nodeType":"45420","messageId":"45421","endLine":11,"endColumn":65},{"ruleId":"45418","severity":2,"message":"45419","line":19,"column":1,"nodeType":"45420","messageId":"45421","endLine":22,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":18,"column":1,"nodeType":"45420","messageId":"45421","endLine":18,"endColumn":96},{"ruleId":"45423","severity":2,"message":"45424","line":25,"column":1,"nodeType":"45425","messageId":"45426","endLine":32,"endColumn":2},{"ruleId":"45418","severity":2,"message":"45419","line":27,"column":1,"nodeType":"45420","messageId":"45421","endLine":27,"endColumn":95},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":10,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":14,"column":1,"nodeType":"45420","messageId":"45421","endLine":20,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":13,"column":1,"nodeType":"45420","messageId":"45421","endLine":13,"endColumn":85},{"ruleId":"45423","severity":2,"message":"45424","line":72,"column":1,"nodeType":"45425","messageId":"45426","endLine":80,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":66,"column":1,"nodeType":"45425","messageId":"45426","endLine":73,"endColumn":2},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":1,"endColumn":86},{"ruleId":"45423","severity":2,"message":"45424","line":68,"column":1,"nodeType":"45425","messageId":"45426","endLine":75,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":158,"column":1,"nodeType":"45425","messageId":"45426","endLine":165,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":123,"column":1,"nodeType":"45425","messageId":"45426","endLine":130,"endColumn":2},{"ruleId":"45423","severity":2,"message":"45424","line":201,"column":1,"nodeType":"45425","messageId":"45426","endLine":203,"endColumn":2},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":45},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45663","messageId":"45421","endLine":31,"endColumn":24},{"ruleId":"45546","severity":2,"message":"45629","line":62,"column":6,"nodeType":"45548","endLine":62,"endColumn":14,"suggestions":"45664"},{"ruleId":"45568","severity":2,"message":"45569","line":26,"column":5,"nodeType":"45570","endLine":31,"endColumn":7},{"ruleId":"45546","severity":2,"message":"45665","line":40,"column":6,"nodeType":"45548","endLine":40,"endColumn":8,"suggestions":"45666","suppressions":"45667"},{"ruleId":"45546","severity":2,"message":"45668","line":244,"column":6,"nodeType":"45548","endLine":244,"endColumn":31,"suggestions":"45669","suppressions":"45670"},{"ruleId":"45568","severity":2,"message":"45569","line":360,"column":9,"nodeType":"45570","endLine":367,"endColumn":11,"suppressions":"45671"},{"ruleId":"45568","severity":2,"message":"45569","line":479,"column":9,"nodeType":"45570","endLine":486,"endColumn":11,"suppressions":"45672"},{"ruleId":"45546","severity":2,"message":"45673","line":285,"column":6,"nodeType":"45548","endLine":285,"endColumn":30,"suggestions":"45674"},{"ruleId":"45546","severity":2,"message":"45675","line":163,"column":8,"nodeType":"45548","endLine":163,"endColumn":10,"suggestions":"45676"},{"ruleId":"45546","severity":2,"message":"45675","line":172,"column":7,"nodeType":"45548","endLine":172,"endColumn":15,"suggestions":"45677"},{"ruleId":"45546","severity":2,"message":"45678","line":529,"column":11,"nodeType":"45481","endLine":609,"endColumn":6,"suggestions":"45679"},{"ruleId":"45546","severity":2,"message":"45680","line":648,"column":8,"nodeType":"45548","endLine":648,"endColumn":27,"suggestions":"45681"},{"ruleId":"45546","severity":2,"message":"45682","line":754,"column":8,"nodeType":"45548","endLine":754,"endColumn":43,"suggestions":"45683"},{"ruleId":"45546","severity":2,"message":"45682","line":769,"column":8,"nodeType":"45548","endLine":769,"endColumn":43,"suggestions":"45684"},{"ruleId":"45568","severity":2,"message":"45569","line":506,"column":17,"nodeType":"45570","endLine":510,"endColumn":19},{"ruleId":"45546","severity":2,"message":"45685","line":304,"column":6,"nodeType":"45548","endLine":304,"endColumn":69,"suggestions":"45686","suppressions":"45687"},{"ruleId":"45423","severity":2,"message":"45424","line":30,"column":1,"nodeType":"45425","messageId":"45426","endLine":37,"endColumn":2},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":1,"endColumn":61},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":48},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":2,"endColumn":76},{"ruleId":"45418","severity":2,"message":"45419","line":13,"column":1,"nodeType":"45420","messageId":"45421","endLine":13,"endColumn":61},{"ruleId":"45418","severity":2,"message":"45419","line":12,"column":1,"nodeType":"45420","messageId":"45421","endLine":12,"endColumn":45},{"ruleId":"45418","severity":2,"message":"45419","line":12,"column":1,"nodeType":"45420","messageId":"45421","endLine":17,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":17,"column":1,"nodeType":"45420","messageId":"45421","endLine":17,"endColumn":51},{"ruleId":"45418","severity":2,"message":"45419","line":54,"column":1,"nodeType":"45420","messageId":"45421","endLine":61,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":34,"column":1,"nodeType":"45420","messageId":"45421","endLine":34,"endColumn":59},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":14,"endColumn":24},{"ruleId":"45423","severity":2,"message":"45424","line":128,"column":1,"nodeType":"45425","messageId":"45426","endLine":135,"endColumn":2},{"ruleId":"45418","severity":2,"message":"45419","line":2,"column":1,"nodeType":"45420","messageId":"45421","endLine":9,"endColumn":24},{"ruleId":"45418","severity":2,"message":"45419","line":10,"column":1,"nodeType":"45420","messageId":"45421","endLine":10,"endColumn":51},{"ruleId":"45418","severity":2,"message":"45419","line":1,"column":1,"nodeType":"45420","messageId":"45421","endLine":1,"endColumn":45},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":7,"endColumn":24},{"ruleId":"45357","severity":2,"message":"45358","line":7,"column":40,"nodeType":"45359","messageId":"45360","endLine":7,"endColumn":43,"suggestions":"45688"},{"ruleId":"45357","severity":2,"message":"45358","line":14,"column":40,"nodeType":"45359","messageId":"45360","endLine":14,"endColumn":43,"suggestions":"45689"},{"ruleId":"45357","severity":2,"message":"45358","line":23,"column":42,"nodeType":"45359","messageId":"45360","endLine":23,"endColumn":45,"suggestions":"45690"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":40,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":43,"suggestions":"45691"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":40,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":43,"suggestions":"45692"},{"ruleId":"45357","severity":2,"message":"45358","line":55,"column":40,"nodeType":"45359","messageId":"45360","endLine":55,"endColumn":43,"suggestions":"45693"},{"ruleId":"45357","severity":2,"message":"45358","line":77,"column":40,"nodeType":"45359","messageId":"45360","endLine":77,"endColumn":43,"suggestions":"45694"},{"ruleId":"45357","severity":2,"message":"45358","line":99,"column":46,"nodeType":"45359","messageId":"45360","endLine":99,"endColumn":49,"suggestions":"45695"},{"ruleId":"45357","severity":2,"message":"45358","line":105,"column":56,"nodeType":"45359","messageId":"45360","endLine":105,"endColumn":59,"suggestions":"45696"},{"ruleId":"45357","severity":2,"message":"45358","line":108,"column":45,"nodeType":"45359","messageId":"45360","endLine":108,"endColumn":48,"suggestions":"45697"},{"ruleId":"45357","severity":2,"message":"45358","line":114,"column":46,"nodeType":"45359","messageId":"45360","endLine":114,"endColumn":49,"suggestions":"45698"},{"ruleId":"45357","severity":2,"message":"45358","line":122,"column":56,"nodeType":"45359","messageId":"45360","endLine":122,"endColumn":59,"suggestions":"45699"},{"ruleId":"45357","severity":2,"message":"45358","line":125,"column":45,"nodeType":"45359","messageId":"45360","endLine":125,"endColumn":48,"suggestions":"45700"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":40,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":43,"suggestions":"45701"},{"ruleId":"45357","severity":2,"message":"45358","line":161,"column":40,"nodeType":"45359","messageId":"45360","endLine":161,"endColumn":43,"suggestions":"45702"},{"ruleId":"45357","severity":2,"message":"45358","line":177,"column":40,"nodeType":"45359","messageId":"45360","endLine":177,"endColumn":43,"suggestions":"45703"},{"ruleId":"45357","severity":2,"message":"45358","line":206,"column":40,"nodeType":"45359","messageId":"45360","endLine":206,"endColumn":43,"suggestions":"45704"},{"ruleId":"45357","severity":2,"message":"45358","line":208,"column":47,"nodeType":"45359","messageId":"45360","endLine":208,"endColumn":50,"suggestions":"45705"},{"ruleId":"45357","severity":2,"message":"45358","line":218,"column":40,"nodeType":"45359","messageId":"45360","endLine":218,"endColumn":43,"suggestions":"45706"},{"ruleId":"45357","severity":2,"message":"45358","line":321,"column":40,"nodeType":"45359","messageId":"45360","endLine":321,"endColumn":43,"suggestions":"45707"},{"ruleId":"45357","severity":2,"message":"45358","line":54,"column":43,"nodeType":"45359","messageId":"45360","endLine":54,"endColumn":46,"suggestions":"45708"},{"ruleId":"45357","severity":2,"message":"45358","line":130,"column":21,"nodeType":"45359","messageId":"45360","endLine":130,"endColumn":24,"suggestions":"45709"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":19,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":22,"suggestions":"45710"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":54,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":57,"suggestions":"45711"},{"ruleId":"45357","severity":2,"message":"45358","line":142,"column":37,"nodeType":"45359","messageId":"45360","endLine":142,"endColumn":40,"suggestions":"45712"},{"ruleId":"45357","severity":2,"message":"45358","line":153,"column":46,"nodeType":"45359","messageId":"45360","endLine":153,"endColumn":49,"suggestions":"45713"},{"ruleId":"45357","severity":2,"message":"45358","line":214,"column":54,"nodeType":"45359","messageId":"45360","endLine":214,"endColumn":57,"suggestions":"45714"},{"ruleId":"45357","severity":2,"message":"45358","line":216,"column":34,"nodeType":"45359","messageId":"45360","endLine":216,"endColumn":37,"suggestions":"45715"},{"ruleId":"45357","severity":2,"message":"45358","line":29,"column":38,"nodeType":"45359","messageId":"45360","endLine":29,"endColumn":41,"suggestions":"45716"},{"ruleId":"45357","severity":2,"message":"45358","line":173,"column":21,"nodeType":"45359","messageId":"45360","endLine":173,"endColumn":24,"suggestions":"45717"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":28,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":31,"suggestions":"45718"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":36,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":39,"suggestions":"45719"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":47,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":50,"suggestions":"45720"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":65,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":68,"suggestions":"45721"},{"ruleId":"45357","severity":2,"message":"45358","line":80,"column":59,"nodeType":"45359","messageId":"45360","endLine":80,"endColumn":62,"suggestions":"45722"},{"ruleId":"45357","severity":2,"message":"45358","line":105,"column":65,"nodeType":"45359","messageId":"45360","endLine":105,"endColumn":68,"suggestions":"45723"},{"ruleId":"45357","severity":2,"message":"45358","line":106,"column":59,"nodeType":"45359","messageId":"45360","endLine":106,"endColumn":62,"suggestions":"45724"},{"ruleId":"45357","severity":2,"message":"45358","line":123,"column":43,"nodeType":"45359","messageId":"45360","endLine":123,"endColumn":46,"suggestions":"45725"},{"ruleId":"45357","severity":2,"message":"45358","line":166,"column":43,"nodeType":"45359","messageId":"45360","endLine":166,"endColumn":46,"suggestions":"45726"},{"ruleId":"45357","severity":2,"message":"45358","line":186,"column":51,"nodeType":"45359","messageId":"45360","endLine":186,"endColumn":54,"suggestions":"45727"},{"ruleId":"45357","severity":2,"message":"45358","line":187,"column":49,"nodeType":"45359","messageId":"45360","endLine":187,"endColumn":52,"suggestions":"45728"},{"ruleId":"45357","severity":2,"message":"45358","line":211,"column":43,"nodeType":"45359","messageId":"45360","endLine":211,"endColumn":46,"suggestions":"45729"},{"ruleId":"45357","severity":2,"message":"45358","line":228,"column":43,"nodeType":"45359","messageId":"45360","endLine":228,"endColumn":46,"suggestions":"45730"},{"ruleId":"45357","severity":2,"message":"45358","line":249,"column":43,"nodeType":"45359","messageId":"45360","endLine":249,"endColumn":46,"suggestions":"45731"},{"ruleId":"45357","severity":2,"message":"45358","line":280,"column":45,"nodeType":"45359","messageId":"45360","endLine":280,"endColumn":48,"suggestions":"45732"},{"ruleId":"45357","severity":2,"message":"45358","line":320,"column":45,"nodeType":"45359","messageId":"45360","endLine":320,"endColumn":48,"suggestions":"45733"},{"ruleId":"45357","severity":2,"message":"45358","line":351,"column":45,"nodeType":"45359","messageId":"45360","endLine":351,"endColumn":48,"suggestions":"45734"},{"ruleId":"45357","severity":2,"message":"45358","line":388,"column":57,"nodeType":"45359","messageId":"45360","endLine":388,"endColumn":60,"suggestions":"45735"},{"ruleId":"45357","severity":2,"message":"45358","line":389,"column":63,"nodeType":"45359","messageId":"45360","endLine":389,"endColumn":66,"suggestions":"45736"},{"ruleId":"45357","severity":2,"message":"45358","line":390,"column":61,"nodeType":"45359","messageId":"45360","endLine":390,"endColumn":64,"suggestions":"45737"},{"ruleId":"45357","severity":2,"message":"45358","line":433,"column":53,"nodeType":"45359","messageId":"45360","endLine":433,"endColumn":56,"suggestions":"45738"},{"ruleId":"45357","severity":2,"message":"45358","line":434,"column":65,"nodeType":"45359","messageId":"45360","endLine":434,"endColumn":68,"suggestions":"45739"},{"ruleId":"45357","severity":2,"message":"45358","line":435,"column":63,"nodeType":"45359","messageId":"45360","endLine":435,"endColumn":66,"suggestions":"45740"},{"ruleId":"45357","severity":2,"message":"45358","line":464,"column":55,"nodeType":"45359","messageId":"45360","endLine":464,"endColumn":58,"suggestions":"45741"},{"ruleId":"45357","severity":2,"message":"45358","line":510,"column":55,"nodeType":"45359","messageId":"45360","endLine":510,"endColumn":58,"suggestions":"45742"},{"ruleId":"45357","severity":2,"message":"45358","line":511,"column":69,"nodeType":"45359","messageId":"45360","endLine":511,"endColumn":72,"suggestions":"45743"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":52,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":55,"suggestions":"45744"},{"ruleId":"45357","severity":2,"message":"45358","line":146,"column":65,"nodeType":"45359","messageId":"45360","endLine":146,"endColumn":68,"suggestions":"45745"},{"ruleId":"45357","severity":2,"message":"45358","line":147,"column":59,"nodeType":"45359","messageId":"45360","endLine":147,"endColumn":62,"suggestions":"45746"},{"ruleId":"45357","severity":2,"message":"45358","line":148,"column":49,"nodeType":"45359","messageId":"45360","endLine":148,"endColumn":52,"suggestions":"45747"},{"ruleId":"45357","severity":2,"message":"45358","line":149,"column":53,"nodeType":"45359","messageId":"45360","endLine":149,"endColumn":56,"suggestions":"45748"},{"ruleId":"45357","severity":2,"message":"45358","line":150,"column":55,"nodeType":"45359","messageId":"45360","endLine":150,"endColumn":58,"suggestions":"45749"},{"ruleId":"45357","severity":2,"message":"45358","line":151,"column":67,"nodeType":"45359","messageId":"45360","endLine":151,"endColumn":70,"suggestions":"45750"},{"ruleId":"45357","severity":2,"message":"45358","line":152,"column":59,"nodeType":"45359","messageId":"45360","endLine":152,"endColumn":62,"suggestions":"45751"},{"ruleId":"45357","severity":2,"message":"45358","line":153,"column":55,"nodeType":"45359","messageId":"45360","endLine":153,"endColumn":58,"suggestions":"45752"},{"ruleId":"45357","severity":2,"message":"45358","line":154,"column":61,"nodeType":"45359","messageId":"45360","endLine":154,"endColumn":64,"suggestions":"45753"},{"ruleId":"45357","severity":2,"message":"45358","line":155,"column":63,"nodeType":"45359","messageId":"45360","endLine":155,"endColumn":66,"suggestions":"45754"},{"ruleId":"45357","severity":2,"message":"45358","line":156,"column":59,"nodeType":"45359","messageId":"45360","endLine":156,"endColumn":62,"suggestions":"45755"},{"ruleId":"45357","severity":2,"message":"45358","line":214,"column":54,"nodeType":"45359","messageId":"45360","endLine":214,"endColumn":57,"suggestions":"45756"},{"ruleId":"45357","severity":2,"message":"45358","line":236,"column":65,"nodeType":"45359","messageId":"45360","endLine":236,"endColumn":68,"suggestions":"45757"},{"ruleId":"45357","severity":2,"message":"45358","line":237,"column":57,"nodeType":"45359","messageId":"45360","endLine":237,"endColumn":60,"suggestions":"45758"},{"ruleId":"45357","severity":2,"message":"45358","line":238,"column":53,"nodeType":"45359","messageId":"45360","endLine":238,"endColumn":56,"suggestions":"45759"},{"ruleId":"45357","severity":2,"message":"45358","line":239,"column":59,"nodeType":"45359","messageId":"45360","endLine":239,"endColumn":62,"suggestions":"45760"},{"ruleId":"45357","severity":2,"message":"45358","line":240,"column":61,"nodeType":"45359","messageId":"45360","endLine":240,"endColumn":64,"suggestions":"45761"},{"ruleId":"45357","severity":2,"message":"45358","line":308,"column":45,"nodeType":"45359","messageId":"45360","endLine":308,"endColumn":48,"suggestions":"45762"},{"ruleId":"45357","severity":2,"message":"45358","line":314,"column":45,"nodeType":"45359","messageId":"45360","endLine":314,"endColumn":48,"suggestions":"45763"},{"ruleId":"45357","severity":2,"message":"45358","line":374,"column":57,"nodeType":"45359","messageId":"45360","endLine":374,"endColumn":60,"suggestions":"45764"},{"ruleId":"45357","severity":2,"message":"45358","line":375,"column":67,"nodeType":"45359","messageId":"45360","endLine":375,"endColumn":70,"suggestions":"45765"},{"ruleId":"45357","severity":2,"message":"45358","line":376,"column":67,"nodeType":"45359","messageId":"45360","endLine":376,"endColumn":70,"suggestions":"45766"},{"ruleId":"45357","severity":2,"message":"45358","line":377,"column":67,"nodeType":"45359","messageId":"45360","endLine":377,"endColumn":70,"suggestions":"45767"},{"ruleId":"45357","severity":2,"message":"45358","line":378,"column":59,"nodeType":"45359","messageId":"45360","endLine":378,"endColumn":62,"suggestions":"45768"},{"ruleId":"45357","severity":2,"message":"45358","line":379,"column":71,"nodeType":"45359","messageId":"45360","endLine":379,"endColumn":74,"suggestions":"45769"},{"ruleId":"45357","severity":2,"message":"45358","line":380,"column":73,"nodeType":"45359","messageId":"45360","endLine":380,"endColumn":76,"suggestions":"45770"},{"ruleId":"45357","severity":2,"message":"45358","line":381,"column":61,"nodeType":"45359","messageId":"45360","endLine":381,"endColumn":64,"suggestions":"45771"},{"ruleId":"45357","severity":2,"message":"45358","line":417,"column":43,"nodeType":"45359","messageId":"45360","endLine":417,"endColumn":46,"suggestions":"45772"},{"ruleId":"45357","severity":2,"message":"45358","line":436,"column":57,"nodeType":"45359","messageId":"45360","endLine":436,"endColumn":60,"suggestions":"45773"},{"ruleId":"45357","severity":2,"message":"45358","line":444,"column":57,"nodeType":"45359","messageId":"45360","endLine":444,"endColumn":60,"suggestions":"45774"},{"ruleId":"45357","severity":2,"message":"45358","line":452,"column":53,"nodeType":"45359","messageId":"45360","endLine":452,"endColumn":56,"suggestions":"45775"},{"ruleId":"45357","severity":2,"message":"45358","line":454,"column":14,"nodeType":"45359","messageId":"45360","endLine":454,"endColumn":17,"suggestions":"45776"},{"ruleId":"45357","severity":2,"message":"45358","line":457,"column":14,"nodeType":"45359","messageId":"45360","endLine":457,"endColumn":17,"suggestions":"45777"},{"ruleId":"45357","severity":2,"message":"45358","line":521,"column":75,"nodeType":"45359","messageId":"45360","endLine":521,"endColumn":78,"suggestions":"45778"},{"ruleId":"45357","severity":2,"message":"45358","line":522,"column":75,"nodeType":"45359","messageId":"45360","endLine":522,"endColumn":78,"suggestions":"45779"},{"ruleId":"45357","severity":2,"message":"45358","line":523,"column":61,"nodeType":"45359","messageId":"45360","endLine":523,"endColumn":64,"suggestions":"45780"},{"ruleId":"45357","severity":2,"message":"45358","line":524,"column":59,"nodeType":"45359","messageId":"45360","endLine":524,"endColumn":62,"suggestions":"45781"},{"ruleId":"45357","severity":2,"message":"45358","line":541,"column":43,"nodeType":"45359","messageId":"45360","endLine":541,"endColumn":46,"suggestions":"45782"},{"ruleId":"45357","severity":2,"message":"45358","line":55,"column":24,"nodeType":"45359","messageId":"45360","endLine":55,"endColumn":27,"suggestions":"45783"},{"ruleId":"45357","severity":2,"message":"45358","line":543,"column":43,"nodeType":"45359","messageId":"45360","endLine":543,"endColumn":46,"suggestions":"45784"},{"ruleId":"45357","severity":2,"message":"45358","line":576,"column":43,"nodeType":"45359","messageId":"45360","endLine":576,"endColumn":46,"suggestions":"45785"},{"ruleId":"45357","severity":2,"message":"45358","line":630,"column":43,"nodeType":"45359","messageId":"45360","endLine":630,"endColumn":46,"suggestions":"45786"},{"ruleId":"45357","severity":2,"message":"45358","line":959,"column":43,"nodeType":"45359","messageId":"45360","endLine":959,"endColumn":46,"suggestions":"45787"},{"ruleId":"45357","severity":2,"message":"45358","line":993,"column":43,"nodeType":"45359","messageId":"45360","endLine":993,"endColumn":46,"suggestions":"45788"},{"ruleId":"45357","severity":2,"message":"45358","line":1030,"column":43,"nodeType":"45359","messageId":"45360","endLine":1030,"endColumn":46,"suggestions":"45789"},{"ruleId":"45357","severity":2,"message":"45358","line":1077,"column":63,"nodeType":"45359","messageId":"45360","endLine":1077,"endColumn":66,"suggestions":"45790"},{"ruleId":"45357","severity":2,"message":"45358","line":1086,"column":61,"nodeType":"45359","messageId":"45360","endLine":1086,"endColumn":64,"suggestions":"45791"},{"ruleId":"45357","severity":2,"message":"45358","line":1106,"column":43,"nodeType":"45359","messageId":"45360","endLine":1106,"endColumn":46,"suggestions":"45792"},{"ruleId":"45357","severity":2,"message":"45358","line":1124,"column":43,"nodeType":"45359","messageId":"45360","endLine":1124,"endColumn":46,"suggestions":"45793"},{"ruleId":"45357","severity":2,"message":"45358","line":1184,"column":43,"nodeType":"45359","messageId":"45360","endLine":1184,"endColumn":46,"suggestions":"45794"},{"ruleId":"45357","severity":2,"message":"45358","line":1228,"column":43,"nodeType":"45359","messageId":"45360","endLine":1228,"endColumn":46,"suggestions":"45795"},{"ruleId":"45357","severity":2,"message":"45358","line":1253,"column":43,"nodeType":"45359","messageId":"45360","endLine":1253,"endColumn":46,"suggestions":"45796"},{"ruleId":"45357","severity":2,"message":"45358","line":1291,"column":43,"nodeType":"45359","messageId":"45360","endLine":1291,"endColumn":46,"suggestions":"45797"},{"ruleId":"45357","severity":2,"message":"45358","line":1357,"column":43,"nodeType":"45359","messageId":"45360","endLine":1357,"endColumn":46,"suggestions":"45798"},{"ruleId":"45357","severity":2,"message":"45358","line":1396,"column":43,"nodeType":"45359","messageId":"45360","endLine":1396,"endColumn":46,"suggestions":"45799"},{"ruleId":"45357","severity":2,"message":"45358","line":1457,"column":43,"nodeType":"45359","messageId":"45360","endLine":1457,"endColumn":46,"suggestions":"45800"},{"ruleId":"45357","severity":2,"message":"45358","line":1504,"column":43,"nodeType":"45359","messageId":"45360","endLine":1504,"endColumn":46,"suggestions":"45801"},{"ruleId":"45357","severity":2,"message":"45358","line":1552,"column":43,"nodeType":"45359","messageId":"45360","endLine":1552,"endColumn":46,"suggestions":"45802"},{"ruleId":"45357","severity":2,"message":"45358","line":83,"column":21,"nodeType":"45359","messageId":"45360","endLine":83,"endColumn":24,"suggestions":"45803"},{"ruleId":"45357","severity":2,"message":"45358","line":281,"column":21,"nodeType":"45359","messageId":"45360","endLine":281,"endColumn":24,"suggestions":"45804"},{"ruleId":"45357","severity":2,"message":"45358","line":363,"column":21,"nodeType":"45359","messageId":"45360","endLine":363,"endColumn":24,"suggestions":"45805"},{"ruleId":"45357","severity":2,"message":"45358","line":406,"column":54,"nodeType":"45359","messageId":"45360","endLine":406,"endColumn":57,"suggestions":"45806"},{"ruleId":"45357","severity":2,"message":"45358","line":442,"column":21,"nodeType":"45359","messageId":"45360","endLine":442,"endColumn":24,"suggestions":"45807"},{"ruleId":"45357","severity":2,"message":"45358","line":478,"column":56,"nodeType":"45359","messageId":"45360","endLine":478,"endColumn":59,"suggestions":"45808"},{"ruleId":"45357","severity":2,"message":"45358","line":651,"column":21,"nodeType":"45359","messageId":"45360","endLine":651,"endColumn":24,"suggestions":"45809"},{"ruleId":"45357","severity":2,"message":"45358","line":1000,"column":21,"nodeType":"45359","messageId":"45360","endLine":1000,"endColumn":24,"suggestions":"45810"},{"ruleId":"45357","severity":2,"message":"45358","line":1070,"column":21,"nodeType":"45359","messageId":"45360","endLine":1070,"endColumn":24,"suggestions":"45811"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":17,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":20,"suggestions":"45812"},{"ruleId":"45357","severity":2,"message":"45358","line":89,"column":15,"nodeType":"45359","messageId":"45360","endLine":89,"endColumn":18,"suggestions":"45813"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":13,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":16,"suggestions":"45814"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":12,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":15,"suggestions":"45815"},{"ruleId":"45357","severity":2,"message":"45358","line":148,"column":17,"nodeType":"45359","messageId":"45360","endLine":148,"endColumn":20,"suggestions":"45816"},{"ruleId":"45357","severity":2,"message":"45358","line":184,"column":17,"nodeType":"45359","messageId":"45360","endLine":184,"endColumn":20,"suggestions":"45817"},{"ruleId":"45357","severity":2,"message":"45358","line":229,"column":38,"nodeType":"45359","messageId":"45360","endLine":229,"endColumn":41,"suggestions":"45818"},{"ruleId":"45357","severity":2,"message":"45358","line":245,"column":12,"nodeType":"45359","messageId":"45360","endLine":245,"endColumn":15,"suggestions":"45819"},{"ruleId":"45357","severity":2,"message":"45358","line":279,"column":19,"nodeType":"45359","messageId":"45360","endLine":279,"endColumn":22,"suggestions":"45820"},{"ruleId":"45357","severity":2,"message":"45358","line":280,"column":16,"nodeType":"45359","messageId":"45360","endLine":280,"endColumn":19,"suggestions":"45821"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":30,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":33,"suggestions":"45822"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":13,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":16,"suggestions":"45823"},{"ruleId":"45357","severity":2,"message":"45358","line":112,"column":21,"nodeType":"45359","messageId":"45360","endLine":112,"endColumn":24,"suggestions":"45824"},{"ruleId":"45357","severity":2,"message":"45358","line":120,"column":30,"nodeType":"45359","messageId":"45360","endLine":120,"endColumn":33,"suggestions":"45825"},{"ruleId":"45357","severity":2,"message":"45358","line":134,"column":29,"nodeType":"45359","messageId":"45360","endLine":134,"endColumn":32,"suggestions":"45826"},{"ruleId":"45357","severity":2,"message":"45358","line":164,"column":9,"nodeType":"45359","messageId":"45360","endLine":164,"endColumn":12,"suggestions":"45827"},{"ruleId":"45357","severity":2,"message":"45358","line":165,"column":9,"nodeType":"45359","messageId":"45360","endLine":165,"endColumn":12,"suggestions":"45828"},{"ruleId":"45357","severity":2,"message":"45358","line":170,"column":9,"nodeType":"45359","messageId":"45360","endLine":170,"endColumn":12,"suggestions":"45829"},{"ruleId":"45357","severity":2,"message":"45358","line":170,"column":56,"nodeType":"45359","messageId":"45360","endLine":170,"endColumn":59,"suggestions":"45830"},{"ruleId":"45357","severity":2,"message":"45358","line":175,"column":17,"nodeType":"45359","messageId":"45360","endLine":175,"endColumn":20,"suggestions":"45831"},{"ruleId":"45357","severity":2,"message":"45358","line":202,"column":32,"nodeType":"45359","messageId":"45360","endLine":202,"endColumn":35,"suggestions":"45832"},{"ruleId":"45357","severity":2,"message":"45358","line":203,"column":11,"nodeType":"45359","messageId":"45360","endLine":203,"endColumn":14,"suggestions":"45833"},{"ruleId":"45357","severity":2,"message":"45358","line":204,"column":19,"nodeType":"45359","messageId":"45360","endLine":204,"endColumn":22,"suggestions":"45834"},{"ruleId":"45357","severity":2,"message":"45358","line":217,"column":28,"nodeType":"45359","messageId":"45360","endLine":217,"endColumn":31,"suggestions":"45835"},{"ruleId":"45357","severity":2,"message":"45358","line":245,"column":32,"nodeType":"45359","messageId":"45360","endLine":245,"endColumn":35,"suggestions":"45836"},{"ruleId":"45357","severity":2,"message":"45358","line":246,"column":36,"nodeType":"45359","messageId":"45360","endLine":246,"endColumn":39,"suggestions":"45837"},{"ruleId":"45357","severity":2,"message":"45358","line":300,"column":32,"nodeType":"45359","messageId":"45360","endLine":300,"endColumn":35,"suggestions":"45838"},{"ruleId":"45357","severity":2,"message":"45358","line":301,"column":11,"nodeType":"45359","messageId":"45360","endLine":301,"endColumn":14,"suggestions":"45839"},{"ruleId":"45357","severity":2,"message":"45358","line":302,"column":19,"nodeType":"45359","messageId":"45360","endLine":302,"endColumn":22,"suggestions":"45840"},{"ruleId":"45357","severity":2,"message":"45358","line":349,"column":28,"nodeType":"45359","messageId":"45360","endLine":349,"endColumn":31,"suggestions":"45841"},{"ruleId":"45357","severity":2,"message":"45358","line":371,"column":32,"nodeType":"45359","messageId":"45360","endLine":371,"endColumn":35,"suggestions":"45842"},{"ruleId":"45357","severity":2,"message":"45358","line":372,"column":36,"nodeType":"45359","messageId":"45360","endLine":372,"endColumn":39,"suggestions":"45843"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":30,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":33,"suggestions":"45844"},{"ruleId":"45357","severity":2,"message":"45358","line":73,"column":13,"nodeType":"45359","messageId":"45360","endLine":73,"endColumn":16,"suggestions":"45845"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":21,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":24,"suggestions":"45846"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":30,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":33,"suggestions":"45847"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":29,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":32,"suggestions":"45848"},{"ruleId":"45357","severity":2,"message":"45358","line":123,"column":37,"nodeType":"45359","messageId":"45360","endLine":123,"endColumn":40,"suggestions":"45849"},{"ruleId":"45357","severity":2,"message":"45358","line":148,"column":9,"nodeType":"45359","messageId":"45360","endLine":148,"endColumn":12,"suggestions":"45850"},{"ruleId":"45357","severity":2,"message":"45358","line":149,"column":9,"nodeType":"45359","messageId":"45360","endLine":149,"endColumn":12,"suggestions":"45851"},{"ruleId":"45357","severity":2,"message":"45358","line":154,"column":9,"nodeType":"45359","messageId":"45360","endLine":154,"endColumn":12,"suggestions":"45852"},{"ruleId":"45357","severity":2,"message":"45358","line":154,"column":56,"nodeType":"45359","messageId":"45360","endLine":154,"endColumn":59,"suggestions":"45853"},{"ruleId":"45357","severity":2,"message":"45358","line":159,"column":17,"nodeType":"45359","messageId":"45360","endLine":159,"endColumn":20,"suggestions":"45854"},{"ruleId":"45357","severity":2,"message":"45358","line":244,"column":29,"nodeType":"45359","messageId":"45360","endLine":244,"endColumn":32,"suggestions":"45855"},{"ruleId":"45357","severity":2,"message":"45358","line":248,"column":20,"nodeType":"45359","messageId":"45360","endLine":248,"endColumn":23,"suggestions":"45856"},{"ruleId":"45357","severity":2,"message":"45358","line":248,"column":58,"nodeType":"45359","messageId":"45360","endLine":248,"endColumn":61,"suggestions":"45857"},{"ruleId":"45357","severity":2,"message":"45358","line":253,"column":34,"nodeType":"45359","messageId":"45360","endLine":253,"endColumn":37,"suggestions":"45858"},{"ruleId":"45357","severity":2,"message":"45358","line":254,"column":13,"nodeType":"45359","messageId":"45360","endLine":254,"endColumn":16,"suggestions":"45859"},{"ruleId":"45357","severity":2,"message":"45358","line":255,"column":21,"nodeType":"45359","messageId":"45360","endLine":255,"endColumn":24,"suggestions":"45860"},{"ruleId":"45357","severity":2,"message":"45358","line":262,"column":30,"nodeType":"45359","messageId":"45360","endLine":262,"endColumn":33,"suggestions":"45861"},{"ruleId":"45357","severity":2,"message":"45358","line":266,"column":34,"nodeType":"45359","messageId":"45360","endLine":266,"endColumn":37,"suggestions":"45862"},{"ruleId":"45357","severity":2,"message":"45358","line":267,"column":38,"nodeType":"45359","messageId":"45360","endLine":267,"endColumn":41,"suggestions":"45863"},{"ruleId":"45357","severity":2,"message":"45358","line":350,"column":19,"nodeType":"45359","messageId":"45360","endLine":350,"endColumn":22,"suggestions":"45864"},{"ruleId":"45357","severity":2,"message":"45358","line":395,"column":67,"nodeType":"45359","messageId":"45360","endLine":395,"endColumn":70,"suggestions":"45865"},{"ruleId":"45357","severity":2,"message":"45358","line":402,"column":29,"nodeType":"45359","messageId":"45360","endLine":402,"endColumn":32,"suggestions":"45866"},{"ruleId":"45357","severity":2,"message":"45358","line":418,"column":34,"nodeType":"45359","messageId":"45360","endLine":418,"endColumn":37,"suggestions":"45867"},{"ruleId":"45357","severity":2,"message":"45358","line":419,"column":13,"nodeType":"45359","messageId":"45360","endLine":419,"endColumn":16,"suggestions":"45868"},{"ruleId":"45357","severity":2,"message":"45358","line":420,"column":21,"nodeType":"45359","messageId":"45360","endLine":420,"endColumn":24,"suggestions":"45869"},{"ruleId":"45357","severity":2,"message":"45358","line":430,"column":30,"nodeType":"45359","messageId":"45360","endLine":430,"endColumn":33,"suggestions":"45870"},{"ruleId":"45357","severity":2,"message":"45358","line":439,"column":38,"nodeType":"45359","messageId":"45360","endLine":439,"endColumn":41,"suggestions":"45871"},{"ruleId":"45357","severity":2,"message":"45358","line":477,"column":19,"nodeType":"45359","messageId":"45360","endLine":477,"endColumn":22,"suggestions":"45872"},{"ruleId":"45357","severity":2,"message":"45358","line":138,"column":9,"nodeType":"45359","messageId":"45360","endLine":138,"endColumn":12,"suggestions":"45873"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":9,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":12,"suggestions":"45874"},{"ruleId":"45357","severity":2,"message":"45358","line":145,"column":9,"nodeType":"45359","messageId":"45360","endLine":145,"endColumn":12,"suggestions":"45875"},{"ruleId":"45357","severity":2,"message":"45358","line":145,"column":56,"nodeType":"45359","messageId":"45360","endLine":145,"endColumn":59,"suggestions":"45876"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":34,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":37,"suggestions":"45877"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":45,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":48,"suggestions":"45878"},{"ruleId":"45357","severity":2,"message":"45358","line":18,"column":34,"nodeType":"45359","messageId":"45360","endLine":18,"endColumn":37,"suggestions":"45879"},{"ruleId":"45357","severity":2,"message":"45358","line":66,"column":49,"nodeType":"45359","messageId":"45360","endLine":66,"endColumn":52,"suggestions":"45880"},{"ruleId":"45357","severity":2,"message":"45358","line":103,"column":43,"nodeType":"45359","messageId":"45360","endLine":103,"endColumn":46,"suggestions":"45881"},{"ruleId":"45357","severity":2,"message":"45358","line":142,"column":49,"nodeType":"45359","messageId":"45360","endLine":142,"endColumn":52,"suggestions":"45882"},{"ruleId":"45357","severity":2,"message":"45358","line":182,"column":43,"nodeType":"45359","messageId":"45360","endLine":182,"endColumn":46,"suggestions":"45883"},{"ruleId":"45357","severity":2,"message":"45358","line":212,"column":49,"nodeType":"45359","messageId":"45360","endLine":212,"endColumn":52,"suggestions":"45884"},{"ruleId":"45357","severity":2,"message":"45358","line":247,"column":43,"nodeType":"45359","messageId":"45360","endLine":247,"endColumn":46,"suggestions":"45885"},{"ruleId":"45357","severity":2,"message":"45358","line":286,"column":49,"nodeType":"45359","messageId":"45360","endLine":286,"endColumn":52,"suggestions":"45886"},{"ruleId":"45357","severity":2,"message":"45358","line":331,"column":43,"nodeType":"45359","messageId":"45360","endLine":331,"endColumn":46,"suggestions":"45887"},{"ruleId":"45357","severity":2,"message":"45358","line":347,"column":10,"nodeType":"45359","messageId":"45360","endLine":347,"endColumn":13,"suggestions":"45888"},{"ruleId":"45357","severity":2,"message":"45358","line":367,"column":49,"nodeType":"45359","messageId":"45360","endLine":367,"endColumn":52,"suggestions":"45889"},{"ruleId":"45357","severity":2,"message":"45358","line":411,"column":45,"nodeType":"45359","messageId":"45360","endLine":411,"endColumn":48,"suggestions":"45890"},{"ruleId":"45357","severity":2,"message":"45358","line":440,"column":45,"nodeType":"45359","messageId":"45360","endLine":440,"endColumn":48,"suggestions":"45891"},{"ruleId":"45357","severity":2,"message":"45358","line":469,"column":49,"nodeType":"45359","messageId":"45360","endLine":469,"endColumn":52,"suggestions":"45892"},{"ruleId":"45357","severity":2,"message":"45358","line":506,"column":43,"nodeType":"45359","messageId":"45360","endLine":506,"endColumn":46,"suggestions":"45893"},{"ruleId":"45357","severity":2,"message":"45358","line":545,"column":49,"nodeType":"45359","messageId":"45360","endLine":545,"endColumn":52,"suggestions":"45894"},{"ruleId":"45357","severity":2,"message":"45358","line":582,"column":43,"nodeType":"45359","messageId":"45360","endLine":582,"endColumn":46,"suggestions":"45895"},{"ruleId":"45357","severity":2,"message":"45358","line":608,"column":34,"nodeType":"45359","messageId":"45360","endLine":608,"endColumn":37,"suggestions":"45896"},{"ruleId":"45357","severity":2,"message":"45358","line":608,"column":45,"nodeType":"45359","messageId":"45360","endLine":608,"endColumn":48,"suggestions":"45897"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":43,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":46,"suggestions":"45898"},{"ruleId":"45357","severity":2,"message":"45358","line":183,"column":43,"nodeType":"45359","messageId":"45360","endLine":183,"endColumn":46,"suggestions":"45899"},{"ruleId":"45357","severity":2,"message":"45358","line":245,"column":43,"nodeType":"45359","messageId":"45360","endLine":245,"endColumn":46,"suggestions":"45900"},{"ruleId":"45357","severity":2,"message":"45358","line":315,"column":43,"nodeType":"45359","messageId":"45360","endLine":315,"endColumn":46,"suggestions":"45901"},{"ruleId":"45357","severity":2,"message":"45358","line":350,"column":43,"nodeType":"45359","messageId":"45360","endLine":350,"endColumn":46,"suggestions":"45902"},{"ruleId":"45357","severity":2,"message":"45358","line":365,"column":43,"nodeType":"45359","messageId":"45360","endLine":365,"endColumn":46,"suggestions":"45903"},{"ruleId":"45357","severity":2,"message":"45358","line":398,"column":40,"nodeType":"45359","messageId":"45360","endLine":398,"endColumn":43,"suggestions":"45904"},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":3,"endColumn":76},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":36,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":39,"suggestions":"45905"},{"ruleId":"45357","severity":2,"message":"45358","line":77,"column":36,"nodeType":"45359","messageId":"45360","endLine":77,"endColumn":39,"suggestions":"45906"},{"ruleId":"45357","severity":2,"message":"45358","line":30,"column":24,"nodeType":"45359","messageId":"45360","endLine":30,"endColumn":27,"suggestions":"45907"},{"ruleId":"45357","severity":2,"message":"45358","line":128,"column":43,"nodeType":"45359","messageId":"45360","endLine":128,"endColumn":46,"suggestions":"45908"},{"ruleId":"45357","severity":2,"message":"45358","line":169,"column":43,"nodeType":"45359","messageId":"45360","endLine":169,"endColumn":46,"suggestions":"45909"},{"ruleId":"45357","severity":2,"message":"45358","line":187,"column":43,"nodeType":"45359","messageId":"45360","endLine":187,"endColumn":46,"suggestions":"45910"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":15,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":18,"suggestions":"45911"},{"ruleId":"45357","severity":2,"message":"45358","line":52,"column":24,"nodeType":"45359","messageId":"45360","endLine":52,"endColumn":27,"suggestions":"45912"},{"ruleId":"45357","severity":2,"message":"45358","line":55,"column":24,"nodeType":"45359","messageId":"45360","endLine":55,"endColumn":27,"suggestions":"45913"},{"ruleId":"45357","severity":2,"message":"45358","line":52,"column":24,"nodeType":"45359","messageId":"45360","endLine":52,"endColumn":27,"suggestions":"45914"},{"ruleId":"45357","severity":2,"message":"45358","line":97,"column":14,"nodeType":"45359","messageId":"45360","endLine":97,"endColumn":17,"suggestions":"45915"},{"ruleId":"45357","severity":2,"message":"45358","line":100,"column":14,"nodeType":"45359","messageId":"45360","endLine":100,"endColumn":17,"suggestions":"45916"},{"ruleId":"45357","severity":2,"message":"45358","line":102,"column":14,"nodeType":"45359","messageId":"45360","endLine":102,"endColumn":17,"suggestions":"45917"},{"ruleId":"45357","severity":2,"message":"45358","line":108,"column":27,"nodeType":"45359","messageId":"45360","endLine":108,"endColumn":30,"suggestions":"45918"},{"ruleId":"45357","severity":2,"message":"45358","line":108,"column":50,"nodeType":"45359","messageId":"45360","endLine":108,"endColumn":53,"suggestions":"45919"},{"ruleId":"45357","severity":2,"message":"45358","line":120,"column":14,"nodeType":"45359","messageId":"45360","endLine":120,"endColumn":17,"suggestions":"45920"},{"ruleId":"45357","severity":2,"message":"45358","line":124,"column":14,"nodeType":"45359","messageId":"45360","endLine":124,"endColumn":17,"suggestions":"45921"},{"ruleId":"45357","severity":2,"message":"45358","line":126,"column":14,"nodeType":"45359","messageId":"45360","endLine":126,"endColumn":17,"suggestions":"45922"},{"ruleId":"45357","severity":2,"message":"45358","line":135,"column":25,"nodeType":"45359","messageId":"45360","endLine":135,"endColumn":28,"suggestions":"45923"},{"ruleId":"45357","severity":2,"message":"45358","line":135,"column":48,"nodeType":"45359","messageId":"45360","endLine":135,"endColumn":51,"suggestions":"45924"},{"ruleId":"45357","severity":2,"message":"45358","line":136,"column":25,"nodeType":"45359","messageId":"45360","endLine":136,"endColumn":28,"suggestions":"45925"},{"ruleId":"45357","severity":2,"message":"45358","line":136,"column":48,"nodeType":"45359","messageId":"45360","endLine":136,"endColumn":51,"suggestions":"45926"},{"ruleId":"45357","severity":2,"message":"45358","line":144,"column":31,"nodeType":"45359","messageId":"45360","endLine":144,"endColumn":34,"suggestions":"45927"},{"ruleId":"45357","severity":2,"message":"45358","line":26,"column":18,"nodeType":"45359","messageId":"45360","endLine":26,"endColumn":21,"suggestions":"45928"},{"ruleId":"45357","severity":2,"message":"45358","line":27,"column":12,"nodeType":"45359","messageId":"45360","endLine":27,"endColumn":15,"suggestions":"45929"},{"ruleId":"45357","severity":2,"message":"45358","line":28,"column":14,"nodeType":"45359","messageId":"45360","endLine":28,"endColumn":17,"suggestions":"45930"},{"ruleId":"45357","severity":2,"message":"45358","line":29,"column":12,"nodeType":"45359","messageId":"45360","endLine":29,"endColumn":15,"suggestions":"45931"},{"ruleId":"45357","severity":2,"message":"45358","line":196,"column":36,"nodeType":"45359","messageId":"45360","endLine":196,"endColumn":39,"suggestions":"45932"},{"ruleId":"45357","severity":2,"message":"45358","line":233,"column":36,"nodeType":"45359","messageId":"45360","endLine":233,"endColumn":39,"suggestions":"45933"},{"ruleId":"45357","severity":2,"message":"45358","line":310,"column":30,"nodeType":"45359","messageId":"45360","endLine":310,"endColumn":33,"suggestions":"45934"},{"ruleId":"45357","severity":2,"message":"45358","line":494,"column":30,"nodeType":"45359","messageId":"45360","endLine":494,"endColumn":33,"suggestions":"45935"},{"ruleId":"45357","severity":2,"message":"45358","line":507,"column":30,"nodeType":"45359","messageId":"45360","endLine":507,"endColumn":33,"suggestions":"45936"},{"ruleId":"45357","severity":2,"message":"45358","line":530,"column":30,"nodeType":"45359","messageId":"45360","endLine":530,"endColumn":33,"suggestions":"45937"},{"ruleId":"45357","severity":2,"message":"45358","line":542,"column":30,"nodeType":"45359","messageId":"45360","endLine":542,"endColumn":33,"suggestions":"45938"},{"ruleId":"45357","severity":2,"message":"45358","line":628,"column":31,"nodeType":"45359","messageId":"45360","endLine":628,"endColumn":34,"suggestions":"45939"},{"ruleId":"45357","severity":2,"message":"45358","line":248,"column":45,"nodeType":"45359","messageId":"45360","endLine":248,"endColumn":48,"suggestions":"45940"},{"ruleId":"45357","severity":2,"message":"45358","line":61,"column":12,"nodeType":"45359","messageId":"45360","endLine":61,"endColumn":15,"suggestions":"45941"},{"ruleId":"45357","severity":2,"message":"45358","line":64,"column":12,"nodeType":"45359","messageId":"45360","endLine":64,"endColumn":15,"suggestions":"45942"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":37,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":40,"suggestions":"45943"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":48,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":51,"suggestions":"45944"},{"ruleId":"45357","severity":2,"message":"45358","line":116,"column":45,"nodeType":"45359","messageId":"45360","endLine":116,"endColumn":48,"suggestions":"45945"},{"ruleId":"45357","severity":2,"message":"45358","line":142,"column":12,"nodeType":"45359","messageId":"45360","endLine":142,"endColumn":15,"suggestions":"45946"},{"ruleId":"45357","severity":2,"message":"45358","line":152,"column":36,"nodeType":"45359","messageId":"45360","endLine":152,"endColumn":39,"suggestions":"45947"},{"ruleId":"45357","severity":2,"message":"45358","line":152,"column":48,"nodeType":"45359","messageId":"45360","endLine":152,"endColumn":51,"suggestions":"45948"},{"ruleId":"45357","severity":2,"message":"45358","line":175,"column":45,"nodeType":"45359","messageId":"45360","endLine":175,"endColumn":48,"suggestions":"45949"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":52,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":55,"suggestions":"45950"},{"ruleId":"45357","severity":2,"message":"45358","line":77,"column":56,"nodeType":"45359","messageId":"45360","endLine":77,"endColumn":59,"suggestions":"45951"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":52,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":55,"suggestions":"45952"},{"ruleId":"45357","severity":2,"message":"45358","line":118,"column":52,"nodeType":"45359","messageId":"45360","endLine":118,"endColumn":55,"suggestions":"45953"},{"ruleId":"45357","severity":2,"message":"45358","line":141,"column":49,"nodeType":"45359","messageId":"45360","endLine":141,"endColumn":52,"suggestions":"45954"},{"ruleId":"45357","severity":2,"message":"45358","line":158,"column":49,"nodeType":"45359","messageId":"45360","endLine":158,"endColumn":52,"suggestions":"45955"},{"ruleId":"45357","severity":2,"message":"45358","line":183,"column":53,"nodeType":"45359","messageId":"45360","endLine":183,"endColumn":56,"suggestions":"45956"},{"ruleId":"45357","severity":2,"message":"45358","line":195,"column":62,"nodeType":"45359","messageId":"45360","endLine":195,"endColumn":65,"suggestions":"45957"},{"ruleId":"45357","severity":2,"message":"45358","line":232,"column":57,"nodeType":"45359","messageId":"45360","endLine":232,"endColumn":60,"suggestions":"45958"},{"ruleId":"45357","severity":2,"message":"45358","line":105,"column":52,"nodeType":"45359","messageId":"45360","endLine":105,"endColumn":55,"suggestions":"45959"},{"ruleId":"45357","severity":2,"message":"45358","line":124,"column":52,"nodeType":"45359","messageId":"45360","endLine":124,"endColumn":55,"suggestions":"45960"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":52,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":55,"suggestions":"45961"},{"ruleId":"45357","severity":2,"message":"45358","line":162,"column":52,"nodeType":"45359","messageId":"45360","endLine":162,"endColumn":55,"suggestions":"45962"},{"ruleId":"45357","severity":2,"message":"45358","line":179,"column":12,"nodeType":"45359","messageId":"45360","endLine":179,"endColumn":15,"suggestions":"45963"},{"ruleId":"45357","severity":2,"message":"45358","line":184,"column":12,"nodeType":"45359","messageId":"45360","endLine":184,"endColumn":15,"suggestions":"45964"},{"ruleId":"45357","severity":2,"message":"45358","line":201,"column":12,"nodeType":"45359","messageId":"45360","endLine":201,"endColumn":15,"suggestions":"45965"},{"ruleId":"45357","severity":2,"message":"45358","line":229,"column":12,"nodeType":"45359","messageId":"45360","endLine":229,"endColumn":15,"suggestions":"45966"},{"ruleId":"45357","severity":2,"message":"45358","line":248,"column":52,"nodeType":"45359","messageId":"45360","endLine":248,"endColumn":55,"suggestions":"45967"},{"ruleId":"45357","severity":2,"message":"45358","line":257,"column":52,"nodeType":"45359","messageId":"45360","endLine":257,"endColumn":55,"suggestions":"45968"},{"ruleId":"45357","severity":2,"message":"45358","line":271,"column":50,"nodeType":"45359","messageId":"45360","endLine":271,"endColumn":53,"suggestions":"45969"},{"ruleId":"45357","severity":2,"message":"45358","line":284,"column":50,"nodeType":"45359","messageId":"45360","endLine":284,"endColumn":53,"suggestions":"45970"},{"ruleId":"45357","severity":2,"message":"45358","line":297,"column":51,"nodeType":"45359","messageId":"45360","endLine":297,"endColumn":54,"suggestions":"45971"},{"ruleId":"45357","severity":2,"message":"45358","line":311,"column":51,"nodeType":"45359","messageId":"45360","endLine":311,"endColumn":54,"suggestions":"45972"},{"ruleId":"45357","severity":2,"message":"45358","line":321,"column":52,"nodeType":"45359","messageId":"45360","endLine":321,"endColumn":55,"suggestions":"45973"},{"ruleId":"45357","severity":2,"message":"45358","line":340,"column":59,"nodeType":"45359","messageId":"45360","endLine":340,"endColumn":62,"suggestions":"45974"},{"ruleId":"45357","severity":2,"message":"45358","line":347,"column":45,"nodeType":"45359","messageId":"45360","endLine":347,"endColumn":48,"suggestions":"45975"},{"ruleId":"45357","severity":2,"message":"45358","line":354,"column":59,"nodeType":"45359","messageId":"45360","endLine":354,"endColumn":62,"suggestions":"45976"},{"ruleId":"45357","severity":2,"message":"45358","line":370,"column":52,"nodeType":"45359","messageId":"45360","endLine":370,"endColumn":55,"suggestions":"45977"},{"ruleId":"45357","severity":2,"message":"45358","line":264,"column":21,"nodeType":"45359","messageId":"45360","endLine":264,"endColumn":24,"suggestions":"45978"},{"ruleId":"45357","severity":2,"message":"45358","line":412,"column":46,"nodeType":"45359","messageId":"45360","endLine":412,"endColumn":49,"suggestions":"45979"},{"ruleId":"45357","severity":2,"message":"45358","line":419,"column":43,"nodeType":"45359","messageId":"45360","endLine":419,"endColumn":46,"suggestions":"45980"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":43,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":46,"suggestions":"45981"},{"ruleId":"45357","severity":2,"message":"45358","line":173,"column":43,"nodeType":"45359","messageId":"45360","endLine":173,"endColumn":46,"suggestions":"45982"},{"ruleId":"45357","severity":2,"message":"45358","line":205,"column":43,"nodeType":"45359","messageId":"45360","endLine":205,"endColumn":46,"suggestions":"45983"},{"ruleId":"45357","severity":2,"message":"45358","line":278,"column":43,"nodeType":"45359","messageId":"45360","endLine":278,"endColumn":46,"suggestions":"45984"},{"ruleId":"45357","severity":2,"message":"45358","line":353,"column":29,"nodeType":"45359","messageId":"45360","endLine":353,"endColumn":32,"suggestions":"45985"},{"ruleId":"45357","severity":2,"message":"45358","line":354,"column":26,"nodeType":"45359","messageId":"45360","endLine":354,"endColumn":29,"suggestions":"45986"},{"ruleId":"45357","severity":2,"message":"45358","line":355,"column":14,"nodeType":"45359","messageId":"45360","endLine":355,"endColumn":17,"suggestions":"45987"},{"ruleId":"45357","severity":2,"message":"45358","line":356,"column":18,"nodeType":"45359","messageId":"45360","endLine":356,"endColumn":21,"suggestions":"45988"},{"ruleId":"45357","severity":2,"message":"45358","line":359,"column":26,"nodeType":"45359","messageId":"45360","endLine":359,"endColumn":29,"suggestions":"45989"},{"ruleId":"45357","severity":2,"message":"45358","line":390,"column":40,"nodeType":"45359","messageId":"45360","endLine":390,"endColumn":43,"suggestions":"45990"},{"ruleId":"45357","severity":2,"message":"45358","line":390,"column":69,"nodeType":"45359","messageId":"45360","endLine":390,"endColumn":72,"suggestions":"45991"},{"ruleId":"45357","severity":2,"message":"45358","line":605,"column":25,"nodeType":"45359","messageId":"45360","endLine":605,"endColumn":28,"suggestions":"45992"},{"ruleId":"45357","severity":2,"message":"45358","line":836,"column":43,"nodeType":"45359","messageId":"45360","endLine":836,"endColumn":46,"suggestions":"45993"},{"ruleId":"45357","severity":2,"message":"45358","line":902,"column":43,"nodeType":"45359","messageId":"45360","endLine":902,"endColumn":46,"suggestions":"45994"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":47,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":50,"suggestions":"45995"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":59,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":62,"suggestions":"45996"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":52,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":55,"suggestions":"45997"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":64,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":67,"suggestions":"45998"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":43,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":46,"suggestions":"45999"},{"ruleId":"45357","severity":2,"message":"45358","line":78,"column":43,"nodeType":"45359","messageId":"45360","endLine":78,"endColumn":46,"suggestions":"46000"},{"ruleId":"45357","severity":2,"message":"45358","line":97,"column":43,"nodeType":"45359","messageId":"45360","endLine":97,"endColumn":46,"suggestions":"46001"},{"ruleId":"45357","severity":2,"message":"45358","line":123,"column":43,"nodeType":"45359","messageId":"45360","endLine":123,"endColumn":46,"suggestions":"46002"},{"ruleId":"45357","severity":2,"message":"45358","line":143,"column":43,"nodeType":"45359","messageId":"45360","endLine":143,"endColumn":46,"suggestions":"46003"},{"ruleId":"45357","severity":2,"message":"45358","line":173,"column":43,"nodeType":"45359","messageId":"45360","endLine":173,"endColumn":46,"suggestions":"46004"},{"ruleId":"45357","severity":2,"message":"45358","line":23,"column":12,"nodeType":"45359","messageId":"45360","endLine":23,"endColumn":15,"suggestions":"46005"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":12,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":15,"suggestions":"46006"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":34,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":37,"suggestions":"46007"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":43,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":46,"suggestions":"46008"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":59,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":62,"suggestions":"46009"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":59,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":62,"suggestions":"46010"},{"ruleId":"45357","severity":2,"message":"45358","line":116,"column":87,"nodeType":"45359","messageId":"45360","endLine":116,"endColumn":90,"suggestions":"46011"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":37,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":40,"suggestions":"46012"},{"ruleId":"45357","severity":2,"message":"45358","line":188,"column":35,"nodeType":"45359","messageId":"45360","endLine":188,"endColumn":38,"suggestions":"46013"},{"ruleId":"45357","severity":2,"message":"45358","line":221,"column":37,"nodeType":"45359","messageId":"45360","endLine":221,"endColumn":40,"suggestions":"46014"},{"ruleId":"45357","severity":2,"message":"45358","line":254,"column":19,"nodeType":"45359","messageId":"45360","endLine":254,"endColumn":22,"suggestions":"46015"},{"ruleId":"45357","severity":2,"message":"45358","line":272,"column":37,"nodeType":"45359","messageId":"45360","endLine":272,"endColumn":40,"suggestions":"46016"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":15,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":18,"suggestions":"46017"},{"ruleId":"45357","severity":2,"message":"45358","line":142,"column":55,"nodeType":"45359","messageId":"45360","endLine":142,"endColumn":58,"suggestions":"46018"},{"ruleId":"45357","severity":2,"message":"45358","line":146,"column":17,"nodeType":"45359","messageId":"45360","endLine":146,"endColumn":20,"suggestions":"46019"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":32,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":35,"suggestions":"46020","suppressions":"46021"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":64,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":67,"suggestions":"46022"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":43,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":46,"suggestions":"46023"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":43,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":46,"suggestions":"46024"},{"ruleId":"45357","severity":2,"message":"45358","line":152,"column":55,"nodeType":"45359","messageId":"45360","endLine":152,"endColumn":58,"suggestions":"46025"},{"ruleId":"45357","severity":2,"message":"45358","line":192,"column":54,"nodeType":"45359","messageId":"45360","endLine":192,"endColumn":57,"suggestions":"46026"},{"ruleId":"45357","severity":2,"message":"45358","line":196,"column":37,"nodeType":"45359","messageId":"45360","endLine":196,"endColumn":40,"suggestions":"46027"},{"ruleId":"45357","severity":2,"message":"45358","line":201,"column":33,"nodeType":"45359","messageId":"45360","endLine":201,"endColumn":36,"suggestions":"46028"},{"ruleId":"45357","severity":2,"message":"45358","line":202,"column":14,"nodeType":"45359","messageId":"45360","endLine":202,"endColumn":17,"suggestions":"46029"},{"ruleId":"45357","severity":2,"message":"45358","line":202,"column":51,"nodeType":"45359","messageId":"45360","endLine":202,"endColumn":54,"suggestions":"46030"},{"ruleId":"45357","severity":2,"message":"45358","line":203,"column":14,"nodeType":"45359","messageId":"45360","endLine":203,"endColumn":17,"suggestions":"46031"},{"ruleId":"45357","severity":2,"message":"45358","line":203,"column":63,"nodeType":"45359","messageId":"45360","endLine":203,"endColumn":66,"suggestions":"46032"},{"ruleId":"45357","severity":2,"message":"45358","line":204,"column":14,"nodeType":"45359","messageId":"45360","endLine":204,"endColumn":17,"suggestions":"46033"},{"ruleId":"45357","severity":2,"message":"45358","line":204,"column":63,"nodeType":"45359","messageId":"45360","endLine":204,"endColumn":66,"suggestions":"46034"},{"ruleId":"45357","severity":2,"message":"45358","line":210,"column":54,"nodeType":"45359","messageId":"45360","endLine":210,"endColumn":57,"suggestions":"46035"},{"ruleId":"45357","severity":2,"message":"45358","line":89,"column":19,"nodeType":"45359","messageId":"45360","endLine":89,"endColumn":22,"suggestions":"46036"},{"ruleId":"45357","severity":2,"message":"45358","line":246,"column":16,"nodeType":"45359","messageId":"45360","endLine":246,"endColumn":19,"suggestions":"46037"},{"ruleId":"45357","severity":2,"message":"45358","line":51,"column":55,"nodeType":"45359","messageId":"45360","endLine":51,"endColumn":58,"suggestions":"46038"},{"ruleId":"45357","severity":2,"message":"45358","line":55,"column":43,"nodeType":"45359","messageId":"45360","endLine":55,"endColumn":46,"suggestions":"46039"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":39,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":42,"suggestions":"46040"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":42,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":45,"suggestions":"46041"},{"ruleId":"45357","severity":2,"message":"45358","line":27,"column":36,"nodeType":"45359","messageId":"45360","endLine":27,"endColumn":39,"suggestions":"46042"},{"ruleId":"45357","severity":2,"message":"45358","line":27,"column":47,"nodeType":"45359","messageId":"45360","endLine":27,"endColumn":50,"suggestions":"46043"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":36,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":39,"suggestions":"46044"},{"ruleId":"45357","severity":2,"message":"45358","line":91,"column":27,"nodeType":"45359","messageId":"45360","endLine":91,"endColumn":30,"suggestions":"46045"},{"ruleId":"45357","severity":2,"message":"45358","line":114,"column":27,"nodeType":"45359","messageId":"45360","endLine":114,"endColumn":30,"suggestions":"46046"},{"ruleId":"45357","severity":2,"message":"45358","line":53,"column":37,"nodeType":"45359","messageId":"45360","endLine":53,"endColumn":40,"suggestions":"46047"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":28,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":31,"suggestions":"46048"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":37,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":40,"suggestions":"46049"},{"ruleId":"45357","severity":2,"message":"45358","line":117,"column":28,"nodeType":"45359","messageId":"45360","endLine":117,"endColumn":31,"suggestions":"46050"},{"ruleId":"45357","severity":2,"message":"45358","line":16,"column":72,"nodeType":"45359","messageId":"45360","endLine":16,"endColumn":75,"suggestions":"46051"},{"ruleId":"45357","severity":2,"message":"45358","line":197,"column":35,"nodeType":"45359","messageId":"45360","endLine":197,"endColumn":38,"suggestions":"46052"},{"ruleId":"45357","severity":2,"message":"45358","line":210,"column":37,"nodeType":"45359","messageId":"45360","endLine":210,"endColumn":40,"suggestions":"46053"},{"ruleId":"45357","severity":2,"message":"45358","line":131,"column":9,"nodeType":"45359","messageId":"45360","endLine":131,"endColumn":12,"suggestions":"46054","suppressions":"46055"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":43,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":46,"suggestions":"46056"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":43,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":46,"suggestions":"46057"},{"ruleId":"45357","severity":2,"message":"45358","line":91,"column":45,"nodeType":"45359","messageId":"45360","endLine":91,"endColumn":48,"suggestions":"46058"},{"ruleId":"45357","severity":2,"message":"45358","line":108,"column":43,"nodeType":"45359","messageId":"45360","endLine":108,"endColumn":46,"suggestions":"46059"},{"ruleId":"45357","severity":2,"message":"45358","line":122,"column":43,"nodeType":"45359","messageId":"45360","endLine":122,"endColumn":46,"suggestions":"46060"},{"ruleId":"45357","severity":2,"message":"45358","line":136,"column":43,"nodeType":"45359","messageId":"45360","endLine":136,"endColumn":46,"suggestions":"46061"},{"ruleId":"45357","severity":2,"message":"45358","line":149,"column":43,"nodeType":"45359","messageId":"45360","endLine":149,"endColumn":46,"suggestions":"46062"},{"ruleId":"45357","severity":2,"message":"45358","line":162,"column":43,"nodeType":"45359","messageId":"45360","endLine":162,"endColumn":46,"suggestions":"46063"},{"ruleId":"45357","severity":2,"message":"45358","line":35,"column":21,"nodeType":"45359","messageId":"45360","endLine":35,"endColumn":24,"suggestions":"46064"},{"ruleId":"45357","severity":2,"message":"45358","line":12,"column":46,"nodeType":"45359","messageId":"45360","endLine":12,"endColumn":49,"suggestions":"46065"},{"ruleId":"45357","severity":2,"message":"45358","line":23,"column":46,"nodeType":"45359","messageId":"45360","endLine":23,"endColumn":49,"suggestions":"46066"},{"ruleId":"45357","severity":2,"message":"45358","line":125,"column":48,"nodeType":"45359","messageId":"45360","endLine":125,"endColumn":51,"suggestions":"46067"},{"ruleId":"45357","severity":2,"message":"45358","line":333,"column":46,"nodeType":"45359","messageId":"45360","endLine":333,"endColumn":49,"suggestions":"46068"},{"ruleId":"45357","severity":2,"message":"45358","line":347,"column":46,"nodeType":"45359","messageId":"45360","endLine":347,"endColumn":49,"suggestions":"46069"},{"ruleId":"45357","severity":2,"message":"45358","line":430,"column":46,"nodeType":"45359","messageId":"45360","endLine":430,"endColumn":49,"suggestions":"46070"},{"ruleId":"45357","severity":2,"message":"45358","line":553,"column":52,"nodeType":"45359","messageId":"45360","endLine":553,"endColumn":55,"suggestions":"46071"},{"ruleId":"45357","severity":2,"message":"45358","line":640,"column":48,"nodeType":"45359","messageId":"45360","endLine":640,"endColumn":51,"suggestions":"46072"},{"ruleId":"45357","severity":2,"message":"45358","line":664,"column":48,"nodeType":"45359","messageId":"45360","endLine":664,"endColumn":51,"suggestions":"46073"},{"ruleId":"45357","severity":2,"message":"45358","line":20,"column":46,"nodeType":"45359","messageId":"45360","endLine":20,"endColumn":49,"suggestions":"46074"},{"ruleId":"45357","severity":2,"message":"45358","line":31,"column":46,"nodeType":"45359","messageId":"45360","endLine":31,"endColumn":49,"suggestions":"46075"},{"ruleId":"45357","severity":2,"message":"45358","line":127,"column":48,"nodeType":"45359","messageId":"45360","endLine":127,"endColumn":51,"suggestions":"46076"},{"ruleId":"45357","severity":2,"message":"45358","line":227,"column":46,"nodeType":"45359","messageId":"45360","endLine":227,"endColumn":49,"suggestions":"46077"},{"ruleId":"45357","severity":2,"message":"45358","line":239,"column":46,"nodeType":"45359","messageId":"45360","endLine":239,"endColumn":49,"suggestions":"46078"},{"ruleId":"45357","severity":2,"message":"45358","line":352,"column":48,"nodeType":"45359","messageId":"45360","endLine":352,"endColumn":51,"suggestions":"46079"},{"ruleId":"45357","severity":2,"message":"45358","line":548,"column":46,"nodeType":"45359","messageId":"45360","endLine":548,"endColumn":49,"suggestions":"46080"},{"ruleId":"45357","severity":2,"message":"45358","line":575,"column":48,"nodeType":"45359","messageId":"45360","endLine":575,"endColumn":51,"suggestions":"46081"},{"ruleId":"45357","severity":2,"message":"45358","line":600,"column":48,"nodeType":"45359","messageId":"45360","endLine":600,"endColumn":51,"suggestions":"46082"},{"ruleId":"45357","severity":2,"message":"45358","line":15,"column":46,"nodeType":"45359","messageId":"45360","endLine":15,"endColumn":49,"suggestions":"46083"},{"ruleId":"45357","severity":2,"message":"45358","line":26,"column":46,"nodeType":"45359","messageId":"45360","endLine":26,"endColumn":49,"suggestions":"46084"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":46,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":49,"suggestions":"46085"},{"ruleId":"45357","severity":2,"message":"45358","line":53,"column":46,"nodeType":"45359","messageId":"45360","endLine":53,"endColumn":49,"suggestions":"46086"},{"ruleId":"45357","severity":2,"message":"45358","line":164,"column":48,"nodeType":"45359","messageId":"45360","endLine":164,"endColumn":51,"suggestions":"46087"},{"ruleId":"45357","severity":2,"message":"45358","line":190,"column":48,"nodeType":"45359","messageId":"45360","endLine":190,"endColumn":51,"suggestions":"46088"},{"ruleId":"45357","severity":2,"message":"45358","line":107,"column":49,"nodeType":"45359","messageId":"45360","endLine":107,"endColumn":52,"suggestions":"46089"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":43,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":46,"suggestions":"46090"},{"ruleId":"45357","severity":2,"message":"45358","line":160,"column":49,"nodeType":"45359","messageId":"45360","endLine":160,"endColumn":52,"suggestions":"46091"},{"ruleId":"45357","severity":2,"message":"45358","line":162,"column":43,"nodeType":"45359","messageId":"45360","endLine":162,"endColumn":46,"suggestions":"46092"},{"ruleId":"45357","severity":2,"message":"45358","line":209,"column":32,"nodeType":"45359","messageId":"45360","endLine":209,"endColumn":35,"suggestions":"46093"},{"ruleId":"45357","severity":2,"message":"45358","line":212,"column":25,"nodeType":"45359","messageId":"45360","endLine":212,"endColumn":28,"suggestions":"46094"},{"ruleId":"45357","severity":2,"message":"45358","line":216,"column":47,"nodeType":"45359","messageId":"45360","endLine":216,"endColumn":50,"suggestions":"46095"},{"ruleId":"45357","severity":2,"message":"45358","line":364,"column":49,"nodeType":"45359","messageId":"45360","endLine":364,"endColumn":52,"suggestions":"46096"},{"ruleId":"45357","severity":2,"message":"45358","line":366,"column":40,"nodeType":"45359","messageId":"45360","endLine":366,"endColumn":43,"suggestions":"46097"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":44,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":47,"suggestions":"46098"},{"ruleId":"45357","severity":2,"message":"45358","line":50,"column":75,"nodeType":"45359","messageId":"45360","endLine":50,"endColumn":78,"suggestions":"46099"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":44,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":47,"suggestions":"46100"},{"ruleId":"45357","severity":2,"message":"45358","line":81,"column":75,"nodeType":"45359","messageId":"45360","endLine":81,"endColumn":78,"suggestions":"46101"},{"ruleId":"45357","severity":2,"message":"45358","line":117,"column":75,"nodeType":"45359","messageId":"45360","endLine":117,"endColumn":78,"suggestions":"46102"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":14,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":17,"suggestions":"46103"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":70,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":73,"suggestions":"46104"},{"ruleId":"45357","severity":2,"message":"45358","line":78,"column":14,"nodeType":"45359","messageId":"45360","endLine":78,"endColumn":17,"suggestions":"46105"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":70,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":73,"suggestions":"46106"},{"ruleId":"45357","severity":2,"message":"45358","line":103,"column":14,"nodeType":"45359","messageId":"45360","endLine":103,"endColumn":17,"suggestions":"46107"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":70,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":73,"suggestions":"46108"},{"ruleId":"45357","severity":2,"message":"45358","line":129,"column":14,"nodeType":"45359","messageId":"45360","endLine":129,"endColumn":17,"suggestions":"46109"},{"ruleId":"45357","severity":2,"message":"45358","line":135,"column":70,"nodeType":"45359","messageId":"45360","endLine":135,"endColumn":73,"suggestions":"46110"},{"ruleId":"45357","severity":2,"message":"45358","line":167,"column":17,"nodeType":"45359","messageId":"45360","endLine":167,"endColumn":20,"suggestions":"46111"},{"ruleId":"45357","severity":2,"message":"45358","line":174,"column":19,"nodeType":"45359","messageId":"45360","endLine":174,"endColumn":22,"suggestions":"46112"},{"ruleId":"45357","severity":2,"message":"45358","line":187,"column":19,"nodeType":"45359","messageId":"45360","endLine":187,"endColumn":22,"suggestions":"46113"},{"ruleId":"45357","severity":2,"message":"45358","line":105,"column":20,"nodeType":"45359","messageId":"45360","endLine":105,"endColumn":23,"suggestions":"46114"},{"ruleId":"45357","severity":2,"message":"45358","line":49,"column":14,"nodeType":"45359","messageId":"45360","endLine":49,"endColumn":17,"suggestions":"46115"},{"ruleId":"45357","severity":2,"message":"45358","line":59,"column":70,"nodeType":"45359","messageId":"45360","endLine":59,"endColumn":73,"suggestions":"46116"},{"ruleId":"45357","severity":2,"message":"45358","line":66,"column":14,"nodeType":"45359","messageId":"45360","endLine":66,"endColumn":17,"suggestions":"46117"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":14,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":17,"suggestions":"46118"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":14,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":17,"suggestions":"46119"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":70,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":73,"suggestions":"46120"},{"ruleId":"45357","severity":2,"message":"45358","line":100,"column":14,"nodeType":"45359","messageId":"45360","endLine":100,"endColumn":17,"suggestions":"46121"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":14,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":17,"suggestions":"46122"},{"ruleId":"45357","severity":2,"message":"45358","line":118,"column":14,"nodeType":"45359","messageId":"45360","endLine":118,"endColumn":17,"suggestions":"46123"},{"ruleId":"45357","severity":2,"message":"45358","line":125,"column":70,"nodeType":"45359","messageId":"45360","endLine":125,"endColumn":73,"suggestions":"46124"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":14,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":17,"suggestions":"46125"},{"ruleId":"45357","severity":2,"message":"45358","line":100,"column":14,"nodeType":"45359","messageId":"45360","endLine":100,"endColumn":17,"suggestions":"46126"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":70,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":73,"suggestions":"46127"},{"ruleId":"45357","severity":2,"message":"45358","line":126,"column":14,"nodeType":"45359","messageId":"45360","endLine":126,"endColumn":17,"suggestions":"46128"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":70,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":73,"suggestions":"46129"},{"ruleId":"45357","severity":2,"message":"45358","line":152,"column":14,"nodeType":"45359","messageId":"45360","endLine":152,"endColumn":17,"suggestions":"46130"},{"ruleId":"45357","severity":2,"message":"45358","line":158,"column":70,"nodeType":"45359","messageId":"45360","endLine":158,"endColumn":73,"suggestions":"46131"},{"ruleId":"45357","severity":2,"message":"45358","line":178,"column":14,"nodeType":"45359","messageId":"45360","endLine":178,"endColumn":17,"suggestions":"46132"},{"ruleId":"45357","severity":2,"message":"45358","line":184,"column":70,"nodeType":"45359","messageId":"45360","endLine":184,"endColumn":73,"suggestions":"46133"},{"ruleId":"45357","severity":2,"message":"45358","line":205,"column":14,"nodeType":"45359","messageId":"45360","endLine":205,"endColumn":17,"suggestions":"46134"},{"ruleId":"45357","severity":2,"message":"45358","line":211,"column":70,"nodeType":"45359","messageId":"45360","endLine":211,"endColumn":73,"suggestions":"46135"},{"ruleId":"45357","severity":2,"message":"45358","line":212,"column":70,"nodeType":"45359","messageId":"45360","endLine":212,"endColumn":73,"suggestions":"46136"},{"ruleId":"45357","severity":2,"message":"45358","line":234,"column":14,"nodeType":"45359","messageId":"45360","endLine":234,"endColumn":17,"suggestions":"46137"},{"ruleId":"45357","severity":2,"message":"45358","line":240,"column":70,"nodeType":"45359","messageId":"45360","endLine":240,"endColumn":73,"suggestions":"46138"},{"ruleId":"45357","severity":2,"message":"45358","line":261,"column":14,"nodeType":"45359","messageId":"45360","endLine":261,"endColumn":17,"suggestions":"46139"},{"ruleId":"45357","severity":2,"message":"45358","line":267,"column":70,"nodeType":"45359","messageId":"45360","endLine":267,"endColumn":73,"suggestions":"46140"},{"ruleId":"45357","severity":2,"message":"45358","line":153,"column":83,"nodeType":"45359","messageId":"45360","endLine":153,"endColumn":86,"suggestions":"46141"},{"ruleId":"45357","severity":2,"message":"45358","line":30,"column":16,"nodeType":"45359","messageId":"45360","endLine":30,"endColumn":19,"suggestions":"46142"},{"ruleId":"45357","severity":2,"message":"45358","line":36,"column":16,"nodeType":"45359","messageId":"45360","endLine":36,"endColumn":19,"suggestions":"46143"},{"ruleId":"45357","severity":2,"message":"45358","line":69,"column":16,"nodeType":"45359","messageId":"45360","endLine":69,"endColumn":19,"suggestions":"46144"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":16,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":19,"suggestions":"46145"},{"ruleId":"45357","severity":2,"message":"45358","line":115,"column":16,"nodeType":"45359","messageId":"45360","endLine":115,"endColumn":19,"suggestions":"46146"},{"ruleId":"45357","severity":2,"message":"45358","line":131,"column":16,"nodeType":"45359","messageId":"45360","endLine":131,"endColumn":19,"suggestions":"46147"},{"ruleId":"45357","severity":2,"message":"45358","line":164,"column":16,"nodeType":"45359","messageId":"45360","endLine":164,"endColumn":19,"suggestions":"46148"},{"ruleId":"45357","severity":2,"message":"45358","line":180,"column":16,"nodeType":"45359","messageId":"45360","endLine":180,"endColumn":19,"suggestions":"46149"},{"ruleId":"45357","severity":2,"message":"45358","line":213,"column":16,"nodeType":"45359","messageId":"45360","endLine":213,"endColumn":19,"suggestions":"46150"},{"ruleId":"45357","severity":2,"message":"45358","line":231,"column":16,"nodeType":"45359","messageId":"45360","endLine":231,"endColumn":19,"suggestions":"46151"},{"ruleId":"45357","severity":2,"message":"45358","line":278,"column":16,"nodeType":"45359","messageId":"45360","endLine":278,"endColumn":19,"suggestions":"46152"},{"ruleId":"45357","severity":2,"message":"45358","line":292,"column":16,"nodeType":"45359","messageId":"45360","endLine":292,"endColumn":19,"suggestions":"46153"},{"ruleId":"45357","severity":2,"message":"45358","line":308,"column":16,"nodeType":"45359","messageId":"45360","endLine":308,"endColumn":19,"suggestions":"46154"},{"ruleId":"45357","severity":2,"message":"45358","line":325,"column":16,"nodeType":"45359","messageId":"45360","endLine":325,"endColumn":19,"suggestions":"46155"},{"ruleId":"45357","severity":2,"message":"45358","line":354,"column":16,"nodeType":"45359","messageId":"45360","endLine":354,"endColumn":19,"suggestions":"46156"},{"ruleId":"45357","severity":2,"message":"45358","line":362,"column":16,"nodeType":"45359","messageId":"45360","endLine":362,"endColumn":19,"suggestions":"46157"},{"ruleId":"45357","severity":2,"message":"45358","line":417,"column":16,"nodeType":"45359","messageId":"45360","endLine":417,"endColumn":19,"suggestions":"46158"},{"ruleId":"45357","severity":2,"message":"45358","line":453,"column":16,"nodeType":"45359","messageId":"45360","endLine":453,"endColumn":19,"suggestions":"46159"},{"ruleId":"45357","severity":2,"message":"45358","line":467,"column":16,"nodeType":"45359","messageId":"45360","endLine":467,"endColumn":19,"suggestions":"46160"},{"ruleId":"45357","severity":2,"message":"45358","line":503,"column":16,"nodeType":"45359","messageId":"45360","endLine":503,"endColumn":19,"suggestions":"46161"},{"ruleId":"45357","severity":2,"message":"45358","line":579,"column":16,"nodeType":"45359","messageId":"45360","endLine":579,"endColumn":19,"suggestions":"46162"},{"ruleId":"45357","severity":2,"message":"45358","line":26,"column":27,"nodeType":"45359","messageId":"45360","endLine":26,"endColumn":30,"suggestions":"46163"},{"ruleId":"45357","severity":2,"message":"45358","line":27,"column":27,"nodeType":"45359","messageId":"45360","endLine":27,"endColumn":30,"suggestions":"46164"},{"ruleId":"45357","severity":2,"message":"45358","line":44,"column":27,"nodeType":"45359","messageId":"45360","endLine":44,"endColumn":30,"suggestions":"46165"},{"ruleId":"45357","severity":2,"message":"45358","line":56,"column":27,"nodeType":"45359","messageId":"45360","endLine":56,"endColumn":30,"suggestions":"46166"},{"ruleId":"45357","severity":2,"message":"45358","line":76,"column":27,"nodeType":"45359","messageId":"45360","endLine":76,"endColumn":30,"suggestions":"46167"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":27,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":30,"suggestions":"46168"},{"ruleId":"45357","severity":2,"message":"45358","line":103,"column":27,"nodeType":"45359","messageId":"45360","endLine":103,"endColumn":30,"suggestions":"46169"},{"ruleId":"45357","severity":2,"message":"45358","line":154,"column":27,"nodeType":"45359","messageId":"45360","endLine":154,"endColumn":30,"suggestions":"46170"},{"ruleId":"45357","severity":2,"message":"45358","line":155,"column":27,"nodeType":"45359","messageId":"45360","endLine":155,"endColumn":30,"suggestions":"46171"},{"ruleId":"45357","severity":2,"message":"45358","line":172,"column":27,"nodeType":"45359","messageId":"45360","endLine":172,"endColumn":30,"suggestions":"46172"},{"ruleId":"45357","severity":2,"message":"45358","line":193,"column":27,"nodeType":"45359","messageId":"45360","endLine":193,"endColumn":30,"suggestions":"46173"},{"ruleId":"45357","severity":2,"message":"45358","line":214,"column":27,"nodeType":"45359","messageId":"45360","endLine":214,"endColumn":30,"suggestions":"46174"},{"ruleId":"45357","severity":2,"message":"45358","line":233,"column":27,"nodeType":"45359","messageId":"45360","endLine":233,"endColumn":30,"suggestions":"46175"},{"ruleId":"45357","severity":2,"message":"45358","line":234,"column":27,"nodeType":"45359","messageId":"45360","endLine":234,"endColumn":30,"suggestions":"46176"},{"ruleId":"45357","severity":2,"message":"45358","line":235,"column":27,"nodeType":"45359","messageId":"45360","endLine":235,"endColumn":30,"suggestions":"46177"},{"ruleId":"45357","severity":2,"message":"45358","line":251,"column":33,"nodeType":"45359","messageId":"45360","endLine":251,"endColumn":36,"suggestions":"46178"},{"ruleId":"45357","severity":2,"message":"45358","line":265,"column":31,"nodeType":"45359","messageId":"45360","endLine":265,"endColumn":34,"suggestions":"46179"},{"ruleId":"45357","severity":2,"message":"45358","line":279,"column":32,"nodeType":"45359","messageId":"45360","endLine":279,"endColumn":35,"suggestions":"46180"},{"ruleId":"45357","severity":2,"message":"45358","line":290,"column":27,"nodeType":"45359","messageId":"45360","endLine":290,"endColumn":30,"suggestions":"46181"},{"ruleId":"45357","severity":2,"message":"45358","line":291,"column":27,"nodeType":"45359","messageId":"45360","endLine":291,"endColumn":30,"suggestions":"46182"},{"ruleId":"45357","severity":2,"message":"45358","line":301,"column":27,"nodeType":"45359","messageId":"45360","endLine":301,"endColumn":30,"suggestions":"46183"},{"ruleId":"45357","severity":2,"message":"45358","line":302,"column":27,"nodeType":"45359","messageId":"45360","endLine":302,"endColumn":30,"suggestions":"46184"},{"ruleId":"45357","severity":2,"message":"45358","line":313,"column":27,"nodeType":"45359","messageId":"45360","endLine":313,"endColumn":30,"suggestions":"46185"},{"ruleId":"45357","severity":2,"message":"45358","line":329,"column":27,"nodeType":"45359","messageId":"45360","endLine":329,"endColumn":30,"suggestions":"46186"},{"ruleId":"45357","severity":2,"message":"45358","line":339,"column":27,"nodeType":"45359","messageId":"45360","endLine":339,"endColumn":30,"suggestions":"46187"},{"ruleId":"45357","severity":2,"message":"45358","line":354,"column":34,"nodeType":"45359","messageId":"45360","endLine":354,"endColumn":37,"suggestions":"46188"},{"ruleId":"45357","severity":2,"message":"45358","line":371,"column":33,"nodeType":"45359","messageId":"45360","endLine":371,"endColumn":36,"suggestions":"46189"},{"ruleId":"45357","severity":2,"message":"45358","line":386,"column":38,"nodeType":"45359","messageId":"45360","endLine":386,"endColumn":41,"suggestions":"46190"},{"ruleId":"45357","severity":2,"message":"45358","line":396,"column":27,"nodeType":"45359","messageId":"45360","endLine":396,"endColumn":30,"suggestions":"46191"},{"ruleId":"45357","severity":2,"message":"45358","line":406,"column":31,"nodeType":"45359","messageId":"45360","endLine":406,"endColumn":34,"suggestions":"46192"},{"ruleId":"45357","severity":2,"message":"45358","line":416,"column":27,"nodeType":"45359","messageId":"45360","endLine":416,"endColumn":30,"suggestions":"46193"},{"ruleId":"45357","severity":2,"message":"45358","line":447,"column":27,"nodeType":"45359","messageId":"45360","endLine":447,"endColumn":30,"suggestions":"46194"},{"ruleId":"45357","severity":2,"message":"45358","line":581,"column":27,"nodeType":"45359","messageId":"45360","endLine":581,"endColumn":30,"suggestions":"46195"},{"ruleId":"45357","severity":2,"message":"45358","line":582,"column":27,"nodeType":"45359","messageId":"45360","endLine":582,"endColumn":30,"suggestions":"46196"},{"ruleId":"45357","severity":2,"message":"45358","line":598,"column":27,"nodeType":"45359","messageId":"45360","endLine":598,"endColumn":30,"suggestions":"46197"},{"ruleId":"45357","severity":2,"message":"45358","line":610,"column":27,"nodeType":"45359","messageId":"45360","endLine":610,"endColumn":30,"suggestions":"46198"},{"ruleId":"45357","severity":2,"message":"45358","line":620,"column":27,"nodeType":"45359","messageId":"45360","endLine":620,"endColumn":30,"suggestions":"46199"},{"ruleId":"45357","severity":2,"message":"45358","line":631,"column":27,"nodeType":"45359","messageId":"45360","endLine":631,"endColumn":30,"suggestions":"46200"},{"ruleId":"45357","severity":2,"message":"45358","line":641,"column":27,"nodeType":"45359","messageId":"45360","endLine":641,"endColumn":30,"suggestions":"46201"},{"ruleId":"45357","severity":2,"message":"45358","line":642,"column":27,"nodeType":"45359","messageId":"45360","endLine":642,"endColumn":30,"suggestions":"46202"},{"ruleId":"45357","severity":2,"message":"45358","line":643,"column":27,"nodeType":"45359","messageId":"45360","endLine":643,"endColumn":30,"suggestions":"46203"},{"ruleId":"45357","severity":2,"message":"45358","line":661,"column":27,"nodeType":"45359","messageId":"45360","endLine":661,"endColumn":30,"suggestions":"46204"},{"ruleId":"45357","severity":2,"message":"45358","line":678,"column":27,"nodeType":"45359","messageId":"45360","endLine":678,"endColumn":30,"suggestions":"46205"},{"ruleId":"45357","severity":2,"message":"45358","line":695,"column":18,"nodeType":"45359","messageId":"45360","endLine":695,"endColumn":21,"suggestions":"46206"},{"ruleId":"45357","severity":2,"message":"45358","line":712,"column":27,"nodeType":"45359","messageId":"45360","endLine":712,"endColumn":30,"suggestions":"46207"},{"ruleId":"45357","severity":2,"message":"45358","line":725,"column":16,"nodeType":"45359","messageId":"45360","endLine":725,"endColumn":19,"suggestions":"46208"},{"ruleId":"45357","severity":2,"message":"45358","line":730,"column":40,"nodeType":"45359","messageId":"45360","endLine":730,"endColumn":43,"suggestions":"46209"},{"ruleId":"45357","severity":2,"message":"45358","line":747,"column":27,"nodeType":"45359","messageId":"45360","endLine":747,"endColumn":30,"suggestions":"46210"},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":11,"endColumn":24},{"ruleId":"45357","severity":2,"message":"45358","line":276,"column":18,"nodeType":"45359","messageId":"45360","endLine":276,"endColumn":21,"suggestions":"46211"},{"ruleId":"45357","severity":2,"message":"45358","line":502,"column":39,"nodeType":"45359","messageId":"45360","endLine":502,"endColumn":42,"suggestions":"46212"},{"ruleId":"45357","severity":2,"message":"45358","line":904,"column":18,"nodeType":"45359","messageId":"45360","endLine":904,"endColumn":21,"suggestions":"46213"},{"ruleId":"45357","severity":2,"message":"45358","line":1072,"column":41,"nodeType":"45359","messageId":"45360","endLine":1072,"endColumn":44,"suggestions":"46214"},{"ruleId":"45357","severity":2,"message":"45358","line":1073,"column":42,"nodeType":"45359","messageId":"45360","endLine":1073,"endColumn":45,"suggestions":"46215"},{"ruleId":"45357","severity":2,"message":"45358","line":1074,"column":42,"nodeType":"45359","messageId":"45360","endLine":1074,"endColumn":45,"suggestions":"46216"},{"ruleId":"45357","severity":2,"message":"45358","line":1102,"column":24,"nodeType":"45359","messageId":"45360","endLine":1102,"endColumn":27,"suggestions":"46217"},{"ruleId":"45357","severity":2,"message":"45358","line":42,"column":9,"nodeType":"45359","messageId":"45360","endLine":42,"endColumn":12,"suggestions":"46218"},{"ruleId":"45357","severity":2,"message":"45358","line":50,"column":18,"nodeType":"45359","messageId":"45360","endLine":50,"endColumn":21,"suggestions":"46219"},{"ruleId":"45357","severity":2,"message":"45358","line":36,"column":34,"nodeType":"45359","messageId":"45360","endLine":36,"endColumn":37,"suggestions":"46220"},{"ruleId":"45357","severity":2,"message":"45358","line":36,"column":45,"nodeType":"45359","messageId":"45360","endLine":36,"endColumn":48,"suggestions":"46221"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":52,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":55,"suggestions":"46222"},{"ruleId":"45357","severity":2,"message":"45358","line":149,"column":52,"nodeType":"45359","messageId":"45360","endLine":149,"endColumn":55,"suggestions":"46223"},{"ruleId":"45357","severity":2,"message":"45358","line":174,"column":52,"nodeType":"45359","messageId":"45360","endLine":174,"endColumn":55,"suggestions":"46224"},{"ruleId":"45357","severity":2,"message":"45358","line":196,"column":52,"nodeType":"45359","messageId":"45360","endLine":196,"endColumn":55,"suggestions":"46225"},{"ruleId":"45357","severity":2,"message":"45358","line":218,"column":52,"nodeType":"45359","messageId":"45360","endLine":218,"endColumn":55,"suggestions":"46226"},{"ruleId":"45357","severity":2,"message":"45358","line":240,"column":52,"nodeType":"45359","messageId":"45360","endLine":240,"endColumn":55,"suggestions":"46227"},{"ruleId":"45357","severity":2,"message":"45358","line":323,"column":47,"nodeType":"45359","messageId":"45360","endLine":323,"endColumn":50,"suggestions":"46228"},{"ruleId":"45357","severity":2,"message":"45358","line":335,"column":36,"nodeType":"45359","messageId":"45360","endLine":335,"endColumn":39,"suggestions":"46229"},{"ruleId":"45357","severity":2,"message":"45358","line":250,"column":22,"nodeType":"45359","messageId":"45360","endLine":250,"endColumn":25,"suggestions":"46230"},{"ruleId":"45357","severity":2,"message":"45358","line":254,"column":22,"nodeType":"45359","messageId":"45360","endLine":254,"endColumn":25,"suggestions":"46231"},{"ruleId":"45357","severity":2,"message":"45358","line":258,"column":22,"nodeType":"45359","messageId":"45360","endLine":258,"endColumn":25,"suggestions":"46232"},{"ruleId":"45357","severity":2,"message":"45358","line":262,"column":15,"nodeType":"45359","messageId":"45360","endLine":262,"endColumn":18,"suggestions":"46233"},{"ruleId":"45357","severity":2,"message":"45358","line":270,"column":58,"nodeType":"45359","messageId":"45360","endLine":270,"endColumn":61,"suggestions":"46234"},{"ruleId":"45357","severity":2,"message":"45358","line":44,"column":53,"nodeType":"45359","messageId":"45360","endLine":44,"endColumn":56,"suggestions":"46235"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":53,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":56,"suggestions":"46236"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":62,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":65,"suggestions":"46237"},{"ruleId":"45357","severity":2,"message":"45358","line":134,"column":45,"nodeType":"45359","messageId":"45360","endLine":134,"endColumn":48,"suggestions":"46238"},{"ruleId":"45357","severity":2,"message":"45358","line":135,"column":45,"nodeType":"45359","messageId":"45360","endLine":135,"endColumn":48,"suggestions":"46239"},{"ruleId":"45357","severity":2,"message":"45358","line":145,"column":27,"nodeType":"45359","messageId":"45360","endLine":145,"endColumn":30,"suggestions":"46240"},{"ruleId":"45357","severity":2,"message":"45358","line":158,"column":14,"nodeType":"45359","messageId":"45360","endLine":158,"endColumn":17,"suggestions":"46241"},{"ruleId":"45357","severity":2,"message":"45358","line":158,"column":40,"nodeType":"45359","messageId":"45360","endLine":158,"endColumn":43,"suggestions":"46242"},{"ruleId":"45357","severity":2,"message":"45358","line":159,"column":31,"nodeType":"45359","messageId":"45360","endLine":159,"endColumn":34,"suggestions":"46243"},{"ruleId":"45357","severity":2,"message":"45358","line":160,"column":31,"nodeType":"45359","messageId":"45360","endLine":160,"endColumn":34,"suggestions":"46244"},{"ruleId":"45357","severity":2,"message":"45358","line":161,"column":31,"nodeType":"45359","messageId":"45360","endLine":161,"endColumn":34,"suggestions":"46245"},{"ruleId":"45357","severity":2,"message":"45358","line":162,"column":31,"nodeType":"45359","messageId":"45360","endLine":162,"endColumn":34,"suggestions":"46246"},{"ruleId":"45357","severity":2,"message":"45358","line":163,"column":38,"nodeType":"45359","messageId":"45360","endLine":163,"endColumn":41,"suggestions":"46247"},{"ruleId":"45357","severity":2,"message":"45358","line":238,"column":75,"nodeType":"45359","messageId":"45360","endLine":238,"endColumn":78,"suggestions":"46248"},{"ruleId":"45357","severity":2,"message":"45358","line":245,"column":32,"nodeType":"45359","messageId":"45360","endLine":245,"endColumn":35,"suggestions":"46249"},{"ruleId":"45357","severity":2,"message":"45358","line":256,"column":93,"nodeType":"45359","messageId":"45360","endLine":256,"endColumn":96,"suggestions":"46250"},{"ruleId":"45357","severity":2,"message":"45358","line":262,"column":91,"nodeType":"45359","messageId":"45360","endLine":262,"endColumn":94,"suggestions":"46251"},{"ruleId":"45357","severity":2,"message":"45358","line":421,"column":51,"nodeType":"45359","messageId":"45360","endLine":421,"endColumn":54,"suggestions":"46252"},{"ruleId":"45357","severity":2,"message":"45358","line":424,"column":14,"nodeType":"45359","messageId":"45360","endLine":424,"endColumn":17,"suggestions":"46253"},{"ruleId":"45357","severity":2,"message":"45358","line":425,"column":52,"nodeType":"45359","messageId":"45360","endLine":425,"endColumn":55,"suggestions":"46254"},{"ruleId":"45357","severity":2,"message":"45358","line":429,"column":50,"nodeType":"45359","messageId":"45360","endLine":429,"endColumn":53,"suggestions":"46255"},{"ruleId":"45357","severity":2,"message":"45358","line":458,"column":24,"nodeType":"45359","messageId":"45360","endLine":458,"endColumn":27,"suggestions":"46256"},{"ruleId":"45357","severity":2,"message":"45358","line":459,"column":24,"nodeType":"45359","messageId":"45360","endLine":459,"endColumn":27,"suggestions":"46257"},{"ruleId":"45357","severity":2,"message":"45358","line":488,"column":24,"nodeType":"45359","messageId":"45360","endLine":488,"endColumn":27,"suggestions":"46258"},{"ruleId":"45357","severity":2,"message":"45358","line":489,"column":24,"nodeType":"45359","messageId":"45360","endLine":489,"endColumn":27,"suggestions":"46259"},{"ruleId":"45357","severity":2,"message":"45358","line":490,"column":14,"nodeType":"45359","messageId":"45360","endLine":490,"endColumn":17,"suggestions":"46260"},{"ruleId":"45357","severity":2,"message":"45358","line":490,"column":40,"nodeType":"45359","messageId":"45360","endLine":490,"endColumn":43,"suggestions":"46261"},{"ruleId":"45357","severity":2,"message":"45358","line":491,"column":24,"nodeType":"45359","messageId":"45360","endLine":491,"endColumn":27,"suggestions":"46262"},{"ruleId":"45357","severity":2,"message":"45358","line":493,"column":70,"nodeType":"45359","messageId":"45360","endLine":493,"endColumn":73,"suggestions":"46263"},{"ruleId":"45357","severity":2,"message":"45358","line":502,"column":32,"nodeType":"45359","messageId":"45360","endLine":502,"endColumn":35,"suggestions":"46264"},{"ruleId":"45357","severity":2,"message":"45358","line":536,"column":24,"nodeType":"45359","messageId":"45360","endLine":536,"endColumn":27,"suggestions":"46265"},{"ruleId":"45357","severity":2,"message":"45358","line":537,"column":21,"nodeType":"45359","messageId":"45360","endLine":537,"endColumn":24,"suggestions":"46266"},{"ruleId":"45357","severity":2,"message":"45358","line":539,"column":70,"nodeType":"45359","messageId":"45360","endLine":539,"endColumn":73,"suggestions":"46267"},{"ruleId":"45357","severity":2,"message":"45358","line":579,"column":24,"nodeType":"45359","messageId":"45360","endLine":579,"endColumn":27,"suggestions":"46268"},{"ruleId":"45357","severity":2,"message":"45358","line":580,"column":21,"nodeType":"45359","messageId":"45360","endLine":580,"endColumn":24,"suggestions":"46269"},{"ruleId":"45357","severity":2,"message":"45358","line":582,"column":70,"nodeType":"45359","messageId":"45360","endLine":582,"endColumn":73,"suggestions":"46270"},{"ruleId":"45357","severity":2,"message":"45358","line":623,"column":24,"nodeType":"45359","messageId":"45360","endLine":623,"endColumn":27,"suggestions":"46271"},{"ruleId":"45357","severity":2,"message":"45358","line":624,"column":21,"nodeType":"45359","messageId":"45360","endLine":624,"endColumn":24,"suggestions":"46272"},{"ruleId":"45357","severity":2,"message":"45358","line":626,"column":70,"nodeType":"45359","messageId":"45360","endLine":626,"endColumn":73,"suggestions":"46273"},{"ruleId":"45357","severity":2,"message":"45358","line":665,"column":24,"nodeType":"45359","messageId":"45360","endLine":665,"endColumn":27,"suggestions":"46274"},{"ruleId":"45357","severity":2,"message":"45358","line":666,"column":21,"nodeType":"45359","messageId":"45360","endLine":666,"endColumn":24,"suggestions":"46275"},{"ruleId":"45357","severity":2,"message":"45358","line":668,"column":70,"nodeType":"45359","messageId":"45360","endLine":668,"endColumn":73,"suggestions":"46276"},{"ruleId":"45357","severity":2,"message":"45358","line":702,"column":24,"nodeType":"45359","messageId":"45360","endLine":702,"endColumn":27,"suggestions":"46277"},{"ruleId":"45357","severity":2,"message":"45358","line":703,"column":21,"nodeType":"45359","messageId":"45360","endLine":703,"endColumn":24,"suggestions":"46278"},{"ruleId":"45357","severity":2,"message":"45358","line":705,"column":70,"nodeType":"45359","messageId":"45360","endLine":705,"endColumn":73,"suggestions":"46279"},{"ruleId":"45357","severity":2,"message":"45358","line":36,"column":21,"nodeType":"45359","messageId":"45360","endLine":36,"endColumn":24,"suggestions":"46280"},{"ruleId":"45357","severity":2,"message":"45358","line":179,"column":89,"nodeType":"45359","messageId":"45360","endLine":179,"endColumn":92,"suggestions":"46281"},{"ruleId":"45357","severity":2,"message":"45358","line":187,"column":29,"nodeType":"45359","messageId":"45360","endLine":187,"endColumn":32,"suggestions":"46282"},{"ruleId":"45357","severity":2,"message":"45358","line":188,"column":14,"nodeType":"45359","messageId":"45360","endLine":188,"endColumn":17,"suggestions":"46283"},{"ruleId":"45357","severity":2,"message":"45358","line":188,"column":38,"nodeType":"45359","messageId":"45360","endLine":188,"endColumn":41,"suggestions":"46284"},{"ruleId":"45357","severity":2,"message":"45358","line":18,"column":21,"nodeType":"45359","messageId":"45360","endLine":18,"endColumn":24,"suggestions":"46285"},{"ruleId":"45357","severity":2,"message":"45358","line":68,"column":18,"nodeType":"45359","messageId":"45360","endLine":68,"endColumn":21,"suggestions":"46286"},{"ruleId":"45357","severity":2,"message":"45358","line":101,"column":32,"nodeType":"45359","messageId":"45360","endLine":101,"endColumn":35,"suggestions":"46287"},{"ruleId":"45357","severity":2,"message":"45358","line":102,"column":35,"nodeType":"45359","messageId":"45360","endLine":102,"endColumn":38,"suggestions":"46288"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":28,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":31,"suggestions":"46289"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":38,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":41,"suggestions":"46290"},{"ruleId":"45357","severity":2,"message":"45358","line":54,"column":40,"nodeType":"45359","messageId":"45360","endLine":54,"endColumn":43,"suggestions":"46291"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":38,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":41,"suggestions":"46292"},{"ruleId":"45357","severity":2,"message":"45358","line":101,"column":39,"nodeType":"45359","messageId":"45360","endLine":101,"endColumn":42,"suggestions":"46293"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":38,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":41,"suggestions":"46294"},{"ruleId":"45357","severity":2,"message":"45358","line":128,"column":38,"nodeType":"45359","messageId":"45360","endLine":128,"endColumn":41,"suggestions":"46295"},{"ruleId":"45357","severity":2,"message":"45358","line":138,"column":39,"nodeType":"45359","messageId":"45360","endLine":138,"endColumn":42,"suggestions":"46296"},{"ruleId":"45357","severity":2,"message":"45358","line":148,"column":39,"nodeType":"45359","messageId":"45360","endLine":148,"endColumn":42,"suggestions":"46297"},{"ruleId":"45357","severity":2,"message":"45358","line":156,"column":39,"nodeType":"45359","messageId":"45360","endLine":156,"endColumn":42,"suggestions":"46298"},{"ruleId":"45357","severity":2,"message":"45358","line":170,"column":40,"nodeType":"45359","messageId":"45360","endLine":170,"endColumn":43,"suggestions":"46299"},{"ruleId":"45357","severity":2,"message":"45358","line":182,"column":40,"nodeType":"45359","messageId":"45360","endLine":182,"endColumn":43,"suggestions":"46300"},{"ruleId":"45357","severity":2,"message":"45358","line":195,"column":40,"nodeType":"45359","messageId":"45360","endLine":195,"endColumn":43,"suggestions":"46301"},{"ruleId":"45357","severity":2,"message":"45358","line":207,"column":40,"nodeType":"45359","messageId":"45360","endLine":207,"endColumn":43,"suggestions":"46302"},{"ruleId":"45357","severity":2,"message":"45358","line":224,"column":40,"nodeType":"45359","messageId":"45360","endLine":224,"endColumn":43,"suggestions":"46303"},{"ruleId":"45357","severity":2,"message":"45358","line":242,"column":40,"nodeType":"45359","messageId":"45360","endLine":242,"endColumn":43,"suggestions":"46304"},{"ruleId":"45357","severity":2,"message":"45358","line":244,"column":9,"nodeType":"45359","messageId":"45360","endLine":244,"endColumn":12,"suggestions":"46305"},{"ruleId":"45357","severity":2,"message":"45358","line":251,"column":67,"nodeType":"45359","messageId":"45360","endLine":251,"endColumn":70,"suggestions":"46306"},{"ruleId":"45357","severity":2,"message":"45358","line":264,"column":40,"nodeType":"45359","messageId":"45360","endLine":264,"endColumn":43,"suggestions":"46307"},{"ruleId":"45357","severity":2,"message":"45358","line":277,"column":40,"nodeType":"45359","messageId":"45360","endLine":277,"endColumn":43,"suggestions":"46308"},{"ruleId":"45357","severity":2,"message":"45358","line":285,"column":84,"nodeType":"45359","messageId":"45360","endLine":285,"endColumn":87,"suggestions":"46309"},{"ruleId":"45357","severity":2,"message":"45358","line":288,"column":48,"nodeType":"45359","messageId":"45360","endLine":288,"endColumn":51,"suggestions":"46310"},{"ruleId":"45357","severity":2,"message":"45358","line":289,"column":69,"nodeType":"45359","messageId":"45360","endLine":289,"endColumn":72,"suggestions":"46311"},{"ruleId":"45357","severity":2,"message":"45358","line":293,"column":50,"nodeType":"45359","messageId":"45360","endLine":293,"endColumn":53,"suggestions":"46312"},{"ruleId":"45357","severity":2,"message":"45358","line":318,"column":81,"nodeType":"45359","messageId":"45360","endLine":318,"endColumn":84,"suggestions":"46313"},{"ruleId":"45357","severity":2,"message":"45358","line":338,"column":39,"nodeType":"45359","messageId":"45360","endLine":338,"endColumn":42,"suggestions":"46314"},{"ruleId":"45357","severity":2,"message":"45358","line":358,"column":40,"nodeType":"45359","messageId":"45360","endLine":358,"endColumn":43,"suggestions":"46315"},{"ruleId":"45357","severity":2,"message":"45358","line":386,"column":57,"nodeType":"45359","messageId":"45360","endLine":386,"endColumn":60,"suggestions":"46316"},{"ruleId":"45357","severity":2,"message":"45358","line":390,"column":40,"nodeType":"45359","messageId":"45360","endLine":390,"endColumn":43,"suggestions":"46317"},{"ruleId":"45357","severity":2,"message":"45358","line":428,"column":38,"nodeType":"45359","messageId":"45360","endLine":428,"endColumn":41,"suggestions":"46318"},{"ruleId":"45357","severity":2,"message":"45358","line":429,"column":40,"nodeType":"45359","messageId":"45360","endLine":429,"endColumn":43,"suggestions":"46319"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":43,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":46,"suggestions":"46320"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":34,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":37,"suggestions":"46321"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":55,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":58,"suggestions":"46322"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":40,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":43,"suggestions":"46323"},{"ruleId":"45357","severity":2,"message":"45358","line":134,"column":37,"nodeType":"45359","messageId":"45360","endLine":134,"endColumn":40,"suggestions":"46324"},{"ruleId":"45357","severity":2,"message":"45358","line":136,"column":28,"nodeType":"45359","messageId":"45360","endLine":136,"endColumn":31,"suggestions":"46325"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":14,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":17,"suggestions":"46326"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":47,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":50,"suggestions":"46327"},{"ruleId":"45357","severity":2,"message":"45358","line":138,"column":38,"nodeType":"45359","messageId":"45360","endLine":138,"endColumn":41,"suggestions":"46328"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":38,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":41,"suggestions":"46329"},{"ruleId":"45357","severity":2,"message":"45358","line":154,"column":57,"nodeType":"45359","messageId":"45360","endLine":154,"endColumn":60,"suggestions":"46330"},{"ruleId":"45357","severity":2,"message":"45358","line":155,"column":39,"nodeType":"45359","messageId":"45360","endLine":155,"endColumn":42,"suggestions":"46331"},{"ruleId":"45357","severity":2,"message":"45358","line":227,"column":38,"nodeType":"45359","messageId":"45360","endLine":227,"endColumn":41,"suggestions":"46332"},{"ruleId":"45357","severity":2,"message":"45358","line":228,"column":38,"nodeType":"45359","messageId":"45360","endLine":228,"endColumn":41,"suggestions":"46333"},{"ruleId":"45357","severity":2,"message":"45358","line":229,"column":42,"nodeType":"45359","messageId":"45360","endLine":229,"endColumn":45,"suggestions":"46334"},{"ruleId":"45357","severity":2,"message":"45358","line":230,"column":14,"nodeType":"45359","messageId":"45360","endLine":230,"endColumn":17,"suggestions":"46335"},{"ruleId":"45357","severity":2,"message":"45358","line":230,"column":64,"nodeType":"45359","messageId":"45360","endLine":230,"endColumn":67,"suggestions":"46336"},{"ruleId":"45357","severity":2,"message":"45358","line":233,"column":55,"nodeType":"45359","messageId":"45360","endLine":233,"endColumn":58,"suggestions":"46337"},{"ruleId":"45357","severity":2,"message":"45358","line":237,"column":51,"nodeType":"45359","messageId":"45360","endLine":237,"endColumn":54,"suggestions":"46338"},{"ruleId":"45357","severity":2,"message":"45358","line":282,"column":38,"nodeType":"45359","messageId":"45360","endLine":282,"endColumn":41,"suggestions":"46339"},{"ruleId":"45357","severity":2,"message":"45358","line":283,"column":51,"nodeType":"45359","messageId":"45360","endLine":283,"endColumn":54,"suggestions":"46340"},{"ruleId":"45357","severity":2,"message":"45358","line":284,"column":51,"nodeType":"45359","messageId":"45360","endLine":284,"endColumn":54,"suggestions":"46341"},{"ruleId":"45357","severity":2,"message":"45358","line":285,"column":51,"nodeType":"45359","messageId":"45360","endLine":285,"endColumn":54,"suggestions":"46342"},{"ruleId":"45357","severity":2,"message":"45358","line":286,"column":42,"nodeType":"45359","messageId":"45360","endLine":286,"endColumn":45,"suggestions":"46343"},{"ruleId":"45357","severity":2,"message":"45358","line":312,"column":38,"nodeType":"45359","messageId":"45360","endLine":312,"endColumn":41,"suggestions":"46344"},{"ruleId":"45357","severity":2,"message":"45358","line":313,"column":38,"nodeType":"45359","messageId":"45360","endLine":313,"endColumn":41,"suggestions":"46345"},{"ruleId":"45357","severity":2,"message":"45358","line":314,"column":42,"nodeType":"45359","messageId":"45360","endLine":314,"endColumn":45,"suggestions":"46346"},{"ruleId":"45357","severity":2,"message":"45358","line":315,"column":42,"nodeType":"45359","messageId":"45360","endLine":315,"endColumn":45,"suggestions":"46347"},{"ruleId":"45357","severity":2,"message":"45358","line":342,"column":14,"nodeType":"45359","messageId":"45360","endLine":342,"endColumn":17,"suggestions":"46348"},{"ruleId":"45357","severity":2,"message":"45358","line":343,"column":28,"nodeType":"45359","messageId":"45360","endLine":343,"endColumn":31,"suggestions":"46349"},{"ruleId":"45357","severity":2,"message":"45358","line":344,"column":28,"nodeType":"45359","messageId":"45360","endLine":344,"endColumn":31,"suggestions":"46350"},{"ruleId":"45357","severity":2,"message":"45358","line":345,"column":28,"nodeType":"45359","messageId":"45360","endLine":345,"endColumn":31,"suggestions":"46351"},{"ruleId":"45357","severity":2,"message":"45358","line":346,"column":28,"nodeType":"45359","messageId":"45360","endLine":346,"endColumn":31,"suggestions":"46352"},{"ruleId":"45357","severity":2,"message":"45358","line":347,"column":51,"nodeType":"45359","messageId":"45360","endLine":347,"endColumn":54,"suggestions":"46353"},{"ruleId":"45357","severity":2,"message":"45358","line":579,"column":53,"nodeType":"45359","messageId":"45360","endLine":579,"endColumn":56,"suggestions":"46354"},{"ruleId":"45357","severity":2,"message":"45358","line":666,"column":53,"nodeType":"45359","messageId":"45360","endLine":666,"endColumn":56,"suggestions":"46355"},{"ruleId":"45357","severity":2,"message":"45358","line":834,"column":43,"nodeType":"45359","messageId":"45360","endLine":834,"endColumn":46,"suggestions":"46356"},{"ruleId":"45357","severity":2,"message":"45358","line":889,"column":68,"nodeType":"45359","messageId":"45360","endLine":889,"endColumn":71,"suggestions":"46357"},{"ruleId":"45357","severity":2,"message":"45358","line":1189,"column":43,"nodeType":"45359","messageId":"45360","endLine":1189,"endColumn":46,"suggestions":"46358"},{"ruleId":"45357","severity":2,"message":"45358","line":173,"column":51,"nodeType":"45359","messageId":"45360","endLine":173,"endColumn":54,"suggestions":"46359"},{"ruleId":"45357","severity":2,"message":"45358","line":181,"column":75,"nodeType":"45359","messageId":"45360","endLine":181,"endColumn":78,"suggestions":"46360"},{"ruleId":"45357","severity":2,"message":"45358","line":225,"column":57,"nodeType":"45359","messageId":"45360","endLine":225,"endColumn":60,"suggestions":"46361"},{"ruleId":"45357","severity":2,"message":"45358","line":238,"column":53,"nodeType":"45359","messageId":"45360","endLine":238,"endColumn":56,"suggestions":"46362"},{"ruleId":"45357","severity":2,"message":"45358","line":310,"column":43,"nodeType":"45359","messageId":"45360","endLine":310,"endColumn":46,"suggestions":"46363"},{"ruleId":"45357","severity":2,"message":"45358","line":337,"column":51,"nodeType":"45359","messageId":"45360","endLine":337,"endColumn":54,"suggestions":"46364"},{"ruleId":"45357","severity":2,"message":"45358","line":8,"column":14,"nodeType":"45359","messageId":"45360","endLine":8,"endColumn":17,"suggestions":"46365"},{"ruleId":"45357","severity":2,"message":"45358","line":121,"column":18,"nodeType":"45359","messageId":"45360","endLine":121,"endColumn":21,"suggestions":"46366"},{"ruleId":"45357","severity":2,"message":"45358","line":121,"column":43,"nodeType":"45359","messageId":"45360","endLine":121,"endColumn":46,"suggestions":"46367"},{"ruleId":"45357","severity":2,"message":"45358","line":121,"column":54,"nodeType":"45359","messageId":"45360","endLine":121,"endColumn":57,"suggestions":"46368"},{"ruleId":"45357","severity":2,"message":"45358","line":163,"column":53,"nodeType":"45359","messageId":"45360","endLine":163,"endColumn":56,"suggestions":"46369"},{"ruleId":"45357","severity":2,"message":"45358","line":175,"column":58,"nodeType":"45359","messageId":"45360","endLine":175,"endColumn":61,"suggestions":"46370"},{"ruleId":"45357","severity":2,"message":"45358","line":189,"column":55,"nodeType":"45359","messageId":"45360","endLine":189,"endColumn":58,"suggestions":"46371"},{"ruleId":"45357","severity":2,"message":"45358","line":235,"column":18,"nodeType":"45359","messageId":"45360","endLine":235,"endColumn":21,"suggestions":"46372"},{"ruleId":"45357","severity":2,"message":"45358","line":235,"column":43,"nodeType":"45359","messageId":"45360","endLine":235,"endColumn":46,"suggestions":"46373"},{"ruleId":"45357","severity":2,"message":"45358","line":235,"column":54,"nodeType":"45359","messageId":"45360","endLine":235,"endColumn":57,"suggestions":"46374"},{"ruleId":"45357","severity":2,"message":"45358","line":144,"column":43,"nodeType":"45359","messageId":"45360","endLine":144,"endColumn":46,"suggestions":"46375"},{"ruleId":"45357","severity":2,"message":"45358","line":195,"column":43,"nodeType":"45359","messageId":"45360","endLine":195,"endColumn":46,"suggestions":"46376"},{"ruleId":"45357","severity":2,"message":"45358","line":230,"column":43,"nodeType":"45359","messageId":"45360","endLine":230,"endColumn":46,"suggestions":"46377"},{"ruleId":"45357","severity":2,"message":"45358","line":251,"column":15,"nodeType":"45359","messageId":"45360","endLine":251,"endColumn":18,"suggestions":"46378"},{"ruleId":"45357","severity":2,"message":"45358","line":258,"column":16,"nodeType":"45359","messageId":"45360","endLine":258,"endColumn":19,"suggestions":"46379"},{"ruleId":"45357","severity":2,"message":"45358","line":280,"column":43,"nodeType":"45359","messageId":"45360","endLine":280,"endColumn":46,"suggestions":"46380"},{"ruleId":"45357","severity":2,"message":"45358","line":315,"column":43,"nodeType":"45359","messageId":"45360","endLine":315,"endColumn":46,"suggestions":"46381"},{"ruleId":"45357","severity":2,"message":"45358","line":321,"column":79,"nodeType":"45359","messageId":"45360","endLine":321,"endColumn":82,"suggestions":"46382"},{"ruleId":"45357","severity":2,"message":"45358","line":321,"column":92,"nodeType":"45359","messageId":"45360","endLine":321,"endColumn":95,"suggestions":"46383"},{"ruleId":"45357","severity":2,"message":"45358","line":361,"column":43,"nodeType":"45359","messageId":"45360","endLine":361,"endColumn":46,"suggestions":"46384"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":47,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":50,"suggestions":"46385"},{"ruleId":"45357","severity":2,"message":"45358","line":120,"column":47,"nodeType":"45359","messageId":"45360","endLine":120,"endColumn":50,"suggestions":"46386"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":47,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":50,"suggestions":"46387"},{"ruleId":"45357","severity":2,"message":"45358","line":147,"column":47,"nodeType":"45359","messageId":"45360","endLine":147,"endColumn":50,"suggestions":"46388"},{"ruleId":"45357","severity":2,"message":"45358","line":216,"column":43,"nodeType":"45359","messageId":"45360","endLine":216,"endColumn":46,"suggestions":"46389"},{"ruleId":"45357","severity":2,"message":"45358","line":273,"column":49,"nodeType":"45359","messageId":"45360","endLine":273,"endColumn":52,"suggestions":"46390"},{"ruleId":"45357","severity":2,"message":"45358","line":274,"column":53,"nodeType":"45359","messageId":"45360","endLine":274,"endColumn":56,"suggestions":"46391"},{"ruleId":"45357","severity":2,"message":"45358","line":298,"column":43,"nodeType":"45359","messageId":"45360","endLine":298,"endColumn":46,"suggestions":"46392"},{"ruleId":"45357","severity":2,"message":"45358","line":323,"column":43,"nodeType":"45359","messageId":"45360","endLine":323,"endColumn":46,"suggestions":"46393"},{"ruleId":"45357","severity":2,"message":"45358","line":346,"column":43,"nodeType":"45359","messageId":"45360","endLine":346,"endColumn":46,"suggestions":"46394"},{"ruleId":"45357","severity":2,"message":"45358","line":363,"column":43,"nodeType":"45359","messageId":"45360","endLine":363,"endColumn":46,"suggestions":"46395"},{"ruleId":"45357","severity":2,"message":"45358","line":372,"column":58,"nodeType":"45359","messageId":"45360","endLine":372,"endColumn":61,"suggestions":"46396"},{"ruleId":"45357","severity":2,"message":"45358","line":474,"column":47,"nodeType":"45359","messageId":"45360","endLine":474,"endColumn":50,"suggestions":"46397"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":43,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":46,"suggestions":"46398"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":43,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":46,"suggestions":"46399"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":43,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":46,"suggestions":"46400"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":43,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":46,"suggestions":"46401"},{"ruleId":"45357","severity":2,"message":"45358","line":135,"column":43,"nodeType":"45359","messageId":"45360","endLine":135,"endColumn":46,"suggestions":"46402"},{"ruleId":"45357","severity":2,"message":"45358","line":181,"column":43,"nodeType":"45359","messageId":"45360","endLine":181,"endColumn":46,"suggestions":"46403"},{"ruleId":"45357","severity":2,"message":"45358","line":196,"column":43,"nodeType":"45359","messageId":"45360","endLine":196,"endColumn":46,"suggestions":"46404"},{"ruleId":"45357","severity":2,"message":"45358","line":229,"column":43,"nodeType":"45359","messageId":"45360","endLine":229,"endColumn":46,"suggestions":"46405"},{"ruleId":"45357","severity":2,"message":"45358","line":276,"column":43,"nodeType":"45359","messageId":"45360","endLine":276,"endColumn":46,"suggestions":"46406"},{"ruleId":"45357","severity":2,"message":"45358","line":317,"column":43,"nodeType":"45359","messageId":"45360","endLine":317,"endColumn":46,"suggestions":"46407"},{"ruleId":"45357","severity":2,"message":"45358","line":338,"column":43,"nodeType":"45359","messageId":"45360","endLine":338,"endColumn":46,"suggestions":"46408"},{"ruleId":"45357","severity":2,"message":"45358","line":359,"column":59,"nodeType":"45359","messageId":"45360","endLine":359,"endColumn":62,"suggestions":"46409"},{"ruleId":"45357","severity":2,"message":"45358","line":378,"column":56,"nodeType":"45359","messageId":"45360","endLine":378,"endColumn":59,"suggestions":"46410"},{"ruleId":"45357","severity":2,"message":"45358","line":404,"column":43,"nodeType":"45359","messageId":"45360","endLine":404,"endColumn":46,"suggestions":"46411"},{"ruleId":"45357","severity":2,"message":"45358","line":441,"column":43,"nodeType":"45359","messageId":"45360","endLine":441,"endColumn":46,"suggestions":"46412"},{"ruleId":"45357","severity":2,"message":"45358","line":487,"column":43,"nodeType":"45359","messageId":"45360","endLine":487,"endColumn":46,"suggestions":"46413"},{"ruleId":"45357","severity":2,"message":"45358","line":514,"column":43,"nodeType":"45359","messageId":"45360","endLine":514,"endColumn":46,"suggestions":"46414"},{"ruleId":"45357","severity":2,"message":"45358","line":176,"column":40,"nodeType":"45359","messageId":"45360","endLine":176,"endColumn":43,"suggestions":"46415"},{"ruleId":"45357","severity":2,"message":"45358","line":268,"column":45,"nodeType":"45359","messageId":"45360","endLine":268,"endColumn":48,"suggestions":"46416"},{"ruleId":"45357","severity":2,"message":"45358","line":304,"column":43,"nodeType":"45359","messageId":"45360","endLine":304,"endColumn":46,"suggestions":"46417"},{"ruleId":"45357","severity":2,"message":"45358","line":330,"column":45,"nodeType":"45359","messageId":"45360","endLine":330,"endColumn":48,"suggestions":"46418"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":36,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":39,"suggestions":"46419"},{"ruleId":"45357","severity":2,"message":"45358","line":142,"column":42,"nodeType":"45359","messageId":"45360","endLine":142,"endColumn":45,"suggestions":"46420"},{"ruleId":"45357","severity":2,"message":"45358","line":44,"column":51,"nodeType":"45359","messageId":"45360","endLine":44,"endColumn":54,"suggestions":"46421"},{"ruleId":"45357","severity":2,"message":"45358","line":105,"column":51,"nodeType":"45359","messageId":"45360","endLine":105,"endColumn":54,"suggestions":"46422"},{"ruleId":"45357","severity":2,"message":"45358","line":136,"column":39,"nodeType":"45359","messageId":"45360","endLine":136,"endColumn":42,"suggestions":"46423"},{"ruleId":"45357","severity":2,"message":"45358","line":136,"column":62,"nodeType":"45359","messageId":"45360","endLine":136,"endColumn":65,"suggestions":"46424"},{"ruleId":"45357","severity":2,"message":"45358","line":318,"column":4,"nodeType":"45359","messageId":"45360","endLine":318,"endColumn":7,"suggestions":"46425"},{"ruleId":"45357","severity":2,"message":"45358","line":319,"column":16,"nodeType":"45359","messageId":"45360","endLine":319,"endColumn":19,"suggestions":"46426"},{"ruleId":"45357","severity":2,"message":"45358","line":365,"column":10,"nodeType":"45359","messageId":"45360","endLine":365,"endColumn":13,"suggestions":"46427"},{"ruleId":"45357","severity":2,"message":"45358","line":410,"column":25,"nodeType":"45359","messageId":"45360","endLine":410,"endColumn":28,"suggestions":"46428"},{"ruleId":"45357","severity":2,"message":"45358","line":433,"column":10,"nodeType":"45359","messageId":"45360","endLine":433,"endColumn":13,"suggestions":"46429"},{"ruleId":"45357","severity":2,"message":"45358","line":441,"column":24,"nodeType":"45359","messageId":"45360","endLine":441,"endColumn":27,"suggestions":"46430"},{"ruleId":"45357","severity":2,"message":"45358","line":442,"column":11,"nodeType":"45359","messageId":"45360","endLine":442,"endColumn":14,"suggestions":"46431"},{"ruleId":"45357","severity":2,"message":"45358","line":480,"column":44,"nodeType":"45359","messageId":"45360","endLine":480,"endColumn":47,"suggestions":"46432"},{"ruleId":"45357","severity":2,"message":"45358","line":533,"column":53,"nodeType":"45359","messageId":"45360","endLine":533,"endColumn":56,"suggestions":"46433"},{"ruleId":"45357","severity":2,"message":"45358","line":1248,"column":53,"nodeType":"45359","messageId":"45360","endLine":1248,"endColumn":56,"suggestions":"46434"},{"ruleId":"45357","severity":2,"message":"45358","line":1377,"column":53,"nodeType":"45359","messageId":"45360","endLine":1377,"endColumn":56,"suggestions":"46435"},{"ruleId":"45357","severity":2,"message":"45358","line":1458,"column":53,"nodeType":"45359","messageId":"45360","endLine":1458,"endColumn":56,"suggestions":"46436"},{"ruleId":"45357","severity":2,"message":"45358","line":1661,"column":60,"nodeType":"45359","messageId":"45360","endLine":1661,"endColumn":63,"suggestions":"46437"},{"ruleId":"45357","severity":2,"message":"45358","line":1702,"column":60,"nodeType":"45359","messageId":"45360","endLine":1702,"endColumn":63,"suggestions":"46438"},{"ruleId":"45357","severity":2,"message":"45358","line":1757,"column":60,"nodeType":"45359","messageId":"45360","endLine":1757,"endColumn":63,"suggestions":"46439"},{"ruleId":"45357","severity":2,"message":"45358","line":1847,"column":53,"nodeType":"45359","messageId":"45360","endLine":1847,"endColumn":56,"suggestions":"46440"},{"ruleId":"45357","severity":2,"message":"45358","line":1865,"column":53,"nodeType":"45359","messageId":"45360","endLine":1865,"endColumn":56,"suggestions":"46441"},{"ruleId":"45357","severity":2,"message":"45358","line":1940,"column":78,"nodeType":"45359","messageId":"45360","endLine":1940,"endColumn":81,"suggestions":"46442"},{"ruleId":"45357","severity":2,"message":"45358","line":1943,"column":28,"nodeType":"45359","messageId":"45360","endLine":1943,"endColumn":31,"suggestions":"46443"},{"ruleId":"45357","severity":2,"message":"45358","line":1944,"column":28,"nodeType":"45359","messageId":"45360","endLine":1944,"endColumn":31,"suggestions":"46444"},{"ruleId":"45357","severity":2,"message":"45358","line":1946,"column":24,"nodeType":"45359","messageId":"45360","endLine":1946,"endColumn":27,"suggestions":"46445"},{"ruleId":"45357","severity":2,"message":"45358","line":1949,"column":28,"nodeType":"45359","messageId":"45360","endLine":1949,"endColumn":31,"suggestions":"46446"},{"ruleId":"45357","severity":2,"message":"45358","line":1991,"column":80,"nodeType":"45359","messageId":"45360","endLine":1991,"endColumn":83,"suggestions":"46447"},{"ruleId":"45357","severity":2,"message":"45358","line":1994,"column":30,"nodeType":"45359","messageId":"45360","endLine":1994,"endColumn":33,"suggestions":"46448"},{"ruleId":"45357","severity":2,"message":"45358","line":1997,"column":20,"nodeType":"45359","messageId":"45360","endLine":1997,"endColumn":23,"suggestions":"46449"},{"ruleId":"45357","severity":2,"message":"45358","line":2003,"column":84,"nodeType":"45359","messageId":"45360","endLine":2003,"endColumn":87,"suggestions":"46450"},{"ruleId":"45357","severity":2,"message":"45358","line":2005,"column":32,"nodeType":"45359","messageId":"45360","endLine":2005,"endColumn":35,"suggestions":"46451"},{"ruleId":"45357","severity":2,"message":"45358","line":2009,"column":34,"nodeType":"45359","messageId":"45360","endLine":2009,"endColumn":37,"suggestions":"46452"},{"ruleId":"45357","severity":2,"message":"45358","line":2033,"column":53,"nodeType":"45359","messageId":"45360","endLine":2033,"endColumn":56,"suggestions":"46453"},{"ruleId":"45357","severity":2,"message":"45358","line":2068,"column":53,"nodeType":"45359","messageId":"45360","endLine":2068,"endColumn":56,"suggestions":"46454"},{"ruleId":"45357","severity":2,"message":"45358","line":2089,"column":53,"nodeType":"45359","messageId":"45360","endLine":2089,"endColumn":56,"suggestions":"46455"},{"ruleId":"45357","severity":2,"message":"45358","line":2172,"column":53,"nodeType":"45359","messageId":"45360","endLine":2172,"endColumn":56,"suggestions":"46456"},{"ruleId":"45357","severity":2,"message":"45358","line":2334,"column":50,"nodeType":"45359","messageId":"45360","endLine":2334,"endColumn":53,"suggestions":"46457"},{"ruleId":"45357","severity":2,"message":"45358","line":2337,"column":21,"nodeType":"45359","messageId":"45360","endLine":2337,"endColumn":24,"suggestions":"46458"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":61,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":64,"suggestions":"46459"},{"ruleId":"45357","severity":2,"message":"45358","line":150,"column":13,"nodeType":"45359","messageId":"45360","endLine":150,"endColumn":16,"suggestions":"46460"},{"ruleId":"45357","severity":2,"message":"45358","line":156,"column":51,"nodeType":"45359","messageId":"45360","endLine":156,"endColumn":54,"suggestions":"46461"},{"ruleId":"45357","severity":2,"message":"45358","line":178,"column":13,"nodeType":"45359","messageId":"45360","endLine":178,"endColumn":16,"suggestions":"46462"},{"ruleId":"45357","severity":2,"message":"45358","line":209,"column":13,"nodeType":"45359","messageId":"45360","endLine":209,"endColumn":16,"suggestions":"46463"},{"ruleId":"45357","severity":2,"message":"45358","line":244,"column":13,"nodeType":"45359","messageId":"45360","endLine":244,"endColumn":16,"suggestions":"46464"},{"ruleId":"45357","severity":2,"message":"45358","line":13,"column":34,"nodeType":"45359","messageId":"45360","endLine":13,"endColumn":37,"suggestions":"46465"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":33,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":36,"suggestions":"46466"},{"ruleId":"45357","severity":2,"message":"45358","line":61,"column":35,"nodeType":"45359","messageId":"45360","endLine":61,"endColumn":38,"suggestions":"46467"},{"ruleId":"45357","severity":2,"message":"45358","line":135,"column":28,"nodeType":"45359","messageId":"45360","endLine":135,"endColumn":31,"suggestions":"46468"},{"ruleId":"45357","severity":2,"message":"45358","line":136,"column":22,"nodeType":"45359","messageId":"45360","endLine":136,"endColumn":25,"suggestions":"46469"},{"ruleId":"45357","severity":2,"message":"45358","line":143,"column":28,"nodeType":"45359","messageId":"45360","endLine":143,"endColumn":31,"suggestions":"46470"},{"ruleId":"45357","severity":2,"message":"45358","line":179,"column":38,"nodeType":"45359","messageId":"45360","endLine":179,"endColumn":41,"suggestions":"46471"},{"ruleId":"45357","severity":2,"message":"45358","line":180,"column":38,"nodeType":"45359","messageId":"45360","endLine":180,"endColumn":41,"suggestions":"46472"},{"ruleId":"45357","severity":2,"message":"45358","line":277,"column":38,"nodeType":"45359","messageId":"45360","endLine":277,"endColumn":41,"suggestions":"46473"},{"ruleId":"45357","severity":2,"message":"45358","line":344,"column":25,"nodeType":"45359","messageId":"45360","endLine":344,"endColumn":28,"suggestions":"46474"},{"ruleId":"45357","severity":2,"message":"45358","line":346,"column":29,"nodeType":"45359","messageId":"45360","endLine":346,"endColumn":32,"suggestions":"46475"},{"ruleId":"45357","severity":2,"message":"45358","line":347,"column":39,"nodeType":"45359","messageId":"45360","endLine":347,"endColumn":42,"suggestions":"46476"},{"ruleId":"45357","severity":2,"message":"45358","line":348,"column":39,"nodeType":"45359","messageId":"45360","endLine":348,"endColumn":42,"suggestions":"46477"},{"ruleId":"45357","severity":2,"message":"45358","line":349,"column":29,"nodeType":"45359","messageId":"45360","endLine":349,"endColumn":32,"suggestions":"46478"},{"ruleId":"45357","severity":2,"message":"45358","line":354,"column":40,"nodeType":"45359","messageId":"45360","endLine":354,"endColumn":43,"suggestions":"46479"},{"ruleId":"45357","severity":2,"message":"45358","line":355,"column":40,"nodeType":"45359","messageId":"45360","endLine":355,"endColumn":43,"suggestions":"46480"},{"ruleId":"45357","severity":2,"message":"45358","line":356,"column":14,"nodeType":"45359","messageId":"45360","endLine":356,"endColumn":17,"suggestions":"46481"},{"ruleId":"45357","severity":2,"message":"45358","line":356,"column":53,"nodeType":"45359","messageId":"45360","endLine":356,"endColumn":56,"suggestions":"46482"},{"ruleId":"45357","severity":2,"message":"45358","line":357,"column":14,"nodeType":"45359","messageId":"45360","endLine":357,"endColumn":17,"suggestions":"46483"},{"ruleId":"45357","severity":2,"message":"45358","line":357,"column":62,"nodeType":"45359","messageId":"45360","endLine":357,"endColumn":65,"suggestions":"46484"},{"ruleId":"45357","severity":2,"message":"45358","line":358,"column":53,"nodeType":"45359","messageId":"45360","endLine":358,"endColumn":56,"suggestions":"46485"},{"ruleId":"45357","severity":2,"message":"45358","line":396,"column":51,"nodeType":"45359","messageId":"45360","endLine":396,"endColumn":54,"suggestions":"46486"},{"ruleId":"45357","severity":2,"message":"45358","line":398,"column":51,"nodeType":"45359","messageId":"45360","endLine":398,"endColumn":54,"suggestions":"46487"},{"ruleId":"45357","severity":2,"message":"45358","line":399,"column":51,"nodeType":"45359","messageId":"45360","endLine":399,"endColumn":54,"suggestions":"46488"},{"ruleId":"45357","severity":2,"message":"45358","line":400,"column":51,"nodeType":"45359","messageId":"45360","endLine":400,"endColumn":54,"suggestions":"46489"},{"ruleId":"45357","severity":2,"message":"45358","line":401,"column":51,"nodeType":"45359","messageId":"45360","endLine":401,"endColumn":54,"suggestions":"46490"},{"ruleId":"45357","severity":2,"message":"45358","line":428,"column":51,"nodeType":"45359","messageId":"45360","endLine":428,"endColumn":54,"suggestions":"46491"},{"ruleId":"45357","severity":2,"message":"45358","line":429,"column":51,"nodeType":"45359","messageId":"45360","endLine":429,"endColumn":54,"suggestions":"46492"},{"ruleId":"45357","severity":2,"message":"45358","line":447,"column":14,"nodeType":"45359","messageId":"45360","endLine":447,"endColumn":17,"suggestions":"46493"},{"ruleId":"45357","severity":2,"message":"45358","line":448,"column":28,"nodeType":"45359","messageId":"45360","endLine":448,"endColumn":31,"suggestions":"46494"},{"ruleId":"45357","severity":2,"message":"45358","line":489,"column":30,"nodeType":"45359","messageId":"45360","endLine":489,"endColumn":33,"suggestions":"46495"},{"ruleId":"45357","severity":2,"message":"45358","line":490,"column":52,"nodeType":"45359","messageId":"45360","endLine":490,"endColumn":55,"suggestions":"46496"},{"ruleId":"45357","severity":2,"message":"45358","line":29,"column":69,"nodeType":"45359","messageId":"45360","endLine":29,"endColumn":72,"suggestions":"46497"},{"ruleId":"45357","severity":2,"message":"45358","line":83,"column":35,"nodeType":"45359","messageId":"45360","endLine":83,"endColumn":38,"suggestions":"46498"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":35,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":38,"suggestions":"46499"},{"ruleId":"45357","severity":2,"message":"45358","line":117,"column":10,"nodeType":"45359","messageId":"45360","endLine":117,"endColumn":13,"suggestions":"46500"},{"ruleId":"45357","severity":2,"message":"45358","line":34,"column":49,"nodeType":"45359","messageId":"45360","endLine":34,"endColumn":52,"suggestions":"46501"},{"ruleId":"45357","severity":2,"message":"45358","line":43,"column":49,"nodeType":"45359","messageId":"45360","endLine":43,"endColumn":52,"suggestions":"46502"},{"ruleId":"45357","severity":2,"message":"45358","line":50,"column":49,"nodeType":"45359","messageId":"45360","endLine":50,"endColumn":52,"suggestions":"46503"},{"ruleId":"45357","severity":2,"message":"45358","line":66,"column":35,"nodeType":"45359","messageId":"45360","endLine":66,"endColumn":38,"suggestions":"46504"},{"ruleId":"45357","severity":2,"message":"45358","line":83,"column":22,"nodeType":"45359","messageId":"45360","endLine":83,"endColumn":25,"suggestions":"46505"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":9,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":12,"suggestions":"46506"},{"ruleId":"45357","severity":2,"message":"45358","line":145,"column":35,"nodeType":"45359","messageId":"45360","endLine":145,"endColumn":38,"suggestions":"46507"},{"ruleId":"45357","severity":2,"message":"45358","line":161,"column":22,"nodeType":"45359","messageId":"45360","endLine":161,"endColumn":25,"suggestions":"46508"},{"ruleId":"45357","severity":2,"message":"45358","line":166,"column":9,"nodeType":"45359","messageId":"45360","endLine":166,"endColumn":12,"suggestions":"46509"},{"ruleId":"45357","severity":2,"message":"45358","line":208,"column":35,"nodeType":"45359","messageId":"45360","endLine":208,"endColumn":38,"suggestions":"46510"},{"ruleId":"45357","severity":2,"message":"45358","line":253,"column":35,"nodeType":"45359","messageId":"45360","endLine":253,"endColumn":38,"suggestions":"46511"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":9,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":12,"suggestions":"46512"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":44,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":47,"suggestions":"46513"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":29,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":32,"suggestions":"46514"},{"ruleId":"45357","severity":2,"message":"45358","line":75,"column":21,"nodeType":"45359","messageId":"45360","endLine":75,"endColumn":24,"suggestions":"46515"},{"ruleId":"45357","severity":2,"message":"45358","line":78,"column":43,"nodeType":"45359","messageId":"45360","endLine":78,"endColumn":46,"suggestions":"46516"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":9,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":12,"suggestions":"46517"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":30,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":33,"suggestions":"46518"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":9,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":12,"suggestions":"46519"},{"ruleId":"45357","severity":2,"message":"45358","line":116,"column":30,"nodeType":"45359","messageId":"45360","endLine":116,"endColumn":33,"suggestions":"46520"},{"ruleId":"45357","severity":2,"message":"45358","line":129,"column":9,"nodeType":"45359","messageId":"45360","endLine":129,"endColumn":12,"suggestions":"46521"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":44,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":47,"suggestions":"46522"},{"ruleId":"45357","severity":2,"message":"45358","line":147,"column":43,"nodeType":"45359","messageId":"45360","endLine":147,"endColumn":46,"suggestions":"46523"},{"ruleId":"45357","severity":2,"message":"45358","line":151,"column":9,"nodeType":"45359","messageId":"45360","endLine":151,"endColumn":12,"suggestions":"46524"},{"ruleId":"45357","severity":2,"message":"45358","line":153,"column":30,"nodeType":"45359","messageId":"45360","endLine":153,"endColumn":33,"suggestions":"46525"},{"ruleId":"45357","severity":2,"message":"45358","line":166,"column":9,"nodeType":"45359","messageId":"45360","endLine":166,"endColumn":12,"suggestions":"46526"},{"ruleId":"45357","severity":2,"message":"45358","line":168,"column":30,"nodeType":"45359","messageId":"45360","endLine":168,"endColumn":33,"suggestions":"46527"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":37,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":40,"suggestions":"46528"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":61,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":64,"suggestions":"46529"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":29,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":32,"suggestions":"46530"},{"ruleId":"45357","severity":2,"message":"45358","line":99,"column":29,"nodeType":"45359","messageId":"45360","endLine":99,"endColumn":32,"suggestions":"46531"},{"ruleId":"45357","severity":2,"message":"45358","line":108,"column":9,"nodeType":"45359","messageId":"45360","endLine":108,"endColumn":12,"suggestions":"46532"},{"ruleId":"45357","severity":2,"message":"45358","line":112,"column":68,"nodeType":"45359","messageId":"45360","endLine":112,"endColumn":71,"suggestions":"46533"},{"ruleId":"45357","severity":2,"message":"45358","line":118,"column":30,"nodeType":"45359","messageId":"45360","endLine":118,"endColumn":33,"suggestions":"46534"},{"ruleId":"45357","severity":2,"message":"45358","line":127,"column":9,"nodeType":"45359","messageId":"45360","endLine":127,"endColumn":12,"suggestions":"46535"},{"ruleId":"45357","severity":2,"message":"45358","line":134,"column":20,"nodeType":"45359","messageId":"45360","endLine":134,"endColumn":23,"suggestions":"46536"},{"ruleId":"45357","severity":2,"message":"45358","line":149,"column":9,"nodeType":"45359","messageId":"45360","endLine":149,"endColumn":12,"suggestions":"46537"},{"ruleId":"45357","severity":2,"message":"45358","line":153,"column":65,"nodeType":"45359","messageId":"45360","endLine":153,"endColumn":68,"suggestions":"46538"},{"ruleId":"45357","severity":2,"message":"45358","line":169,"column":9,"nodeType":"45359","messageId":"45360","endLine":169,"endColumn":12,"suggestions":"46539"},{"ruleId":"45357","severity":2,"message":"45358","line":173,"column":62,"nodeType":"45359","messageId":"45360","endLine":173,"endColumn":65,"suggestions":"46540"},{"ruleId":"45357","severity":2,"message":"45358","line":184,"column":37,"nodeType":"45359","messageId":"45360","endLine":184,"endColumn":40,"suggestions":"46541"},{"ruleId":"45357","severity":2,"message":"45358","line":188,"column":75,"nodeType":"45359","messageId":"45360","endLine":188,"endColumn":78,"suggestions":"46542"},{"ruleId":"45357","severity":2,"message":"45358","line":43,"column":9,"nodeType":"45359","messageId":"45360","endLine":43,"endColumn":12,"suggestions":"46543"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":30,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":33,"suggestions":"46544"},{"ruleId":"45357","severity":2,"message":"45358","line":57,"column":9,"nodeType":"45359","messageId":"45360","endLine":57,"endColumn":12,"suggestions":"46545"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":30,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":33,"suggestions":"46546"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":21,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":24,"suggestions":"46547"},{"ruleId":"45357","severity":2,"message":"45358","line":69,"column":44,"nodeType":"45359","messageId":"45360","endLine":69,"endColumn":47,"suggestions":"46548"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":9,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":12,"suggestions":"46549"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":30,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":33,"suggestions":"46550"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":43,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":46,"suggestions":"46551"},{"ruleId":"45357","severity":2,"message":"45358","line":96,"column":9,"nodeType":"45359","messageId":"45360","endLine":96,"endColumn":12,"suggestions":"46552"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":30,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":33,"suggestions":"46553"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":9,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":12,"suggestions":"46554"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":30,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":33,"suggestions":"46555"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":10,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":13,"suggestions":"46556"},{"ruleId":"45357","severity":2,"message":"45358","line":134,"column":9,"nodeType":"45359","messageId":"45360","endLine":134,"endColumn":12,"suggestions":"46557"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":47,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":50,"suggestions":"46558"},{"ruleId":"45357","severity":2,"message":"45358","line":43,"column":50,"nodeType":"45359","messageId":"45360","endLine":43,"endColumn":53,"suggestions":"46559"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":69,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":72,"suggestions":"46560"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":50,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":53,"suggestions":"46561"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":69,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":72,"suggestions":"46562"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":21,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":24,"suggestions":"46563"},{"ruleId":"45357","severity":2,"message":"45358","line":81,"column":43,"nodeType":"45359","messageId":"45360","endLine":81,"endColumn":46,"suggestions":"46564"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":9,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":12,"suggestions":"46565"},{"ruleId":"45357","severity":2,"message":"45358","line":89,"column":92,"nodeType":"45359","messageId":"45360","endLine":89,"endColumn":95,"suggestions":"46566"},{"ruleId":"45357","severity":2,"message":"45358","line":101,"column":50,"nodeType":"45359","messageId":"45360","endLine":101,"endColumn":53,"suggestions":"46567"},{"ruleId":"45357","severity":2,"message":"45358","line":105,"column":83,"nodeType":"45359","messageId":"45360","endLine":105,"endColumn":86,"suggestions":"46568"},{"ruleId":"45357","severity":2,"message":"45358","line":126,"column":43,"nodeType":"45359","messageId":"45360","endLine":126,"endColumn":46,"suggestions":"46569"},{"ruleId":"45357","severity":2,"message":"45358","line":129,"column":9,"nodeType":"45359","messageId":"45360","endLine":129,"endColumn":12,"suggestions":"46570"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":91,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":94,"suggestions":"46571"},{"ruleId":"45357","severity":2,"message":"45358","line":147,"column":21,"nodeType":"45359","messageId":"45360","endLine":147,"endColumn":24,"suggestions":"46572"},{"ruleId":"45357","severity":2,"message":"45358","line":149,"column":43,"nodeType":"45359","messageId":"45360","endLine":149,"endColumn":46,"suggestions":"46573"},{"ruleId":"45357","severity":2,"message":"45358","line":152,"column":9,"nodeType":"45359","messageId":"45360","endLine":152,"endColumn":12,"suggestions":"46574"},{"ruleId":"45357","severity":2,"message":"45358","line":160,"column":91,"nodeType":"45359","messageId":"45360","endLine":160,"endColumn":94,"suggestions":"46575"},{"ruleId":"45357","severity":2,"message":"45358","line":54,"column":9,"nodeType":"45359","messageId":"45360","endLine":54,"endColumn":12,"suggestions":"46576"},{"ruleId":"45357","severity":2,"message":"45358","line":59,"column":42,"nodeType":"45359","messageId":"45360","endLine":59,"endColumn":45,"suggestions":"46577"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":9,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":12,"suggestions":"46578"},{"ruleId":"45357","severity":2,"message":"45358","line":81,"column":42,"nodeType":"45359","messageId":"45360","endLine":81,"endColumn":45,"suggestions":"46579"},{"ruleId":"45357","severity":2,"message":"45358","line":89,"column":21,"nodeType":"45359","messageId":"45360","endLine":89,"endColumn":24,"suggestions":"46580"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":43,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":46,"suggestions":"46581"},{"ruleId":"45357","severity":2,"message":"45358","line":96,"column":9,"nodeType":"45359","messageId":"45360","endLine":96,"endColumn":12,"suggestions":"46582"},{"ruleId":"45357","severity":2,"message":"45358","line":106,"column":30,"nodeType":"45359","messageId":"45360","endLine":106,"endColumn":33,"suggestions":"46583"},{"ruleId":"45357","severity":2,"message":"45358","line":118,"column":21,"nodeType":"45359","messageId":"45360","endLine":118,"endColumn":24,"suggestions":"46584"},{"ruleId":"45357","severity":2,"message":"45358","line":120,"column":44,"nodeType":"45359","messageId":"45360","endLine":120,"endColumn":47,"suggestions":"46585"},{"ruleId":"45357","severity":2,"message":"45358","line":123,"column":9,"nodeType":"45359","messageId":"45360","endLine":123,"endColumn":12,"suggestions":"46586"},{"ruleId":"45357","severity":2,"message":"45358","line":125,"column":30,"nodeType":"45359","messageId":"45360","endLine":125,"endColumn":33,"suggestions":"46587"},{"ruleId":"45357","severity":2,"message":"45358","line":135,"column":21,"nodeType":"45359","messageId":"45360","endLine":135,"endColumn":24,"suggestions":"46588"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":44,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":47,"suggestions":"46589"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":9,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":12,"suggestions":"46590"},{"ruleId":"45357","severity":2,"message":"45358","line":142,"column":30,"nodeType":"45359","messageId":"45360","endLine":142,"endColumn":33,"suggestions":"46591"},{"ruleId":"45357","severity":2,"message":"45358","line":157,"column":9,"nodeType":"45359","messageId":"45360","endLine":157,"endColumn":12,"suggestions":"46592"},{"ruleId":"45357","severity":2,"message":"45358","line":159,"column":30,"nodeType":"45359","messageId":"45360","endLine":159,"endColumn":33,"suggestions":"46593"},{"ruleId":"45357","severity":2,"message":"45358","line":23,"column":21,"nodeType":"45359","messageId":"45360","endLine":23,"endColumn":24,"suggestions":"46594"},{"ruleId":"45357","severity":2,"message":"45358","line":26,"column":43,"nodeType":"45359","messageId":"45360","endLine":26,"endColumn":46,"suggestions":"46595"},{"ruleId":"45357","severity":2,"message":"45358","line":43,"column":9,"nodeType":"45359","messageId":"45360","endLine":43,"endColumn":12,"suggestions":"46596"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":30,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":33,"suggestions":"46597"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":21,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":24,"suggestions":"46598"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":44,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":47,"suggestions":"46599"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":9,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":12,"suggestions":"46600"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":30,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":33,"suggestions":"46601"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":21,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":24,"suggestions":"46602"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":44,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":47,"suggestions":"46603"},{"ruleId":"45357","severity":2,"message":"45358","line":91,"column":9,"nodeType":"45359","messageId":"45360","endLine":91,"endColumn":12,"suggestions":"46604"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":30,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":33,"suggestions":"46605"},{"ruleId":"45357","severity":2,"message":"45358","line":112,"column":43,"nodeType":"45359","messageId":"45360","endLine":112,"endColumn":46,"suggestions":"46606"},{"ruleId":"45357","severity":2,"message":"45358","line":118,"column":9,"nodeType":"45359","messageId":"45360","endLine":118,"endColumn":12,"suggestions":"46607"},{"ruleId":"45357","severity":2,"message":"45358","line":120,"column":30,"nodeType":"45359","messageId":"45360","endLine":120,"endColumn":33,"suggestions":"46608"},{"ruleId":"45357","severity":2,"message":"45358","line":124,"column":30,"nodeType":"45359","messageId":"45360","endLine":124,"endColumn":33,"suggestions":"46609"},{"ruleId":"45357","severity":2,"message":"45358","line":13,"column":22,"nodeType":"45359","messageId":"45360","endLine":13,"endColumn":25,"suggestions":"46610"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":24,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":27,"suggestions":"46611"},{"ruleId":"45357","severity":2,"message":"45358","line":32,"column":22,"nodeType":"45359","messageId":"45360","endLine":32,"endColumn":25,"suggestions":"46612"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":24,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":27,"suggestions":"46613"},{"ruleId":"45357","severity":2,"message":"45358","line":50,"column":22,"nodeType":"45359","messageId":"45360","endLine":50,"endColumn":25,"suggestions":"46614"},{"ruleId":"45357","severity":2,"message":"45358","line":59,"column":24,"nodeType":"45359","messageId":"45360","endLine":59,"endColumn":27,"suggestions":"46615"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":22,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":25,"suggestions":"46616"},{"ruleId":"45357","severity":2,"message":"45358","line":70,"column":61,"nodeType":"45359","messageId":"45360","endLine":70,"endColumn":64,"suggestions":"46617"},{"ruleId":"45357","severity":2,"message":"45358","line":73,"column":24,"nodeType":"45359","messageId":"45360","endLine":73,"endColumn":27,"suggestions":"46618"},{"ruleId":"45357","severity":2,"message":"45358","line":81,"column":22,"nodeType":"45359","messageId":"45360","endLine":81,"endColumn":25,"suggestions":"46619"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":24,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":27,"suggestions":"46620"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":21,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":24,"suggestions":"46621"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":44,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":47,"suggestions":"46622"},{"ruleId":"45357","severity":2,"message":"45358","line":43,"column":9,"nodeType":"45359","messageId":"45360","endLine":43,"endColumn":12,"suggestions":"46623"},{"ruleId":"45357","severity":2,"message":"45358","line":46,"column":67,"nodeType":"45359","messageId":"45360","endLine":46,"endColumn":70,"suggestions":"46624"},{"ruleId":"45357","severity":2,"message":"45358","line":53,"column":21,"nodeType":"45359","messageId":"45360","endLine":53,"endColumn":24,"suggestions":"46625"},{"ruleId":"45357","severity":2,"message":"45358","line":55,"column":44,"nodeType":"45359","messageId":"45360","endLine":55,"endColumn":47,"suggestions":"46626"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":9,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":12,"suggestions":"46627"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":93,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":96,"suggestions":"46628"},{"ruleId":"45357","severity":2,"message":"45358","line":75,"column":21,"nodeType":"45359","messageId":"45360","endLine":75,"endColumn":24,"suggestions":"46629"},{"ruleId":"45357","severity":2,"message":"45358","line":77,"column":44,"nodeType":"45359","messageId":"45360","endLine":77,"endColumn":47,"suggestions":"46630"},{"ruleId":"45357","severity":2,"message":"45358","line":80,"column":9,"nodeType":"45359","messageId":"45360","endLine":80,"endColumn":12,"suggestions":"46631"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":59,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":62,"suggestions":"46632"},{"ruleId":"45357","severity":2,"message":"45358","line":99,"column":9,"nodeType":"45359","messageId":"45360","endLine":99,"endColumn":12,"suggestions":"46633"},{"ruleId":"45357","severity":2,"message":"45358","line":103,"column":70,"nodeType":"45359","messageId":"45360","endLine":103,"endColumn":73,"suggestions":"46634"},{"ruleId":"45357","severity":2,"message":"45358","line":120,"column":9,"nodeType":"45359","messageId":"45360","endLine":120,"endColumn":12,"suggestions":"46635"},{"ruleId":"45357","severity":2,"message":"45358","line":122,"column":30,"nodeType":"45359","messageId":"45360","endLine":122,"endColumn":33,"suggestions":"46636"},{"ruleId":"45357","severity":2,"message":"45358","line":129,"column":21,"nodeType":"45359","messageId":"45360","endLine":129,"endColumn":24,"suggestions":"46637"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":43,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":46,"suggestions":"46638"},{"ruleId":"45357","severity":2,"message":"45358","line":136,"column":9,"nodeType":"45359","messageId":"45360","endLine":136,"endColumn":12,"suggestions":"46639"},{"ruleId":"45357","severity":2,"message":"45358","line":138,"column":30,"nodeType":"45359","messageId":"45360","endLine":138,"endColumn":33,"suggestions":"46640"},{"ruleId":"45357","severity":2,"message":"45358","line":155,"column":9,"nodeType":"45359","messageId":"45360","endLine":155,"endColumn":12,"suggestions":"46641"},{"ruleId":"45357","severity":2,"message":"45358","line":157,"column":30,"nodeType":"45359","messageId":"45360","endLine":157,"endColumn":33,"suggestions":"46642"},{"ruleId":"45357","severity":2,"message":"45358","line":191,"column":9,"nodeType":"45359","messageId":"45360","endLine":191,"endColumn":12,"suggestions":"46643"},{"ruleId":"45357","severity":2,"message":"45358","line":194,"column":67,"nodeType":"45359","messageId":"45360","endLine":194,"endColumn":70,"suggestions":"46644"},{"ruleId":"45357","severity":2,"message":"45358","line":212,"column":17,"nodeType":"45359","messageId":"45360","endLine":212,"endColumn":20,"suggestions":"46645"},{"ruleId":"45357","severity":2,"message":"45358","line":214,"column":44,"nodeType":"45359","messageId":"45360","endLine":214,"endColumn":47,"suggestions":"46646"},{"ruleId":"45357","severity":2,"message":"45358","line":217,"column":9,"nodeType":"45359","messageId":"45360","endLine":217,"endColumn":12,"suggestions":"46647"},{"ruleId":"45357","severity":2,"message":"45358","line":221,"column":62,"nodeType":"45359","messageId":"45360","endLine":221,"endColumn":65,"suggestions":"46648"},{"ruleId":"45357","severity":2,"message":"45358","line":229,"column":61,"nodeType":"45359","messageId":"45360","endLine":229,"endColumn":64,"suggestions":"46649"},{"ruleId":"45357","severity":2,"message":"45358","line":231,"column":43,"nodeType":"45359","messageId":"45360","endLine":231,"endColumn":46,"suggestions":"46650"},{"ruleId":"45357","severity":2,"message":"45358","line":241,"column":9,"nodeType":"45359","messageId":"45360","endLine":241,"endColumn":12,"suggestions":"46651"},{"ruleId":"45357","severity":2,"message":"45358","line":245,"column":59,"nodeType":"45359","messageId":"45360","endLine":245,"endColumn":62,"suggestions":"46652"},{"ruleId":"45357","severity":2,"message":"45358","line":43,"column":9,"nodeType":"45359","messageId":"45360","endLine":43,"endColumn":12,"suggestions":"46653"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":30,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":33,"suggestions":"46654"},{"ruleId":"45357","severity":2,"message":"45358","line":53,"column":21,"nodeType":"45359","messageId":"45360","endLine":53,"endColumn":24,"suggestions":"46655"},{"ruleId":"45357","severity":2,"message":"45358","line":56,"column":44,"nodeType":"45359","messageId":"45360","endLine":56,"endColumn":47,"suggestions":"46656"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":9,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":12,"suggestions":"46657"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":30,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":33,"suggestions":"46658"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":21,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":24,"suggestions":"46659"},{"ruleId":"45357","severity":2,"message":"45358","line":76,"column":44,"nodeType":"45359","messageId":"45360","endLine":76,"endColumn":47,"suggestions":"46660"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":9,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":12,"suggestions":"46661"},{"ruleId":"45357","severity":2,"message":"45358","line":81,"column":30,"nodeType":"45359","messageId":"45360","endLine":81,"endColumn":33,"suggestions":"46662"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":21,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":24,"suggestions":"46663"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":44,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":47,"suggestions":"46664"},{"ruleId":"45357","severity":2,"message":"45358","line":97,"column":9,"nodeType":"45359","messageId":"45360","endLine":97,"endColumn":12,"suggestions":"46665"},{"ruleId":"45357","severity":2,"message":"45358","line":99,"column":30,"nodeType":"45359","messageId":"45360","endLine":99,"endColumn":33,"suggestions":"46666"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":43,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":46,"suggestions":"46667"},{"ruleId":"45357","severity":2,"message":"45358","line":117,"column":9,"nodeType":"45359","messageId":"45360","endLine":117,"endColumn":12,"suggestions":"46668"},{"ruleId":"45357","severity":2,"message":"45358","line":119,"column":30,"nodeType":"45359","messageId":"45360","endLine":119,"endColumn":33,"suggestions":"46669"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":9,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":12,"suggestions":"46670"},{"ruleId":"45357","severity":2,"message":"45358","line":134,"column":30,"nodeType":"45359","messageId":"45360","endLine":134,"endColumn":33,"suggestions":"46671"},{"ruleId":"45357","severity":2,"message":"45358","line":102,"column":18,"nodeType":"45359","messageId":"45360","endLine":102,"endColumn":21,"suggestions":"46672","suppressions":"46673"},{"ruleId":"45357","severity":2,"message":"45358","line":124,"column":22,"nodeType":"45359","messageId":"45360","endLine":124,"endColumn":25,"suggestions":"46674","suppressions":"46675"},{"ruleId":"45357","severity":2,"message":"45358","line":102,"column":37,"nodeType":"45359","messageId":"45360","endLine":102,"endColumn":40,"suggestions":"46676"},{"ruleId":"45357","severity":2,"message":"45358","line":107,"column":79,"nodeType":"45359","messageId":"45360","endLine":107,"endColumn":82,"suggestions":"46677"},{"ruleId":"45357","severity":2,"message":"45358","line":116,"column":37,"nodeType":"45359","messageId":"45360","endLine":116,"endColumn":40,"suggestions":"46678"},{"ruleId":"45357","severity":2,"message":"45358","line":121,"column":79,"nodeType":"45359","messageId":"45360","endLine":121,"endColumn":82,"suggestions":"46679"},{"ruleId":"45357","severity":2,"message":"45358","line":135,"column":37,"nodeType":"45359","messageId":"45360","endLine":135,"endColumn":40,"suggestions":"46680"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":75,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":78,"suggestions":"46681"},{"ruleId":"45357","severity":2,"message":"45358","line":146,"column":29,"nodeType":"45359","messageId":"45360","endLine":146,"endColumn":32,"suggestions":"46682"},{"ruleId":"45357","severity":2,"message":"45358","line":151,"column":37,"nodeType":"45359","messageId":"45360","endLine":151,"endColumn":40,"suggestions":"46683"},{"ruleId":"45357","severity":2,"message":"45358","line":156,"column":73,"nodeType":"45359","messageId":"45360","endLine":156,"endColumn":76,"suggestions":"46684"},{"ruleId":"45357","severity":2,"message":"45358","line":162,"column":29,"nodeType":"45359","messageId":"45360","endLine":162,"endColumn":32,"suggestions":"46685"},{"ruleId":"45357","severity":2,"message":"45358","line":167,"column":37,"nodeType":"45359","messageId":"45360","endLine":167,"endColumn":40,"suggestions":"46686"},{"ruleId":"45357","severity":2,"message":"45358","line":172,"column":79,"nodeType":"45359","messageId":"45360","endLine":172,"endColumn":82,"suggestions":"46687"},{"ruleId":"45357","severity":2,"message":"45358","line":185,"column":9,"nodeType":"45359","messageId":"45360","endLine":185,"endColumn":12,"suggestions":"46688"},{"ruleId":"45357","severity":2,"message":"45358","line":192,"column":14,"nodeType":"45359","messageId":"45360","endLine":192,"endColumn":17,"suggestions":"46689"},{"ruleId":"45357","severity":2,"message":"45358","line":204,"column":37,"nodeType":"45359","messageId":"45360","endLine":204,"endColumn":40,"suggestions":"46690"},{"ruleId":"45357","severity":2,"message":"45358","line":209,"column":77,"nodeType":"45359","messageId":"45360","endLine":209,"endColumn":80,"suggestions":"46691"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":9,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":12,"suggestions":"46692"},{"ruleId":"45357","severity":2,"message":"45358","line":68,"column":76,"nodeType":"45359","messageId":"45360","endLine":68,"endColumn":79,"suggestions":"46693"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":9,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":12,"suggestions":"46694"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":88,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":91,"suggestions":"46695"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":21,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":24,"suggestions":"46696"},{"ruleId":"45357","severity":2,"message":"45358","line":97,"column":43,"nodeType":"45359","messageId":"45360","endLine":97,"endColumn":46,"suggestions":"46697"},{"ruleId":"45357","severity":2,"message":"45358","line":101,"column":9,"nodeType":"45359","messageId":"45360","endLine":101,"endColumn":12,"suggestions":"46698"},{"ruleId":"45357","severity":2,"message":"45358","line":105,"column":79,"nodeType":"45359","messageId":"45360","endLine":105,"endColumn":82,"suggestions":"46699"},{"ruleId":"45357","severity":2,"message":"45358","line":121,"column":9,"nodeType":"45359","messageId":"45360","endLine":121,"endColumn":12,"suggestions":"46700"},{"ruleId":"45357","severity":2,"message":"45358","line":125,"column":86,"nodeType":"45359","messageId":"45360","endLine":125,"endColumn":89,"suggestions":"46701"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":9,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":12,"suggestions":"46702"},{"ruleId":"45357","severity":2,"message":"45358","line":143,"column":80,"nodeType":"45359","messageId":"45360","endLine":143,"endColumn":83,"suggestions":"46703"},{"ruleId":"45357","severity":2,"message":"45358","line":155,"column":9,"nodeType":"45359","messageId":"45360","endLine":155,"endColumn":12,"suggestions":"46704"},{"ruleId":"45357","severity":2,"message":"45358","line":158,"column":84,"nodeType":"45359","messageId":"45360","endLine":158,"endColumn":87,"suggestions":"46705"},{"ruleId":"45357","severity":2,"message":"45358","line":172,"column":9,"nodeType":"45359","messageId":"45360","endLine":172,"endColumn":12,"suggestions":"46706"},{"ruleId":"45357","severity":2,"message":"45358","line":175,"column":86,"nodeType":"45359","messageId":"45360","endLine":175,"endColumn":89,"suggestions":"46707"},{"ruleId":"45357","severity":2,"message":"45358","line":182,"column":21,"nodeType":"45359","messageId":"45360","endLine":182,"endColumn":24,"suggestions":"46708"},{"ruleId":"45357","severity":2,"message":"45358","line":184,"column":44,"nodeType":"45359","messageId":"45360","endLine":184,"endColumn":47,"suggestions":"46709"},{"ruleId":"45357","severity":2,"message":"45358","line":187,"column":9,"nodeType":"45359","messageId":"45360","endLine":187,"endColumn":12,"suggestions":"46710"},{"ruleId":"45357","severity":2,"message":"45358","line":191,"column":64,"nodeType":"45359","messageId":"45360","endLine":191,"endColumn":67,"suggestions":"46711"},{"ruleId":"45357","severity":2,"message":"45358","line":209,"column":9,"nodeType":"45359","messageId":"45360","endLine":209,"endColumn":12,"suggestions":"46712"},{"ruleId":"45357","severity":2,"message":"45358","line":213,"column":89,"nodeType":"45359","messageId":"45360","endLine":213,"endColumn":92,"suggestions":"46713"},{"ruleId":"45357","severity":2,"message":"45358","line":241,"column":44,"nodeType":"45359","messageId":"45360","endLine":241,"endColumn":47,"suggestions":"46714"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":9,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":12,"suggestions":"46715"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":30,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":33,"suggestions":"46716"},{"ruleId":"45357","severity":2,"message":"45358","line":59,"column":9,"nodeType":"45359","messageId":"45360","endLine":59,"endColumn":12,"suggestions":"46717"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":30,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":33,"suggestions":"46718"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":9,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":12,"suggestions":"46719"},{"ruleId":"45357","severity":2,"message":"45358","line":76,"column":30,"nodeType":"45359","messageId":"45360","endLine":76,"endColumn":33,"suggestions":"46720"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":10,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":13,"suggestions":"46721"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":9,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":12,"suggestions":"46722"},{"ruleId":"45357","severity":2,"message":"45358","line":95,"column":30,"nodeType":"45359","messageId":"45360","endLine":95,"endColumn":33,"suggestions":"46723"},{"ruleId":"45357","severity":2,"message":"45358","line":105,"column":43,"nodeType":"45359","messageId":"45360","endLine":105,"endColumn":46,"suggestions":"46724"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":9,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":12,"suggestions":"46725"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":30,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":33,"suggestions":"46726"},{"ruleId":"45357","severity":2,"message":"45358","line":158,"column":58,"nodeType":"45359","messageId":"45360","endLine":158,"endColumn":61,"suggestions":"46727"},{"ruleId":"45357","severity":2,"message":"45358","line":300,"column":12,"nodeType":"45359","messageId":"45360","endLine":300,"endColumn":15,"suggestions":"46728"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":34,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":37,"suggestions":"46729"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":21,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":24,"suggestions":"46730"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":43,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":46,"suggestions":"46731"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":9,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":12,"suggestions":"46732"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":30,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":33,"suggestions":"46733"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":21,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":24,"suggestions":"46734"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":44,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":47,"suggestions":"46735"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":9,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":12,"suggestions":"46736"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":30,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":33,"suggestions":"46737"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":9,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":12,"suggestions":"46738"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":30,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":33,"suggestions":"46739"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":9,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":12,"suggestions":"46740"},{"ruleId":"45357","severity":2,"message":"45358","line":102,"column":44,"nodeType":"45359","messageId":"45360","endLine":102,"endColumn":47,"suggestions":"46741"},{"ruleId":"45357","severity":2,"message":"45358","line":119,"column":9,"nodeType":"45359","messageId":"45360","endLine":119,"endColumn":12,"suggestions":"46742"},{"ruleId":"45357","severity":2,"message":"45358","line":122,"column":30,"nodeType":"45359","messageId":"45360","endLine":122,"endColumn":33,"suggestions":"46743"},{"ruleId":"45357","severity":2,"message":"45358","line":136,"column":9,"nodeType":"45359","messageId":"45360","endLine":136,"endColumn":12,"suggestions":"46744"},{"ruleId":"45357","severity":2,"message":"45358","line":138,"column":30,"nodeType":"45359","messageId":"45360","endLine":138,"endColumn":33,"suggestions":"46745"},{"ruleId":"45357","severity":2,"message":"45358","line":56,"column":84,"nodeType":"45359","messageId":"45360","endLine":56,"endColumn":87,"suggestions":"46746"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":62,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":65,"suggestions":"46747"},{"ruleId":"45357","severity":2,"message":"45358","line":76,"column":9,"nodeType":"45359","messageId":"45360","endLine":76,"endColumn":12,"suggestions":"46748"},{"ruleId":"45357","severity":2,"message":"45358","line":80,"column":81,"nodeType":"45359","messageId":"45360","endLine":80,"endColumn":84,"suggestions":"46749"},{"ruleId":"45357","severity":2,"message":"45358","line":95,"column":21,"nodeType":"45359","messageId":"45360","endLine":95,"endColumn":24,"suggestions":"46750"},{"ruleId":"45357","severity":2,"message":"45358","line":97,"column":43,"nodeType":"45359","messageId":"45360","endLine":97,"endColumn":46,"suggestions":"46751"},{"ruleId":"45357","severity":2,"message":"45358","line":103,"column":9,"nodeType":"45359","messageId":"45360","endLine":103,"endColumn":12,"suggestions":"46752"},{"ruleId":"45357","severity":2,"message":"45358","line":107,"column":74,"nodeType":"45359","messageId":"45360","endLine":107,"endColumn":77,"suggestions":"46753"},{"ruleId":"45357","severity":2,"message":"45358","line":125,"column":9,"nodeType":"45359","messageId":"45360","endLine":125,"endColumn":12,"suggestions":"46754"},{"ruleId":"45357","severity":2,"message":"45358","line":128,"column":84,"nodeType":"45359","messageId":"45360","endLine":128,"endColumn":87,"suggestions":"46755"},{"ruleId":"45357","severity":2,"message":"45358","line":143,"column":9,"nodeType":"45359","messageId":"45360","endLine":143,"endColumn":12,"suggestions":"46756"},{"ruleId":"45357","severity":2,"message":"45358","line":146,"column":82,"nodeType":"45359","messageId":"45360","endLine":146,"endColumn":85,"suggestions":"46757"},{"ruleId":"45357","severity":2,"message":"45358","line":157,"column":84,"nodeType":"45359","messageId":"45360","endLine":157,"endColumn":87,"suggestions":"46758"},{"ruleId":"45357","severity":2,"message":"45358","line":160,"column":74,"nodeType":"45359","messageId":"45360","endLine":160,"endColumn":77,"suggestions":"46759"},{"ruleId":"45357","severity":2,"message":"45358","line":169,"column":21,"nodeType":"45359","messageId":"45360","endLine":169,"endColumn":24,"suggestions":"46760"},{"ruleId":"45357","severity":2,"message":"45358","line":171,"column":43,"nodeType":"45359","messageId":"45360","endLine":171,"endColumn":46,"suggestions":"46761"},{"ruleId":"45357","severity":2,"message":"45358","line":175,"column":9,"nodeType":"45359","messageId":"45360","endLine":175,"endColumn":12,"suggestions":"46762"},{"ruleId":"45357","severity":2,"message":"45358","line":178,"column":89,"nodeType":"45359","messageId":"45360","endLine":178,"endColumn":92,"suggestions":"46763"},{"ruleId":"45357","severity":2,"message":"45358","line":43,"column":9,"nodeType":"45359","messageId":"45360","endLine":43,"endColumn":12,"suggestions":"46764"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":30,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":33,"suggestions":"46765"},{"ruleId":"45357","severity":2,"message":"45358","line":57,"column":9,"nodeType":"45359","messageId":"45360","endLine":57,"endColumn":12,"suggestions":"46766"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":30,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":33,"suggestions":"46767"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":21,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":24,"suggestions":"46768"},{"ruleId":"45357","severity":2,"message":"45358","line":69,"column":44,"nodeType":"45359","messageId":"45360","endLine":69,"endColumn":47,"suggestions":"46769"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":9,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":12,"suggestions":"46770"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":30,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":33,"suggestions":"46771"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":21,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":24,"suggestions":"46772"},{"ruleId":"45357","severity":2,"message":"45358","line":95,"column":43,"nodeType":"45359","messageId":"45360","endLine":95,"endColumn":46,"suggestions":"46773"},{"ruleId":"45357","severity":2,"message":"45358","line":100,"column":9,"nodeType":"45359","messageId":"45360","endLine":100,"endColumn":12,"suggestions":"46774"},{"ruleId":"45357","severity":2,"message":"45358","line":102,"column":30,"nodeType":"45359","messageId":"45360","endLine":102,"endColumn":33,"suggestions":"46775"},{"ruleId":"45357","severity":2,"message":"45358","line":117,"column":43,"nodeType":"45359","messageId":"45360","endLine":117,"endColumn":46,"suggestions":"46776"},{"ruleId":"45357","severity":2,"message":"45358","line":121,"column":9,"nodeType":"45359","messageId":"45360","endLine":121,"endColumn":12,"suggestions":"46777"},{"ruleId":"45357","severity":2,"message":"45358","line":123,"column":30,"nodeType":"45359","messageId":"45360","endLine":123,"endColumn":33,"suggestions":"46778"},{"ruleId":"45357","severity":2,"message":"45358","line":131,"column":21,"nodeType":"45359","messageId":"45360","endLine":131,"endColumn":24,"suggestions":"46779"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":44,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":47,"suggestions":"46780"},{"ruleId":"45357","severity":2,"message":"45358","line":136,"column":9,"nodeType":"45359","messageId":"45360","endLine":136,"endColumn":12,"suggestions":"46781"},{"ruleId":"45357","severity":2,"message":"45358","line":138,"column":30,"nodeType":"45359","messageId":"45360","endLine":138,"endColumn":33,"suggestions":"46782"},{"ruleId":"45357","severity":2,"message":"45358","line":69,"column":9,"nodeType":"45359","messageId":"45360","endLine":69,"endColumn":12,"suggestions":"46783"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":73,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":76,"suggestions":"46784"},{"ruleId":"45357","severity":2,"message":"45358","line":78,"column":30,"nodeType":"45359","messageId":"45360","endLine":78,"endColumn":33,"suggestions":"46785"},{"ruleId":"45357","severity":2,"message":"45358","line":89,"column":9,"nodeType":"45359","messageId":"45360","endLine":89,"endColumn":12,"suggestions":"46786"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":81,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":84,"suggestions":"46787"},{"ruleId":"45357","severity":2,"message":"45358","line":102,"column":43,"nodeType":"45359","messageId":"45360","endLine":102,"endColumn":46,"suggestions":"46788"},{"ruleId":"45357","severity":2,"message":"45358","line":106,"column":9,"nodeType":"45359","messageId":"45360","endLine":106,"endColumn":12,"suggestions":"46789"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":74,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":77,"suggestions":"46790"},{"ruleId":"45357","severity":2,"message":"45358","line":123,"column":43,"nodeType":"45359","messageId":"45360","endLine":123,"endColumn":46,"suggestions":"46791"},{"ruleId":"45357","severity":2,"message":"45358","line":127,"column":9,"nodeType":"45359","messageId":"45360","endLine":127,"endColumn":12,"suggestions":"46792"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":20,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":23,"suggestions":"46793"},{"ruleId":"45357","severity":2,"message":"45358","line":147,"column":43,"nodeType":"45359","messageId":"45360","endLine":147,"endColumn":46,"suggestions":"46794"},{"ruleId":"45357","severity":2,"message":"45358","line":151,"column":9,"nodeType":"45359","messageId":"45360","endLine":151,"endColumn":12,"suggestions":"46795"},{"ruleId":"45357","severity":2,"message":"45358","line":155,"column":62,"nodeType":"45359","messageId":"45360","endLine":155,"endColumn":65,"suggestions":"46796"},{"ruleId":"45357","severity":2,"message":"45358","line":170,"column":9,"nodeType":"45359","messageId":"45360","endLine":170,"endColumn":12,"suggestions":"46797"},{"ruleId":"45357","severity":2,"message":"45358","line":174,"column":83,"nodeType":"45359","messageId":"45360","endLine":174,"endColumn":86,"suggestions":"46798"},{"ruleId":"45357","severity":2,"message":"45358","line":192,"column":9,"nodeType":"45359","messageId":"45360","endLine":192,"endColumn":12,"suggestions":"46799"},{"ruleId":"45357","severity":2,"message":"45358","line":196,"column":76,"nodeType":"45359","messageId":"45360","endLine":196,"endColumn":79,"suggestions":"46800"},{"ruleId":"45357","severity":2,"message":"45358","line":23,"column":21,"nodeType":"45359","messageId":"45360","endLine":23,"endColumn":24,"suggestions":"46801"},{"ruleId":"45357","severity":2,"message":"45358","line":25,"column":44,"nodeType":"45359","messageId":"45360","endLine":25,"endColumn":47,"suggestions":"46802"},{"ruleId":"45357","severity":2,"message":"45358","line":28,"column":9,"nodeType":"45359","messageId":"45360","endLine":28,"endColumn":12,"suggestions":"46803"},{"ruleId":"45357","severity":2,"message":"45358","line":30,"column":30,"nodeType":"45359","messageId":"45360","endLine":30,"endColumn":33,"suggestions":"46804"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":21,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":24,"suggestions":"46805"},{"ruleId":"45357","severity":2,"message":"45358","line":42,"column":44,"nodeType":"45359","messageId":"45360","endLine":42,"endColumn":47,"suggestions":"46806"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":9,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":12,"suggestions":"46807"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":30,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":33,"suggestions":"46808"},{"ruleId":"45357","severity":2,"message":"45358","line":61,"column":21,"nodeType":"45359","messageId":"45360","endLine":61,"endColumn":24,"suggestions":"46809"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":44,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":47,"suggestions":"46810"},{"ruleId":"45357","severity":2,"message":"45358","line":66,"column":9,"nodeType":"45359","messageId":"45360","endLine":66,"endColumn":12,"suggestions":"46811"},{"ruleId":"45357","severity":2,"message":"45358","line":68,"column":30,"nodeType":"45359","messageId":"45360","endLine":68,"endColumn":33,"suggestions":"46812"},{"ruleId":"45357","severity":2,"message":"45358","line":83,"column":21,"nodeType":"45359","messageId":"45360","endLine":83,"endColumn":24,"suggestions":"46813"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":44,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":47,"suggestions":"46814"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":9,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":12,"suggestions":"46815"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":30,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":33,"suggestions":"46816"},{"ruleId":"45357","severity":2,"message":"45358","line":104,"column":21,"nodeType":"45359","messageId":"45360","endLine":104,"endColumn":24,"suggestions":"46817"},{"ruleId":"45357","severity":2,"message":"45358","line":107,"column":43,"nodeType":"45359","messageId":"45360","endLine":107,"endColumn":46,"suggestions":"46818"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":9,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":12,"suggestions":"46819"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":30,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":33,"suggestions":"46820"},{"ruleId":"45357","severity":2,"message":"45358","line":130,"column":9,"nodeType":"45359","messageId":"45360","endLine":130,"endColumn":12,"suggestions":"46821"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":30,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":33,"suggestions":"46822"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":9,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":12,"suggestions":"46823"},{"ruleId":"45357","severity":2,"message":"45358","line":43,"column":30,"nodeType":"45359","messageId":"45360","endLine":43,"endColumn":33,"suggestions":"46824"},{"ruleId":"45357","severity":2,"message":"45358","line":50,"column":21,"nodeType":"45359","messageId":"45360","endLine":50,"endColumn":24,"suggestions":"46825"},{"ruleId":"45357","severity":2,"message":"45358","line":53,"column":43,"nodeType":"45359","messageId":"45360","endLine":53,"endColumn":46,"suggestions":"46826"},{"ruleId":"45357","severity":2,"message":"45358","line":57,"column":9,"nodeType":"45359","messageId":"45360","endLine":57,"endColumn":12,"suggestions":"46827"},{"ruleId":"45357","severity":2,"message":"45358","line":59,"column":30,"nodeType":"45359","messageId":"45360","endLine":59,"endColumn":33,"suggestions":"46828"},{"ruleId":"45357","severity":2,"message":"45358","line":54,"column":9,"nodeType":"45359","messageId":"45360","endLine":54,"endColumn":12,"suggestions":"46829"},{"ruleId":"45357","severity":2,"message":"45358","line":57,"column":72,"nodeType":"45359","messageId":"45360","endLine":57,"endColumn":75,"suggestions":"46830"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":9,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":12,"suggestions":"46831"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":92,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":95,"suggestions":"46832"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":9,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":12,"suggestions":"46833"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":82,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":85,"suggestions":"46834"},{"ruleId":"45357","severity":2,"message":"45358","line":102,"column":43,"nodeType":"45359","messageId":"45360","endLine":102,"endColumn":46,"suggestions":"46835"},{"ruleId":"45357","severity":2,"message":"45358","line":106,"column":9,"nodeType":"45359","messageId":"45360","endLine":106,"endColumn":12,"suggestions":"46836"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":66,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":69,"suggestions":"46837"},{"ruleId":"45357","severity":2,"message":"45358","line":120,"column":21,"nodeType":"45359","messageId":"45360","endLine":120,"endColumn":24,"suggestions":"46838"},{"ruleId":"45357","severity":2,"message":"45358","line":126,"column":9,"nodeType":"45359","messageId":"45360","endLine":126,"endColumn":12,"suggestions":"46839"},{"ruleId":"45357","severity":2,"message":"45358","line":128,"column":44,"nodeType":"45359","messageId":"45360","endLine":128,"endColumn":47,"suggestions":"46840"},{"ruleId":"45357","severity":2,"message":"45358","line":131,"column":9,"nodeType":"45359","messageId":"45360","endLine":131,"endColumn":12,"suggestions":"46841"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":20,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":23,"suggestions":"46842"},{"ruleId":"45357","severity":2,"message":"45358","line":154,"column":9,"nodeType":"45359","messageId":"45360","endLine":154,"endColumn":12,"suggestions":"46843"},{"ruleId":"45357","severity":2,"message":"45358","line":158,"column":9,"nodeType":"45359","messageId":"45360","endLine":158,"endColumn":12,"suggestions":"46844"},{"ruleId":"45357","severity":2,"message":"45358","line":162,"column":76,"nodeType":"45359","messageId":"45360","endLine":162,"endColumn":79,"suggestions":"46845"},{"ruleId":"45357","severity":2,"message":"45358","line":178,"column":9,"nodeType":"45359","messageId":"45360","endLine":178,"endColumn":12,"suggestions":"46846"},{"ruleId":"45357","severity":2,"message":"45358","line":186,"column":9,"nodeType":"45359","messageId":"45360","endLine":186,"endColumn":12,"suggestions":"46847"},{"ruleId":"45357","severity":2,"message":"45358","line":189,"column":30,"nodeType":"45359","messageId":"45360","endLine":189,"endColumn":33,"suggestions":"46848"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":21,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":24,"suggestions":"46849"},{"ruleId":"45357","severity":2,"message":"45358","line":42,"column":43,"nodeType":"45359","messageId":"45360","endLine":42,"endColumn":46,"suggestions":"46850"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":9,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":12,"suggestions":"46851"},{"ruleId":"45357","severity":2,"message":"45358","line":50,"column":94,"nodeType":"45359","messageId":"45360","endLine":50,"endColumn":97,"suggestions":"46852"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":9,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":12,"suggestions":"46853"},{"ruleId":"45357","severity":2,"message":"45358","line":69,"column":90,"nodeType":"45359","messageId":"45360","endLine":69,"endColumn":93,"suggestions":"46854"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":9,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":12,"suggestions":"46855"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":30,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":33,"suggestions":"46856"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":9,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":12,"suggestions":"46857"},{"ruleId":"45357","severity":2,"message":"45358","line":100,"column":30,"nodeType":"45359","messageId":"45360","endLine":100,"endColumn":33,"suggestions":"46858"},{"ruleId":"45357","severity":2,"message":"45358","line":107,"column":21,"nodeType":"45359","messageId":"45360","endLine":107,"endColumn":24,"suggestions":"46859"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":44,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":47,"suggestions":"46860"},{"ruleId":"45357","severity":2,"message":"45358","line":114,"column":9,"nodeType":"45359","messageId":"45360","endLine":114,"endColumn":12,"suggestions":"46861"},{"ruleId":"45357","severity":2,"message":"45358","line":116,"column":30,"nodeType":"45359","messageId":"45360","endLine":116,"endColumn":33,"suggestions":"46862"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":9,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":12,"suggestions":"46863"},{"ruleId":"45357","severity":2,"message":"45358","line":135,"column":30,"nodeType":"45359","messageId":"45360","endLine":135,"endColumn":33,"suggestions":"46864"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":20,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":23,"suggestions":"46865"},{"ruleId":"45357","severity":2,"message":"45358","line":122,"column":20,"nodeType":"45359","messageId":"45360","endLine":122,"endColumn":23,"suggestions":"46866"},{"ruleId":"45357","severity":2,"message":"45358","line":145,"column":36,"nodeType":"45359","messageId":"45360","endLine":145,"endColumn":39,"suggestions":"46867"},{"ruleId":"45357","severity":2,"message":"45358","line":196,"column":20,"nodeType":"45359","messageId":"45360","endLine":196,"endColumn":23,"suggestions":"46868"},{"ruleId":"45357","severity":2,"message":"45358","line":215,"column":36,"nodeType":"45359","messageId":"45360","endLine":215,"endColumn":39,"suggestions":"46869"},{"ruleId":"45357","severity":2,"message":"45358","line":242,"column":37,"nodeType":"45359","messageId":"45360","endLine":242,"endColumn":40,"suggestions":"46870"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":17,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":20,"suggestions":"46871"},{"ruleId":"45357","severity":2,"message":"45358","line":134,"column":17,"nodeType":"45359","messageId":"45360","endLine":134,"endColumn":20,"suggestions":"46872"},{"ruleId":"45357","severity":2,"message":"45358","line":145,"column":17,"nodeType":"45359","messageId":"45360","endLine":145,"endColumn":20,"suggestions":"46873"},{"ruleId":"45357","severity":2,"message":"45358","line":155,"column":17,"nodeType":"45359","messageId":"45360","endLine":155,"endColumn":20,"suggestions":"46874"},{"ruleId":"45357","severity":2,"message":"45358","line":54,"column":75,"nodeType":"45359","messageId":"45360","endLine":54,"endColumn":78,"suggestions":"46875"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":68,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":71,"suggestions":"46876"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":29,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":32,"suggestions":"46877"},{"ruleId":"45357","severity":2,"message":"45358","line":66,"column":29,"nodeType":"45359","messageId":"45360","endLine":66,"endColumn":32,"suggestions":"46878"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":74,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":77,"suggestions":"46879"},{"ruleId":"45357","severity":2,"message":"45358","line":75,"column":68,"nodeType":"45359","messageId":"45360","endLine":75,"endColumn":71,"suggestions":"46880"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":29,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":32,"suggestions":"46881"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":75,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":78,"suggestions":"46882"},{"ruleId":"45357","severity":2,"message":"45358","line":91,"column":67,"nodeType":"45359","messageId":"45360","endLine":91,"endColumn":70,"suggestions":"46883"},{"ruleId":"45357","severity":2,"message":"45358","line":105,"column":9,"nodeType":"45359","messageId":"45360","endLine":105,"endColumn":12,"suggestions":"46884"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":87,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":90,"suggestions":"46885"},{"ruleId":"45357","severity":2,"message":"45358","line":119,"column":75,"nodeType":"45359","messageId":"45360","endLine":119,"endColumn":78,"suggestions":"46886"},{"ruleId":"45357","severity":2,"message":"45358","line":123,"column":75,"nodeType":"45359","messageId":"45360","endLine":123,"endColumn":78,"suggestions":"46887"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":68,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":71,"suggestions":"46888"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":68,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":71,"suggestions":"46889"},{"ruleId":"45357","severity":2,"message":"45358","line":218,"column":18,"nodeType":"45359","messageId":"45360","endLine":218,"endColumn":21,"suggestions":"46890"},{"ruleId":"45357","severity":2,"message":"45358","line":239,"column":22,"nodeType":"45359","messageId":"45360","endLine":239,"endColumn":25,"suggestions":"46891"},{"ruleId":"45357","severity":2,"message":"45358","line":255,"column":42,"nodeType":"45359","messageId":"45360","endLine":255,"endColumn":45,"suggestions":"46892"},{"ruleId":"45357","severity":2,"message":"45358","line":259,"column":46,"nodeType":"45359","messageId":"45360","endLine":259,"endColumn":49,"suggestions":"46893"},{"ruleId":"45357","severity":2,"message":"45358","line":260,"column":42,"nodeType":"45359","messageId":"45360","endLine":260,"endColumn":45,"suggestions":"46894"},{"ruleId":"45357","severity":2,"message":"45358","line":43,"column":9,"nodeType":"45359","messageId":"45360","endLine":43,"endColumn":12,"suggestions":"46895"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":30,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":33,"suggestions":"46896"},{"ruleId":"45357","severity":2,"message":"45358","line":57,"column":9,"nodeType":"45359","messageId":"45360","endLine":57,"endColumn":12,"suggestions":"46897"},{"ruleId":"45357","severity":2,"message":"45358","line":59,"column":30,"nodeType":"45359","messageId":"45360","endLine":59,"endColumn":33,"suggestions":"46898"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":9,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":12,"suggestions":"46899"},{"ruleId":"45357","severity":2,"message":"45358","line":73,"column":30,"nodeType":"45359","messageId":"45360","endLine":73,"endColumn":33,"suggestions":"46900"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":9,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":12,"suggestions":"46901"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":30,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":33,"suggestions":"46902"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":21,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":24,"suggestions":"46903"},{"ruleId":"45357","severity":2,"message":"45358","line":97,"column":44,"nodeType":"45359","messageId":"45360","endLine":97,"endColumn":47,"suggestions":"46904"},{"ruleId":"45357","severity":2,"message":"45358","line":101,"column":9,"nodeType":"45359","messageId":"45360","endLine":101,"endColumn":12,"suggestions":"46905"},{"ruleId":"45357","severity":2,"message":"45358","line":103,"column":30,"nodeType":"45359","messageId":"45360","endLine":103,"endColumn":33,"suggestions":"46906"},{"ruleId":"45357","severity":2,"message":"45358","line":115,"column":21,"nodeType":"45359","messageId":"45360","endLine":115,"endColumn":24,"suggestions":"46907"},{"ruleId":"45357","severity":2,"message":"45358","line":117,"column":44,"nodeType":"45359","messageId":"45360","endLine":117,"endColumn":47,"suggestions":"46908"},{"ruleId":"45357","severity":2,"message":"45358","line":120,"column":9,"nodeType":"45359","messageId":"45360","endLine":120,"endColumn":12,"suggestions":"46909"},{"ruleId":"45357","severity":2,"message":"45358","line":122,"column":30,"nodeType":"45359","messageId":"45360","endLine":122,"endColumn":33,"suggestions":"46910"},{"ruleId":"45357","severity":2,"message":"45358","line":53,"column":22,"nodeType":"45359","messageId":"45360","endLine":53,"endColumn":25,"suggestions":"46911"},{"ruleId":"45357","severity":2,"message":"45358","line":30,"column":9,"nodeType":"45359","messageId":"45360","endLine":30,"endColumn":12,"suggestions":"46912"},{"ruleId":"45357","severity":2,"message":"45358","line":32,"column":30,"nodeType":"45359","messageId":"45360","endLine":32,"endColumn":33,"suggestions":"46913"},{"ruleId":"45357","severity":2,"message":"45358","line":46,"column":9,"nodeType":"45359","messageId":"45360","endLine":46,"endColumn":12,"suggestions":"46914"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":30,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":33,"suggestions":"46915"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":43,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":46,"suggestions":"46916"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":9,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":12,"suggestions":"46917"},{"ruleId":"45357","severity":2,"message":"45358","line":64,"column":30,"nodeType":"45359","messageId":"45360","endLine":64,"endColumn":33,"suggestions":"46918"},{"ruleId":"45357","severity":2,"message":"45358","line":75,"column":43,"nodeType":"45359","messageId":"45360","endLine":75,"endColumn":46,"suggestions":"46919"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":9,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":12,"suggestions":"46920"},{"ruleId":"45357","severity":2,"message":"45358","line":81,"column":30,"nodeType":"45359","messageId":"45360","endLine":81,"endColumn":33,"suggestions":"46921"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":9,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":12,"suggestions":"46922"},{"ruleId":"45357","severity":2,"message":"45358","line":96,"column":30,"nodeType":"45359","messageId":"45360","endLine":96,"endColumn":33,"suggestions":"46923"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":37,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":40,"suggestions":"46924"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":66,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":69,"suggestions":"46925"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":37,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":40,"suggestions":"46926"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":58,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":61,"suggestions":"46927"},{"ruleId":"45357","severity":2,"message":"45358","line":112,"column":37,"nodeType":"45359","messageId":"45360","endLine":112,"endColumn":40,"suggestions":"46928"},{"ruleId":"45357","severity":2,"message":"45358","line":117,"column":73,"nodeType":"45359","messageId":"45360","endLine":117,"endColumn":76,"suggestions":"46929"},{"ruleId":"45357","severity":2,"message":"45358","line":131,"column":37,"nodeType":"45359","messageId":"45360","endLine":131,"endColumn":40,"suggestions":"46930"},{"ruleId":"45357","severity":2,"message":"45358","line":136,"column":77,"nodeType":"45359","messageId":"45360","endLine":136,"endColumn":80,"suggestions":"46931"},{"ruleId":"45357","severity":2,"message":"45358","line":147,"column":37,"nodeType":"45359","messageId":"45360","endLine":147,"endColumn":40,"suggestions":"46932"},{"ruleId":"45357","severity":2,"message":"45358","line":152,"column":76,"nodeType":"45359","messageId":"45360","endLine":152,"endColumn":79,"suggestions":"46933"},{"ruleId":"45357","severity":2,"message":"45358","line":167,"column":9,"nodeType":"45359","messageId":"45360","endLine":167,"endColumn":12,"suggestions":"46934"},{"ruleId":"45357","severity":2,"message":"45358","line":168,"column":75,"nodeType":"45359","messageId":"45360","endLine":168,"endColumn":78,"suggestions":"46935"},{"ruleId":"45357","severity":2,"message":"45358","line":173,"column":58,"nodeType":"45359","messageId":"45360","endLine":173,"endColumn":61,"suggestions":"46936"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":83,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":86,"suggestions":"46937"},{"ruleId":"45357","severity":2,"message":"45358","line":77,"column":72,"nodeType":"45359","messageId":"45360","endLine":77,"endColumn":75,"suggestions":"46938"},{"ruleId":"45357","severity":2,"message":"45358","line":91,"column":9,"nodeType":"45359","messageId":"45360","endLine":91,"endColumn":12,"suggestions":"46939"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":75,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":78,"suggestions":"46940"},{"ruleId":"45357","severity":2,"message":"45358","line":106,"column":9,"nodeType":"45359","messageId":"45360","endLine":106,"endColumn":12,"suggestions":"46941"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":81,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":84,"suggestions":"46942"},{"ruleId":"45357","severity":2,"message":"45358","line":119,"column":21,"nodeType":"45359","messageId":"45360","endLine":119,"endColumn":24,"suggestions":"46943"},{"ruleId":"45357","severity":2,"message":"45358","line":121,"column":43,"nodeType":"45359","messageId":"45360","endLine":121,"endColumn":46,"suggestions":"46944"},{"ruleId":"45357","severity":2,"message":"45358","line":125,"column":9,"nodeType":"45359","messageId":"45360","endLine":125,"endColumn":12,"suggestions":"46945"},{"ruleId":"45357","severity":2,"message":"45358","line":128,"column":84,"nodeType":"45359","messageId":"45360","endLine":128,"endColumn":87,"suggestions":"46946"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":21,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":24,"suggestions":"46947"},{"ruleId":"45357","severity":2,"message":"45358","line":142,"column":44,"nodeType":"45359","messageId":"45360","endLine":142,"endColumn":47,"suggestions":"46948"},{"ruleId":"45357","severity":2,"message":"45358","line":145,"column":9,"nodeType":"45359","messageId":"45360","endLine":145,"endColumn":12,"suggestions":"46949"},{"ruleId":"45357","severity":2,"message":"45358","line":149,"column":78,"nodeType":"45359","messageId":"45360","endLine":149,"endColumn":81,"suggestions":"46950"},{"ruleId":"45357","severity":2,"message":"45358","line":164,"column":9,"nodeType":"45359","messageId":"45360","endLine":164,"endColumn":12,"suggestions":"46951"},{"ruleId":"45357","severity":2,"message":"45358","line":168,"column":91,"nodeType":"45359","messageId":"45360","endLine":168,"endColumn":94,"suggestions":"46952"},{"ruleId":"45357","severity":2,"message":"45358","line":184,"column":9,"nodeType":"45359","messageId":"45360","endLine":184,"endColumn":12,"suggestions":"46953"},{"ruleId":"45357","severity":2,"message":"45358","line":188,"column":84,"nodeType":"45359","messageId":"45360","endLine":188,"endColumn":87,"suggestions":"46954"},{"ruleId":"45357","severity":2,"message":"45358","line":200,"column":21,"nodeType":"45359","messageId":"45360","endLine":200,"endColumn":24,"suggestions":"46955"},{"ruleId":"45357","severity":2,"message":"45358","line":202,"column":44,"nodeType":"45359","messageId":"45360","endLine":202,"endColumn":47,"suggestions":"46956"},{"ruleId":"45357","severity":2,"message":"45358","line":205,"column":9,"nodeType":"45359","messageId":"45360","endLine":205,"endColumn":12,"suggestions":"46957"},{"ruleId":"45357","severity":2,"message":"45358","line":212,"column":20,"nodeType":"45359","messageId":"45360","endLine":212,"endColumn":23,"suggestions":"46958"},{"ruleId":"45357","severity":2,"message":"45358","line":56,"column":59,"nodeType":"45359","messageId":"45360","endLine":56,"endColumn":62,"suggestions":"46959"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":90,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":93,"suggestions":"46960"},{"ruleId":"45357","severity":2,"message":"45358","line":69,"column":51,"nodeType":"45359","messageId":"45360","endLine":69,"endColumn":54,"suggestions":"46961"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":65,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":68,"suggestions":"46962"},{"ruleId":"45357","severity":2,"message":"45358","line":83,"column":59,"nodeType":"45359","messageId":"45360","endLine":83,"endColumn":62,"suggestions":"46963"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":90,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":93,"suggestions":"46964"},{"ruleId":"45357","severity":2,"message":"45358","line":101,"column":59,"nodeType":"45359","messageId":"45360","endLine":101,"endColumn":62,"suggestions":"46965"},{"ruleId":"45357","severity":2,"message":"45358","line":105,"column":94,"nodeType":"45359","messageId":"45360","endLine":105,"endColumn":97,"suggestions":"46966"},{"ruleId":"45357","severity":2,"message":"45358","line":116,"column":51,"nodeType":"45359","messageId":"45360","endLine":116,"endColumn":54,"suggestions":"46967"},{"ruleId":"45357","severity":2,"message":"45358","line":121,"column":87,"nodeType":"45359","messageId":"45360","endLine":121,"endColumn":90,"suggestions":"46968"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":43,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":46,"suggestions":"46969"},{"ruleId":"45357","severity":2,"message":"45358","line":135,"column":9,"nodeType":"45359","messageId":"45360","endLine":135,"endColumn":12,"suggestions":"46970"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":74,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":77,"suggestions":"46971"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":21,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":24,"suggestions":"46972"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":43,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":46,"suggestions":"46973"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":9,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":12,"suggestions":"46974"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":30,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":33,"suggestions":"46975"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":21,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":24,"suggestions":"46976"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":43,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":46,"suggestions":"46977"},{"ruleId":"45357","severity":2,"message":"45358","line":66,"column":9,"nodeType":"45359","messageId":"45360","endLine":66,"endColumn":12,"suggestions":"46978"},{"ruleId":"45357","severity":2,"message":"45358","line":68,"column":30,"nodeType":"45359","messageId":"45360","endLine":68,"endColumn":33,"suggestions":"46979"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":9,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":12,"suggestions":"46980"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":30,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":33,"suggestions":"46981"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":9,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":12,"suggestions":"46982"},{"ruleId":"45357","severity":2,"message":"45358","line":100,"column":30,"nodeType":"45359","messageId":"45360","endLine":100,"endColumn":33,"suggestions":"46983"},{"ruleId":"45357","severity":2,"message":"45358","line":112,"column":9,"nodeType":"45359","messageId":"45360","endLine":112,"endColumn":12,"suggestions":"46984"},{"ruleId":"45357","severity":2,"message":"45358","line":114,"column":30,"nodeType":"45359","messageId":"45360","endLine":114,"endColumn":33,"suggestions":"46985"},{"ruleId":"45357","severity":2,"message":"45358","line":121,"column":21,"nodeType":"45359","messageId":"45360","endLine":121,"endColumn":24,"suggestions":"46986"},{"ruleId":"45357","severity":2,"message":"45358","line":123,"column":44,"nodeType":"45359","messageId":"45360","endLine":123,"endColumn":47,"suggestions":"46987"},{"ruleId":"45357","severity":2,"message":"45358","line":126,"column":9,"nodeType":"45359","messageId":"45360","endLine":126,"endColumn":12,"suggestions":"46988"},{"ruleId":"45357","severity":2,"message":"45358","line":128,"column":30,"nodeType":"45359","messageId":"45360","endLine":128,"endColumn":33,"suggestions":"46989"},{"ruleId":"45357","severity":2,"message":"45358","line":142,"column":43,"nodeType":"45359","messageId":"45360","endLine":142,"endColumn":46,"suggestions":"46990"},{"ruleId":"45357","severity":2,"message":"45358","line":146,"column":9,"nodeType":"45359","messageId":"45360","endLine":146,"endColumn":12,"suggestions":"46991"},{"ruleId":"45357","severity":2,"message":"45358","line":148,"column":30,"nodeType":"45359","messageId":"45360","endLine":148,"endColumn":33,"suggestions":"46992"},{"ruleId":"45357","severity":2,"message":"45358","line":28,"column":9,"nodeType":"45359","messageId":"45360","endLine":28,"endColumn":12,"suggestions":"46993"},{"ruleId":"45357","severity":2,"message":"45358","line":30,"column":30,"nodeType":"45359","messageId":"45360","endLine":30,"endColumn":33,"suggestions":"46994"},{"ruleId":"45357","severity":2,"message":"45358","line":37,"column":21,"nodeType":"45359","messageId":"45360","endLine":37,"endColumn":24,"suggestions":"46995"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":44,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":47,"suggestions":"46996"},{"ruleId":"45357","severity":2,"message":"45358","line":42,"column":9,"nodeType":"45359","messageId":"45360","endLine":42,"endColumn":12,"suggestions":"46997"},{"ruleId":"45357","severity":2,"message":"45358","line":44,"column":30,"nodeType":"45359","messageId":"45360","endLine":44,"endColumn":33,"suggestions":"46998"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":43,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":46,"suggestions":"46999"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":9,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":12,"suggestions":"47000"},{"ruleId":"45357","severity":2,"message":"45358","line":64,"column":30,"nodeType":"45359","messageId":"45360","endLine":64,"endColumn":33,"suggestions":"47001"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":21,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":24,"suggestions":"47002"},{"ruleId":"45357","severity":2,"message":"45358","line":75,"column":43,"nodeType":"45359","messageId":"45360","endLine":75,"endColumn":46,"suggestions":"47003"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":9,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":12,"suggestions":"47004"},{"ruleId":"45357","severity":2,"message":"45358","line":81,"column":30,"nodeType":"45359","messageId":"45360","endLine":81,"endColumn":33,"suggestions":"47005"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":9,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":12,"suggestions":"47006"},{"ruleId":"45357","severity":2,"message":"45358","line":100,"column":30,"nodeType":"45359","messageId":"45360","endLine":100,"endColumn":33,"suggestions":"47007"},{"ruleId":"45357","severity":2,"message":"45358","line":112,"column":9,"nodeType":"45359","messageId":"45360","endLine":112,"endColumn":12,"suggestions":"47008"},{"ruleId":"45357","severity":2,"message":"45358","line":114,"column":30,"nodeType":"45359","messageId":"45360","endLine":114,"endColumn":33,"suggestions":"47009"},{"ruleId":"45357","severity":2,"message":"45358","line":50,"column":9,"nodeType":"45359","messageId":"45360","endLine":50,"endColumn":12,"suggestions":"47010"},{"ruleId":"45357","severity":2,"message":"45358","line":52,"column":30,"nodeType":"45359","messageId":"45360","endLine":52,"endColumn":33,"suggestions":"47011"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":9,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":12,"suggestions":"47012"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":30,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":33,"suggestions":"47013"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":9,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":12,"suggestions":"47014"},{"ruleId":"45357","severity":2,"message":"45358","line":81,"column":30,"nodeType":"45359","messageId":"45360","endLine":81,"endColumn":33,"suggestions":"47015"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":21,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":24,"suggestions":"47016"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":43,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":46,"suggestions":"47017"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":9,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":12,"suggestions":"47018"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":30,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":33,"suggestions":"47019"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":21,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":24,"suggestions":"47020"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":44,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":47,"suggestions":"47021"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":9,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":12,"suggestions":"47022"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":30,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":33,"suggestions":"47023"},{"ruleId":"45357","severity":2,"message":"45358","line":81,"column":21,"nodeType":"45359","messageId":"45360","endLine":81,"endColumn":24,"suggestions":"47024"},{"ruleId":"45357","severity":2,"message":"45358","line":83,"column":44,"nodeType":"45359","messageId":"45360","endLine":83,"endColumn":47,"suggestions":"47025"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":9,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":12,"suggestions":"47026"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":30,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":33,"suggestions":"47027"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":9,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":12,"suggestions":"47028"},{"ruleId":"45357","severity":2,"message":"45358","line":112,"column":30,"nodeType":"45359","messageId":"45360","endLine":112,"endColumn":33,"suggestions":"47029"},{"ruleId":"45357","severity":2,"message":"45358","line":125,"column":9,"nodeType":"45359","messageId":"45360","endLine":125,"endColumn":12,"suggestions":"47030"},{"ruleId":"45357","severity":2,"message":"45358","line":128,"column":75,"nodeType":"45359","messageId":"45360","endLine":128,"endColumn":78,"suggestions":"47031"},{"ruleId":"45357","severity":2,"message":"45358","line":117,"column":37,"nodeType":"45359","messageId":"45360","endLine":117,"endColumn":40,"suggestions":"47032"},{"ruleId":"45357","severity":2,"message":"45358","line":121,"column":85,"nodeType":"45359","messageId":"45360","endLine":121,"endColumn":88,"suggestions":"47033"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":37,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":40,"suggestions":"47034"},{"ruleId":"45357","severity":2,"message":"45358","line":136,"column":66,"nodeType":"45359","messageId":"45360","endLine":136,"endColumn":69,"suggestions":"47035"},{"ruleId":"45357","severity":2,"message":"45358","line":147,"column":37,"nodeType":"45359","messageId":"45360","endLine":147,"endColumn":40,"suggestions":"47036"},{"ruleId":"45357","severity":2,"message":"45358","line":151,"column":66,"nodeType":"45359","messageId":"45360","endLine":151,"endColumn":69,"suggestions":"47037"},{"ruleId":"45357","severity":2,"message":"45358","line":161,"column":37,"nodeType":"45359","messageId":"45360","endLine":161,"endColumn":40,"suggestions":"47038"},{"ruleId":"45357","severity":2,"message":"45358","line":165,"column":76,"nodeType":"45359","messageId":"45360","endLine":165,"endColumn":79,"suggestions":"47039"},{"ruleId":"45357","severity":2,"message":"45358","line":173,"column":37,"nodeType":"45359","messageId":"45360","endLine":173,"endColumn":40,"suggestions":"47040"},{"ruleId":"45357","severity":2,"message":"45358","line":177,"column":76,"nodeType":"45359","messageId":"45360","endLine":177,"endColumn":79,"suggestions":"47041"},{"ruleId":"45357","severity":2,"message":"45358","line":189,"column":37,"nodeType":"45359","messageId":"45360","endLine":189,"endColumn":40,"suggestions":"47042"},{"ruleId":"45357","severity":2,"message":"45358","line":193,"column":79,"nodeType":"45359","messageId":"45360","endLine":193,"endColumn":82,"suggestions":"47043"},{"ruleId":"45357","severity":2,"message":"45358","line":204,"column":43,"nodeType":"45359","messageId":"45360","endLine":204,"endColumn":46,"suggestions":"47044"},{"ruleId":"45357","severity":2,"message":"45358","line":209,"column":9,"nodeType":"45359","messageId":"45360","endLine":209,"endColumn":12,"suggestions":"47045"},{"ruleId":"45357","severity":2,"message":"45358","line":213,"column":95,"nodeType":"45359","messageId":"45360","endLine":213,"endColumn":98,"suggestions":"47046"},{"ruleId":"45357","severity":2,"message":"45358","line":217,"column":33,"nodeType":"45359","messageId":"45360","endLine":217,"endColumn":36,"suggestions":"47047"},{"ruleId":"45357","severity":2,"message":"45358","line":218,"column":33,"nodeType":"45359","messageId":"45360","endLine":218,"endColumn":36,"suggestions":"47048"},{"ruleId":"45357","severity":2,"message":"45358","line":57,"column":9,"nodeType":"45359","messageId":"45360","endLine":57,"endColumn":12,"suggestions":"47049"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":74,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":77,"suggestions":"47050"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":9,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":12,"suggestions":"47051"},{"ruleId":"45357","severity":2,"message":"45358","line":77,"column":83,"nodeType":"45359","messageId":"45360","endLine":77,"endColumn":86,"suggestions":"47052"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":21,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":24,"suggestions":"47053"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":44,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":47,"suggestions":"47054"},{"ruleId":"45357","severity":2,"message":"45358","line":91,"column":9,"nodeType":"45359","messageId":"45360","endLine":91,"endColumn":12,"suggestions":"47055"},{"ruleId":"45357","severity":2,"message":"45358","line":103,"column":20,"nodeType":"45359","messageId":"45360","endLine":103,"endColumn":23,"suggestions":"47056"},{"ruleId":"45357","severity":2,"message":"45358","line":118,"column":9,"nodeType":"45359","messageId":"45360","endLine":118,"endColumn":12,"suggestions":"47057"},{"ruleId":"45357","severity":2,"message":"45358","line":130,"column":27,"nodeType":"45359","messageId":"45360","endLine":130,"endColumn":30,"suggestions":"47058"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":21,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":24,"suggestions":"47059"},{"ruleId":"45357","severity":2,"message":"45358","line":143,"column":43,"nodeType":"45359","messageId":"45360","endLine":143,"endColumn":46,"suggestions":"47060"},{"ruleId":"45357","severity":2,"message":"45358","line":147,"column":9,"nodeType":"45359","messageId":"45360","endLine":147,"endColumn":12,"suggestions":"47061"},{"ruleId":"45357","severity":2,"message":"45358","line":150,"column":90,"nodeType":"45359","messageId":"45360","endLine":150,"endColumn":93,"suggestions":"47062"},{"ruleId":"45357","severity":2,"message":"45358","line":162,"column":43,"nodeType":"45359","messageId":"45360","endLine":162,"endColumn":46,"suggestions":"47063"},{"ruleId":"45357","severity":2,"message":"45358","line":166,"column":9,"nodeType":"45359","messageId":"45360","endLine":166,"endColumn":12,"suggestions":"47064"},{"ruleId":"45357","severity":2,"message":"45358","line":170,"column":67,"nodeType":"45359","messageId":"45360","endLine":170,"endColumn":70,"suggestions":"47065"},{"ruleId":"45357","severity":2,"message":"45358","line":180,"column":21,"nodeType":"45359","messageId":"45360","endLine":180,"endColumn":24,"suggestions":"47066"},{"ruleId":"45357","severity":2,"message":"45358","line":183,"column":43,"nodeType":"45359","messageId":"45360","endLine":183,"endColumn":46,"suggestions":"47067"},{"ruleId":"45357","severity":2,"message":"45358","line":187,"column":9,"nodeType":"45359","messageId":"45360","endLine":187,"endColumn":12,"suggestions":"47068"},{"ruleId":"45357","severity":2,"message":"45358","line":191,"column":74,"nodeType":"45359","messageId":"45360","endLine":191,"endColumn":77,"suggestions":"47069"},{"ruleId":"45357","severity":2,"message":"45358","line":228,"column":29,"nodeType":"45359","messageId":"45360","endLine":228,"endColumn":32,"suggestions":"47070"},{"ruleId":"45357","severity":2,"message":"45358","line":229,"column":29,"nodeType":"45359","messageId":"45360","endLine":229,"endColumn":32,"suggestions":"47071"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":38,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":41,"suggestions":"47072"},{"ruleId":"45357","severity":2,"message":"45358","line":119,"column":38,"nodeType":"45359","messageId":"45360","endLine":119,"endColumn":41,"suggestions":"47073"},{"ruleId":"45357","severity":2,"message":"45358","line":28,"column":75,"nodeType":"45359","messageId":"45360","endLine":28,"endColumn":78,"suggestions":"47074"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":35,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":38,"suggestions":"47075"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":45,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":48,"suggestions":"47076"},{"ruleId":"45357","severity":2,"message":"45358","line":50,"column":21,"nodeType":"45359","messageId":"45360","endLine":50,"endColumn":24,"suggestions":"47077"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":21,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":24,"suggestions":"47078"},{"ruleId":"45357","severity":2,"message":"45358","line":104,"column":24,"nodeType":"45359","messageId":"45360","endLine":104,"endColumn":27,"suggestions":"47079"},{"ruleId":"45357","severity":2,"message":"45358","line":145,"column":48,"nodeType":"45359","messageId":"45360","endLine":145,"endColumn":51,"suggestions":"47080"},{"ruleId":"45357","severity":2,"message":"45358","line":156,"column":34,"nodeType":"45359","messageId":"45360","endLine":156,"endColumn":37,"suggestions":"47081"},{"ruleId":"45357","severity":2,"message":"45358","line":245,"column":40,"nodeType":"45359","messageId":"45360","endLine":245,"endColumn":43,"suggestions":"47082"},{"ruleId":"45357","severity":2,"message":"45358","line":114,"column":26,"nodeType":"45359","messageId":"45360","endLine":114,"endColumn":29,"suggestions":"47083"},{"ruleId":"45357","severity":2,"message":"45358","line":115,"column":26,"nodeType":"45359","messageId":"45360","endLine":115,"endColumn":29,"suggestions":"47084"},{"ruleId":"45357","severity":2,"message":"45358","line":116,"column":26,"nodeType":"45359","messageId":"45360","endLine":116,"endColumn":29,"suggestions":"47085"},{"ruleId":"45357","severity":2,"message":"45358","line":117,"column":26,"nodeType":"45359","messageId":"45360","endLine":117,"endColumn":29,"suggestions":"47086"},{"ruleId":"45357","severity":2,"message":"45358","line":135,"column":50,"nodeType":"45359","messageId":"45360","endLine":135,"endColumn":53,"suggestions":"47087"},{"ruleId":"45357","severity":2,"message":"45358","line":136,"column":26,"nodeType":"45359","messageId":"45360","endLine":136,"endColumn":29,"suggestions":"47088"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":26,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":29,"suggestions":"47089"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":64,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":67,"suggestions":"47090"},{"ruleId":"45357","severity":2,"message":"45358","line":76,"column":44,"nodeType":"45359","messageId":"45360","endLine":76,"endColumn":47,"suggestions":"47091"},{"ruleId":"45357","severity":2,"message":"45358","line":80,"column":47,"nodeType":"45359","messageId":"45360","endLine":80,"endColumn":50,"suggestions":"47092"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":36,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":39,"suggestions":"47093"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":69,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":72,"suggestions":"47094"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":29,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":32,"suggestions":"47095"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":14,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":17,"suggestions":"47096"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":62,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":65,"suggestions":"47097"},{"ruleId":"45357","severity":2,"message":"45358","line":118,"column":49,"nodeType":"45359","messageId":"45360","endLine":118,"endColumn":52,"suggestions":"47098"},{"ruleId":"45357","severity":2,"message":"45358","line":119,"column":49,"nodeType":"45359","messageId":"45360","endLine":119,"endColumn":52,"suggestions":"47099"},{"ruleId":"45357","severity":2,"message":"45358","line":120,"column":49,"nodeType":"45359","messageId":"45360","endLine":120,"endColumn":52,"suggestions":"47100"},{"ruleId":"45357","severity":2,"message":"45358","line":122,"column":74,"nodeType":"45359","messageId":"45360","endLine":122,"endColumn":77,"suggestions":"47101"},{"ruleId":"45357","severity":2,"message":"45358","line":129,"column":53,"nodeType":"45359","messageId":"45360","endLine":129,"endColumn":56,"suggestions":"47102"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":49,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":52,"suggestions":"47103"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":49,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":52,"suggestions":"47104"},{"ruleId":"45357","severity":2,"message":"45358","line":134,"column":49,"nodeType":"45359","messageId":"45360","endLine":134,"endColumn":52,"suggestions":"47105"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":60,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":63,"suggestions":"47106"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":36,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":39,"suggestions":"47107","suppressions":"47108"},{"ruleId":"45357","severity":2,"message":"45358","line":244,"column":53,"nodeType":"45359","messageId":"45360","endLine":244,"endColumn":56,"suggestions":"47109"},{"ruleId":"45357","severity":2,"message":"45358","line":269,"column":53,"nodeType":"45359","messageId":"45360","endLine":269,"endColumn":56,"suggestions":"47110"},{"ruleId":"45357","severity":2,"message":"45358","line":305,"column":53,"nodeType":"45359","messageId":"45360","endLine":305,"endColumn":56,"suggestions":"47111"},{"ruleId":"45357","severity":2,"message":"45358","line":355,"column":44,"nodeType":"45359","messageId":"45360","endLine":355,"endColumn":47,"suggestions":"47112"},{"ruleId":"45357","severity":2,"message":"45358","line":131,"column":43,"nodeType":"45359","messageId":"45360","endLine":131,"endColumn":46,"suggestions":"47113"},{"ruleId":"45357","severity":2,"message":"45358","line":203,"column":43,"nodeType":"45359","messageId":"45360","endLine":203,"endColumn":46,"suggestions":"47114"},{"ruleId":"45357","severity":2,"message":"45358","line":208,"column":44,"nodeType":"45359","messageId":"45360","endLine":208,"endColumn":47,"suggestions":"47115"},{"ruleId":"45357","severity":2,"message":"45358","line":215,"column":30,"nodeType":"45359","messageId":"45360","endLine":215,"endColumn":33,"suggestions":"47116"},{"ruleId":"45357","severity":2,"message":"45358","line":243,"column":43,"nodeType":"45359","messageId":"45360","endLine":243,"endColumn":46,"suggestions":"47117"},{"ruleId":"45357","severity":2,"message":"45358","line":23,"column":21,"nodeType":"45359","messageId":"45360","endLine":23,"endColumn":24,"suggestions":"47118"},{"ruleId":"45357","severity":2,"message":"45358","line":263,"column":8,"nodeType":"45359","messageId":"45360","endLine":263,"endColumn":11,"suggestions":"47119"},{"ruleId":"45357","severity":2,"message":"45358","line":116,"column":43,"nodeType":"45359","messageId":"45360","endLine":116,"endColumn":46,"suggestions":"47120"},{"ruleId":"45357","severity":2,"message":"45358","line":237,"column":43,"nodeType":"45359","messageId":"45360","endLine":237,"endColumn":46,"suggestions":"47121"},{"ruleId":"45357","severity":2,"message":"45358","line":319,"column":43,"nodeType":"45359","messageId":"45360","endLine":319,"endColumn":46,"suggestions":"47122"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":53,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":56,"suggestions":"47123"},{"ruleId":"45357","severity":2,"message":"45358","line":105,"column":55,"nodeType":"45359","messageId":"45360","endLine":105,"endColumn":58,"suggestions":"47124"},{"ruleId":"45357","severity":2,"message":"45358","line":150,"column":53,"nodeType":"45359","messageId":"45360","endLine":150,"endColumn":56,"suggestions":"47125"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":28,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":31,"suggestions":"47126"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":24,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":27,"suggestions":"47127"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":61,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":64,"suggestions":"47128"},{"ruleId":"45357","severity":2,"message":"45358","line":114,"column":58,"nodeType":"45359","messageId":"45360","endLine":114,"endColumn":61,"suggestions":"47129"},{"ruleId":"45357","severity":2,"message":"45358","line":123,"column":28,"nodeType":"45359","messageId":"45360","endLine":123,"endColumn":31,"suggestions":"47130"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":52,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":55,"suggestions":"47131"},{"ruleId":"45357","severity":2,"message":"45358","line":156,"column":46,"nodeType":"45359","messageId":"45360","endLine":156,"endColumn":49,"suggestions":"47132"},{"ruleId":"45357","severity":2,"message":"45358","line":175,"column":28,"nodeType":"45359","messageId":"45360","endLine":175,"endColumn":31,"suggestions":"47133"},{"ruleId":"45357","severity":2,"message":"45358","line":176,"column":28,"nodeType":"45359","messageId":"45360","endLine":176,"endColumn":31,"suggestions":"47134"},{"ruleId":"45357","severity":2,"message":"45358","line":190,"column":37,"nodeType":"45359","messageId":"45360","endLine":190,"endColumn":40,"suggestions":"47135"},{"ruleId":"45357","severity":2,"message":"45358","line":208,"column":41,"nodeType":"45359","messageId":"45360","endLine":208,"endColumn":44,"suggestions":"47136"},{"ruleId":"45357","severity":2,"message":"45358","line":232,"column":37,"nodeType":"45359","messageId":"45360","endLine":232,"endColumn":40,"suggestions":"47137"},{"ruleId":"45357","severity":2,"message":"45358","line":233,"column":37,"nodeType":"45359","messageId":"45360","endLine":233,"endColumn":40,"suggestions":"47138"},{"ruleId":"45357","severity":2,"message":"45358","line":314,"column":49,"nodeType":"45359","messageId":"45360","endLine":314,"endColumn":52,"suggestions":"47139"},{"ruleId":"45357","severity":2,"message":"45358","line":336,"column":49,"nodeType":"45359","messageId":"45360","endLine":336,"endColumn":52,"suggestions":"47140"},{"ruleId":"45357","severity":2,"message":"45358","line":358,"column":37,"nodeType":"45359","messageId":"45360","endLine":358,"endColumn":40,"suggestions":"47141"},{"ruleId":"45357","severity":2,"message":"45358","line":359,"column":37,"nodeType":"45359","messageId":"45360","endLine":359,"endColumn":40,"suggestions":"47142"},{"ruleId":"45357","severity":2,"message":"45358","line":360,"column":37,"nodeType":"45359","messageId":"45360","endLine":360,"endColumn":40,"suggestions":"47143"},{"ruleId":"45357","severity":2,"message":"45358","line":91,"column":43,"nodeType":"45359","messageId":"45360","endLine":91,"endColumn":46,"suggestions":"47144"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":43,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":46,"suggestions":"47145"},{"ruleId":"45357","severity":2,"message":"45358","line":128,"column":43,"nodeType":"45359","messageId":"45360","endLine":128,"endColumn":46,"suggestions":"47146"},{"ruleId":"45357","severity":2,"message":"45358","line":152,"column":43,"nodeType":"45359","messageId":"45360","endLine":152,"endColumn":46,"suggestions":"47147"},{"ruleId":"45357","severity":2,"message":"45358","line":175,"column":43,"nodeType":"45359","messageId":"45360","endLine":175,"endColumn":46,"suggestions":"47148"},{"ruleId":"45357","severity":2,"message":"45358","line":180,"column":34,"nodeType":"45359","messageId":"45360","endLine":180,"endColumn":37,"suggestions":"47149"},{"ruleId":"45357","severity":2,"message":"45358","line":198,"column":43,"nodeType":"45359","messageId":"45360","endLine":198,"endColumn":46,"suggestions":"47150"},{"ruleId":"45357","severity":2,"message":"45358","line":225,"column":43,"nodeType":"45359","messageId":"45360","endLine":225,"endColumn":46,"suggestions":"47151"},{"ruleId":"45357","severity":2,"message":"45358","line":264,"column":43,"nodeType":"45359","messageId":"45360","endLine":264,"endColumn":46,"suggestions":"47152"},{"ruleId":"45357","severity":2,"message":"45358","line":265,"column":56,"nodeType":"45359","messageId":"45360","endLine":265,"endColumn":59,"suggestions":"47153"},{"ruleId":"45357","severity":2,"message":"45358","line":42,"column":18,"nodeType":"45359","messageId":"45360","endLine":42,"endColumn":21,"suggestions":"47154"},{"ruleId":"45357","severity":2,"message":"45358","line":44,"column":17,"nodeType":"45359","messageId":"45360","endLine":44,"endColumn":20,"suggestions":"47155"},{"ruleId":"45357","severity":2,"message":"45358","line":44,"column":27,"nodeType":"45359","messageId":"45360","endLine":44,"endColumn":30,"suggestions":"47156"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":17,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":20,"suggestions":"47157"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":27,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":30,"suggestions":"47158"},{"ruleId":"45357","severity":2,"message":"45358","line":46,"column":18,"nodeType":"45359","messageId":"45360","endLine":46,"endColumn":21,"suggestions":"47159"},{"ruleId":"45357","severity":2,"message":"45358","line":46,"column":28,"nodeType":"45359","messageId":"45360","endLine":46,"endColumn":31,"suggestions":"47160"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":18,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":21,"suggestions":"47161"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":28,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":31,"suggestions":"47162"},{"ruleId":"45357","severity":2,"message":"45358","line":52,"column":27,"nodeType":"45359","messageId":"45360","endLine":52,"endColumn":30,"suggestions":"47163"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":33,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":36,"suggestions":"47164"},{"ruleId":"45357","severity":2,"message":"45358","line":118,"column":82,"nodeType":"45359","messageId":"45360","endLine":118,"endColumn":85,"suggestions":"47165"},{"ruleId":"45357","severity":2,"message":"45358","line":131,"column":21,"nodeType":"45359","messageId":"45360","endLine":131,"endColumn":24,"suggestions":"47166"},{"ruleId":"45357","severity":2,"message":"45358","line":259,"column":16,"nodeType":"45359","messageId":"45360","endLine":259,"endColumn":19,"suggestions":"47167"},{"ruleId":"45357","severity":2,"message":"45358","line":268,"column":38,"nodeType":"45359","messageId":"45360","endLine":268,"endColumn":41,"suggestions":"47168"},{"ruleId":"45357","severity":2,"message":"45358","line":268,"column":53,"nodeType":"45359","messageId":"45360","endLine":268,"endColumn":56,"suggestions":"47169"},{"ruleId":"45357","severity":2,"message":"45358","line":295,"column":16,"nodeType":"45359","messageId":"45360","endLine":295,"endColumn":19,"suggestions":"47170"},{"ruleId":"45357","severity":2,"message":"45358","line":296,"column":25,"nodeType":"45359","messageId":"45360","endLine":296,"endColumn":28,"suggestions":"47171"},{"ruleId":"45357","severity":2,"message":"45358","line":321,"column":37,"nodeType":"45359","messageId":"45360","endLine":321,"endColumn":40,"suggestions":"47172"},{"ruleId":"45357","severity":2,"message":"45358","line":321,"column":52,"nodeType":"45359","messageId":"45360","endLine":321,"endColumn":55,"suggestions":"47173"},{"ruleId":"45357","severity":2,"message":"45358","line":321,"column":66,"nodeType":"45359","messageId":"45360","endLine":321,"endColumn":69,"suggestions":"47174"},{"ruleId":"45357","severity":2,"message":"45358","line":413,"column":16,"nodeType":"45359","messageId":"45360","endLine":413,"endColumn":19,"suggestions":"47175"},{"ruleId":"45357","severity":2,"message":"45358","line":429,"column":38,"nodeType":"45359","messageId":"45360","endLine":429,"endColumn":41,"suggestions":"47176"},{"ruleId":"45357","severity":2,"message":"45358","line":429,"column":53,"nodeType":"45359","messageId":"45360","endLine":429,"endColumn":56,"suggestions":"47177"},{"ruleId":"45357","severity":2,"message":"45358","line":429,"column":67,"nodeType":"45359","messageId":"45360","endLine":429,"endColumn":70,"suggestions":"47178"},{"ruleId":"45357","severity":2,"message":"45358","line":450,"column":16,"nodeType":"45359","messageId":"45360","endLine":450,"endColumn":19,"suggestions":"47179"},{"ruleId":"45357","severity":2,"message":"45358","line":494,"column":38,"nodeType":"45359","messageId":"45360","endLine":494,"endColumn":41,"suggestions":"47180"},{"ruleId":"45357","severity":2,"message":"45358","line":494,"column":53,"nodeType":"45359","messageId":"45360","endLine":494,"endColumn":56,"suggestions":"47181"},{"ruleId":"45357","severity":2,"message":"45358","line":504,"column":27,"nodeType":"45359","messageId":"45360","endLine":504,"endColumn":30,"suggestions":"47182"},{"ruleId":"45357","severity":2,"message":"45358","line":513,"column":16,"nodeType":"45359","messageId":"45360","endLine":513,"endColumn":19,"suggestions":"47183"},{"ruleId":"45357","severity":2,"message":"45358","line":529,"column":40,"nodeType":"45359","messageId":"45360","endLine":529,"endColumn":43,"suggestions":"47184"},{"ruleId":"45357","severity":2,"message":"45358","line":529,"column":55,"nodeType":"45359","messageId":"45360","endLine":529,"endColumn":58,"suggestions":"47185"},{"ruleId":"45357","severity":2,"message":"45358","line":537,"column":29,"nodeType":"45359","messageId":"45360","endLine":537,"endColumn":32,"suggestions":"47186"},{"ruleId":"45357","severity":2,"message":"45358","line":593,"column":16,"nodeType":"45359","messageId":"45360","endLine":593,"endColumn":19,"suggestions":"47187"},{"ruleId":"45357","severity":2,"message":"45358","line":608,"column":40,"nodeType":"45359","messageId":"45360","endLine":608,"endColumn":43,"suggestions":"47188"},{"ruleId":"45357","severity":2,"message":"45358","line":608,"column":55,"nodeType":"45359","messageId":"45360","endLine":608,"endColumn":58,"suggestions":"47189"},{"ruleId":"45357","severity":2,"message":"45358","line":615,"column":29,"nodeType":"45359","messageId":"45360","endLine":615,"endColumn":32,"suggestions":"47190"},{"ruleId":"45357","severity":2,"message":"45358","line":627,"column":16,"nodeType":"45359","messageId":"45360","endLine":627,"endColumn":19,"suggestions":"47191"},{"ruleId":"45357","severity":2,"message":"45358","line":640,"column":40,"nodeType":"45359","messageId":"45360","endLine":640,"endColumn":43,"suggestions":"47192"},{"ruleId":"45357","severity":2,"message":"45358","line":640,"column":55,"nodeType":"45359","messageId":"45360","endLine":640,"endColumn":58,"suggestions":"47193"},{"ruleId":"45357","severity":2,"message":"45358","line":647,"column":29,"nodeType":"45359","messageId":"45360","endLine":647,"endColumn":32,"suggestions":"47194"},{"ruleId":"45357","severity":2,"message":"45358","line":659,"column":16,"nodeType":"45359","messageId":"45360","endLine":659,"endColumn":19,"suggestions":"47195"},{"ruleId":"45357","severity":2,"message":"45358","line":668,"column":38,"nodeType":"45359","messageId":"45360","endLine":668,"endColumn":41,"suggestions":"47196"},{"ruleId":"45357","severity":2,"message":"45358","line":668,"column":53,"nodeType":"45359","messageId":"45360","endLine":668,"endColumn":56,"suggestions":"47197"},{"ruleId":"45357","severity":2,"message":"45358","line":675,"column":27,"nodeType":"45359","messageId":"45360","endLine":675,"endColumn":30,"suggestions":"47198"},{"ruleId":"45357","severity":2,"message":"45358","line":683,"column":16,"nodeType":"45359","messageId":"45360","endLine":683,"endColumn":19,"suggestions":"47199"},{"ruleId":"45357","severity":2,"message":"45358","line":707,"column":40,"nodeType":"45359","messageId":"45360","endLine":707,"endColumn":43,"suggestions":"47200"},{"ruleId":"45357","severity":2,"message":"45358","line":707,"column":55,"nodeType":"45359","messageId":"45360","endLine":707,"endColumn":58,"suggestions":"47201"},{"ruleId":"45357","severity":2,"message":"45358","line":714,"column":29,"nodeType":"45359","messageId":"45360","endLine":714,"endColumn":32,"suggestions":"47202"},{"ruleId":"45357","severity":2,"message":"45358","line":738,"column":23,"nodeType":"45359","messageId":"45360","endLine":738,"endColumn":26,"suggestions":"47203"},{"ruleId":"45357","severity":2,"message":"45358","line":743,"column":40,"nodeType":"45359","messageId":"45360","endLine":743,"endColumn":43,"suggestions":"47204"},{"ruleId":"45357","severity":2,"message":"45358","line":743,"column":55,"nodeType":"45359","messageId":"45360","endLine":743,"endColumn":58,"suggestions":"47205"},{"ruleId":"45357","severity":2,"message":"45358","line":750,"column":29,"nodeType":"45359","messageId":"45360","endLine":750,"endColumn":32,"suggestions":"47206"},{"ruleId":"45357","severity":2,"message":"45358","line":762,"column":16,"nodeType":"45359","messageId":"45360","endLine":762,"endColumn":19,"suggestions":"47207"},{"ruleId":"45357","severity":2,"message":"45358","line":767,"column":38,"nodeType":"45359","messageId":"45360","endLine":767,"endColumn":41,"suggestions":"47208"},{"ruleId":"45357","severity":2,"message":"45358","line":767,"column":53,"nodeType":"45359","messageId":"45360","endLine":767,"endColumn":56,"suggestions":"47209"},{"ruleId":"45357","severity":2,"message":"45358","line":774,"column":27,"nodeType":"45359","messageId":"45360","endLine":774,"endColumn":30,"suggestions":"47210"},{"ruleId":"45357","severity":2,"message":"45358","line":782,"column":16,"nodeType":"45359","messageId":"45360","endLine":782,"endColumn":19,"suggestions":"47211"},{"ruleId":"45357","severity":2,"message":"45358","line":790,"column":38,"nodeType":"45359","messageId":"45360","endLine":790,"endColumn":41,"suggestions":"47212"},{"ruleId":"45357","severity":2,"message":"45358","line":790,"column":53,"nodeType":"45359","messageId":"45360","endLine":790,"endColumn":56,"suggestions":"47213"},{"ruleId":"45357","severity":2,"message":"45358","line":797,"column":27,"nodeType":"45359","messageId":"45360","endLine":797,"endColumn":30,"suggestions":"47214"},{"ruleId":"45357","severity":2,"message":"45358","line":806,"column":16,"nodeType":"45359","messageId":"45360","endLine":806,"endColumn":19,"suggestions":"47215"},{"ruleId":"45357","severity":2,"message":"45358","line":815,"column":38,"nodeType":"45359","messageId":"45360","endLine":815,"endColumn":41,"suggestions":"47216"},{"ruleId":"45357","severity":2,"message":"45358","line":815,"column":53,"nodeType":"45359","messageId":"45360","endLine":815,"endColumn":56,"suggestions":"47217"},{"ruleId":"45357","severity":2,"message":"45358","line":825,"column":27,"nodeType":"45359","messageId":"45360","endLine":825,"endColumn":30,"suggestions":"47218"},{"ruleId":"45357","severity":2,"message":"45358","line":841,"column":16,"nodeType":"45359","messageId":"45360","endLine":841,"endColumn":19,"suggestions":"47219"},{"ruleId":"45357","severity":2,"message":"45358","line":867,"column":38,"nodeType":"45359","messageId":"45360","endLine":867,"endColumn":41,"suggestions":"47220"},{"ruleId":"45357","severity":2,"message":"45358","line":867,"column":53,"nodeType":"45359","messageId":"45360","endLine":867,"endColumn":56,"suggestions":"47221"},{"ruleId":"45357","severity":2,"message":"45358","line":867,"column":66,"nodeType":"45359","messageId":"45360","endLine":867,"endColumn":69,"suggestions":"47222"},{"ruleId":"45357","severity":2,"message":"45358","line":877,"column":27,"nodeType":"45359","messageId":"45360","endLine":877,"endColumn":30,"suggestions":"47223"},{"ruleId":"45357","severity":2,"message":"45358","line":909,"column":38,"nodeType":"45359","messageId":"45360","endLine":909,"endColumn":41,"suggestions":"47224"},{"ruleId":"45357","severity":2,"message":"45358","line":909,"column":53,"nodeType":"45359","messageId":"45360","endLine":909,"endColumn":56,"suggestions":"47225"},{"ruleId":"45357","severity":2,"message":"45358","line":915,"column":27,"nodeType":"45359","messageId":"45360","endLine":915,"endColumn":30,"suggestions":"47226"},{"ruleId":"45357","severity":2,"message":"45358","line":919,"column":44,"nodeType":"45359","messageId":"45360","endLine":919,"endColumn":47,"suggestions":"47227"},{"ruleId":"45357","severity":2,"message":"45358","line":994,"column":16,"nodeType":"45359","messageId":"45360","endLine":994,"endColumn":19,"suggestions":"47228"},{"ruleId":"45357","severity":2,"message":"45358","line":1006,"column":40,"nodeType":"45359","messageId":"45360","endLine":1006,"endColumn":43,"suggestions":"47229"},{"ruleId":"45357","severity":2,"message":"45358","line":1006,"column":55,"nodeType":"45359","messageId":"45360","endLine":1006,"endColumn":58,"suggestions":"47230"},{"ruleId":"45357","severity":2,"message":"45358","line":1013,"column":29,"nodeType":"45359","messageId":"45360","endLine":1013,"endColumn":32,"suggestions":"47231"},{"ruleId":"45357","severity":2,"message":"45358","line":1024,"column":16,"nodeType":"45359","messageId":"45360","endLine":1024,"endColumn":19,"suggestions":"47232"},{"ruleId":"45357","severity":2,"message":"45358","line":1065,"column":40,"nodeType":"45359","messageId":"45360","endLine":1065,"endColumn":43,"suggestions":"47233"},{"ruleId":"45357","severity":2,"message":"45358","line":1065,"column":55,"nodeType":"45359","messageId":"45360","endLine":1065,"endColumn":58,"suggestions":"47234"},{"ruleId":"45357","severity":2,"message":"45358","line":1072,"column":29,"nodeType":"45359","messageId":"45360","endLine":1072,"endColumn":32,"suggestions":"47235"},{"ruleId":"45357","severity":2,"message":"45358","line":1130,"column":27,"nodeType":"45359","messageId":"45360","endLine":1130,"endColumn":30,"suggestions":"47236"},{"ruleId":"45357","severity":2,"message":"45358","line":1152,"column":27,"nodeType":"45359","messageId":"45360","endLine":1152,"endColumn":30,"suggestions":"47237"},{"ruleId":"45357","severity":2,"message":"45358","line":1158,"column":16,"nodeType":"45359","messageId":"45360","endLine":1158,"endColumn":19,"suggestions":"47238"},{"ruleId":"45357","severity":2,"message":"45358","line":1167,"column":38,"nodeType":"45359","messageId":"45360","endLine":1167,"endColumn":41,"suggestions":"47239"},{"ruleId":"45357","severity":2,"message":"45358","line":1167,"column":53,"nodeType":"45359","messageId":"45360","endLine":1167,"endColumn":56,"suggestions":"47240"},{"ruleId":"45357","severity":2,"message":"45358","line":1183,"column":27,"nodeType":"45359","messageId":"45360","endLine":1183,"endColumn":30,"suggestions":"47241"},{"ruleId":"45357","severity":2,"message":"45358","line":1208,"column":27,"nodeType":"45359","messageId":"45360","endLine":1208,"endColumn":30,"suggestions":"47242"},{"ruleId":"45357","severity":2,"message":"45358","line":1217,"column":16,"nodeType":"45359","messageId":"45360","endLine":1217,"endColumn":19,"suggestions":"47243"},{"ruleId":"45357","severity":2,"message":"45358","line":1226,"column":38,"nodeType":"45359","messageId":"45360","endLine":1226,"endColumn":41,"suggestions":"47244"},{"ruleId":"45357","severity":2,"message":"45358","line":1226,"column":53,"nodeType":"45359","messageId":"45360","endLine":1226,"endColumn":56,"suggestions":"47245"},{"ruleId":"45357","severity":2,"message":"45358","line":1245,"column":27,"nodeType":"45359","messageId":"45360","endLine":1245,"endColumn":30,"suggestions":"47246"},{"ruleId":"45357","severity":2,"message":"45358","line":1264,"column":38,"nodeType":"45359","messageId":"45360","endLine":1264,"endColumn":41,"suggestions":"47247"},{"ruleId":"45357","severity":2,"message":"45358","line":1264,"column":53,"nodeType":"45359","messageId":"45360","endLine":1264,"endColumn":56,"suggestions":"47248"},{"ruleId":"45357","severity":2,"message":"45358","line":1280,"column":27,"nodeType":"45359","messageId":"45360","endLine":1280,"endColumn":30,"suggestions":"47249"},{"ruleId":"45357","severity":2,"message":"45358","line":1284,"column":44,"nodeType":"45359","messageId":"45360","endLine":1284,"endColumn":47,"suggestions":"47250"},{"ruleId":"45357","severity":2,"message":"45358","line":1310,"column":27,"nodeType":"45359","messageId":"45360","endLine":1310,"endColumn":30,"suggestions":"47251"},{"ruleId":"45357","severity":2,"message":"45358","line":1314,"column":44,"nodeType":"45359","messageId":"45360","endLine":1314,"endColumn":47,"suggestions":"47252"},{"ruleId":"45357","severity":2,"message":"45358","line":1342,"column":27,"nodeType":"45359","messageId":"45360","endLine":1342,"endColumn":30,"suggestions":"47253"},{"ruleId":"45357","severity":2,"message":"45358","line":1346,"column":44,"nodeType":"45359","messageId":"45360","endLine":1346,"endColumn":47,"suggestions":"47254"},{"ruleId":"45357","severity":2,"message":"45358","line":1361,"column":16,"nodeType":"45359","messageId":"45360","endLine":1361,"endColumn":19,"suggestions":"47255"},{"ruleId":"45357","severity":2,"message":"45358","line":1371,"column":40,"nodeType":"45359","messageId":"45360","endLine":1371,"endColumn":43,"suggestions":"47256"},{"ruleId":"45357","severity":2,"message":"45358","line":1371,"column":55,"nodeType":"45359","messageId":"45360","endLine":1371,"endColumn":58,"suggestions":"47257"},{"ruleId":"45357","severity":2,"message":"45358","line":1388,"column":29,"nodeType":"45359","messageId":"45360","endLine":1388,"endColumn":32,"suggestions":"47258"},{"ruleId":"45357","severity":2,"message":"45358","line":1410,"column":38,"nodeType":"45359","messageId":"45360","endLine":1410,"endColumn":41,"suggestions":"47259"},{"ruleId":"45357","severity":2,"message":"45358","line":1410,"column":53,"nodeType":"45359","messageId":"45360","endLine":1410,"endColumn":56,"suggestions":"47260"},{"ruleId":"45357","severity":2,"message":"45358","line":1431,"column":27,"nodeType":"45359","messageId":"45360","endLine":1431,"endColumn":30,"suggestions":"47261"},{"ruleId":"45357","severity":2,"message":"45358","line":1435,"column":44,"nodeType":"45359","messageId":"45360","endLine":1435,"endColumn":47,"suggestions":"47262"},{"ruleId":"45357","severity":2,"message":"45358","line":1443,"column":16,"nodeType":"45359","messageId":"45360","endLine":1443,"endColumn":19,"suggestions":"47263"},{"ruleId":"45357","severity":2,"message":"45358","line":1453,"column":38,"nodeType":"45359","messageId":"45360","endLine":1453,"endColumn":41,"suggestions":"47264"},{"ruleId":"45357","severity":2,"message":"45358","line":1453,"column":53,"nodeType":"45359","messageId":"45360","endLine":1453,"endColumn":56,"suggestions":"47265"},{"ruleId":"45357","severity":2,"message":"45358","line":1466,"column":27,"nodeType":"45359","messageId":"45360","endLine":1466,"endColumn":30,"suggestions":"47266"},{"ruleId":"45357","severity":2,"message":"45358","line":1470,"column":44,"nodeType":"45359","messageId":"45360","endLine":1470,"endColumn":47,"suggestions":"47267"},{"ruleId":"45357","severity":2,"message":"45358","line":1478,"column":21,"nodeType":"45359","messageId":"45360","endLine":1478,"endColumn":24,"suggestions":"47268"},{"ruleId":"45357","severity":2,"message":"45358","line":1498,"column":44,"nodeType":"45359","messageId":"45360","endLine":1498,"endColumn":47,"suggestions":"47269"},{"ruleId":"45357","severity":2,"message":"45358","line":1498,"column":59,"nodeType":"45359","messageId":"45360","endLine":1498,"endColumn":62,"suggestions":"47270"},{"ruleId":"45357","severity":2,"message":"45358","line":1508,"column":27,"nodeType":"45359","messageId":"45360","endLine":1508,"endColumn":30,"suggestions":"47271"},{"ruleId":"45357","severity":2,"message":"45358","line":1518,"column":21,"nodeType":"45359","messageId":"45360","endLine":1518,"endColumn":24,"suggestions":"47272"},{"ruleId":"45357","severity":2,"message":"45358","line":1539,"column":44,"nodeType":"45359","messageId":"45360","endLine":1539,"endColumn":47,"suggestions":"47273"},{"ruleId":"45357","severity":2,"message":"45358","line":1539,"column":59,"nodeType":"45359","messageId":"45360","endLine":1539,"endColumn":62,"suggestions":"47274"},{"ruleId":"45357","severity":2,"message":"45358","line":1549,"column":27,"nodeType":"45359","messageId":"45360","endLine":1549,"endColumn":30,"suggestions":"47275"},{"ruleId":"45357","severity":2,"message":"45358","line":1561,"column":16,"nodeType":"45359","messageId":"45360","endLine":1561,"endColumn":19,"suggestions":"47276"},{"ruleId":"45357","severity":2,"message":"45358","line":1576,"column":38,"nodeType":"45359","messageId":"45360","endLine":1576,"endColumn":41,"suggestions":"47277"},{"ruleId":"45357","severity":2,"message":"45358","line":1576,"column":53,"nodeType":"45359","messageId":"45360","endLine":1576,"endColumn":56,"suggestions":"47278"},{"ruleId":"45357","severity":2,"message":"45358","line":1584,"column":27,"nodeType":"45359","messageId":"45360","endLine":1584,"endColumn":30,"suggestions":"47279"},{"ruleId":"45357","severity":2,"message":"45358","line":1588,"column":44,"nodeType":"45359","messageId":"45360","endLine":1588,"endColumn":47,"suggestions":"47280"},{"ruleId":"45357","severity":2,"message":"45358","line":1596,"column":16,"nodeType":"45359","messageId":"45360","endLine":1596,"endColumn":19,"suggestions":"47281"},{"ruleId":"45357","severity":2,"message":"45358","line":1612,"column":38,"nodeType":"45359","messageId":"45360","endLine":1612,"endColumn":41,"suggestions":"47282"},{"ruleId":"45357","severity":2,"message":"45358","line":1612,"column":53,"nodeType":"45359","messageId":"45360","endLine":1612,"endColumn":56,"suggestions":"47283"},{"ruleId":"45357","severity":2,"message":"45358","line":1612,"column":66,"nodeType":"45359","messageId":"45360","endLine":1612,"endColumn":69,"suggestions":"47284"},{"ruleId":"45357","severity":2,"message":"45358","line":1633,"column":27,"nodeType":"45359","messageId":"45360","endLine":1633,"endColumn":30,"suggestions":"47285"},{"ruleId":"45357","severity":2,"message":"45358","line":1637,"column":44,"nodeType":"45359","messageId":"45360","endLine":1637,"endColumn":47,"suggestions":"47286"},{"ruleId":"45357","severity":2,"message":"45358","line":1645,"column":16,"nodeType":"45359","messageId":"45360","endLine":1645,"endColumn":19,"suggestions":"47287"},{"ruleId":"45357","severity":2,"message":"45358","line":1654,"column":38,"nodeType":"45359","messageId":"45360","endLine":1654,"endColumn":41,"suggestions":"47288"},{"ruleId":"45357","severity":2,"message":"45358","line":1654,"column":53,"nodeType":"45359","messageId":"45360","endLine":1654,"endColumn":56,"suggestions":"47289"},{"ruleId":"45357","severity":2,"message":"45358","line":1674,"column":27,"nodeType":"45359","messageId":"45360","endLine":1674,"endColumn":30,"suggestions":"47290"},{"ruleId":"45357","severity":2,"message":"45358","line":1683,"column":16,"nodeType":"45359","messageId":"45360","endLine":1683,"endColumn":19,"suggestions":"47291"},{"ruleId":"45357","severity":2,"message":"45358","line":1692,"column":38,"nodeType":"45359","messageId":"45360","endLine":1692,"endColumn":41,"suggestions":"47292"},{"ruleId":"45357","severity":2,"message":"45358","line":1692,"column":53,"nodeType":"45359","messageId":"45360","endLine":1692,"endColumn":56,"suggestions":"47293"},{"ruleId":"45357","severity":2,"message":"45358","line":1715,"column":27,"nodeType":"45359","messageId":"45360","endLine":1715,"endColumn":30,"suggestions":"47294"},{"ruleId":"45357","severity":2,"message":"45358","line":1719,"column":44,"nodeType":"45359","messageId":"45360","endLine":1719,"endColumn":47,"suggestions":"47295"},{"ruleId":"45357","severity":2,"message":"45358","line":1726,"column":16,"nodeType":"45359","messageId":"45360","endLine":1726,"endColumn":19,"suggestions":"47296"},{"ruleId":"45357","severity":2,"message":"45358","line":1737,"column":40,"nodeType":"45359","messageId":"45360","endLine":1737,"endColumn":43,"suggestions":"47297"},{"ruleId":"45357","severity":2,"message":"45358","line":1737,"column":55,"nodeType":"45359","messageId":"45360","endLine":1737,"endColumn":58,"suggestions":"47298"},{"ruleId":"45357","severity":2,"message":"45358","line":1744,"column":29,"nodeType":"45359","messageId":"45360","endLine":1744,"endColumn":32,"suggestions":"47299"},{"ruleId":"45357","severity":2,"message":"45358","line":1763,"column":16,"nodeType":"45359","messageId":"45360","endLine":1763,"endColumn":19,"suggestions":"47300"},{"ruleId":"45357","severity":2,"message":"45358","line":1771,"column":38,"nodeType":"45359","messageId":"45360","endLine":1771,"endColumn":41,"suggestions":"47301"},{"ruleId":"45357","severity":2,"message":"45358","line":1771,"column":53,"nodeType":"45359","messageId":"45360","endLine":1771,"endColumn":56,"suggestions":"47302"},{"ruleId":"45357","severity":2,"message":"45358","line":1778,"column":27,"nodeType":"45359","messageId":"45360","endLine":1778,"endColumn":30,"suggestions":"47303"},{"ruleId":"45357","severity":2,"message":"45358","line":1787,"column":16,"nodeType":"45359","messageId":"45360","endLine":1787,"endColumn":19,"suggestions":"47304"},{"ruleId":"45357","severity":2,"message":"45358","line":1802,"column":40,"nodeType":"45359","messageId":"45360","endLine":1802,"endColumn":43,"suggestions":"47305"},{"ruleId":"45357","severity":2,"message":"45358","line":1802,"column":55,"nodeType":"45359","messageId":"45360","endLine":1802,"endColumn":58,"suggestions":"47306"},{"ruleId":"45357","severity":2,"message":"45358","line":1810,"column":29,"nodeType":"45359","messageId":"45360","endLine":1810,"endColumn":32,"suggestions":"47307"},{"ruleId":"45357","severity":2,"message":"45358","line":1839,"column":16,"nodeType":"45359","messageId":"45360","endLine":1839,"endColumn":19,"suggestions":"47308"},{"ruleId":"45357","severity":2,"message":"45358","line":1847,"column":38,"nodeType":"45359","messageId":"45360","endLine":1847,"endColumn":41,"suggestions":"47309"},{"ruleId":"45357","severity":2,"message":"45358","line":1847,"column":53,"nodeType":"45359","messageId":"45360","endLine":1847,"endColumn":56,"suggestions":"47310"},{"ruleId":"45357","severity":2,"message":"45358","line":1854,"column":27,"nodeType":"45359","messageId":"45360","endLine":1854,"endColumn":30,"suggestions":"47311"},{"ruleId":"45357","severity":2,"message":"45358","line":1863,"column":16,"nodeType":"45359","messageId":"45360","endLine":1863,"endColumn":19,"suggestions":"47312"},{"ruleId":"45357","severity":2,"message":"45358","line":1871,"column":38,"nodeType":"45359","messageId":"45360","endLine":1871,"endColumn":41,"suggestions":"47313"},{"ruleId":"45357","severity":2,"message":"45358","line":1871,"column":53,"nodeType":"45359","messageId":"45360","endLine":1871,"endColumn":56,"suggestions":"47314"},{"ruleId":"45357","severity":2,"message":"45358","line":1878,"column":27,"nodeType":"45359","messageId":"45360","endLine":1878,"endColumn":30,"suggestions":"47315"},{"ruleId":"45357","severity":2,"message":"45358","line":1894,"column":16,"nodeType":"45359","messageId":"45360","endLine":1894,"endColumn":19,"suggestions":"47316"},{"ruleId":"45357","severity":2,"message":"45358","line":1904,"column":38,"nodeType":"45359","messageId":"45360","endLine":1904,"endColumn":41,"suggestions":"47317"},{"ruleId":"45357","severity":2,"message":"45358","line":1904,"column":53,"nodeType":"45359","messageId":"45360","endLine":1904,"endColumn":56,"suggestions":"47318"},{"ruleId":"45357","severity":2,"message":"45358","line":1911,"column":27,"nodeType":"45359","messageId":"45360","endLine":1911,"endColumn":30,"suggestions":"47319"},{"ruleId":"45357","severity":2,"message":"45358","line":1949,"column":16,"nodeType":"45359","messageId":"45360","endLine":1949,"endColumn":19,"suggestions":"47320"},{"ruleId":"45357","severity":2,"message":"45358","line":1969,"column":38,"nodeType":"45359","messageId":"45360","endLine":1969,"endColumn":41,"suggestions":"47321"},{"ruleId":"45357","severity":2,"message":"45358","line":1969,"column":53,"nodeType":"45359","messageId":"45360","endLine":1969,"endColumn":56,"suggestions":"47322"},{"ruleId":"45357","severity":2,"message":"45358","line":1976,"column":27,"nodeType":"45359","messageId":"45360","endLine":1976,"endColumn":30,"suggestions":"47323"},{"ruleId":"45357","severity":2,"message":"45358","line":2078,"column":16,"nodeType":"45359","messageId":"45360","endLine":2078,"endColumn":19,"suggestions":"47324"},{"ruleId":"45357","severity":2,"message":"45358","line":2094,"column":38,"nodeType":"45359","messageId":"45360","endLine":2094,"endColumn":41,"suggestions":"47325"},{"ruleId":"45357","severity":2,"message":"45358","line":2094,"column":53,"nodeType":"45359","messageId":"45360","endLine":2094,"endColumn":56,"suggestions":"47326"},{"ruleId":"45357","severity":2,"message":"45358","line":2101,"column":27,"nodeType":"45359","messageId":"45360","endLine":2101,"endColumn":30,"suggestions":"47327"},{"ruleId":"45357","severity":2,"message":"45358","line":2145,"column":38,"nodeType":"45359","messageId":"45360","endLine":2145,"endColumn":41,"suggestions":"47328"},{"ruleId":"45357","severity":2,"message":"45358","line":2152,"column":27,"nodeType":"45359","messageId":"45360","endLine":2152,"endColumn":30,"suggestions":"47329"},{"ruleId":"45357","severity":2,"message":"45358","line":2180,"column":16,"nodeType":"45359","messageId":"45360","endLine":2180,"endColumn":19,"suggestions":"47330"},{"ruleId":"45357","severity":2,"message":"45358","line":2198,"column":38,"nodeType":"45359","messageId":"45360","endLine":2198,"endColumn":41,"suggestions":"47331"},{"ruleId":"45357","severity":2,"message":"45358","line":2198,"column":53,"nodeType":"45359","messageId":"45360","endLine":2198,"endColumn":56,"suggestions":"47332"},{"ruleId":"45357","severity":2,"message":"45358","line":2205,"column":27,"nodeType":"45359","messageId":"45360","endLine":2205,"endColumn":30,"suggestions":"47333"},{"ruleId":"45357","severity":2,"message":"45358","line":2224,"column":16,"nodeType":"45359","messageId":"45360","endLine":2224,"endColumn":19,"suggestions":"47334"},{"ruleId":"45357","severity":2,"message":"45358","line":2240,"column":38,"nodeType":"45359","messageId":"45360","endLine":2240,"endColumn":41,"suggestions":"47335"},{"ruleId":"45357","severity":2,"message":"45358","line":2240,"column":53,"nodeType":"45359","messageId":"45360","endLine":2240,"endColumn":56,"suggestions":"47336"},{"ruleId":"45357","severity":2,"message":"45358","line":2247,"column":27,"nodeType":"45359","messageId":"45360","endLine":2247,"endColumn":30,"suggestions":"47337"},{"ruleId":"45357","severity":2,"message":"45358","line":2265,"column":23,"nodeType":"45359","messageId":"45360","endLine":2265,"endColumn":26,"suggestions":"47338"},{"ruleId":"45357","severity":2,"message":"45358","line":2269,"column":38,"nodeType":"45359","messageId":"45360","endLine":2269,"endColumn":41,"suggestions":"47339"},{"ruleId":"45357","severity":2,"message":"45358","line":2269,"column":53,"nodeType":"45359","messageId":"45360","endLine":2269,"endColumn":56,"suggestions":"47340"},{"ruleId":"45357","severity":2,"message":"45358","line":2276,"column":27,"nodeType":"45359","messageId":"45360","endLine":2276,"endColumn":30,"suggestions":"47341"},{"ruleId":"45357","severity":2,"message":"45358","line":2282,"column":21,"nodeType":"45359","messageId":"45360","endLine":2282,"endColumn":24,"suggestions":"47342"},{"ruleId":"45357","severity":2,"message":"45358","line":2287,"column":38,"nodeType":"45359","messageId":"45360","endLine":2287,"endColumn":41,"suggestions":"47343"},{"ruleId":"45357","severity":2,"message":"45358","line":2287,"column":53,"nodeType":"45359","messageId":"45360","endLine":2287,"endColumn":56,"suggestions":"47344"},{"ruleId":"45357","severity":2,"message":"45358","line":2294,"column":27,"nodeType":"45359","messageId":"45360","endLine":2294,"endColumn":30,"suggestions":"47345"},{"ruleId":"45357","severity":2,"message":"45358","line":2315,"column":27,"nodeType":"45359","messageId":"45360","endLine":2315,"endColumn":30,"suggestions":"47346"},{"ruleId":"45357","severity":2,"message":"45358","line":2319,"column":44,"nodeType":"45359","messageId":"45360","endLine":2319,"endColumn":47,"suggestions":"47347"},{"ruleId":"45357","severity":2,"message":"45358","line":2344,"column":27,"nodeType":"45359","messageId":"45360","endLine":2344,"endColumn":30,"suggestions":"47348"},{"ruleId":"45357","severity":2,"message":"45358","line":2355,"column":16,"nodeType":"45359","messageId":"45360","endLine":2355,"endColumn":19,"suggestions":"47349"},{"ruleId":"45357","severity":2,"message":"45358","line":2368,"column":38,"nodeType":"45359","messageId":"45360","endLine":2368,"endColumn":41,"suggestions":"47350"},{"ruleId":"45357","severity":2,"message":"45358","line":2368,"column":53,"nodeType":"45359","messageId":"45360","endLine":2368,"endColumn":56,"suggestions":"47351"},{"ruleId":"45357","severity":2,"message":"45358","line":2375,"column":27,"nodeType":"45359","messageId":"45360","endLine":2375,"endColumn":30,"suggestions":"47352"},{"ruleId":"45357","severity":2,"message":"45358","line":2442,"column":38,"nodeType":"45359","messageId":"45360","endLine":2442,"endColumn":41,"suggestions":"47353"},{"ruleId":"45357","severity":2,"message":"45358","line":2442,"column":53,"nodeType":"45359","messageId":"45360","endLine":2442,"endColumn":56,"suggestions":"47354"},{"ruleId":"45357","severity":2,"message":"45358","line":2442,"column":66,"nodeType":"45359","messageId":"45360","endLine":2442,"endColumn":69,"suggestions":"47355"},{"ruleId":"45357","severity":2,"message":"45358","line":2449,"column":59,"nodeType":"45359","messageId":"45360","endLine":2449,"endColumn":62,"suggestions":"47356"},{"ruleId":"45357","severity":2,"message":"45358","line":2466,"column":16,"nodeType":"45359","messageId":"45360","endLine":2466,"endColumn":19,"suggestions":"47357"},{"ruleId":"45357","severity":2,"message":"45358","line":2475,"column":38,"nodeType":"45359","messageId":"45360","endLine":2475,"endColumn":41,"suggestions":"47358"},{"ruleId":"45357","severity":2,"message":"45358","line":2475,"column":53,"nodeType":"45359","messageId":"45360","endLine":2475,"endColumn":56,"suggestions":"47359"},{"ruleId":"45357","severity":2,"message":"45358","line":2482,"column":27,"nodeType":"45359","messageId":"45360","endLine":2482,"endColumn":30,"suggestions":"47360"},{"ruleId":"45357","severity":2,"message":"45358","line":2491,"column":16,"nodeType":"45359","messageId":"45360","endLine":2491,"endColumn":19,"suggestions":"47361"},{"ruleId":"45357","severity":2,"message":"45358","line":2500,"column":38,"nodeType":"45359","messageId":"45360","endLine":2500,"endColumn":41,"suggestions":"47362"},{"ruleId":"45357","severity":2,"message":"45358","line":2500,"column":53,"nodeType":"45359","messageId":"45360","endLine":2500,"endColumn":56,"suggestions":"47363"},{"ruleId":"45357","severity":2,"message":"45358","line":2507,"column":27,"nodeType":"45359","messageId":"45360","endLine":2507,"endColumn":30,"suggestions":"47364"},{"ruleId":"45357","severity":2,"message":"45358","line":2528,"column":27,"nodeType":"45359","messageId":"45360","endLine":2528,"endColumn":30,"suggestions":"47365"},{"ruleId":"45357","severity":2,"message":"45358","line":2533,"column":26,"nodeType":"45359","messageId":"45360","endLine":2533,"endColumn":29,"suggestions":"47366"},{"ruleId":"45357","severity":2,"message":"45358","line":2557,"column":16,"nodeType":"45359","messageId":"45360","endLine":2557,"endColumn":19,"suggestions":"47367"},{"ruleId":"45357","severity":2,"message":"45358","line":2569,"column":38,"nodeType":"45359","messageId":"45360","endLine":2569,"endColumn":41,"suggestions":"47368"},{"ruleId":"45357","severity":2,"message":"45358","line":2569,"column":53,"nodeType":"45359","messageId":"45360","endLine":2569,"endColumn":56,"suggestions":"47369"},{"ruleId":"45357","severity":2,"message":"45358","line":2579,"column":27,"nodeType":"45359","messageId":"45360","endLine":2579,"endColumn":30,"suggestions":"47370"},{"ruleId":"45357","severity":2,"message":"45358","line":2597,"column":16,"nodeType":"45359","messageId":"45360","endLine":2597,"endColumn":19,"suggestions":"47371"},{"ruleId":"45357","severity":2,"message":"45358","line":2606,"column":38,"nodeType":"45359","messageId":"45360","endLine":2606,"endColumn":41,"suggestions":"47372"},{"ruleId":"45357","severity":2,"message":"45358","line":2606,"column":53,"nodeType":"45359","messageId":"45360","endLine":2606,"endColumn":56,"suggestions":"47373"},{"ruleId":"45357","severity":2,"message":"45358","line":2613,"column":27,"nodeType":"45359","messageId":"45360","endLine":2613,"endColumn":30,"suggestions":"47374"},{"ruleId":"45357","severity":2,"message":"45358","line":2627,"column":16,"nodeType":"45359","messageId":"45360","endLine":2627,"endColumn":19,"suggestions":"47375"},{"ruleId":"45357","severity":2,"message":"45358","line":2640,"column":38,"nodeType":"45359","messageId":"45360","endLine":2640,"endColumn":41,"suggestions":"47376"},{"ruleId":"45357","severity":2,"message":"45358","line":2640,"column":53,"nodeType":"45359","messageId":"45360","endLine":2640,"endColumn":56,"suggestions":"47377"},{"ruleId":"45357","severity":2,"message":"45358","line":2647,"column":27,"nodeType":"45359","messageId":"45360","endLine":2647,"endColumn":30,"suggestions":"47378"},{"ruleId":"45357","severity":2,"message":"45358","line":2656,"column":16,"nodeType":"45359","messageId":"45360","endLine":2656,"endColumn":19,"suggestions":"47379"},{"ruleId":"45357","severity":2,"message":"45358","line":2670,"column":38,"nodeType":"45359","messageId":"45360","endLine":2670,"endColumn":41,"suggestions":"47380"},{"ruleId":"45357","severity":2,"message":"45358","line":2670,"column":53,"nodeType":"45359","messageId":"45360","endLine":2670,"endColumn":56,"suggestions":"47381"},{"ruleId":"45357","severity":2,"message":"45358","line":2677,"column":27,"nodeType":"45359","messageId":"45360","endLine":2677,"endColumn":30,"suggestions":"47382"},{"ruleId":"45357","severity":2,"message":"45358","line":2694,"column":16,"nodeType":"45359","messageId":"45360","endLine":2694,"endColumn":19,"suggestions":"47383"},{"ruleId":"45357","severity":2,"message":"45358","line":2711,"column":38,"nodeType":"45359","messageId":"45360","endLine":2711,"endColumn":41,"suggestions":"47384"},{"ruleId":"45357","severity":2,"message":"45358","line":2711,"column":53,"nodeType":"45359","messageId":"45360","endLine":2711,"endColumn":56,"suggestions":"47385"},{"ruleId":"45357","severity":2,"message":"45358","line":2733,"column":27,"nodeType":"45359","messageId":"45360","endLine":2733,"endColumn":30,"suggestions":"47386"},{"ruleId":"45357","severity":2,"message":"45358","line":2737,"column":44,"nodeType":"45359","messageId":"45360","endLine":2737,"endColumn":47,"suggestions":"47387"},{"ruleId":"45357","severity":2,"message":"45358","line":2764,"column":27,"nodeType":"45359","messageId":"45360","endLine":2764,"endColumn":30,"suggestions":"47388"},{"ruleId":"45357","severity":2,"message":"45358","line":2793,"column":27,"nodeType":"45359","messageId":"45360","endLine":2793,"endColumn":30,"suggestions":"47389"},{"ruleId":"45357","severity":2,"message":"45358","line":2817,"column":27,"nodeType":"45359","messageId":"45360","endLine":2817,"endColumn":30,"suggestions":"47390"},{"ruleId":"45357","severity":2,"message":"45358","line":2841,"column":27,"nodeType":"45359","messageId":"45360","endLine":2841,"endColumn":30,"suggestions":"47391"},{"ruleId":"45357","severity":2,"message":"45358","line":2848,"column":44,"nodeType":"45359","messageId":"45360","endLine":2848,"endColumn":47,"suggestions":"47392"},{"ruleId":"45357","severity":2,"message":"45358","line":2873,"column":27,"nodeType":"45359","messageId":"45360","endLine":2873,"endColumn":30,"suggestions":"47393"},{"ruleId":"45357","severity":2,"message":"45358","line":2882,"column":16,"nodeType":"45359","messageId":"45360","endLine":2882,"endColumn":19,"suggestions":"47394"},{"ruleId":"45357","severity":2,"message":"45358","line":2893,"column":38,"nodeType":"45359","messageId":"45360","endLine":2893,"endColumn":41,"suggestions":"47395"},{"ruleId":"45357","severity":2,"message":"45358","line":2893,"column":53,"nodeType":"45359","messageId":"45360","endLine":2893,"endColumn":56,"suggestions":"47396"},{"ruleId":"45357","severity":2,"message":"45358","line":2902,"column":27,"nodeType":"45359","messageId":"45360","endLine":2902,"endColumn":30,"suggestions":"47397"},{"ruleId":"45357","severity":2,"message":"45358","line":2911,"column":16,"nodeType":"45359","messageId":"45360","endLine":2911,"endColumn":19,"suggestions":"47398"},{"ruleId":"45357","severity":2,"message":"45358","line":2921,"column":38,"nodeType":"45359","messageId":"45360","endLine":2921,"endColumn":41,"suggestions":"47399"},{"ruleId":"45357","severity":2,"message":"45358","line":2921,"column":53,"nodeType":"45359","messageId":"45360","endLine":2921,"endColumn":56,"suggestions":"47400"},{"ruleId":"45357","severity":2,"message":"45358","line":2937,"column":27,"nodeType":"45359","messageId":"45360","endLine":2937,"endColumn":30,"suggestions":"47401"},{"ruleId":"45357","severity":2,"message":"45358","line":2962,"column":27,"nodeType":"45359","messageId":"45360","endLine":2962,"endColumn":30,"suggestions":"47402"},{"ruleId":"45357","severity":2,"message":"45358","line":2966,"column":44,"nodeType":"45359","messageId":"45360","endLine":2966,"endColumn":47,"suggestions":"47403"},{"ruleId":"45357","severity":2,"message":"45358","line":2989,"column":27,"nodeType":"45359","messageId":"45360","endLine":2989,"endColumn":30,"suggestions":"47404"},{"ruleId":"45357","severity":2,"message":"45358","line":2993,"column":44,"nodeType":"45359","messageId":"45360","endLine":2993,"endColumn":47,"suggestions":"47405"},{"ruleId":"45357","severity":2,"message":"45358","line":3000,"column":16,"nodeType":"45359","messageId":"45360","endLine":3000,"endColumn":19,"suggestions":"47406"},{"ruleId":"45357","severity":2,"message":"45358","line":3010,"column":38,"nodeType":"45359","messageId":"45360","endLine":3010,"endColumn":41,"suggestions":"47407"},{"ruleId":"45357","severity":2,"message":"45358","line":3010,"column":53,"nodeType":"45359","messageId":"45360","endLine":3010,"endColumn":56,"suggestions":"47408"},{"ruleId":"45357","severity":2,"message":"45358","line":3028,"column":27,"nodeType":"45359","messageId":"45360","endLine":3028,"endColumn":30,"suggestions":"47409"},{"ruleId":"45357","severity":2,"message":"45358","line":3032,"column":44,"nodeType":"45359","messageId":"45360","endLine":3032,"endColumn":47,"suggestions":"47410"},{"ruleId":"45357","severity":2,"message":"45358","line":3041,"column":16,"nodeType":"45359","messageId":"45360","endLine":3041,"endColumn":19,"suggestions":"47411"},{"ruleId":"45357","severity":2,"message":"45358","line":3053,"column":38,"nodeType":"45359","messageId":"45360","endLine":3053,"endColumn":41,"suggestions":"47412"},{"ruleId":"45357","severity":2,"message":"45358","line":3053,"column":53,"nodeType":"45359","messageId":"45360","endLine":3053,"endColumn":56,"suggestions":"47413"},{"ruleId":"45357","severity":2,"message":"45358","line":3070,"column":27,"nodeType":"45359","messageId":"45360","endLine":3070,"endColumn":30,"suggestions":"47414"},{"ruleId":"45357","severity":2,"message":"45358","line":3074,"column":44,"nodeType":"45359","messageId":"45360","endLine":3074,"endColumn":47,"suggestions":"47415"},{"ruleId":"45357","severity":2,"message":"45358","line":3081,"column":16,"nodeType":"45359","messageId":"45360","endLine":3081,"endColumn":19,"suggestions":"47416"},{"ruleId":"45357","severity":2,"message":"45358","line":3091,"column":38,"nodeType":"45359","messageId":"45360","endLine":3091,"endColumn":41,"suggestions":"47417"},{"ruleId":"45357","severity":2,"message":"45358","line":3091,"column":53,"nodeType":"45359","messageId":"45360","endLine":3091,"endColumn":56,"suggestions":"47418"},{"ruleId":"45357","severity":2,"message":"45358","line":3103,"column":27,"nodeType":"45359","messageId":"45360","endLine":3103,"endColumn":30,"suggestions":"47419"},{"ruleId":"45357","severity":2,"message":"45358","line":3107,"column":44,"nodeType":"45359","messageId":"45360","endLine":3107,"endColumn":47,"suggestions":"47420"},{"ruleId":"45357","severity":2,"message":"45358","line":104,"column":43,"nodeType":"45359","messageId":"45360","endLine":104,"endColumn":46,"suggestions":"47421"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":17,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":20,"suggestions":"47422","suppressions":"47423"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":27,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":30,"suggestions":"47424","suppressions":"47425"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":17,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":20,"suggestions":"47426","suppressions":"47427"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":27,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":30,"suggestions":"47428","suppressions":"47429"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":18,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":21,"suggestions":"47430","suppressions":"47431"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":28,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":31,"suggestions":"47432","suppressions":"47433"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":18,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":21,"suggestions":"47434","suppressions":"47435"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":28,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":31,"suggestions":"47436","suppressions":"47437"},{"ruleId":"45357","severity":2,"message":"45358","line":52,"column":21,"nodeType":"45359","messageId":"45360","endLine":52,"endColumn":24,"suggestions":"47438","suppressions":"47439"},{"ruleId":"45357","severity":2,"message":"45358","line":162,"column":20,"nodeType":"45359","messageId":"45360","endLine":162,"endColumn":23,"suggestions":"47440","suppressions":"47441"},{"ruleId":"45357","severity":2,"message":"45358","line":263,"column":20,"nodeType":"45359","messageId":"45360","endLine":263,"endColumn":23,"suggestions":"47442","suppressions":"47443"},{"ruleId":"45357","severity":2,"message":"45358","line":364,"column":20,"nodeType":"45359","messageId":"45360","endLine":364,"endColumn":23,"suggestions":"47444","suppressions":"47445"},{"ruleId":"45357","severity":2,"message":"45358","line":25,"column":18,"nodeType":"45359","messageId":"45360","endLine":25,"endColumn":21,"suggestions":"47446"},{"ruleId":"45357","severity":2,"message":"45358","line":27,"column":17,"nodeType":"45359","messageId":"45360","endLine":27,"endColumn":20,"suggestions":"47447"},{"ruleId":"45357","severity":2,"message":"45358","line":27,"column":27,"nodeType":"45359","messageId":"45360","endLine":27,"endColumn":30,"suggestions":"47448"},{"ruleId":"45357","severity":2,"message":"45358","line":28,"column":17,"nodeType":"45359","messageId":"45360","endLine":28,"endColumn":20,"suggestions":"47449"},{"ruleId":"45357","severity":2,"message":"45358","line":28,"column":27,"nodeType":"45359","messageId":"45360","endLine":28,"endColumn":30,"suggestions":"47450"},{"ruleId":"45357","severity":2,"message":"45358","line":29,"column":18,"nodeType":"45359","messageId":"45360","endLine":29,"endColumn":21,"suggestions":"47451"},{"ruleId":"45357","severity":2,"message":"45358","line":29,"column":28,"nodeType":"45359","messageId":"45360","endLine":29,"endColumn":31,"suggestions":"47452"},{"ruleId":"45357","severity":2,"message":"45358","line":30,"column":18,"nodeType":"45359","messageId":"45360","endLine":30,"endColumn":21,"suggestions":"47453"},{"ruleId":"45357","severity":2,"message":"45358","line":30,"column":28,"nodeType":"45359","messageId":"45360","endLine":30,"endColumn":31,"suggestions":"47454"},{"ruleId":"45357","severity":2,"message":"45358","line":35,"column":27,"nodeType":"45359","messageId":"45360","endLine":35,"endColumn":30,"suggestions":"47455"},{"ruleId":"45357","severity":2,"message":"45358","line":61,"column":21,"nodeType":"45359","messageId":"45360","endLine":61,"endColumn":24,"suggestions":"47456"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":43,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":46,"suggestions":"47457"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":47,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":50,"suggestions":"47458"},{"ruleId":"45357","severity":2,"message":"45358","line":115,"column":29,"nodeType":"45359","messageId":"45360","endLine":115,"endColumn":32,"suggestions":"47459"},{"ruleId":"45357","severity":2,"message":"45358","line":146,"column":51,"nodeType":"45359","messageId":"45360","endLine":146,"endColumn":54,"suggestions":"47460"},{"ruleId":"45357","severity":2,"message":"45358","line":162,"column":47,"nodeType":"45359","messageId":"45360","endLine":162,"endColumn":50,"suggestions":"47461"},{"ruleId":"45357","severity":2,"message":"45358","line":166,"column":29,"nodeType":"45359","messageId":"45360","endLine":166,"endColumn":32,"suggestions":"47462"},{"ruleId":"45357","severity":2,"message":"45358","line":29,"column":18,"nodeType":"45359","messageId":"45360","endLine":29,"endColumn":21,"suggestions":"47463"},{"ruleId":"45357","severity":2,"message":"45358","line":31,"column":17,"nodeType":"45359","messageId":"45360","endLine":31,"endColumn":20,"suggestions":"47464"},{"ruleId":"45357","severity":2,"message":"45358","line":31,"column":27,"nodeType":"45359","messageId":"45360","endLine":31,"endColumn":30,"suggestions":"47465"},{"ruleId":"45357","severity":2,"message":"45358","line":32,"column":17,"nodeType":"45359","messageId":"45360","endLine":32,"endColumn":20,"suggestions":"47466"},{"ruleId":"45357","severity":2,"message":"45358","line":32,"column":27,"nodeType":"45359","messageId":"45360","endLine":32,"endColumn":30,"suggestions":"47467"},{"ruleId":"45357","severity":2,"message":"45358","line":33,"column":18,"nodeType":"45359","messageId":"45360","endLine":33,"endColumn":21,"suggestions":"47468"},{"ruleId":"45357","severity":2,"message":"45358","line":33,"column":28,"nodeType":"45359","messageId":"45360","endLine":33,"endColumn":31,"suggestions":"47469"},{"ruleId":"45357","severity":2,"message":"45358","line":34,"column":18,"nodeType":"45359","messageId":"45360","endLine":34,"endColumn":21,"suggestions":"47470"},{"ruleId":"45357","severity":2,"message":"45358","line":34,"column":28,"nodeType":"45359","messageId":"45360","endLine":34,"endColumn":31,"suggestions":"47471"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":27,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":30,"suggestions":"47472"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":21,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":24,"suggestions":"47473"},{"ruleId":"45357","severity":2,"message":"45358","line":108,"column":38,"nodeType":"45359","messageId":"45360","endLine":108,"endColumn":41,"suggestions":"47474"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":38,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":41,"suggestions":"47475"},{"ruleId":"45357","severity":2,"message":"45358","line":160,"column":38,"nodeType":"45359","messageId":"45360","endLine":160,"endColumn":41,"suggestions":"47476"},{"ruleId":"45357","severity":2,"message":"45358","line":184,"column":38,"nodeType":"45359","messageId":"45360","endLine":184,"endColumn":41,"suggestions":"47477"},{"ruleId":"45357","severity":2,"message":"45358","line":224,"column":38,"nodeType":"45359","messageId":"45360","endLine":224,"endColumn":41,"suggestions":"47478"},{"ruleId":"45357","severity":2,"message":"45358","line":260,"column":38,"nodeType":"45359","messageId":"45360","endLine":260,"endColumn":41,"suggestions":"47479"},{"ruleId":"45357","severity":2,"message":"45358","line":284,"column":38,"nodeType":"45359","messageId":"45360","endLine":284,"endColumn":41,"suggestions":"47480"},{"ruleId":"45357","severity":2,"message":"45358","line":313,"column":40,"nodeType":"45359","messageId":"45360","endLine":313,"endColumn":43,"suggestions":"47481"},{"ruleId":"45357","severity":2,"message":"45358","line":351,"column":40,"nodeType":"45359","messageId":"45360","endLine":351,"endColumn":43,"suggestions":"47482"},{"ruleId":"45357","severity":2,"message":"45358","line":378,"column":40,"nodeType":"45359","messageId":"45360","endLine":378,"endColumn":43,"suggestions":"47483"},{"ruleId":"45357","severity":2,"message":"45358","line":414,"column":42,"nodeType":"45359","messageId":"45360","endLine":414,"endColumn":45,"suggestions":"47484"},{"ruleId":"45357","severity":2,"message":"45358","line":448,"column":38,"nodeType":"45359","messageId":"45360","endLine":448,"endColumn":41,"suggestions":"47485"},{"ruleId":"45357","severity":2,"message":"45358","line":482,"column":42,"nodeType":"45359","messageId":"45360","endLine":482,"endColumn":45,"suggestions":"47486"},{"ruleId":"45357","severity":2,"message":"45358","line":516,"column":38,"nodeType":"45359","messageId":"45360","endLine":516,"endColumn":41,"suggestions":"47487"},{"ruleId":"45357","severity":2,"message":"45358","line":543,"column":38,"nodeType":"45359","messageId":"45360","endLine":543,"endColumn":41,"suggestions":"47488"},{"ruleId":"45357","severity":2,"message":"45358","line":589,"column":38,"nodeType":"45359","messageId":"45360","endLine":589,"endColumn":41,"suggestions":"47489"},{"ruleId":"45357","severity":2,"message":"45358","line":620,"column":38,"nodeType":"45359","messageId":"45360","endLine":620,"endColumn":41,"suggestions":"47490"},{"ruleId":"45357","severity":2,"message":"45358","line":651,"column":38,"nodeType":"45359","messageId":"45360","endLine":651,"endColumn":41,"suggestions":"47491"},{"ruleId":"45357","severity":2,"message":"45358","line":688,"column":38,"nodeType":"45359","messageId":"45360","endLine":688,"endColumn":41,"suggestions":"47492"},{"ruleId":"45357","severity":2,"message":"45358","line":747,"column":38,"nodeType":"45359","messageId":"45360","endLine":747,"endColumn":41,"suggestions":"47493"},{"ruleId":"45357","severity":2,"message":"45358","line":771,"column":38,"nodeType":"45359","messageId":"45360","endLine":771,"endColumn":41,"suggestions":"47494"},{"ruleId":"45357","severity":2,"message":"45358","line":817,"column":53,"nodeType":"45359","messageId":"45360","endLine":817,"endColumn":56,"suggestions":"47495"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":18,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":21,"suggestions":"47496"},{"ruleId":"45357","severity":2,"message":"45358","line":24,"column":17,"nodeType":"45359","messageId":"45360","endLine":24,"endColumn":20,"suggestions":"47497"},{"ruleId":"45357","severity":2,"message":"45358","line":24,"column":27,"nodeType":"45359","messageId":"45360","endLine":24,"endColumn":30,"suggestions":"47498"},{"ruleId":"45357","severity":2,"message":"45358","line":25,"column":17,"nodeType":"45359","messageId":"45360","endLine":25,"endColumn":20,"suggestions":"47499"},{"ruleId":"45357","severity":2,"message":"45358","line":25,"column":27,"nodeType":"45359","messageId":"45360","endLine":25,"endColumn":30,"suggestions":"47500"},{"ruleId":"45357","severity":2,"message":"45358","line":26,"column":18,"nodeType":"45359","messageId":"45360","endLine":26,"endColumn":21,"suggestions":"47501"},{"ruleId":"45357","severity":2,"message":"45358","line":26,"column":28,"nodeType":"45359","messageId":"45360","endLine":26,"endColumn":31,"suggestions":"47502"},{"ruleId":"45357","severity":2,"message":"45358","line":27,"column":18,"nodeType":"45359","messageId":"45360","endLine":27,"endColumn":21,"suggestions":"47503"},{"ruleId":"45357","severity":2,"message":"45358","line":27,"column":28,"nodeType":"45359","messageId":"45360","endLine":27,"endColumn":31,"suggestions":"47504"},{"ruleId":"45357","severity":2,"message":"45358","line":476,"column":38,"nodeType":"45359","messageId":"45360","endLine":476,"endColumn":41,"suggestions":"47505"},{"ruleId":"45357","severity":2,"message":"45358","line":487,"column":27,"nodeType":"45359","messageId":"45360","endLine":487,"endColumn":30,"suggestions":"47506"},{"ruleId":"45357","severity":2,"message":"45358","line":518,"column":38,"nodeType":"45359","messageId":"45360","endLine":518,"endColumn":41,"suggestions":"47507"},{"ruleId":"45357","severity":2,"message":"45358","line":526,"column":27,"nodeType":"45359","messageId":"45360","endLine":526,"endColumn":30,"suggestions":"47508"},{"ruleId":"45357","severity":2,"message":"45358","line":552,"column":38,"nodeType":"45359","messageId":"45360","endLine":552,"endColumn":41,"suggestions":"47509"},{"ruleId":"45357","severity":2,"message":"45358","line":563,"column":27,"nodeType":"45359","messageId":"45360","endLine":563,"endColumn":30,"suggestions":"47510"},{"ruleId":"45357","severity":2,"message":"45358","line":590,"column":38,"nodeType":"45359","messageId":"45360","endLine":590,"endColumn":41,"suggestions":"47511"},{"ruleId":"45357","severity":2,"message":"45358","line":601,"column":27,"nodeType":"45359","messageId":"45360","endLine":601,"endColumn":30,"suggestions":"47512"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":61,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":64,"suggestions":"47513"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":57,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":60,"suggestions":"47514"},{"ruleId":"45357","severity":2,"message":"45358","line":131,"column":43,"nodeType":"45359","messageId":"45360","endLine":131,"endColumn":46,"suggestions":"47515"},{"ruleId":"45357","severity":2,"message":"45358","line":174,"column":43,"nodeType":"45359","messageId":"45360","endLine":174,"endColumn":46,"suggestions":"47516"},{"ruleId":"45357","severity":2,"message":"45358","line":214,"column":43,"nodeType":"45359","messageId":"45360","endLine":214,"endColumn":46,"suggestions":"47517"},{"ruleId":"45357","severity":2,"message":"45358","line":239,"column":43,"nodeType":"45359","messageId":"45360","endLine":239,"endColumn":46,"suggestions":"47518"},{"ruleId":"45357","severity":2,"message":"45358","line":295,"column":43,"nodeType":"45359","messageId":"45360","endLine":295,"endColumn":46,"suggestions":"47519"},{"ruleId":"45357","severity":2,"message":"45358","line":354,"column":43,"nodeType":"45359","messageId":"45360","endLine":354,"endColumn":46,"suggestions":"47520"},{"ruleId":"45357","severity":2,"message":"45358","line":377,"column":53,"nodeType":"45359","messageId":"45360","endLine":377,"endColumn":56,"suggestions":"47521"},{"ruleId":"45357","severity":2,"message":"45358","line":437,"column":43,"nodeType":"45359","messageId":"45360","endLine":437,"endColumn":46,"suggestions":"47522"},{"ruleId":"45357","severity":2,"message":"45358","line":59,"column":43,"nodeType":"45359","messageId":"45360","endLine":59,"endColumn":46,"suggestions":"47523"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":43,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":46,"suggestions":"47524"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":43,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":46,"suggestions":"47525"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":43,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":46,"suggestions":"47526"},{"ruleId":"45357","severity":2,"message":"45358","line":21,"column":71,"nodeType":"45359","messageId":"45360","endLine":21,"endColumn":74,"suggestions":"47527"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":34,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":37,"suggestions":"47528"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":45,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":48,"suggestions":"47529"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":46,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":49,"suggestions":"47530"},{"ruleId":"45357","severity":2,"message":"45358","line":236,"column":90,"nodeType":"45359","messageId":"45360","endLine":236,"endColumn":93,"suggestions":"47531"},{"ruleId":"45357","severity":2,"message":"45358","line":237,"column":85,"nodeType":"45359","messageId":"45360","endLine":237,"endColumn":88,"suggestions":"47532"},{"ruleId":"45357","severity":2,"message":"45358","line":238,"column":87,"nodeType":"45359","messageId":"45360","endLine":238,"endColumn":90,"suggestions":"47533"},{"ruleId":"45357","severity":2,"message":"45358","line":240,"column":72,"nodeType":"45359","messageId":"45360","endLine":240,"endColumn":75,"suggestions":"47534"},{"ruleId":"45357","severity":2,"message":"45358","line":242,"column":94,"nodeType":"45359","messageId":"45360","endLine":242,"endColumn":97,"suggestions":"47535"},{"ruleId":"45357","severity":2,"message":"45358","line":33,"column":45,"nodeType":"45359","messageId":"45360","endLine":33,"endColumn":48,"suggestions":"47536"},{"ruleId":"45357","severity":2,"message":"45358","line":55,"column":12,"nodeType":"45359","messageId":"45360","endLine":55,"endColumn":15,"suggestions":"47537"},{"ruleId":"45357","severity":2,"message":"45358","line":76,"column":12,"nodeType":"45359","messageId":"45360","endLine":76,"endColumn":15,"suggestions":"47538"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":58,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":61,"suggestions":"47539"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":59,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":62,"suggestions":"47540"},{"ruleId":"45357","severity":2,"message":"45358","line":75,"column":64,"nodeType":"45359","messageId":"45360","endLine":75,"endColumn":67,"suggestions":"47541"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":63,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":66,"suggestions":"47542"},{"ruleId":"45357","severity":2,"message":"45358","line":83,"column":78,"nodeType":"45359","messageId":"45360","endLine":83,"endColumn":81,"suggestions":"47543"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":84,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":87,"suggestions":"47544"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":80,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":83,"suggestions":"47545"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":79,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":82,"suggestions":"47546"},{"ruleId":"45357","severity":2,"message":"45358","line":102,"column":68,"nodeType":"45359","messageId":"45360","endLine":102,"endColumn":71,"suggestions":"47547"},{"ruleId":"45357","severity":2,"message":"45358","line":106,"column":65,"nodeType":"45359","messageId":"45360","endLine":106,"endColumn":68,"suggestions":"47548"},{"ruleId":"45357","severity":2,"message":"45358","line":125,"column":10,"nodeType":"45359","messageId":"45360","endLine":125,"endColumn":13,"suggestions":"47549"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":10,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":13,"suggestions":"47550"},{"ruleId":"45357","severity":2,"message":"45358","line":142,"column":58,"nodeType":"45359","messageId":"45360","endLine":142,"endColumn":61,"suggestions":"47551"},{"ruleId":"45357","severity":2,"message":"45358","line":148,"column":59,"nodeType":"45359","messageId":"45360","endLine":148,"endColumn":62,"suggestions":"47552"},{"ruleId":"45357","severity":2,"message":"45358","line":162,"column":10,"nodeType":"45359","messageId":"45360","endLine":162,"endColumn":13,"suggestions":"47553"},{"ruleId":"45357","severity":2,"message":"45358","line":182,"column":10,"nodeType":"45359","messageId":"45360","endLine":182,"endColumn":13,"suggestions":"47554"},{"ruleId":"45357","severity":2,"message":"45358","line":34,"column":77,"nodeType":"45359","messageId":"45360","endLine":34,"endColumn":80,"suggestions":"47555"},{"ruleId":"45357","severity":2,"message":"45358","line":73,"column":13,"nodeType":"45359","messageId":"45360","endLine":73,"endColumn":16,"suggestions":"47556","suppressions":"47557"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":85,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":88,"suggestions":"47558","suppressions":"47559"},{"ruleId":"45357","severity":2,"message":"45358","line":101,"column":13,"nodeType":"45359","messageId":"45360","endLine":101,"endColumn":16,"suggestions":"47560","suppressions":"47561"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":44,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":47,"suggestions":"47562"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":58,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":61,"suggestions":"47563"},{"ruleId":"45357","severity":2,"message":"45358","line":166,"column":42,"nodeType":"45359","messageId":"45360","endLine":166,"endColumn":45,"suggestions":"47564"},{"ruleId":"45357","severity":2,"message":"45358","line":166,"column":65,"nodeType":"45359","messageId":"45360","endLine":166,"endColumn":68,"suggestions":"47565"},{"ruleId":"45357","severity":2,"message":"45358","line":168,"column":57,"nodeType":"45359","messageId":"45360","endLine":168,"endColumn":60,"suggestions":"47566"},{"ruleId":"45357","severity":2,"message":"45358","line":195,"column":42,"nodeType":"45359","messageId":"45360","endLine":195,"endColumn":45,"suggestions":"47567"},{"ruleId":"45357","severity":2,"message":"45358","line":196,"column":9,"nodeType":"45359","messageId":"45360","endLine":196,"endColumn":12,"suggestions":"47568"},{"ruleId":"45357","severity":2,"message":"45358","line":216,"column":24,"nodeType":"45359","messageId":"45360","endLine":216,"endColumn":27,"suggestions":"47569"},{"ruleId":"45357","severity":2,"message":"45358","line":330,"column":44,"nodeType":"45359","messageId":"45360","endLine":330,"endColumn":47,"suggestions":"47570"},{"ruleId":"45357","severity":2,"message":"45358","line":331,"column":9,"nodeType":"45359","messageId":"45360","endLine":331,"endColumn":12,"suggestions":"47571"},{"ruleId":"45357","severity":2,"message":"45358","line":31,"column":29,"nodeType":"45359","messageId":"45360","endLine":31,"endColumn":32,"suggestions":"47572"},{"ruleId":"45357","severity":2,"message":"45358","line":53,"column":29,"nodeType":"45359","messageId":"45360","endLine":53,"endColumn":32,"suggestions":"47573"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":26,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":29,"suggestions":"47574"},{"ruleId":"45357","severity":2,"message":"45358","line":83,"column":16,"nodeType":"45359","messageId":"45360","endLine":83,"endColumn":19,"suggestions":"47575"},{"ruleId":"45357","severity":2,"message":"45358","line":83,"column":46,"nodeType":"45359","messageId":"45360","endLine":83,"endColumn":49,"suggestions":"47576"},{"ruleId":"45357","severity":2,"message":"45358","line":55,"column":17,"nodeType":"45359","messageId":"45360","endLine":55,"endColumn":20,"suggestions":"47577"},{"ruleId":"45357","severity":2,"message":"45358","line":91,"column":17,"nodeType":"45359","messageId":"45360","endLine":91,"endColumn":20,"suggestions":"47578"},{"ruleId":"45357","severity":2,"message":"45358","line":124,"column":17,"nodeType":"45359","messageId":"45360","endLine":124,"endColumn":20,"suggestions":"47579"},{"ruleId":"45357","severity":2,"message":"45358","line":166,"column":17,"nodeType":"45359","messageId":"45360","endLine":166,"endColumn":20,"suggestions":"47580"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":32,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":35,"suggestions":"47581","suppressions":"47582"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":27,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":30,"suggestions":"47583","suppressions":"47584"},{"ruleId":"45357","severity":2,"message":"45358","line":46,"column":37,"nodeType":"45359","messageId":"45360","endLine":46,"endColumn":40,"suggestions":"47585"},{"ruleId":"45357","severity":2,"message":"45358","line":152,"column":43,"nodeType":"45359","messageId":"45360","endLine":152,"endColumn":46,"suggestions":"47586"},{"ruleId":"45357","severity":2,"message":"45358","line":171,"column":43,"nodeType":"45359","messageId":"45360","endLine":171,"endColumn":46,"suggestions":"47587"},{"ruleId":"45357","severity":2,"message":"45358","line":187,"column":52,"nodeType":"45359","messageId":"45360","endLine":187,"endColumn":55,"suggestions":"47588"},{"ruleId":"45357","severity":2,"message":"45358","line":200,"column":52,"nodeType":"45359","messageId":"45360","endLine":200,"endColumn":55,"suggestions":"47589"},{"ruleId":"45357","severity":2,"message":"45358","line":219,"column":52,"nodeType":"45359","messageId":"45360","endLine":219,"endColumn":55,"suggestions":"47590"},{"ruleId":"45357","severity":2,"message":"45358","line":232,"column":52,"nodeType":"45359","messageId":"45360","endLine":232,"endColumn":55,"suggestions":"47591"},{"ruleId":"45357","severity":2,"message":"45358","line":382,"column":12,"nodeType":"45359","messageId":"45360","endLine":382,"endColumn":15,"suggestions":"47592","suppressions":"47593"},{"ruleId":"45357","severity":2,"message":"45358","line":388,"column":14,"nodeType":"45359","messageId":"45360","endLine":388,"endColumn":17,"suggestions":"47594","suppressions":"47595"},{"ruleId":"45357","severity":2,"message":"45358","line":24,"column":21,"nodeType":"45359","messageId":"45360","endLine":24,"endColumn":24,"suggestions":"47596"},{"ruleId":"45357","severity":2,"message":"45358","line":24,"column":21,"nodeType":"45359","messageId":"45360","endLine":24,"endColumn":24,"suggestions":"47597"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":21,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":24,"suggestions":"47598"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":21,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":24,"suggestions":"47599"},{"ruleId":"45357","severity":2,"message":"45358","line":61,"column":58,"nodeType":"45359","messageId":"45360","endLine":61,"endColumn":61,"suggestions":"47600"},{"ruleId":"45357","severity":2,"message":"45358","line":123,"column":56,"nodeType":"45359","messageId":"45360","endLine":123,"endColumn":59,"suggestions":"47601"},{"ruleId":"45357","severity":2,"message":"45358","line":135,"column":58,"nodeType":"45359","messageId":"45360","endLine":135,"endColumn":61,"suggestions":"47602"},{"ruleId":"45357","severity":2,"message":"45358","line":162,"column":57,"nodeType":"45359","messageId":"45360","endLine":162,"endColumn":60,"suggestions":"47603"},{"ruleId":"45357","severity":2,"message":"45358","line":163,"column":55,"nodeType":"45359","messageId":"45360","endLine":163,"endColumn":58,"suggestions":"47604"},{"ruleId":"45357","severity":2,"message":"45358","line":164,"column":55,"nodeType":"45359","messageId":"45360","endLine":164,"endColumn":58,"suggestions":"47605"},{"ruleId":"45357","severity":2,"message":"45358","line":174,"column":53,"nodeType":"45359","messageId":"45360","endLine":174,"endColumn":56,"suggestions":"47606"},{"ruleId":"45357","severity":2,"message":"45358","line":175,"column":54,"nodeType":"45359","messageId":"45360","endLine":175,"endColumn":57,"suggestions":"47607"},{"ruleId":"45357","severity":2,"message":"45358","line":14,"column":24,"nodeType":"45359","messageId":"45360","endLine":14,"endColumn":27,"suggestions":"47608"},{"ruleId":"45357","severity":2,"message":"45358","line":15,"column":22,"nodeType":"45359","messageId":"45360","endLine":15,"endColumn":25,"suggestions":"47609"},{"ruleId":"45357","severity":2,"message":"45358","line":18,"column":25,"nodeType":"45359","messageId":"45360","endLine":18,"endColumn":28,"suggestions":"47610"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":25,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":28,"suggestions":"47611"},{"ruleId":"45357","severity":2,"message":"45358","line":168,"column":70,"nodeType":"45359","messageId":"45360","endLine":168,"endColumn":73,"suggestions":"47612"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":23,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":26,"suggestions":"47613"},{"ruleId":"45357","severity":2,"message":"45358","line":99,"column":14,"nodeType":"45359","messageId":"45360","endLine":99,"endColumn":17,"suggestions":"47614"},{"ruleId":"45357","severity":2,"message":"45358","line":99,"column":32,"nodeType":"45359","messageId":"45360","endLine":99,"endColumn":35,"suggestions":"47615"},{"ruleId":"45357","severity":2,"message":"45358","line":103,"column":14,"nodeType":"45359","messageId":"45360","endLine":103,"endColumn":17,"suggestions":"47616"},{"ruleId":"45357","severity":2,"message":"45358","line":103,"column":33,"nodeType":"45359","messageId":"45360","endLine":103,"endColumn":36,"suggestions":"47617"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":14,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":17,"suggestions":"47618"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":43,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":46,"suggestions":"47619"},{"ruleId":"45357","severity":2,"message":"45358","line":35,"column":24,"nodeType":"45359","messageId":"45360","endLine":35,"endColumn":27,"suggestions":"47620"},{"ruleId":"45357","severity":2,"message":"45358","line":36,"column":22,"nodeType":"45359","messageId":"45360","endLine":36,"endColumn":25,"suggestions":"47621"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":25,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":28,"suggestions":"47622"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":11,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":14,"suggestions":"47623"},{"ruleId":"45357","severity":2,"message":"45358","line":35,"column":21,"nodeType":"45359","messageId":"45360","endLine":35,"endColumn":24,"suggestions":"47624"},{"ruleId":"45357","severity":2,"message":"45358","line":151,"column":42,"nodeType":"45359","messageId":"45360","endLine":151,"endColumn":45,"suggestions":"47625"},{"ruleId":"45357","severity":2,"message":"45358","line":152,"column":24,"nodeType":"45359","messageId":"45360","endLine":152,"endColumn":27,"suggestions":"47626"},{"ruleId":"45357","severity":2,"message":"45358","line":153,"column":28,"nodeType":"45359","messageId":"45360","endLine":153,"endColumn":31,"suggestions":"47627"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":35,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":38,"suggestions":"47628"},{"ruleId":"45357","severity":2,"message":"45358","line":215,"column":31,"nodeType":"45359","messageId":"45360","endLine":215,"endColumn":34,"suggestions":"47629"},{"ruleId":"45357","severity":2,"message":"45358","line":216,"column":31,"nodeType":"45359","messageId":"45360","endLine":216,"endColumn":34,"suggestions":"47630"},{"ruleId":"45357","severity":2,"message":"45358","line":227,"column":31,"nodeType":"45359","messageId":"45360","endLine":227,"endColumn":34,"suggestions":"47631"},{"ruleId":"45357","severity":2,"message":"45358","line":345,"column":29,"nodeType":"45359","messageId":"45360","endLine":345,"endColumn":32,"suggestions":"47632"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":21,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":24,"suggestions":"47633"},{"ruleId":"45357","severity":2,"message":"45358","line":75,"column":86,"nodeType":"45359","messageId":"45360","endLine":75,"endColumn":89,"suggestions":"47634"},{"ruleId":"45357","severity":2,"message":"45358","line":76,"column":85,"nodeType":"45359","messageId":"45360","endLine":76,"endColumn":88,"suggestions":"47635"},{"ruleId":"45357","severity":2,"message":"45358","line":78,"column":82,"nodeType":"45359","messageId":"45360","endLine":78,"endColumn":85,"suggestions":"47636"},{"ruleId":"45357","severity":2,"message":"45358","line":108,"column":86,"nodeType":"45359","messageId":"45360","endLine":108,"endColumn":89,"suggestions":"47637"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":85,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":88,"suggestions":"47638"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":79,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":82,"suggestions":"47639"},{"ruleId":"45357","severity":2,"message":"45358","line":115,"column":82,"nodeType":"45359","messageId":"45360","endLine":115,"endColumn":85,"suggestions":"47640"},{"ruleId":"45357","severity":2,"message":"45358","line":119,"column":80,"nodeType":"45359","messageId":"45360","endLine":119,"endColumn":83,"suggestions":"47641"},{"ruleId":"45357","severity":2,"message":"45358","line":126,"column":35,"nodeType":"45359","messageId":"45360","endLine":126,"endColumn":38,"suggestions":"47642"},{"ruleId":"45357","severity":2,"message":"45358","line":210,"column":81,"nodeType":"45359","messageId":"45360","endLine":210,"endColumn":84,"suggestions":"47643"},{"ruleId":"45357","severity":2,"message":"45358","line":213,"column":80,"nodeType":"45359","messageId":"45360","endLine":213,"endColumn":83,"suggestions":"47644"},{"ruleId":"45357","severity":2,"message":"45358","line":291,"column":86,"nodeType":"45359","messageId":"45360","endLine":291,"endColumn":89,"suggestions":"47645"},{"ruleId":"45357","severity":2,"message":"45358","line":292,"column":85,"nodeType":"45359","messageId":"45360","endLine":292,"endColumn":88,"suggestions":"47646"},{"ruleId":"45357","severity":2,"message":"45358","line":294,"column":79,"nodeType":"45359","messageId":"45360","endLine":294,"endColumn":82,"suggestions":"47647"},{"ruleId":"45357","severity":2,"message":"45358","line":298,"column":82,"nodeType":"45359","messageId":"45360","endLine":298,"endColumn":85,"suggestions":"47648"},{"ruleId":"45357","severity":2,"message":"45358","line":302,"column":80,"nodeType":"45359","messageId":"45360","endLine":302,"endColumn":83,"suggestions":"47649"},{"ruleId":"45357","severity":2,"message":"45358","line":309,"column":35,"nodeType":"45359","messageId":"45360","endLine":309,"endColumn":38,"suggestions":"47650"},{"ruleId":"45357","severity":2,"message":"45358","line":322,"column":86,"nodeType":"45359","messageId":"45360","endLine":322,"endColumn":89,"suggestions":"47651"},{"ruleId":"45357","severity":2,"message":"45358","line":323,"column":85,"nodeType":"45359","messageId":"45360","endLine":323,"endColumn":88,"suggestions":"47652"},{"ruleId":"45357","severity":2,"message":"45358","line":325,"column":79,"nodeType":"45359","messageId":"45360","endLine":325,"endColumn":82,"suggestions":"47653"},{"ruleId":"45357","severity":2,"message":"45358","line":329,"column":82,"nodeType":"45359","messageId":"45360","endLine":329,"endColumn":85,"suggestions":"47654"},{"ruleId":"45357","severity":2,"message":"45358","line":333,"column":80,"nodeType":"45359","messageId":"45360","endLine":333,"endColumn":83,"suggestions":"47655"},{"ruleId":"45357","severity":2,"message":"45358","line":352,"column":84,"nodeType":"45359","messageId":"45360","endLine":352,"endColumn":87,"suggestions":"47656"},{"ruleId":"45357","severity":2,"message":"45358","line":375,"column":29,"nodeType":"45359","messageId":"45360","endLine":375,"endColumn":32,"suggestions":"47657"},{"ruleId":"45357","severity":2,"message":"45358","line":383,"column":26,"nodeType":"45359","messageId":"45360","endLine":383,"endColumn":29,"suggestions":"47658"},{"ruleId":"45357","severity":2,"message":"45358","line":383,"column":38,"nodeType":"45359","messageId":"45360","endLine":383,"endColumn":41,"suggestions":"47659"},{"ruleId":"45357","severity":2,"message":"45358","line":415,"column":69,"nodeType":"45359","messageId":"45360","endLine":415,"endColumn":72,"suggestions":"47660"},{"ruleId":"45357","severity":2,"message":"45358","line":418,"column":94,"nodeType":"45359","messageId":"45360","endLine":418,"endColumn":97,"suggestions":"47661"},{"ruleId":"45357","severity":2,"message":"45358","line":428,"column":28,"nodeType":"45359","messageId":"45360","endLine":428,"endColumn":31,"suggestions":"47662"},{"ruleId":"45357","severity":2,"message":"45358","line":70,"column":43,"nodeType":"45359","messageId":"45360","endLine":70,"endColumn":46,"suggestions":"47663"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":43,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":46,"suggestions":"47664"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":86,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":89,"suggestions":"47665"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":85,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":88,"suggestions":"47666"},{"ruleId":"45357","severity":2,"message":"45358","line":97,"column":43,"nodeType":"45359","messageId":"45360","endLine":97,"endColumn":46,"suggestions":"47667"},{"ruleId":"45357","severity":2,"message":"45358","line":102,"column":86,"nodeType":"45359","messageId":"45360","endLine":102,"endColumn":89,"suggestions":"47668"},{"ruleId":"45357","severity":2,"message":"45358","line":103,"column":85,"nodeType":"45359","messageId":"45360","endLine":103,"endColumn":88,"suggestions":"47669"},{"ruleId":"45357","severity":2,"message":"45358","line":24,"column":21,"nodeType":"45359","messageId":"45360","endLine":24,"endColumn":24,"suggestions":"47670"},{"ruleId":"45357","severity":2,"message":"45358","line":24,"column":21,"nodeType":"45359","messageId":"45360","endLine":24,"endColumn":24,"suggestions":"47671"},{"ruleId":"45357","severity":2,"message":"45358","line":34,"column":48,"nodeType":"45359","messageId":"45360","endLine":34,"endColumn":51,"suggestions":"47672"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":9,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":12,"suggestions":"47673"},{"ruleId":"45357","severity":2,"message":"45358","line":240,"column":26,"nodeType":"45359","messageId":"45360","endLine":240,"endColumn":29,"suggestions":"47674"},{"ruleId":"45357","severity":2,"message":"45358","line":248,"column":26,"nodeType":"45359","messageId":"45360","endLine":248,"endColumn":29,"suggestions":"47675"},{"ruleId":"45357","severity":2,"message":"45358","line":416,"column":28,"nodeType":"45359","messageId":"45360","endLine":416,"endColumn":31,"suggestions":"47676"},{"ruleId":"45357","severity":2,"message":"45358","line":796,"column":33,"nodeType":"45359","messageId":"45360","endLine":796,"endColumn":36,"suggestions":"47677"},{"ruleId":"45357","severity":2,"message":"45358","line":864,"column":33,"nodeType":"45359","messageId":"45360","endLine":864,"endColumn":36,"suggestions":"47678"},{"ruleId":"45357","severity":2,"message":"45358","line":930,"column":33,"nodeType":"45359","messageId":"45360","endLine":930,"endColumn":36,"suggestions":"47679"},{"ruleId":"45357","severity":2,"message":"45358","line":1051,"column":33,"nodeType":"45359","messageId":"45360","endLine":1051,"endColumn":36,"suggestions":"47680"},{"ruleId":"45357","severity":2,"message":"45358","line":1125,"column":33,"nodeType":"45359","messageId":"45360","endLine":1125,"endColumn":36,"suggestions":"47681"},{"ruleId":"45357","severity":2,"message":"45358","line":1195,"column":33,"nodeType":"45359","messageId":"45360","endLine":1195,"endColumn":36,"suggestions":"47682"},{"ruleId":"45357","severity":2,"message":"45358","line":1268,"column":33,"nodeType":"45359","messageId":"45360","endLine":1268,"endColumn":36,"suggestions":"47683"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":21,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":24,"suggestions":"47684"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":21,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":24,"suggestions":"47685"},{"ruleId":"45357","severity":2,"message":"45358","line":100,"column":41,"nodeType":"45359","messageId":"45360","endLine":100,"endColumn":44,"suggestions":"47686"},{"ruleId":"45357","severity":2,"message":"45358","line":15,"column":24,"nodeType":"45359","messageId":"45360","endLine":15,"endColumn":27,"suggestions":"47687"},{"ruleId":"45357","severity":2,"message":"45358","line":16,"column":22,"nodeType":"45359","messageId":"45360","endLine":16,"endColumn":25,"suggestions":"47688"},{"ruleId":"45357","severity":2,"message":"45358","line":19,"column":25,"nodeType":"45359","messageId":"45360","endLine":19,"endColumn":28,"suggestions":"47689"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":66,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":69,"suggestions":"47690"},{"ruleId":"45357","severity":2,"message":"45358","line":46,"column":61,"nodeType":"45359","messageId":"45360","endLine":46,"endColumn":64,"suggestions":"47691"},{"ruleId":"45357","severity":2,"message":"45358","line":24,"column":21,"nodeType":"45359","messageId":"45360","endLine":24,"endColumn":24,"suggestions":"47692"},{"ruleId":"45357","severity":2,"message":"45358","line":32,"column":19,"nodeType":"45359","messageId":"45360","endLine":32,"endColumn":22,"suggestions":"47693"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":21,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":24,"suggestions":"47694"},{"ruleId":"45357","severity":2,"message":"45358","line":167,"column":67,"nodeType":"45359","messageId":"45360","endLine":167,"endColumn":70,"suggestions":"47695"},{"ruleId":"45357","severity":2,"message":"45358","line":224,"column":72,"nodeType":"45359","messageId":"45360","endLine":224,"endColumn":75,"suggestions":"47696"},{"ruleId":"45357","severity":2,"message":"45358","line":232,"column":28,"nodeType":"45359","messageId":"45360","endLine":232,"endColumn":31,"suggestions":"47697"},{"ruleId":"45357","severity":2,"message":"45358","line":267,"column":70,"nodeType":"45359","messageId":"45360","endLine":267,"endColumn":73,"suggestions":"47698"},{"ruleId":"45357","severity":2,"message":"45358","line":306,"column":70,"nodeType":"45359","messageId":"45360","endLine":306,"endColumn":73,"suggestions":"47699"},{"ruleId":"45357","severity":2,"message":"45358","line":306,"column":85,"nodeType":"45359","messageId":"45360","endLine":306,"endColumn":88,"suggestions":"47700"},{"ruleId":"45357","severity":2,"message":"45358","line":309,"column":66,"nodeType":"45359","messageId":"45360","endLine":309,"endColumn":69,"suggestions":"47701"},{"ruleId":"45357","severity":2,"message":"45358","line":310,"column":66,"nodeType":"45359","messageId":"45360","endLine":310,"endColumn":69,"suggestions":"47702"},{"ruleId":"45357","severity":2,"message":"45358","line":311,"column":71,"nodeType":"45359","messageId":"45360","endLine":311,"endColumn":74,"suggestions":"47703"},{"ruleId":"45357","severity":2,"message":"45358","line":334,"column":71,"nodeType":"45359","messageId":"45360","endLine":334,"endColumn":74,"suggestions":"47704"},{"ruleId":"45357","severity":2,"message":"45358","line":339,"column":71,"nodeType":"45359","messageId":"45360","endLine":339,"endColumn":74,"suggestions":"47705"},{"ruleId":"45357","severity":2,"message":"45358","line":347,"column":73,"nodeType":"45359","messageId":"45360","endLine":347,"endColumn":76,"suggestions":"47706"},{"ruleId":"45357","severity":2,"message":"45358","line":349,"column":69,"nodeType":"45359","messageId":"45360","endLine":349,"endColumn":72,"suggestions":"47707"},{"ruleId":"45357","severity":2,"message":"45358","line":361,"column":58,"nodeType":"45359","messageId":"45360","endLine":361,"endColumn":61,"suggestions":"47708"},{"ruleId":"45357","severity":2,"message":"45358","line":363,"column":67,"nodeType":"45359","messageId":"45360","endLine":363,"endColumn":70,"suggestions":"47709"},{"ruleId":"45357","severity":2,"message":"45358","line":371,"column":58,"nodeType":"45359","messageId":"45360","endLine":371,"endColumn":61,"suggestions":"47710"},{"ruleId":"45357","severity":2,"message":"45358","line":373,"column":67,"nodeType":"45359","messageId":"45360","endLine":373,"endColumn":70,"suggestions":"47711"},{"ruleId":"45357","severity":2,"message":"45358","line":23,"column":21,"nodeType":"45359","messageId":"45360","endLine":23,"endColumn":24,"suggestions":"47712"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":20,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":23,"suggestions":"47713"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":60,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":63,"suggestions":"47714"},{"ruleId":"45357","severity":2,"message":"45358","line":146,"column":20,"nodeType":"45359","messageId":"45360","endLine":146,"endColumn":23,"suggestions":"47715"},{"ruleId":"45357","severity":2,"message":"45358","line":254,"column":79,"nodeType":"45359","messageId":"45360","endLine":254,"endColumn":82,"suggestions":"47716"},{"ruleId":"45357","severity":2,"message":"45358","line":264,"column":76,"nodeType":"45359","messageId":"45360","endLine":264,"endColumn":79,"suggestions":"47717"},{"ruleId":"45357","severity":2,"message":"45358","line":30,"column":19,"nodeType":"45359","messageId":"45360","endLine":30,"endColumn":22,"suggestions":"47718"},{"ruleId":"45357","severity":2,"message":"45358","line":33,"column":19,"nodeType":"45359","messageId":"45360","endLine":33,"endColumn":22,"suggestions":"47719"},{"ruleId":"45357","severity":2,"message":"45358","line":29,"column":21,"nodeType":"45359","messageId":"45360","endLine":29,"endColumn":24,"suggestions":"47720"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":46,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":49,"suggestions":"47721"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":64,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":67,"suggestions":"47722"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":67,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":70,"suggestions":"47723"},{"ruleId":"45357","severity":2,"message":"45358","line":155,"column":67,"nodeType":"45359","messageId":"45360","endLine":155,"endColumn":70,"suggestions":"47724"},{"ruleId":"45357","severity":2,"message":"45358","line":164,"column":69,"nodeType":"45359","messageId":"45360","endLine":164,"endColumn":72,"suggestions":"47725"},{"ruleId":"45357","severity":2,"message":"45358","line":177,"column":70,"nodeType":"45359","messageId":"45360","endLine":177,"endColumn":73,"suggestions":"47726"},{"ruleId":"45357","severity":2,"message":"45358","line":190,"column":9,"nodeType":"45359","messageId":"45360","endLine":190,"endColumn":12,"suggestions":"47727"},{"ruleId":"45357","severity":2,"message":"45358","line":206,"column":9,"nodeType":"45359","messageId":"45360","endLine":206,"endColumn":12,"suggestions":"47728"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":21,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":24,"suggestions":"47729"},{"ruleId":"45357","severity":2,"message":"45358","line":27,"column":21,"nodeType":"45359","messageId":"45360","endLine":27,"endColumn":24,"suggestions":"47730"},{"ruleId":"45357","severity":2,"message":"45358","line":494,"column":20,"nodeType":"45359","messageId":"45360","endLine":494,"endColumn":23,"suggestions":"47731"},{"ruleId":"45357","severity":2,"message":"45358","line":522,"column":86,"nodeType":"45359","messageId":"45360","endLine":522,"endColumn":89,"suggestions":"47732"},{"ruleId":"45357","severity":2,"message":"45358","line":534,"column":84,"nodeType":"45359","messageId":"45360","endLine":534,"endColumn":87,"suggestions":"47733"},{"ruleId":"45357","severity":2,"message":"45358","line":539,"column":59,"nodeType":"45359","messageId":"45360","endLine":539,"endColumn":62,"suggestions":"47734"},{"ruleId":"45357","severity":2,"message":"45358","line":545,"column":81,"nodeType":"45359","messageId":"45360","endLine":545,"endColumn":84,"suggestions":"47735"},{"ruleId":"45357","severity":2,"message":"45358","line":550,"column":62,"nodeType":"45359","messageId":"45360","endLine":550,"endColumn":65,"suggestions":"47736"},{"ruleId":"45357","severity":2,"message":"45358","line":553,"column":84,"nodeType":"45359","messageId":"45360","endLine":553,"endColumn":87,"suggestions":"47737"},{"ruleId":"45357","severity":2,"message":"45358","line":568,"column":20,"nodeType":"45359","messageId":"45360","endLine":568,"endColumn":23,"suggestions":"47738"},{"ruleId":"45357","severity":2,"message":"45358","line":582,"column":48,"nodeType":"45359","messageId":"45360","endLine":582,"endColumn":51,"suggestions":"47739"},{"ruleId":"45357","severity":2,"message":"45358","line":582,"column":63,"nodeType":"45359","messageId":"45360","endLine":582,"endColumn":66,"suggestions":"47740"},{"ruleId":"45357","severity":2,"message":"45358","line":589,"column":78,"nodeType":"45359","messageId":"45360","endLine":589,"endColumn":81,"suggestions":"47741"},{"ruleId":"45357","severity":2,"message":"45358","line":606,"column":25,"nodeType":"45359","messageId":"45360","endLine":606,"endColumn":28,"suggestions":"47742"},{"ruleId":"45357","severity":2,"message":"45358","line":613,"column":56,"nodeType":"45359","messageId":"45360","endLine":613,"endColumn":59,"suggestions":"47743"},{"ruleId":"45357","severity":2,"message":"45358","line":619,"column":78,"nodeType":"45359","messageId":"45360","endLine":619,"endColumn":81,"suggestions":"47744"},{"ruleId":"45357","severity":2,"message":"45358","line":652,"column":28,"nodeType":"45359","messageId":"45360","endLine":652,"endColumn":31,"suggestions":"47745"},{"ruleId":"45357","severity":2,"message":"45358","line":656,"column":33,"nodeType":"45359","messageId":"45360","endLine":656,"endColumn":36,"suggestions":"47746"},{"ruleId":"45357","severity":2,"message":"45358","line":658,"column":62,"nodeType":"45359","messageId":"45360","endLine":658,"endColumn":65,"suggestions":"47747"},{"ruleId":"45357","severity":2,"message":"45358","line":669,"column":84,"nodeType":"45359","messageId":"45360","endLine":669,"endColumn":87,"suggestions":"47748"},{"ruleId":"45357","severity":2,"message":"45358","line":671,"column":28,"nodeType":"45359","messageId":"45360","endLine":671,"endColumn":31,"suggestions":"47749"},{"ruleId":"45357","severity":2,"message":"45358","line":15,"column":24,"nodeType":"45359","messageId":"45360","endLine":15,"endColumn":27,"suggestions":"47750"},{"ruleId":"45357","severity":2,"message":"45358","line":16,"column":22,"nodeType":"45359","messageId":"45360","endLine":16,"endColumn":25,"suggestions":"47751"},{"ruleId":"45357","severity":2,"message":"45358","line":19,"column":25,"nodeType":"45359","messageId":"45360","endLine":19,"endColumn":28,"suggestions":"47752"},{"ruleId":"45357","severity":2,"message":"45358","line":51,"column":27,"nodeType":"45359","messageId":"45360","endLine":51,"endColumn":30,"suggestions":"47753"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":27,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":30,"suggestions":"47754"},{"ruleId":"45357","severity":2,"message":"45358","line":59,"column":27,"nodeType":"45359","messageId":"45360","endLine":59,"endColumn":30,"suggestions":"47755"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":27,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":30,"suggestions":"47756"},{"ruleId":"45357","severity":2,"message":"45358","line":44,"column":17,"nodeType":"45359","messageId":"45360","endLine":44,"endColumn":20,"suggestions":"47757","suppressions":"47758"},{"ruleId":"45357","severity":2,"message":"45358","line":83,"column":26,"nodeType":"45359","messageId":"45360","endLine":83,"endColumn":29,"suggestions":"47759"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":26,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":29,"suggestions":"47760"},{"ruleId":"45357","severity":2,"message":"45358","line":112,"column":26,"nodeType":"45359","messageId":"45360","endLine":112,"endColumn":29,"suggestions":"47761"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":26,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":29,"suggestions":"47762"},{"ruleId":"45357","severity":2,"message":"45358","line":147,"column":26,"nodeType":"45359","messageId":"45360","endLine":147,"endColumn":29,"suggestions":"47763"},{"ruleId":"45357","severity":2,"message":"45358","line":148,"column":32,"nodeType":"45359","messageId":"45360","endLine":148,"endColumn":35,"suggestions":"47764"},{"ruleId":"45357","severity":2,"message":"45358","line":148,"column":56,"nodeType":"45359","messageId":"45360","endLine":148,"endColumn":59,"suggestions":"47765"},{"ruleId":"45357","severity":2,"message":"45358","line":179,"column":26,"nodeType":"45359","messageId":"45360","endLine":179,"endColumn":29,"suggestions":"47766"},{"ruleId":"45357","severity":2,"message":"45358","line":27,"column":8,"nodeType":"45359","messageId":"45360","endLine":27,"endColumn":11,"suggestions":"47767"},{"ruleId":"45357","severity":2,"message":"45358","line":64,"column":18,"nodeType":"45359","messageId":"45360","endLine":64,"endColumn":21,"suggestions":"47768"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":18,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":21,"suggestions":"47769"},{"ruleId":"45357","severity":2,"message":"45358","line":122,"column":18,"nodeType":"45359","messageId":"45360","endLine":122,"endColumn":21,"suggestions":"47770"},{"ruleId":"45357","severity":2,"message":"45358","line":129,"column":43,"nodeType":"45359","messageId":"45360","endLine":129,"endColumn":46,"suggestions":"47771"},{"ruleId":"45357","severity":2,"message":"45358","line":144,"column":43,"nodeType":"45359","messageId":"45360","endLine":144,"endColumn":46,"suggestions":"47772"},{"ruleId":"45357","severity":2,"message":"45358","line":156,"column":43,"nodeType":"45359","messageId":"45360","endLine":156,"endColumn":46,"suggestions":"47773"},{"ruleId":"45357","severity":2,"message":"45358","line":166,"column":43,"nodeType":"45359","messageId":"45360","endLine":166,"endColumn":46,"suggestions":"47774"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":21,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":24,"suggestions":"47775"},{"ruleId":"45357","severity":2,"message":"45358","line":24,"column":21,"nodeType":"45359","messageId":"45360","endLine":24,"endColumn":24,"suggestions":"47776"},{"ruleId":"45357","severity":2,"message":"45358","line":99,"column":28,"nodeType":"45359","messageId":"45360","endLine":99,"endColumn":31,"suggestions":"47777"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":10,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":13,"suggestions":"47778"},{"ruleId":"45357","severity":2,"message":"45358","line":23,"column":21,"nodeType":"45359","messageId":"45360","endLine":23,"endColumn":24,"suggestions":"47779"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":21,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":24,"suggestions":"47780"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":12,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":15,"suggestions":"47781"},{"ruleId":"45357","severity":2,"message":"45358","line":66,"column":14,"nodeType":"45359","messageId":"45360","endLine":66,"endColumn":17,"suggestions":"47782"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":14,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":17,"suggestions":"47783"},{"ruleId":"45357","severity":2,"message":"45358","line":148,"column":12,"nodeType":"45359","messageId":"45360","endLine":148,"endColumn":15,"suggestions":"47784"},{"ruleId":"45357","severity":2,"message":"45358","line":163,"column":14,"nodeType":"45359","messageId":"45360","endLine":163,"endColumn":17,"suggestions":"47785"},{"ruleId":"45357","severity":2,"message":"45358","line":171,"column":14,"nodeType":"45359","messageId":"45360","endLine":171,"endColumn":17,"suggestions":"47786"},{"ruleId":"45357","severity":2,"message":"45358","line":189,"column":14,"nodeType":"45359","messageId":"45360","endLine":189,"endColumn":17,"suggestions":"47787"},{"ruleId":"45357","severity":2,"message":"45358","line":206,"column":12,"nodeType":"45359","messageId":"45360","endLine":206,"endColumn":15,"suggestions":"47788"},{"ruleId":"45357","severity":2,"message":"45358","line":442,"column":9,"nodeType":"45359","messageId":"45360","endLine":442,"endColumn":12,"suggestions":"47789"},{"ruleId":"45357","severity":2,"message":"45358","line":444,"column":21,"nodeType":"45359","messageId":"45360","endLine":444,"endColumn":24,"suggestions":"47790"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":63,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":66,"suggestions":"47791"},{"ruleId":"45357","severity":2,"message":"45358","line":21,"column":31,"nodeType":"45359","messageId":"45360","endLine":21,"endColumn":34,"suggestions":"47792"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":31,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":34,"suggestions":"47793"},{"ruleId":"45357","severity":2,"message":"45358","line":59,"column":31,"nodeType":"45359","messageId":"45360","endLine":59,"endColumn":34,"suggestions":"47794"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":31,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":34,"suggestions":"47795"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":30,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":33,"suggestions":"47796"},{"ruleId":"45357","severity":2,"message":"45358","line":128,"column":30,"nodeType":"45359","messageId":"45360","endLine":128,"endColumn":33,"suggestions":"47797"},{"ruleId":"45357","severity":2,"message":"45358","line":151,"column":30,"nodeType":"45359","messageId":"45360","endLine":151,"endColumn":33,"suggestions":"47798"},{"ruleId":"45357","severity":2,"message":"45358","line":177,"column":30,"nodeType":"45359","messageId":"45360","endLine":177,"endColumn":33,"suggestions":"47799"},{"ruleId":"45357","severity":2,"message":"45358","line":36,"column":21,"nodeType":"45359","messageId":"45360","endLine":36,"endColumn":24,"suggestions":"47800"},{"ruleId":"45357","severity":2,"message":"45358","line":69,"column":43,"nodeType":"45359","messageId":"45360","endLine":69,"endColumn":46,"suggestions":"47801"},{"ruleId":"45357","severity":2,"message":"45358","line":207,"column":31,"nodeType":"45359","messageId":"45360","endLine":207,"endColumn":34,"suggestions":"47802"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":38,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":41,"suggestions":"47803"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":38,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":41,"suggestions":"47804"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":38,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":41,"suggestions":"47805"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":38,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":41,"suggestions":"47806"},{"ruleId":"45357","severity":2,"message":"45358","line":123,"column":38,"nodeType":"45359","messageId":"45360","endLine":123,"endColumn":41,"suggestions":"47807"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":38,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":41,"suggestions":"47808"},{"ruleId":"45357","severity":2,"message":"45358","line":147,"column":38,"nodeType":"45359","messageId":"45360","endLine":147,"endColumn":41,"suggestions":"47809"},{"ruleId":"45357","severity":2,"message":"45358","line":161,"column":38,"nodeType":"45359","messageId":"45360","endLine":161,"endColumn":41,"suggestions":"47810"},{"ruleId":"45357","severity":2,"message":"45358","line":278,"column":49,"nodeType":"45359","messageId":"45360","endLine":278,"endColumn":52,"suggestions":"47811"},{"ruleId":"45357","severity":2,"message":"45358","line":286,"column":49,"nodeType":"45359","messageId":"45360","endLine":286,"endColumn":52,"suggestions":"47812"},{"ruleId":"45357","severity":2,"message":"45358","line":301,"column":49,"nodeType":"45359","messageId":"45360","endLine":301,"endColumn":52,"suggestions":"47813"},{"ruleId":"45357","severity":2,"message":"45358","line":311,"column":49,"nodeType":"45359","messageId":"45360","endLine":311,"endColumn":52,"suggestions":"47814"},{"ruleId":"45357","severity":2,"message":"45358","line":330,"column":42,"nodeType":"45359","messageId":"45360","endLine":330,"endColumn":45,"suggestions":"47815"},{"ruleId":"45357","severity":2,"message":"45358","line":338,"column":44,"nodeType":"45359","messageId":"45360","endLine":338,"endColumn":47,"suggestions":"47816"},{"ruleId":"45357","severity":2,"message":"45358","line":341,"column":42,"nodeType":"45359","messageId":"45360","endLine":341,"endColumn":45,"suggestions":"47817"},{"ruleId":"45357","severity":2,"message":"45358","line":356,"column":58,"nodeType":"45359","messageId":"45360","endLine":356,"endColumn":61,"suggestions":"47818"},{"ruleId":"45357","severity":2,"message":"45358","line":364,"column":58,"nodeType":"45359","messageId":"45360","endLine":364,"endColumn":61,"suggestions":"47819"},{"ruleId":"45357","severity":2,"message":"45358","line":436,"column":58,"nodeType":"45359","messageId":"45360","endLine":436,"endColumn":61,"suggestions":"47820"},{"ruleId":"45357","severity":2,"message":"45358","line":450,"column":38,"nodeType":"45359","messageId":"45360","endLine":450,"endColumn":41,"suggestions":"47821"},{"ruleId":"45357","severity":2,"message":"45358","line":7,"column":28,"nodeType":"45359","messageId":"45360","endLine":7,"endColumn":31,"suggestions":"47822"},{"ruleId":"45357","severity":2,"message":"45358","line":37,"column":55,"nodeType":"45359","messageId":"45360","endLine":37,"endColumn":58,"suggestions":"47823"},{"ruleId":"45357","severity":2,"message":"45358","line":37,"column":78,"nodeType":"45359","messageId":"45360","endLine":37,"endColumn":81,"suggestions":"47824"},{"ruleId":"45357","severity":2,"message":"45358","line":127,"column":87,"nodeType":"45359","messageId":"45360","endLine":127,"endColumn":90,"suggestions":"47825"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":87,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":90,"suggestions":"47826"},{"ruleId":"45357","severity":2,"message":"45358","line":139,"column":87,"nodeType":"45359","messageId":"45360","endLine":139,"endColumn":90,"suggestions":"47827"},{"ruleId":"45357","severity":2,"message":"45358","line":204,"column":33,"nodeType":"45359","messageId":"45360","endLine":204,"endColumn":36,"suggestions":"47828"},{"ruleId":"45357","severity":2,"message":"45358","line":205,"column":33,"nodeType":"45359","messageId":"45360","endLine":205,"endColumn":36,"suggestions":"47829"},{"ruleId":"45357","severity":2,"message":"45358","line":211,"column":39,"nodeType":"45359","messageId":"45360","endLine":211,"endColumn":42,"suggestions":"47830"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":94,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":97,"suggestions":"47831"},{"ruleId":"45357","severity":2,"message":"45358","line":83,"column":28,"nodeType":"45359","messageId":"45360","endLine":83,"endColumn":31,"suggestions":"47832"},{"ruleId":"45357","severity":2,"message":"45358","line":107,"column":11,"nodeType":"45359","messageId":"45360","endLine":107,"endColumn":14,"suggestions":"47833"},{"ruleId":"45357","severity":2,"message":"45358","line":108,"column":8,"nodeType":"45359","messageId":"45360","endLine":108,"endColumn":11,"suggestions":"47834"},{"ruleId":"45357","severity":2,"message":"45358","line":691,"column":18,"nodeType":"45359","messageId":"45360","endLine":691,"endColumn":21,"suggestions":"47835"},{"ruleId":"45357","severity":2,"message":"45358","line":692,"column":17,"nodeType":"45359","messageId":"45360","endLine":692,"endColumn":20,"suggestions":"47836"},{"ruleId":"45357","severity":2,"message":"45358","line":836,"column":41,"nodeType":"45359","messageId":"45360","endLine":836,"endColumn":44,"suggestions":"47837"},{"ruleId":"45357","severity":2,"message":"45358","line":837,"column":41,"nodeType":"45359","messageId":"45360","endLine":837,"endColumn":44,"suggestions":"47838"},{"ruleId":"45357","severity":2,"message":"45358","line":840,"column":41,"nodeType":"45359","messageId":"45360","endLine":840,"endColumn":44,"suggestions":"47839"},{"ruleId":"45357","severity":2,"message":"45358","line":842,"column":37,"nodeType":"45359","messageId":"45360","endLine":842,"endColumn":40,"suggestions":"47840"},{"ruleId":"45357","severity":2,"message":"45358","line":843,"column":37,"nodeType":"45359","messageId":"45360","endLine":843,"endColumn":40,"suggestions":"47841"},{"ruleId":"45357","severity":2,"message":"45358","line":844,"column":37,"nodeType":"45359","messageId":"45360","endLine":844,"endColumn":40,"suggestions":"47842"},{"ruleId":"45357","severity":2,"message":"45358","line":846,"column":41,"nodeType":"45359","messageId":"45360","endLine":846,"endColumn":44,"suggestions":"47843"},{"ruleId":"45357","severity":2,"message":"45358","line":847,"column":37,"nodeType":"45359","messageId":"45360","endLine":847,"endColumn":40,"suggestions":"47844"},{"ruleId":"45357","severity":2,"message":"45358","line":857,"column":31,"nodeType":"45359","messageId":"45360","endLine":857,"endColumn":34,"suggestions":"47845"},{"ruleId":"45357","severity":2,"message":"45358","line":858,"column":25,"nodeType":"45359","messageId":"45360","endLine":858,"endColumn":28,"suggestions":"47846"},{"ruleId":"45357","severity":2,"message":"45358","line":875,"column":35,"nodeType":"45359","messageId":"45360","endLine":875,"endColumn":38,"suggestions":"47847"},{"ruleId":"45357","severity":2,"message":"45358","line":876,"column":36,"nodeType":"45359","messageId":"45360","endLine":876,"endColumn":39,"suggestions":"47848"},{"ruleId":"45357","severity":2,"message":"45358","line":881,"column":43,"nodeType":"45359","messageId":"45360","endLine":881,"endColumn":46,"suggestions":"47849"},{"ruleId":"45357","severity":2,"message":"45358","line":931,"column":39,"nodeType":"45359","messageId":"45360","endLine":931,"endColumn":42,"suggestions":"47850"},{"ruleId":"45357","severity":2,"message":"45358","line":932,"column":42,"nodeType":"45359","messageId":"45360","endLine":932,"endColumn":45,"suggestions":"47851"},{"ruleId":"45357","severity":2,"message":"45358","line":943,"column":27,"nodeType":"45359","messageId":"45360","endLine":943,"endColumn":30,"suggestions":"47852"},{"ruleId":"45357","severity":2,"message":"45358","line":944,"column":31,"nodeType":"45359","messageId":"45360","endLine":944,"endColumn":34,"suggestions":"47853"},{"ruleId":"45357","severity":2,"message":"45358","line":945,"column":25,"nodeType":"45359","messageId":"45360","endLine":945,"endColumn":28,"suggestions":"47854"},{"ruleId":"45357","severity":2,"message":"45358","line":954,"column":29,"nodeType":"45359","messageId":"45360","endLine":954,"endColumn":32,"suggestions":"47855"},{"ruleId":"45357","severity":2,"message":"45358","line":959,"column":33,"nodeType":"45359","messageId":"45360","endLine":959,"endColumn":36,"suggestions":"47856"},{"ruleId":"45357","severity":2,"message":"45358","line":964,"column":34,"nodeType":"45359","messageId":"45360","endLine":964,"endColumn":37,"suggestions":"47857"},{"ruleId":"45357","severity":2,"message":"45358","line":970,"column":26,"nodeType":"45359","messageId":"45360","endLine":970,"endColumn":29,"suggestions":"47858"},{"ruleId":"45357","severity":2,"message":"45358","line":998,"column":36,"nodeType":"45359","messageId":"45360","endLine":998,"endColumn":39,"suggestions":"47859"},{"ruleId":"45357","severity":2,"message":"45358","line":999,"column":29,"nodeType":"45359","messageId":"45360","endLine":999,"endColumn":32,"suggestions":"47860"},{"ruleId":"45357","severity":2,"message":"45358","line":1024,"column":9,"nodeType":"45359","messageId":"45360","endLine":1024,"endColumn":12,"suggestions":"47861"},{"ruleId":"45357","severity":2,"message":"45358","line":1036,"column":25,"nodeType":"45359","messageId":"45360","endLine":1036,"endColumn":28,"suggestions":"47862"},{"ruleId":"45357","severity":2,"message":"45358","line":1056,"column":9,"nodeType":"45359","messageId":"45360","endLine":1056,"endColumn":12,"suggestions":"47863"},{"ruleId":"45357","severity":2,"message":"45358","line":1078,"column":74,"nodeType":"45359","messageId":"45360","endLine":1078,"endColumn":77,"suggestions":"47864"},{"ruleId":"45357","severity":2,"message":"45358","line":1096,"column":9,"nodeType":"45359","messageId":"45360","endLine":1096,"endColumn":12,"suggestions":"47865"},{"ruleId":"45357","severity":2,"message":"45358","line":1112,"column":31,"nodeType":"45359","messageId":"45360","endLine":1112,"endColumn":34,"suggestions":"47866"},{"ruleId":"45357","severity":2,"message":"45358","line":1113,"column":14,"nodeType":"45359","messageId":"45360","endLine":1113,"endColumn":17,"suggestions":"47867"},{"ruleId":"45357","severity":2,"message":"45358","line":1113,"column":40,"nodeType":"45359","messageId":"45360","endLine":1113,"endColumn":43,"suggestions":"47868"},{"ruleId":"45357","severity":2,"message":"45358","line":1114,"column":14,"nodeType":"45359","messageId":"45360","endLine":1114,"endColumn":17,"suggestions":"47869"},{"ruleId":"45357","severity":2,"message":"45358","line":1114,"column":44,"nodeType":"45359","messageId":"45360","endLine":1114,"endColumn":47,"suggestions":"47870"},{"ruleId":"45357","severity":2,"message":"45358","line":1128,"column":35,"nodeType":"45359","messageId":"45360","endLine":1128,"endColumn":38,"suggestions":"47871"},{"ruleId":"45357","severity":2,"message":"45358","line":1129,"column":35,"nodeType":"45359","messageId":"45360","endLine":1129,"endColumn":38,"suggestions":"47872"},{"ruleId":"45357","severity":2,"message":"45358","line":1130,"column":39,"nodeType":"45359","messageId":"45360","endLine":1130,"endColumn":42,"suggestions":"47873"},{"ruleId":"45357","severity":2,"message":"45358","line":1293,"column":16,"nodeType":"45359","messageId":"45360","endLine":1293,"endColumn":19,"suggestions":"47874"},{"ruleId":"45357","severity":2,"message":"45358","line":1293,"column":54,"nodeType":"45359","messageId":"45360","endLine":1293,"endColumn":57,"suggestions":"47875"},{"ruleId":"45357","severity":2,"message":"45358","line":1294,"column":45,"nodeType":"45359","messageId":"45360","endLine":1294,"endColumn":48,"suggestions":"47876"},{"ruleId":"45357","severity":2,"message":"45358","line":18,"column":16,"nodeType":"45359","messageId":"45360","endLine":18,"endColumn":19,"suggestions":"47877"},{"ruleId":"45357","severity":2,"message":"45358","line":20,"column":35,"nodeType":"45359","messageId":"45360","endLine":20,"endColumn":38,"suggestions":"47878"},{"ruleId":"45357","severity":2,"message":"45358","line":20,"column":49,"nodeType":"45359","messageId":"45360","endLine":20,"endColumn":52,"suggestions":"47879"},{"ruleId":"45357","severity":2,"message":"45358","line":29,"column":10,"nodeType":"45359","messageId":"45360","endLine":29,"endColumn":13,"suggestions":"47880"},{"ruleId":"45357","severity":2,"message":"45358","line":30,"column":9,"nodeType":"45359","messageId":"45360","endLine":30,"endColumn":12,"suggestions":"47881"},{"ruleId":"45357","severity":2,"message":"45358","line":200,"column":49,"nodeType":"45359","messageId":"45360","endLine":200,"endColumn":52,"suggestions":"47882"},{"ruleId":"45357","severity":2,"message":"45358","line":202,"column":41,"nodeType":"45359","messageId":"45360","endLine":202,"endColumn":44,"suggestions":"47883"},{"ruleId":"45357","severity":2,"message":"45358","line":75,"column":52,"nodeType":"45359","messageId":"45360","endLine":75,"endColumn":55,"suggestions":"47884"},{"ruleId":"45357","severity":2,"message":"45358","line":134,"column":52,"nodeType":"45359","messageId":"45360","endLine":134,"endColumn":55,"suggestions":"47885"},{"ruleId":"45357","severity":2,"message":"45358","line":209,"column":52,"nodeType":"45359","messageId":"45360","endLine":209,"endColumn":55,"suggestions":"47886"},{"ruleId":"45357","severity":2,"message":"45358","line":257,"column":52,"nodeType":"45359","messageId":"45360","endLine":257,"endColumn":55,"suggestions":"47887"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":52,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":55,"suggestions":"47888"},{"ruleId":"45357","severity":2,"message":"45358","line":144,"column":52,"nodeType":"45359","messageId":"45360","endLine":144,"endColumn":55,"suggestions":"47889"},{"ruleId":"45357","severity":2,"message":"45358","line":51,"column":13,"nodeType":"45359","messageId":"45360","endLine":51,"endColumn":16,"suggestions":"47890"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":17,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":20,"suggestions":"47891"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":13,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":16,"suggestions":"47892"},{"ruleId":"45357","severity":2,"message":"45358","line":91,"column":17,"nodeType":"45359","messageId":"45360","endLine":91,"endColumn":20,"suggestions":"47893"},{"ruleId":"45357","severity":2,"message":"45358","line":9,"column":39,"nodeType":"45359","messageId":"45360","endLine":9,"endColumn":42,"suggestions":"47894"},{"ruleId":"45357","severity":2,"message":"45358","line":64,"column":37,"nodeType":"45359","messageId":"45360","endLine":64,"endColumn":40,"suggestions":"47895"},{"ruleId":"45357","severity":2,"message":"45358","line":64,"column":48,"nodeType":"45359","messageId":"45360","endLine":64,"endColumn":51,"suggestions":"47896"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":11,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":14,"suggestions":"47897"},{"ruleId":"45357","severity":2,"message":"45358","line":80,"column":10,"nodeType":"45359","messageId":"45360","endLine":80,"endColumn":13,"suggestions":"47898"},{"ruleId":"45357","severity":2,"message":"45358","line":102,"column":52,"nodeType":"45359","messageId":"45360","endLine":102,"endColumn":55,"suggestions":"47899"},{"ruleId":"45357","severity":2,"message":"45358","line":107,"column":37,"nodeType":"45359","messageId":"45360","endLine":107,"endColumn":40,"suggestions":"47900"},{"ruleId":"45357","severity":2,"message":"45358","line":107,"column":48,"nodeType":"45359","messageId":"45360","endLine":107,"endColumn":51,"suggestions":"47901"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":11,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":14,"suggestions":"47902"},{"ruleId":"45357","severity":2,"message":"45358","line":123,"column":10,"nodeType":"45359","messageId":"45360","endLine":123,"endColumn":13,"suggestions":"47903"},{"ruleId":"45357","severity":2,"message":"45358","line":136,"column":37,"nodeType":"45359","messageId":"45360","endLine":136,"endColumn":40,"suggestions":"47904"},{"ruleId":"45357","severity":2,"message":"45358","line":136,"column":48,"nodeType":"45359","messageId":"45360","endLine":136,"endColumn":51,"suggestions":"47905"},{"ruleId":"45357","severity":2,"message":"45358","line":142,"column":11,"nodeType":"45359","messageId":"45360","endLine":142,"endColumn":14,"suggestions":"47906"},{"ruleId":"45357","severity":2,"message":"45358","line":151,"column":10,"nodeType":"45359","messageId":"45360","endLine":151,"endColumn":13,"suggestions":"47907"},{"ruleId":"45357","severity":2,"message":"45358","line":160,"column":37,"nodeType":"45359","messageId":"45360","endLine":160,"endColumn":40,"suggestions":"47908"},{"ruleId":"45357","severity":2,"message":"45358","line":160,"column":48,"nodeType":"45359","messageId":"45360","endLine":160,"endColumn":51,"suggestions":"47909"},{"ruleId":"45357","severity":2,"message":"45358","line":166,"column":11,"nodeType":"45359","messageId":"45360","endLine":166,"endColumn":14,"suggestions":"47910"},{"ruleId":"45357","severity":2,"message":"45358","line":175,"column":10,"nodeType":"45359","messageId":"45360","endLine":175,"endColumn":13,"suggestions":"47911"},{"ruleId":"45357","severity":2,"message":"45358","line":187,"column":37,"nodeType":"45359","messageId":"45360","endLine":187,"endColumn":40,"suggestions":"47912"},{"ruleId":"45357","severity":2,"message":"45358","line":194,"column":11,"nodeType":"45359","messageId":"45360","endLine":194,"endColumn":14,"suggestions":"47913"},{"ruleId":"45357","severity":2,"message":"45358","line":203,"column":10,"nodeType":"45359","messageId":"45360","endLine":203,"endColumn":13,"suggestions":"47914"},{"ruleId":"45357","severity":2,"message":"45358","line":205,"column":52,"nodeType":"45359","messageId":"45360","endLine":205,"endColumn":55,"suggestions":"47915"},{"ruleId":"45357","severity":2,"message":"45358","line":214,"column":37,"nodeType":"45359","messageId":"45360","endLine":214,"endColumn":40,"suggestions":"47916"},{"ruleId":"45357","severity":2,"message":"45358","line":217,"column":11,"nodeType":"45359","messageId":"45360","endLine":217,"endColumn":14,"suggestions":"47917"},{"ruleId":"45357","severity":2,"message":"45358","line":226,"column":10,"nodeType":"45359","messageId":"45360","endLine":226,"endColumn":13,"suggestions":"47918"},{"ruleId":"45357","severity":2,"message":"45358","line":229,"column":52,"nodeType":"45359","messageId":"45360","endLine":229,"endColumn":55,"suggestions":"47919"},{"ruleId":"45357","severity":2,"message":"45358","line":236,"column":37,"nodeType":"45359","messageId":"45360","endLine":236,"endColumn":40,"suggestions":"47920"},{"ruleId":"45357","severity":2,"message":"45358","line":242,"column":11,"nodeType":"45359","messageId":"45360","endLine":242,"endColumn":14,"suggestions":"47921"},{"ruleId":"45357","severity":2,"message":"45358","line":251,"column":10,"nodeType":"45359","messageId":"45360","endLine":251,"endColumn":13,"suggestions":"47922"},{"ruleId":"45357","severity":2,"message":"45358","line":261,"column":37,"nodeType":"45359","messageId":"45360","endLine":261,"endColumn":40,"suggestions":"47923"},{"ruleId":"45357","severity":2,"message":"45358","line":261,"column":48,"nodeType":"45359","messageId":"45360","endLine":261,"endColumn":51,"suggestions":"47924"},{"ruleId":"45357","severity":2,"message":"45358","line":267,"column":11,"nodeType":"45359","messageId":"45360","endLine":267,"endColumn":14,"suggestions":"47925"},{"ruleId":"45357","severity":2,"message":"45358","line":276,"column":10,"nodeType":"45359","messageId":"45360","endLine":276,"endColumn":13,"suggestions":"47926"},{"ruleId":"45357","severity":2,"message":"45358","line":283,"column":35,"nodeType":"45359","messageId":"45360","endLine":283,"endColumn":38,"suggestions":"47927"},{"ruleId":"45357","severity":2,"message":"45358","line":290,"column":41,"nodeType":"45359","messageId":"45360","endLine":290,"endColumn":44,"suggestions":"47928"},{"ruleId":"45357","severity":2,"message":"45358","line":316,"column":47,"nodeType":"45359","messageId":"45360","endLine":316,"endColumn":50,"suggestions":"47929"},{"ruleId":"45357","severity":2,"message":"45358","line":357,"column":37,"nodeType":"45359","messageId":"45360","endLine":357,"endColumn":40,"suggestions":"47930"},{"ruleId":"45357","severity":2,"message":"45358","line":357,"column":48,"nodeType":"45359","messageId":"45360","endLine":357,"endColumn":51,"suggestions":"47931"},{"ruleId":"45357","severity":2,"message":"45358","line":363,"column":11,"nodeType":"45359","messageId":"45360","endLine":363,"endColumn":14,"suggestions":"47932"},{"ruleId":"45357","severity":2,"message":"45358","line":372,"column":10,"nodeType":"45359","messageId":"45360","endLine":372,"endColumn":13,"suggestions":"47933"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":30,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":33,"suggestions":"47934"},{"ruleId":"45357","severity":2,"message":"45358","line":68,"column":18,"nodeType":"45359","messageId":"45360","endLine":68,"endColumn":21,"suggestions":"47935"},{"ruleId":"45357","severity":2,"message":"45358","line":68,"column":39,"nodeType":"45359","messageId":"45360","endLine":68,"endColumn":42,"suggestions":"47936"},{"ruleId":"45357","severity":2,"message":"45358","line":69,"column":18,"nodeType":"45359","messageId":"45360","endLine":69,"endColumn":21,"suggestions":"47937"},{"ruleId":"45357","severity":2,"message":"45358","line":69,"column":39,"nodeType":"45359","messageId":"45360","endLine":69,"endColumn":42,"suggestions":"47938"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":30,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":33,"suggestions":"47939"},{"ruleId":"45357","severity":2,"message":"45358","line":95,"column":30,"nodeType":"45359","messageId":"45360","endLine":95,"endColumn":33,"suggestions":"47940"},{"ruleId":"45418","severity":2,"message":"45419","line":3,"column":1,"nodeType":"45420","messageId":"45421","endLine":3,"endColumn":76},{"ruleId":"45357","severity":2,"message":"45358","line":7,"column":11,"nodeType":"45359","messageId":"45360","endLine":7,"endColumn":14,"suggestions":"47941"},{"ruleId":"45357","severity":2,"message":"45358","line":131,"column":34,"nodeType":"45359","messageId":"45360","endLine":131,"endColumn":37,"suggestions":"47942"},{"ruleId":"45357","severity":2,"message":"45358","line":131,"column":52,"nodeType":"45359","messageId":"45360","endLine":131,"endColumn":55,"suggestions":"47943"},{"ruleId":"45357","severity":2,"message":"45358","line":139,"column":38,"nodeType":"45359","messageId":"45360","endLine":139,"endColumn":41,"suggestions":"47944"},{"ruleId":"45357","severity":2,"message":"45358","line":139,"column":56,"nodeType":"45359","messageId":"45360","endLine":139,"endColumn":59,"suggestions":"47945"},{"ruleId":"45357","severity":2,"message":"45358","line":53,"column":19,"nodeType":"45359","messageId":"45360","endLine":53,"endColumn":22,"suggestions":"47946"},{"ruleId":"45357","severity":2,"message":"45358","line":143,"column":26,"nodeType":"45359","messageId":"45360","endLine":143,"endColumn":29,"suggestions":"47947"},{"ruleId":"45357","severity":2,"message":"45358","line":167,"column":16,"nodeType":"45359","messageId":"45360","endLine":167,"endColumn":19,"suggestions":"47948"},{"ruleId":"45357","severity":2,"message":"45358","line":167,"column":35,"nodeType":"45359","messageId":"45360","endLine":167,"endColumn":38,"suggestions":"47949"},{"ruleId":"45357","severity":2,"message":"45358","line":276,"column":58,"nodeType":"45359","messageId":"45360","endLine":276,"endColumn":61,"suggestions":"47950"},{"ruleId":"45357","severity":2,"message":"45358","line":278,"column":77,"nodeType":"45359","messageId":"45360","endLine":278,"endColumn":80,"suggestions":"47951"},{"ruleId":"45357","severity":2,"message":"45358","line":282,"column":78,"nodeType":"45359","messageId":"45360","endLine":282,"endColumn":81,"suggestions":"47952"},{"ruleId":"45357","severity":2,"message":"45358","line":339,"column":60,"nodeType":"45359","messageId":"45360","endLine":339,"endColumn":63,"suggestions":"47953"},{"ruleId":"45357","severity":2,"message":"45358","line":361,"column":56,"nodeType":"45359","messageId":"45360","endLine":361,"endColumn":59,"suggestions":"47954"},{"ruleId":"45357","severity":2,"message":"45358","line":367,"column":72,"nodeType":"45359","messageId":"45360","endLine":367,"endColumn":75,"suggestions":"47955"},{"ruleId":"45357","severity":2,"message":"45358","line":467,"column":48,"nodeType":"45359","messageId":"45360","endLine":467,"endColumn":51,"suggestions":"47956"},{"ruleId":"45357","severity":2,"message":"45358","line":491,"column":48,"nodeType":"45359","messageId":"45360","endLine":491,"endColumn":51,"suggestions":"47957"},{"ruleId":"45357","severity":2,"message":"45358","line":512,"column":48,"nodeType":"45359","messageId":"45360","endLine":512,"endColumn":51,"suggestions":"47958"},{"ruleId":"45357","severity":2,"message":"45358","line":534,"column":48,"nodeType":"45359","messageId":"45360","endLine":534,"endColumn":51,"suggestions":"47959"},{"ruleId":"45357","severity":2,"message":"45358","line":552,"column":65,"nodeType":"45359","messageId":"45360","endLine":552,"endColumn":68,"suggestions":"47960"},{"ruleId":"45357","severity":2,"message":"45358","line":563,"column":61,"nodeType":"45359","messageId":"45360","endLine":563,"endColumn":64,"suggestions":"47961"},{"ruleId":"45357","severity":2,"message":"45358","line":580,"column":55,"nodeType":"45359","messageId":"45360","endLine":580,"endColumn":58,"suggestions":"47962"},{"ruleId":"45357","severity":2,"message":"45358","line":597,"column":65,"nodeType":"45359","messageId":"45360","endLine":597,"endColumn":68,"suggestions":"47963"},{"ruleId":"45357","severity":2,"message":"45358","line":621,"column":65,"nodeType":"45359","messageId":"45360","endLine":621,"endColumn":68,"suggestions":"47964"},{"ruleId":"45357","severity":2,"message":"45358","line":647,"column":57,"nodeType":"45359","messageId":"45360","endLine":647,"endColumn":60,"suggestions":"47965"},{"ruleId":"45357","severity":2,"message":"45358","line":17,"column":75,"nodeType":"45359","messageId":"45360","endLine":17,"endColumn":78,"suggestions":"47966"},{"ruleId":"45357","severity":2,"message":"45358","line":32,"column":34,"nodeType":"45359","messageId":"45360","endLine":32,"endColumn":37,"suggestions":"47967"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":38,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":41,"suggestions":"47968"},{"ruleId":"45357","severity":2,"message":"45358","line":75,"column":38,"nodeType":"45359","messageId":"45360","endLine":75,"endColumn":41,"suggestions":"47969"},{"ruleId":"45357","severity":2,"message":"45358","line":26,"column":27,"nodeType":"45359","messageId":"45360","endLine":26,"endColumn":30,"suggestions":"47970"},{"ruleId":"45357","severity":2,"message":"45358","line":27,"column":27,"nodeType":"45359","messageId":"45360","endLine":27,"endColumn":30,"suggestions":"47971"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":25,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":28,"suggestions":"47972"},{"ruleId":"45357","severity":2,"message":"45358","line":16,"column":64,"nodeType":"45359","messageId":"45360","endLine":16,"endColumn":67,"suggestions":"47973"},{"ruleId":"45357","severity":2,"message":"45358","line":17,"column":20,"nodeType":"45359","messageId":"45360","endLine":17,"endColumn":23,"suggestions":"47974"},{"ruleId":"45357","severity":2,"message":"45358","line":34,"column":50,"nodeType":"45359","messageId":"45360","endLine":34,"endColumn":53,"suggestions":"47975"},{"ruleId":"45357","severity":2,"message":"45358","line":49,"column":50,"nodeType":"45359","messageId":"45360","endLine":49,"endColumn":53,"suggestions":"47976"},{"ruleId":"45357","severity":2,"message":"45358","line":73,"column":12,"nodeType":"45359","messageId":"45360","endLine":73,"endColumn":15,"suggestions":"47977"},{"ruleId":"45357","severity":2,"message":"45358","line":96,"column":10,"nodeType":"45359","messageId":"45360","endLine":96,"endColumn":13,"suggestions":"47978"},{"ruleId":"45357","severity":2,"message":"45358","line":129,"column":11,"nodeType":"45359","messageId":"45360","endLine":129,"endColumn":14,"suggestions":"47979"},{"ruleId":"45357","severity":2,"message":"45358","line":171,"column":20,"nodeType":"45359","messageId":"45360","endLine":171,"endColumn":23,"suggestions":"47980"},{"ruleId":"45357","severity":2,"message":"45358","line":226,"column":52,"nodeType":"45359","messageId":"45360","endLine":226,"endColumn":55,"suggestions":"47981"},{"ruleId":"45357","severity":2,"message":"45358","line":262,"column":50,"nodeType":"45359","messageId":"45360","endLine":262,"endColumn":53,"suggestions":"47982"},{"ruleId":"45357","severity":2,"message":"45358","line":31,"column":27,"nodeType":"45359","messageId":"45360","endLine":31,"endColumn":30,"suggestions":"47983"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":27,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":30,"suggestions":"47984"},{"ruleId":"45357","severity":2,"message":"45358","line":52,"column":16,"nodeType":"45359","messageId":"45360","endLine":52,"endColumn":19,"suggestions":"47985"},{"ruleId":"45357","severity":2,"message":"45358","line":66,"column":16,"nodeType":"45359","messageId":"45360","endLine":66,"endColumn":19,"suggestions":"47986"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":27,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":30,"suggestions":"47987"},{"ruleId":"45357","severity":2,"message":"45358","line":80,"column":27,"nodeType":"45359","messageId":"45360","endLine":80,"endColumn":30,"suggestions":"47988"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":27,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":30,"suggestions":"47989"},{"ruleId":"45357","severity":2,"message":"45358","line":104,"column":27,"nodeType":"45359","messageId":"45360","endLine":104,"endColumn":30,"suggestions":"47990"},{"ruleId":"45357","severity":2,"message":"45358","line":115,"column":27,"nodeType":"45359","messageId":"45360","endLine":115,"endColumn":30,"suggestions":"47991"},{"ruleId":"45357","severity":2,"message":"45358","line":57,"column":10,"nodeType":"45359","messageId":"45360","endLine":57,"endColumn":13,"suggestions":"47992"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":45,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":48,"suggestions":"47993"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":52,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":55,"suggestions":"47994"},{"ruleId":"45357","severity":2,"message":"45358","line":104,"column":10,"nodeType":"45359","messageId":"45360","endLine":104,"endColumn":13,"suggestions":"47995"},{"ruleId":"45357","severity":2,"message":"45358","line":135,"column":10,"nodeType":"45359","messageId":"45360","endLine":135,"endColumn":13,"suggestions":"47996"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":52,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":55,"suggestions":"47997"},{"ruleId":"45357","severity":2,"message":"45358","line":43,"column":41,"nodeType":"45359","messageId":"45360","endLine":43,"endColumn":44,"suggestions":"47998"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":45,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":48,"suggestions":"47999"},{"ruleId":"45357","severity":2,"message":"45358","line":216,"column":9,"nodeType":"45359","messageId":"45360","endLine":216,"endColumn":12,"suggestions":"48000"},{"ruleId":"45357","severity":2,"message":"45358","line":219,"column":25,"nodeType":"45359","messageId":"45360","endLine":219,"endColumn":28,"suggestions":"48001"},{"ruleId":"45357","severity":2,"message":"45358","line":231,"column":9,"nodeType":"45359","messageId":"45360","endLine":231,"endColumn":12,"suggestions":"48002"},{"ruleId":"45357","severity":2,"message":"45358","line":234,"column":25,"nodeType":"45359","messageId":"45360","endLine":234,"endColumn":28,"suggestions":"48003"},{"ruleId":"45357","severity":2,"message":"45358","line":249,"column":9,"nodeType":"45359","messageId":"45360","endLine":249,"endColumn":12,"suggestions":"48004"},{"ruleId":"45357","severity":2,"message":"45358","line":252,"column":32,"nodeType":"45359","messageId":"45360","endLine":252,"endColumn":35,"suggestions":"48005"},{"ruleId":"45357","severity":2,"message":"45358","line":253,"column":32,"nodeType":"45359","messageId":"45360","endLine":253,"endColumn":35,"suggestions":"48006"},{"ruleId":"45357","severity":2,"message":"45358","line":268,"column":38,"nodeType":"45359","messageId":"45360","endLine":268,"endColumn":41,"suggestions":"48007"},{"ruleId":"45357","severity":2,"message":"45358","line":268,"column":52,"nodeType":"45359","messageId":"45360","endLine":268,"endColumn":55,"suggestions":"48008"},{"ruleId":"45357","severity":2,"message":"45358","line":338,"column":38,"nodeType":"45359","messageId":"45360","endLine":338,"endColumn":41,"suggestions":"48009"},{"ruleId":"45357","severity":2,"message":"45358","line":338,"column":52,"nodeType":"45359","messageId":"45360","endLine":338,"endColumn":55,"suggestions":"48010"},{"ruleId":"45357","severity":2,"message":"45358","line":390,"column":43,"nodeType":"45359","messageId":"45360","endLine":390,"endColumn":46,"suggestions":"48011"},{"ruleId":"45357","severity":2,"message":"45358","line":390,"column":57,"nodeType":"45359","messageId":"45360","endLine":390,"endColumn":60,"suggestions":"48012"},{"ruleId":"45357","severity":2,"message":"45358","line":587,"column":43,"nodeType":"45359","messageId":"45360","endLine":587,"endColumn":46,"suggestions":"48013"},{"ruleId":"45357","severity":2,"message":"45358","line":587,"column":57,"nodeType":"45359","messageId":"45360","endLine":587,"endColumn":60,"suggestions":"48014"},{"ruleId":"45357","severity":2,"message":"45358","line":661,"column":8,"nodeType":"45359","messageId":"45360","endLine":661,"endColumn":11,"suggestions":"48015"},{"ruleId":"45357","severity":2,"message":"45358","line":663,"column":25,"nodeType":"45359","messageId":"45360","endLine":663,"endColumn":28,"suggestions":"48016"},{"ruleId":"45357","severity":2,"message":"45358","line":679,"column":8,"nodeType":"45359","messageId":"45360","endLine":679,"endColumn":11,"suggestions":"48017"},{"ruleId":"45357","severity":2,"message":"45358","line":696,"column":8,"nodeType":"45359","messageId":"45360","endLine":696,"endColumn":11,"suggestions":"48018"},{"ruleId":"45357","severity":2,"message":"45358","line":260,"column":45,"nodeType":"45359","messageId":"45360","endLine":260,"endColumn":48,"suggestions":"48019"},{"ruleId":"45357","severity":2,"message":"45358","line":292,"column":45,"nodeType":"45359","messageId":"45360","endLine":292,"endColumn":48,"suggestions":"48020"},{"ruleId":"45357","severity":2,"message":"45358","line":429,"column":45,"nodeType":"45359","messageId":"45360","endLine":429,"endColumn":48,"suggestions":"48021"},{"ruleId":"45357","severity":2,"message":"45358","line":112,"column":52,"nodeType":"45359","messageId":"45360","endLine":112,"endColumn":55,"suggestions":"48022"},{"ruleId":"45357","severity":2,"message":"45358","line":146,"column":52,"nodeType":"45359","messageId":"45360","endLine":146,"endColumn":55,"suggestions":"48023"},{"ruleId":"45357","severity":2,"message":"45358","line":179,"column":52,"nodeType":"45359","messageId":"45360","endLine":179,"endColumn":55,"suggestions":"48024"},{"ruleId":"45357","severity":2,"message":"45358","line":227,"column":52,"nodeType":"45359","messageId":"45360","endLine":227,"endColumn":55,"suggestions":"48025"},{"ruleId":"45357","severity":2,"message":"45358","line":259,"column":52,"nodeType":"45359","messageId":"45360","endLine":259,"endColumn":55,"suggestions":"48026"},{"ruleId":"45357","severity":2,"message":"45358","line":292,"column":52,"nodeType":"45359","messageId":"45360","endLine":292,"endColumn":55,"suggestions":"48027"},{"ruleId":"45357","severity":2,"message":"45358","line":337,"column":52,"nodeType":"45359","messageId":"45360","endLine":337,"endColumn":55,"suggestions":"48028"},{"ruleId":"45357","severity":2,"message":"45358","line":386,"column":52,"nodeType":"45359","messageId":"45360","endLine":386,"endColumn":55,"suggestions":"48029"},{"ruleId":"45357","severity":2,"message":"45358","line":454,"column":52,"nodeType":"45359","messageId":"45360","endLine":454,"endColumn":55,"suggestions":"48030"},{"ruleId":"45357","severity":2,"message":"45358","line":518,"column":52,"nodeType":"45359","messageId":"45360","endLine":518,"endColumn":55,"suggestions":"48031"},{"ruleId":"45357","severity":2,"message":"45358","line":581,"column":52,"nodeType":"45359","messageId":"45360","endLine":581,"endColumn":55,"suggestions":"48032"},{"ruleId":"45357","severity":2,"message":"45358","line":646,"column":52,"nodeType":"45359","messageId":"45360","endLine":646,"endColumn":55,"suggestions":"48033"},{"ruleId":"45357","severity":2,"message":"45358","line":699,"column":52,"nodeType":"45359","messageId":"45360","endLine":699,"endColumn":55,"suggestions":"48034"},{"ruleId":"45357","severity":2,"message":"45358","line":807,"column":52,"nodeType":"45359","messageId":"45360","endLine":807,"endColumn":55,"suggestions":"48035"},{"ruleId":"45357","severity":2,"message":"45358","line":859,"column":52,"nodeType":"45359","messageId":"45360","endLine":859,"endColumn":55,"suggestions":"48036"},{"ruleId":"45357","severity":2,"message":"45358","line":924,"column":52,"nodeType":"45359","messageId":"45360","endLine":924,"endColumn":55,"suggestions":"48037"},{"ruleId":"45357","severity":2,"message":"45358","line":972,"column":52,"nodeType":"45359","messageId":"45360","endLine":972,"endColumn":55,"suggestions":"48038"},{"ruleId":"45357","severity":2,"message":"45358","line":1027,"column":52,"nodeType":"45359","messageId":"45360","endLine":1027,"endColumn":55,"suggestions":"48039"},{"ruleId":"45357","severity":2,"message":"45358","line":1058,"column":52,"nodeType":"45359","messageId":"45360","endLine":1058,"endColumn":55,"suggestions":"48040"},{"ruleId":"45357","severity":2,"message":"45358","line":1087,"column":52,"nodeType":"45359","messageId":"45360","endLine":1087,"endColumn":55,"suggestions":"48041"},{"ruleId":"45357","severity":2,"message":"45358","line":1864,"column":54,"nodeType":"45359","messageId":"45360","endLine":1864,"endColumn":57,"suggestions":"48042"},{"ruleId":"45357","severity":2,"message":"45358","line":2165,"column":52,"nodeType":"45359","messageId":"45360","endLine":2165,"endColumn":55,"suggestions":"48043"},{"ruleId":"45357","severity":2,"message":"45358","line":2186,"column":52,"nodeType":"45359","messageId":"45360","endLine":2186,"endColumn":55,"suggestions":"48044"},{"ruleId":"45357","severity":2,"message":"45358","line":2219,"column":52,"nodeType":"45359","messageId":"45360","endLine":2219,"endColumn":55,"suggestions":"48045"},{"ruleId":"45357","severity":2,"message":"45358","line":2403,"column":30,"nodeType":"45359","messageId":"45360","endLine":2403,"endColumn":33,"suggestions":"48046"},{"ruleId":"45357","severity":2,"message":"45358","line":20,"column":40,"nodeType":"45359","messageId":"45360","endLine":20,"endColumn":43,"suggestions":"48047"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":40,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":43,"suggestions":"48048"},{"ruleId":"45357","severity":2,"message":"45358","line":46,"column":75,"nodeType":"45359","messageId":"45360","endLine":46,"endColumn":78,"suggestions":"48049"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":23,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":26,"suggestions":"48050"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":25,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":28,"suggestions":"48051"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":25,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":28,"suggestions":"48052"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":25,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":28,"suggestions":"48053"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":39,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":42,"suggestions":"48054"},{"ruleId":"45357","severity":2,"message":"45358","line":186,"column":37,"nodeType":"45359","messageId":"45360","endLine":186,"endColumn":40,"suggestions":"48055","suppressions":"48056"},{"ruleId":"45357","severity":2,"message":"45358","line":25,"column":32,"nodeType":"45359","messageId":"45360","endLine":25,"endColumn":35,"suggestions":"48057"},{"ruleId":"45357","severity":2,"message":"45358","line":130,"column":82,"nodeType":"45359","messageId":"45360","endLine":130,"endColumn":85,"suggestions":"48058"},{"ruleId":"45357","severity":2,"message":"45358","line":131,"column":78,"nodeType":"45359","messageId":"45360","endLine":131,"endColumn":81,"suggestions":"48059"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":79,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":82,"suggestions":"48060"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":88,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":91,"suggestions":"48061"},{"ruleId":"45357","severity":2,"message":"45358","line":134,"column":78,"nodeType":"45359","messageId":"45360","endLine":134,"endColumn":81,"suggestions":"48062"},{"ruleId":"45357","severity":2,"message":"45358","line":135,"column":83,"nodeType":"45359","messageId":"45360","endLine":135,"endColumn":86,"suggestions":"48063"},{"ruleId":"45357","severity":2,"message":"45358","line":150,"column":81,"nodeType":"45359","messageId":"45360","endLine":150,"endColumn":84,"suggestions":"48064"},{"ruleId":"45357","severity":2,"message":"45358","line":162,"column":84,"nodeType":"45359","messageId":"45360","endLine":162,"endColumn":87,"suggestions":"48065"},{"ruleId":"45357","severity":2,"message":"45358","line":202,"column":78,"nodeType":"45359","messageId":"45360","endLine":202,"endColumn":81,"suggestions":"48066"},{"ruleId":"45357","severity":2,"message":"45358","line":203,"column":79,"nodeType":"45359","messageId":"45360","endLine":203,"endColumn":82,"suggestions":"48067"},{"ruleId":"45357","severity":2,"message":"45358","line":212,"column":78,"nodeType":"45359","messageId":"45360","endLine":212,"endColumn":81,"suggestions":"48068"},{"ruleId":"45357","severity":2,"message":"45358","line":213,"column":79,"nodeType":"45359","messageId":"45360","endLine":213,"endColumn":82,"suggestions":"48069"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":43,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":46,"suggestions":"48070"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":43,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":46,"suggestions":"48071"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":43,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":46,"suggestions":"48072"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":43,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":46,"suggestions":"48073"},{"ruleId":"45357","severity":2,"message":"45358","line":124,"column":43,"nodeType":"45359","messageId":"45360","endLine":124,"endColumn":46,"suggestions":"48074"},{"ruleId":"45357","severity":2,"message":"45358","line":139,"column":43,"nodeType":"45359","messageId":"45360","endLine":139,"endColumn":46,"suggestions":"48075"},{"ruleId":"45357","severity":2,"message":"45358","line":157,"column":43,"nodeType":"45359","messageId":"45360","endLine":157,"endColumn":46,"suggestions":"48076"},{"ruleId":"45357","severity":2,"message":"45358","line":182,"column":43,"nodeType":"45359","messageId":"45360","endLine":182,"endColumn":46,"suggestions":"48077"},{"ruleId":"45357","severity":2,"message":"45358","line":204,"column":43,"nodeType":"45359","messageId":"45360","endLine":204,"endColumn":46,"suggestions":"48078"},{"ruleId":"45357","severity":2,"message":"45358","line":226,"column":43,"nodeType":"45359","messageId":"45360","endLine":226,"endColumn":46,"suggestions":"48079"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":20,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":23,"suggestions":"48080"},{"ruleId":"45357","severity":2,"message":"45358","line":112,"column":28,"nodeType":"45359","messageId":"45360","endLine":112,"endColumn":31,"suggestions":"48081"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":20,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":23,"suggestions":"48082"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":20,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":23,"suggestions":"48083"},{"ruleId":"45357","severity":2,"message":"45358","line":20,"column":24,"nodeType":"45359","messageId":"45360","endLine":20,"endColumn":27,"suggestions":"48084"},{"ruleId":"45357","severity":2,"message":"45358","line":32,"column":93,"nodeType":"45359","messageId":"45360","endLine":32,"endColumn":96,"suggestions":"48085"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":95,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":98,"suggestions":"48086"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":39,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":42,"suggestions":"48087"},{"ruleId":"45357","severity":2,"message":"45358","line":27,"column":24,"nodeType":"45359","messageId":"45360","endLine":27,"endColumn":27,"suggestions":"48088"},{"ruleId":"45357","severity":2,"message":"45358","line":68,"column":43,"nodeType":"45359","messageId":"45360","endLine":68,"endColumn":46,"suggestions":"48089"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":43,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":46,"suggestions":"48090"},{"ruleId":"45357","severity":2,"message":"45358","line":23,"column":21,"nodeType":"45359","messageId":"45360","endLine":23,"endColumn":24,"suggestions":"48091"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":21,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":24,"suggestions":"48092"},{"ruleId":"45357","severity":2,"message":"45358","line":56,"column":78,"nodeType":"45359","messageId":"45360","endLine":56,"endColumn":81,"suggestions":"48093"},{"ruleId":"45357","severity":2,"message":"45358","line":37,"column":34,"nodeType":"45359","messageId":"45360","endLine":37,"endColumn":37,"suggestions":"48094"},{"ruleId":"45357","severity":2,"message":"45358","line":43,"column":34,"nodeType":"45359","messageId":"45360","endLine":43,"endColumn":37,"suggestions":"48095"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":34,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":37,"suggestions":"48096"},{"ruleId":"45357","severity":2,"message":"45358","line":53,"column":33,"nodeType":"45359","messageId":"45360","endLine":53,"endColumn":36,"suggestions":"48097"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":33,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":36,"suggestions":"48098"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":33,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":36,"suggestions":"48099"},{"ruleId":"45357","severity":2,"message":"45358","line":89,"column":33,"nodeType":"45359","messageId":"45360","endLine":89,"endColumn":36,"suggestions":"48100"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":46,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":49,"suggestions":"48101"},{"ruleId":"45357","severity":2,"message":"45358","line":100,"column":33,"nodeType":"45359","messageId":"45360","endLine":100,"endColumn":36,"suggestions":"48102"},{"ruleId":"45357","severity":2,"message":"45358","line":112,"column":19,"nodeType":"45359","messageId":"45360","endLine":112,"endColumn":22,"suggestions":"48103"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":16,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":19,"suggestions":"48104"},{"ruleId":"45357","severity":2,"message":"45358","line":120,"column":33,"nodeType":"45359","messageId":"45360","endLine":120,"endColumn":36,"suggestions":"48105"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":11,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":14,"suggestions":"48106"},{"ruleId":"45357","severity":2,"message":"45358","line":141,"column":33,"nodeType":"45359","messageId":"45360","endLine":141,"endColumn":36,"suggestions":"48107"},{"ruleId":"45357","severity":2,"message":"45358","line":146,"column":35,"nodeType":"45359","messageId":"45360","endLine":146,"endColumn":38,"suggestions":"48108"},{"ruleId":"45357","severity":2,"message":"45358","line":147,"column":35,"nodeType":"45359","messageId":"45360","endLine":147,"endColumn":38,"suggestions":"48109"},{"ruleId":"45357","severity":2,"message":"45358","line":163,"column":35,"nodeType":"45359","messageId":"45360","endLine":163,"endColumn":38,"suggestions":"48110"},{"ruleId":"45357","severity":2,"message":"45358","line":181,"column":35,"nodeType":"45359","messageId":"45360","endLine":181,"endColumn":38,"suggestions":"48111"},{"ruleId":"45357","severity":2,"message":"45358","line":187,"column":35,"nodeType":"45359","messageId":"45360","endLine":187,"endColumn":38,"suggestions":"48112"},{"ruleId":"45357","severity":2,"message":"45358","line":198,"column":31,"nodeType":"45359","messageId":"45360","endLine":198,"endColumn":34,"suggestions":"48113"},{"ruleId":"45357","severity":2,"message":"45358","line":204,"column":31,"nodeType":"45359","messageId":"45360","endLine":204,"endColumn":34,"suggestions":"48114"},{"ruleId":"45357","severity":2,"message":"45358","line":206,"column":18,"nodeType":"45359","messageId":"45360","endLine":206,"endColumn":21,"suggestions":"48115"},{"ruleId":"45357","severity":2,"message":"45358","line":212,"column":31,"nodeType":"45359","messageId":"45360","endLine":212,"endColumn":34,"suggestions":"48116"},{"ruleId":"45357","severity":2,"message":"45358","line":214,"column":18,"nodeType":"45359","messageId":"45360","endLine":214,"endColumn":21,"suggestions":"48117"},{"ruleId":"45357","severity":2,"message":"45358","line":222,"column":58,"nodeType":"45359","messageId":"45360","endLine":222,"endColumn":61,"suggestions":"48118"},{"ruleId":"45357","severity":2,"message":"45358","line":232,"column":58,"nodeType":"45359","messageId":"45360","endLine":232,"endColumn":61,"suggestions":"48119"},{"ruleId":"45357","severity":2,"message":"45358","line":270,"column":30,"nodeType":"45359","messageId":"45360","endLine":270,"endColumn":33,"suggestions":"48120"},{"ruleId":"45357","severity":2,"message":"45358","line":279,"column":18,"nodeType":"45359","messageId":"45360","endLine":279,"endColumn":21,"suggestions":"48121"},{"ruleId":"45357","severity":2,"message":"45358","line":292,"column":18,"nodeType":"45359","messageId":"45360","endLine":292,"endColumn":21,"suggestions":"48122"},{"ruleId":"45357","severity":2,"message":"45358","line":294,"column":51,"nodeType":"45359","messageId":"45360","endLine":294,"endColumn":54,"suggestions":"48123"},{"ruleId":"45357","severity":2,"message":"45358","line":301,"column":36,"nodeType":"45359","messageId":"45360","endLine":301,"endColumn":39,"suggestions":"48124"},{"ruleId":"45357","severity":2,"message":"45358","line":302,"column":18,"nodeType":"45359","messageId":"45360","endLine":302,"endColumn":21,"suggestions":"48125"},{"ruleId":"45357","severity":2,"message":"45358","line":303,"column":37,"nodeType":"45359","messageId":"45360","endLine":303,"endColumn":40,"suggestions":"48126"},{"ruleId":"45357","severity":2,"message":"45358","line":308,"column":37,"nodeType":"45359","messageId":"45360","endLine":308,"endColumn":40,"suggestions":"48127"},{"ruleId":"45357","severity":2,"message":"45358","line":309,"column":18,"nodeType":"45359","messageId":"45360","endLine":309,"endColumn":21,"suggestions":"48128"},{"ruleId":"45357","severity":2,"message":"45358","line":319,"column":51,"nodeType":"45359","messageId":"45360","endLine":319,"endColumn":54,"suggestions":"48129"},{"ruleId":"45357","severity":2,"message":"45358","line":337,"column":18,"nodeType":"45359","messageId":"45360","endLine":337,"endColumn":21,"suggestions":"48130"},{"ruleId":"45357","severity":2,"message":"45358","line":341,"column":18,"nodeType":"45359","messageId":"45360","endLine":341,"endColumn":21,"suggestions":"48131"},{"ruleId":"45357","severity":2,"message":"45358","line":350,"column":51,"nodeType":"45359","messageId":"45360","endLine":350,"endColumn":54,"suggestions":"48132"},{"ruleId":"45357","severity":2,"message":"45358","line":358,"column":18,"nodeType":"45359","messageId":"45360","endLine":358,"endColumn":21,"suggestions":"48133"},{"ruleId":"45357","severity":2,"message":"45358","line":361,"column":18,"nodeType":"45359","messageId":"45360","endLine":361,"endColumn":21,"suggestions":"48134"},{"ruleId":"45357","severity":2,"message":"45358","line":369,"column":37,"nodeType":"45359","messageId":"45360","endLine":369,"endColumn":40,"suggestions":"48135"},{"ruleId":"45357","severity":2,"message":"45358","line":375,"column":37,"nodeType":"45359","messageId":"45360","endLine":375,"endColumn":40,"suggestions":"48136"},{"ruleId":"45357","severity":2,"message":"45358","line":389,"column":39,"nodeType":"45359","messageId":"45360","endLine":389,"endColumn":42,"suggestions":"48137"},{"ruleId":"45357","severity":2,"message":"45358","line":400,"column":18,"nodeType":"45359","messageId":"45360","endLine":400,"endColumn":21,"suggestions":"48138"},{"ruleId":"45357","severity":2,"message":"45358","line":403,"column":18,"nodeType":"45359","messageId":"45360","endLine":403,"endColumn":21,"suggestions":"48139"},{"ruleId":"45357","severity":2,"message":"45358","line":420,"column":51,"nodeType":"45359","messageId":"45360","endLine":420,"endColumn":54,"suggestions":"48140"},{"ruleId":"45357","severity":2,"message":"45358","line":429,"column":18,"nodeType":"45359","messageId":"45360","endLine":429,"endColumn":21,"suggestions":"48141"},{"ruleId":"45357","severity":2,"message":"45358","line":432,"column":18,"nodeType":"45359","messageId":"45360","endLine":432,"endColumn":21,"suggestions":"48142"},{"ruleId":"45357","severity":2,"message":"45358","line":440,"column":51,"nodeType":"45359","messageId":"45360","endLine":440,"endColumn":54,"suggestions":"48143"},{"ruleId":"45357","severity":2,"message":"45358","line":447,"column":18,"nodeType":"45359","messageId":"45360","endLine":447,"endColumn":21,"suggestions":"48144"},{"ruleId":"45357","severity":2,"message":"45358","line":450,"column":18,"nodeType":"45359","messageId":"45360","endLine":450,"endColumn":21,"suggestions":"48145"},{"ruleId":"45357","severity":2,"message":"45358","line":458,"column":51,"nodeType":"45359","messageId":"45360","endLine":458,"endColumn":54,"suggestions":"48146"},{"ruleId":"45357","severity":2,"message":"45358","line":465,"column":18,"nodeType":"45359","messageId":"45360","endLine":465,"endColumn":21,"suggestions":"48147"},{"ruleId":"45357","severity":2,"message":"45358","line":469,"column":18,"nodeType":"45359","messageId":"45360","endLine":469,"endColumn":21,"suggestions":"48148"},{"ruleId":"45357","severity":2,"message":"45358","line":476,"column":37,"nodeType":"45359","messageId":"45360","endLine":476,"endColumn":40,"suggestions":"48149"},{"ruleId":"45357","severity":2,"message":"45358","line":478,"column":18,"nodeType":"45359","messageId":"45360","endLine":478,"endColumn":21,"suggestions":"48150"},{"ruleId":"45357","severity":2,"message":"45358","line":485,"column":37,"nodeType":"45359","messageId":"45360","endLine":485,"endColumn":40,"suggestions":"48151"},{"ruleId":"45357","severity":2,"message":"45358","line":13,"column":17,"nodeType":"45359","messageId":"45360","endLine":13,"endColumn":20,"suggestions":"48152"},{"ruleId":"45357","severity":2,"message":"45358","line":15,"column":34,"nodeType":"45359","messageId":"45360","endLine":15,"endColumn":37,"suggestions":"48153"},{"ruleId":"45357","severity":2,"message":"45358","line":15,"column":48,"nodeType":"45359","messageId":"45360","endLine":15,"endColumn":51,"suggestions":"48154"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":39,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":42,"suggestions":"48155"},{"ruleId":"45357","severity":2,"message":"45358","line":73,"column":48,"nodeType":"45359","messageId":"45360","endLine":73,"endColumn":51,"suggestions":"48156"},{"ruleId":"45357","severity":2,"message":"45358","line":96,"column":48,"nodeType":"45359","messageId":"45360","endLine":96,"endColumn":51,"suggestions":"48157"},{"ruleId":"45357","severity":2,"message":"45358","line":43,"column":43,"nodeType":"45359","messageId":"45360","endLine":43,"endColumn":46,"suggestions":"48158"},{"ruleId":"45357","severity":2,"message":"45358","line":57,"column":43,"nodeType":"45359","messageId":"45360","endLine":57,"endColumn":46,"suggestions":"48159"},{"ruleId":"45357","severity":2,"message":"45358","line":78,"column":65,"nodeType":"45359","messageId":"45360","endLine":78,"endColumn":68,"suggestions":"48160"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":59,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":62,"suggestions":"48161"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":43,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":46,"suggestions":"48162"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":43,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":46,"suggestions":"48163"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":43,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":46,"suggestions":"48164"},{"ruleId":"45357","severity":2,"message":"45358","line":81,"column":45,"nodeType":"45359","messageId":"45360","endLine":81,"endColumn":48,"suggestions":"48165"},{"ruleId":"45357","severity":2,"message":"45358","line":101,"column":43,"nodeType":"45359","messageId":"45360","endLine":101,"endColumn":46,"suggestions":"48166"},{"ruleId":"45357","severity":2,"message":"45358","line":116,"column":43,"nodeType":"45359","messageId":"45360","endLine":116,"endColumn":46,"suggestions":"48167"},{"ruleId":"45357","severity":2,"message":"45358","line":35,"column":60,"nodeType":"45359","messageId":"45360","endLine":35,"endColumn":63,"suggestions":"48168"},{"ruleId":"45357","severity":2,"message":"45358","line":35,"column":79,"nodeType":"45359","messageId":"45360","endLine":35,"endColumn":82,"suggestions":"48169"},{"ruleId":"45357","severity":2,"message":"45358","line":155,"column":20,"nodeType":"45359","messageId":"45360","endLine":155,"endColumn":23,"suggestions":"48170"},{"ruleId":"45357","severity":2,"message":"45358","line":188,"column":10,"nodeType":"45359","messageId":"45360","endLine":188,"endColumn":13,"suggestions":"48171"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":45,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":48,"suggestions":"48172"},{"ruleId":"45357","severity":2,"message":"45358","line":139,"column":45,"nodeType":"45359","messageId":"45360","endLine":139,"endColumn":48,"suggestions":"48173"},{"ruleId":"45357","severity":2,"message":"45358","line":171,"column":43,"nodeType":"45359","messageId":"45360","endLine":171,"endColumn":46,"suggestions":"48174"},{"ruleId":"45357","severity":2,"message":"45358","line":219,"column":43,"nodeType":"45359","messageId":"45360","endLine":219,"endColumn":46,"suggestions":"48175"},{"ruleId":"45357","severity":2,"message":"45358","line":256,"column":43,"nodeType":"45359","messageId":"45360","endLine":256,"endColumn":46,"suggestions":"48176"},{"ruleId":"45357","severity":2,"message":"45358","line":295,"column":43,"nodeType":"45359","messageId":"45360","endLine":295,"endColumn":46,"suggestions":"48177"},{"ruleId":"45357","severity":2,"message":"45358","line":340,"column":43,"nodeType":"45359","messageId":"45360","endLine":340,"endColumn":46,"suggestions":"48178"},{"ruleId":"45357","severity":2,"message":"45358","line":396,"column":43,"nodeType":"45359","messageId":"45360","endLine":396,"endColumn":46,"suggestions":"48179"},{"ruleId":"45357","severity":2,"message":"45358","line":457,"column":43,"nodeType":"45359","messageId":"45360","endLine":457,"endColumn":46,"suggestions":"48180"},{"ruleId":"45357","severity":2,"message":"45358","line":506,"column":43,"nodeType":"45359","messageId":"45360","endLine":506,"endColumn":46,"suggestions":"48181"},{"ruleId":"45357","severity":2,"message":"45358","line":578,"column":43,"nodeType":"45359","messageId":"45360","endLine":578,"endColumn":46,"suggestions":"48182"},{"ruleId":"45357","severity":2,"message":"45358","line":642,"column":43,"nodeType":"45359","messageId":"45360","endLine":642,"endColumn":46,"suggestions":"48183"},{"ruleId":"45357","severity":2,"message":"45358","line":721,"column":43,"nodeType":"45359","messageId":"45360","endLine":721,"endColumn":46,"suggestions":"48184"},{"ruleId":"45357","severity":2,"message":"45358","line":802,"column":43,"nodeType":"45359","messageId":"45360","endLine":802,"endColumn":46,"suggestions":"48185"},{"ruleId":"45357","severity":2,"message":"45358","line":854,"column":43,"nodeType":"45359","messageId":"45360","endLine":854,"endColumn":46,"suggestions":"48186"},{"ruleId":"45357","severity":2,"message":"45358","line":919,"column":43,"nodeType":"45359","messageId":"45360","endLine":919,"endColumn":46,"suggestions":"48187"},{"ruleId":"45357","severity":2,"message":"45358","line":24,"column":21,"nodeType":"45359","messageId":"45360","endLine":24,"endColumn":24,"suggestions":"48188"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":65,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":68,"suggestions":"48189"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":59,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":62,"suggestions":"48190"},{"ruleId":"45357","severity":2,"message":"45358","line":141,"column":43,"nodeType":"45359","messageId":"45360","endLine":141,"endColumn":46,"suggestions":"48191"},{"ruleId":"45357","severity":2,"message":"45358","line":89,"column":43,"nodeType":"45359","messageId":"45360","endLine":89,"endColumn":46,"suggestions":"48192"},{"ruleId":"45357","severity":2,"message":"45358","line":120,"column":43,"nodeType":"45359","messageId":"45360","endLine":120,"endColumn":46,"suggestions":"48193"},{"ruleId":"45357","severity":2,"message":"45358","line":166,"column":43,"nodeType":"45359","messageId":"45360","endLine":166,"endColumn":46,"suggestions":"48194"},{"ruleId":"45357","severity":2,"message":"45358","line":177,"column":43,"nodeType":"45359","messageId":"45360","endLine":177,"endColumn":46,"suggestions":"48195"},{"ruleId":"45357","severity":2,"message":"45358","line":192,"column":45,"nodeType":"45359","messageId":"45360","endLine":192,"endColumn":48,"suggestions":"48196"},{"ruleId":"45357","severity":2,"message":"45358","line":221,"column":41,"nodeType":"45359","messageId":"45360","endLine":221,"endColumn":44,"suggestions":"48197"},{"ruleId":"45357","severity":2,"message":"45358","line":227,"column":57,"nodeType":"45359","messageId":"45360","endLine":227,"endColumn":60,"suggestions":"48198"},{"ruleId":"45357","severity":2,"message":"45358","line":236,"column":37,"nodeType":"45359","messageId":"45360","endLine":236,"endColumn":40,"suggestions":"48199"},{"ruleId":"45357","severity":2,"message":"45358","line":242,"column":56,"nodeType":"45359","messageId":"45360","endLine":242,"endColumn":59,"suggestions":"48200"},{"ruleId":"45357","severity":2,"message":"45358","line":278,"column":43,"nodeType":"45359","messageId":"45360","endLine":278,"endColumn":46,"suggestions":"48201"},{"ruleId":"45357","severity":2,"message":"45358","line":287,"column":34,"nodeType":"45359","messageId":"45360","endLine":287,"endColumn":37,"suggestions":"48202"},{"ruleId":"45357","severity":2,"message":"45358","line":287,"column":71,"nodeType":"45359","messageId":"45360","endLine":287,"endColumn":74,"suggestions":"48203"},{"ruleId":"45357","severity":2,"message":"45358","line":298,"column":42,"nodeType":"45359","messageId":"45360","endLine":298,"endColumn":45,"suggestions":"48204"},{"ruleId":"45357","severity":2,"message":"45358","line":310,"column":43,"nodeType":"45359","messageId":"45360","endLine":310,"endColumn":46,"suggestions":"48205"},{"ruleId":"45357","severity":2,"message":"45358","line":315,"column":43,"nodeType":"45359","messageId":"45360","endLine":315,"endColumn":46,"suggestions":"48206"},{"ruleId":"45357","severity":2,"message":"45358","line":377,"column":45,"nodeType":"45359","messageId":"45360","endLine":377,"endColumn":48,"suggestions":"48207"},{"ruleId":"45357","severity":2,"message":"45358","line":430,"column":42,"nodeType":"45359","messageId":"45360","endLine":430,"endColumn":45,"suggestions":"48208"},{"ruleId":"45357","severity":2,"message":"45358","line":435,"column":45,"nodeType":"45359","messageId":"45360","endLine":435,"endColumn":48,"suggestions":"48209"},{"ruleId":"45357","severity":2,"message":"45358","line":457,"column":43,"nodeType":"45359","messageId":"45360","endLine":457,"endColumn":46,"suggestions":"48210"},{"ruleId":"45357","severity":2,"message":"45358","line":508,"column":45,"nodeType":"45359","messageId":"45360","endLine":508,"endColumn":48,"suggestions":"48211"},{"ruleId":"45357","severity":2,"message":"45358","line":559,"column":45,"nodeType":"45359","messageId":"45360","endLine":559,"endColumn":48,"suggestions":"48212"},{"ruleId":"45357","severity":2,"message":"45358","line":582,"column":43,"nodeType":"45359","messageId":"45360","endLine":582,"endColumn":46,"suggestions":"48213"},{"ruleId":"45357","severity":2,"message":"45358","line":603,"column":43,"nodeType":"45359","messageId":"45360","endLine":603,"endColumn":46,"suggestions":"48214"},{"ruleId":"45357","severity":2,"message":"45358","line":630,"column":43,"nodeType":"45359","messageId":"45360","endLine":630,"endColumn":46,"suggestions":"48215"},{"ruleId":"45357","severity":2,"message":"45358","line":663,"column":43,"nodeType":"45359","messageId":"45360","endLine":663,"endColumn":46,"suggestions":"48216"},{"ruleId":"45357","severity":2,"message":"45358","line":692,"column":43,"nodeType":"45359","messageId":"45360","endLine":692,"endColumn":46,"suggestions":"48217"},{"ruleId":"45357","severity":2,"message":"45358","line":739,"column":43,"nodeType":"45359","messageId":"45360","endLine":739,"endColumn":46,"suggestions":"48218"},{"ruleId":"45357","severity":2,"message":"45358","line":754,"column":17,"nodeType":"45359","messageId":"45360","endLine":754,"endColumn":20,"suggestions":"48219"},{"ruleId":"45357","severity":2,"message":"45358","line":755,"column":20,"nodeType":"45359","messageId":"45360","endLine":755,"endColumn":23,"suggestions":"48220"},{"ruleId":"45357","severity":2,"message":"45358","line":784,"column":43,"nodeType":"45359","messageId":"45360","endLine":784,"endColumn":46,"suggestions":"48221"},{"ruleId":"45357","severity":2,"message":"45358","line":804,"column":85,"nodeType":"45359","messageId":"45360","endLine":804,"endColumn":88,"suggestions":"48222"},{"ruleId":"45357","severity":2,"message":"45358","line":816,"column":43,"nodeType":"45359","messageId":"45360","endLine":816,"endColumn":46,"suggestions":"48223"},{"ruleId":"45357","severity":2,"message":"45358","line":832,"column":90,"nodeType":"45359","messageId":"45360","endLine":832,"endColumn":93,"suggestions":"48224"},{"ruleId":"45357","severity":2,"message":"45358","line":845,"column":43,"nodeType":"45359","messageId":"45360","endLine":845,"endColumn":46,"suggestions":"48225"},{"ruleId":"45357","severity":2,"message":"45358","line":902,"column":22,"nodeType":"45359","messageId":"45360","endLine":902,"endColumn":25,"suggestions":"48226"},{"ruleId":"45357","severity":2,"message":"45358","line":916,"column":22,"nodeType":"45359","messageId":"45360","endLine":916,"endColumn":25,"suggestions":"48227"},{"ruleId":"45357","severity":2,"message":"45358","line":928,"column":91,"nodeType":"45359","messageId":"45360","endLine":928,"endColumn":94,"suggestions":"48228"},{"ruleId":"45357","severity":2,"message":"45358","line":955,"column":45,"nodeType":"45359","messageId":"45360","endLine":955,"endColumn":48,"suggestions":"48229"},{"ruleId":"45357","severity":2,"message":"45358","line":964,"column":37,"nodeType":"45359","messageId":"45360","endLine":964,"endColumn":40,"suggestions":"48230"},{"ruleId":"45357","severity":2,"message":"45358","line":987,"column":43,"nodeType":"45359","messageId":"45360","endLine":987,"endColumn":46,"suggestions":"48231"},{"ruleId":"45357","severity":2,"message":"45358","line":991,"column":51,"nodeType":"45359","messageId":"45360","endLine":991,"endColumn":54,"suggestions":"48232"},{"ruleId":"45357","severity":2,"message":"45358","line":992,"column":49,"nodeType":"45359","messageId":"45360","endLine":992,"endColumn":52,"suggestions":"48233"},{"ruleId":"45357","severity":2,"message":"45358","line":993,"column":49,"nodeType":"45359","messageId":"45360","endLine":993,"endColumn":52,"suggestions":"48234"},{"ruleId":"45357","severity":2,"message":"45358","line":994,"column":62,"nodeType":"45359","messageId":"45360","endLine":994,"endColumn":65,"suggestions":"48235"},{"ruleId":"45357","severity":2,"message":"45358","line":995,"column":51,"nodeType":"45359","messageId":"45360","endLine":995,"endColumn":54,"suggestions":"48236"},{"ruleId":"45357","severity":2,"message":"45358","line":996,"column":52,"nodeType":"45359","messageId":"45360","endLine":996,"endColumn":55,"suggestions":"48237"},{"ruleId":"45357","severity":2,"message":"45358","line":997,"column":58,"nodeType":"45359","messageId":"45360","endLine":997,"endColumn":61,"suggestions":"48238"},{"ruleId":"45357","severity":2,"message":"45358","line":1006,"column":86,"nodeType":"45359","messageId":"45360","endLine":1006,"endColumn":89,"suggestions":"48239"},{"ruleId":"45357","severity":2,"message":"45358","line":1026,"column":43,"nodeType":"45359","messageId":"45360","endLine":1026,"endColumn":46,"suggestions":"48240"},{"ruleId":"45357","severity":2,"message":"45358","line":1074,"column":43,"nodeType":"45359","messageId":"45360","endLine":1074,"endColumn":46,"suggestions":"48241"},{"ruleId":"45357","severity":2,"message":"45358","line":1104,"column":43,"nodeType":"45359","messageId":"45360","endLine":1104,"endColumn":46,"suggestions":"48242"},{"ruleId":"45357","severity":2,"message":"45358","line":1108,"column":29,"nodeType":"45359","messageId":"45360","endLine":1108,"endColumn":32,"suggestions":"48243"},{"ruleId":"45357","severity":2,"message":"45358","line":1109,"column":14,"nodeType":"45359","messageId":"45360","endLine":1109,"endColumn":17,"suggestions":"48244"},{"ruleId":"45357","severity":2,"message":"45358","line":1109,"column":56,"nodeType":"45359","messageId":"45360","endLine":1109,"endColumn":59,"suggestions":"48245"},{"ruleId":"45357","severity":2,"message":"45358","line":1110,"column":14,"nodeType":"45359","messageId":"45360","endLine":1110,"endColumn":17,"suggestions":"48246"},{"ruleId":"45357","severity":2,"message":"45358","line":1110,"column":52,"nodeType":"45359","messageId":"45360","endLine":1110,"endColumn":55,"suggestions":"48247"},{"ruleId":"45357","severity":2,"message":"45358","line":1111,"column":40,"nodeType":"45359","messageId":"45360","endLine":1111,"endColumn":43,"suggestions":"48248"},{"ruleId":"45357","severity":2,"message":"45358","line":1112,"column":14,"nodeType":"45359","messageId":"45360","endLine":1112,"endColumn":17,"suggestions":"48249"},{"ruleId":"45357","severity":2,"message":"45358","line":1112,"column":65,"nodeType":"45359","messageId":"45360","endLine":1112,"endColumn":68,"suggestions":"48250"},{"ruleId":"45357","severity":2,"message":"45358","line":1113,"column":56,"nodeType":"45359","messageId":"45360","endLine":1113,"endColumn":59,"suggestions":"48251"},{"ruleId":"45357","severity":2,"message":"45358","line":1138,"column":45,"nodeType":"45359","messageId":"45360","endLine":1138,"endColumn":48,"suggestions":"48252"},{"ruleId":"45357","severity":2,"message":"45358","line":1199,"column":43,"nodeType":"45359","messageId":"45360","endLine":1199,"endColumn":46,"suggestions":"48253"},{"ruleId":"45357","severity":2,"message":"45358","line":1247,"column":45,"nodeType":"45359","messageId":"45360","endLine":1247,"endColumn":48,"suggestions":"48254"},{"ruleId":"45357","severity":2,"message":"45358","line":1266,"column":43,"nodeType":"45359","messageId":"45360","endLine":1266,"endColumn":46,"suggestions":"48255"},{"ruleId":"45357","severity":2,"message":"45358","line":1320,"column":45,"nodeType":"45359","messageId":"45360","endLine":1320,"endColumn":48,"suggestions":"48256"},{"ruleId":"45357","severity":2,"message":"45358","line":1369,"column":45,"nodeType":"45359","messageId":"45360","endLine":1369,"endColumn":48,"suggestions":"48257"},{"ruleId":"45357","severity":2,"message":"45358","line":1397,"column":43,"nodeType":"45359","messageId":"45360","endLine":1397,"endColumn":46,"suggestions":"48258"},{"ruleId":"45357","severity":2,"message":"45358","line":1434,"column":43,"nodeType":"45359","messageId":"45360","endLine":1434,"endColumn":46,"suggestions":"48259"},{"ruleId":"45357","severity":2,"message":"45358","line":1464,"column":43,"nodeType":"45359","messageId":"45360","endLine":1464,"endColumn":46,"suggestions":"48260"},{"ruleId":"45357","severity":2,"message":"45358","line":1488,"column":43,"nodeType":"45359","messageId":"45360","endLine":1488,"endColumn":46,"suggestions":"48261"},{"ruleId":"45357","severity":2,"message":"45358","line":1515,"column":90,"nodeType":"45359","messageId":"45360","endLine":1515,"endColumn":93,"suggestions":"48262"},{"ruleId":"45357","severity":2,"message":"45358","line":1527,"column":43,"nodeType":"45359","messageId":"45360","endLine":1527,"endColumn":46,"suggestions":"48263"},{"ruleId":"45357","severity":2,"message":"45358","line":1546,"column":40,"nodeType":"45359","messageId":"45360","endLine":1546,"endColumn":43,"suggestions":"48264"},{"ruleId":"45357","severity":2,"message":"45358","line":1551,"column":43,"nodeType":"45359","messageId":"45360","endLine":1551,"endColumn":46,"suggestions":"48265"},{"ruleId":"45357","severity":2,"message":"45358","line":1579,"column":43,"nodeType":"45359","messageId":"45360","endLine":1579,"endColumn":46,"suggestions":"48266"},{"ruleId":"45357","severity":2,"message":"45358","line":1598,"column":43,"nodeType":"45359","messageId":"45360","endLine":1598,"endColumn":46,"suggestions":"48267"},{"ruleId":"45357","severity":2,"message":"45358","line":1599,"column":46,"nodeType":"45359","messageId":"45360","endLine":1599,"endColumn":49,"suggestions":"48268"},{"ruleId":"45357","severity":2,"message":"45358","line":1621,"column":43,"nodeType":"45359","messageId":"45360","endLine":1621,"endColumn":46,"suggestions":"48269"},{"ruleId":"45357","severity":2,"message":"45358","line":1622,"column":46,"nodeType":"45359","messageId":"45360","endLine":1622,"endColumn":49,"suggestions":"48270"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":24,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":27,"suggestions":"48271"},{"ruleId":"45357","severity":2,"message":"45358","line":134,"column":15,"nodeType":"45359","messageId":"45360","endLine":134,"endColumn":18,"suggestions":"48272"},{"ruleId":"45357","severity":2,"message":"45358","line":35,"column":17,"nodeType":"45359","messageId":"45360","endLine":35,"endColumn":20,"suggestions":"48273"},{"ruleId":"45357","severity":2,"message":"45358","line":36,"column":34,"nodeType":"45359","messageId":"45360","endLine":36,"endColumn":37,"suggestions":"48274"},{"ruleId":"45357","severity":2,"message":"45358","line":36,"column":48,"nodeType":"45359","messageId":"45360","endLine":36,"endColumn":51,"suggestions":"48275"},{"ruleId":"45357","severity":2,"message":"45358","line":56,"column":46,"nodeType":"45359","messageId":"45360","endLine":56,"endColumn":49,"suggestions":"48276"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":46,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":49,"suggestions":"48277"},{"ruleId":"45357","severity":2,"message":"45358","line":78,"column":46,"nodeType":"45359","messageId":"45360","endLine":78,"endColumn":49,"suggestions":"48278"},{"ruleId":"45357","severity":2,"message":"45358","line":148,"column":46,"nodeType":"45359","messageId":"45360","endLine":148,"endColumn":49,"suggestions":"48279"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":49,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":52,"suggestions":"48280"},{"ruleId":"45357","severity":2,"message":"45358","line":96,"column":47,"nodeType":"45359","messageId":"45360","endLine":96,"endColumn":50,"suggestions":"48281"},{"ruleId":"45357","severity":2,"message":"45358","line":216,"column":17,"nodeType":"45359","messageId":"45360","endLine":216,"endColumn":20,"suggestions":"48282"},{"ruleId":"45357","severity":2,"message":"45358","line":226,"column":38,"nodeType":"45359","messageId":"45360","endLine":226,"endColumn":41,"suggestions":"48283"},{"ruleId":"45357","severity":2,"message":"45358","line":229,"column":18,"nodeType":"45359","messageId":"45360","endLine":229,"endColumn":21,"suggestions":"48284"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":61,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":64,"suggestions":"48285"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":16,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":19,"suggestions":"48286"},{"ruleId":"45357","severity":2,"message":"45358","line":551,"column":18,"nodeType":"45359","messageId":"45360","endLine":551,"endColumn":21,"suggestions":"48287"},{"ruleId":"45357","severity":2,"message":"45358","line":569,"column":18,"nodeType":"45359","messageId":"45360","endLine":569,"endColumn":21,"suggestions":"48288"},{"ruleId":"45357","severity":2,"message":"45358","line":156,"column":22,"nodeType":"45359","messageId":"45360","endLine":156,"endColumn":25,"suggestions":"48289"},{"ruleId":"45357","severity":2,"message":"45358","line":81,"column":43,"nodeType":"45359","messageId":"45360","endLine":81,"endColumn":46,"suggestions":"48290"},{"ruleId":"45357","severity":2,"message":"45358","line":102,"column":46,"nodeType":"45359","messageId":"45360","endLine":102,"endColumn":49,"suggestions":"48291"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":46,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":49,"suggestions":"48292"},{"ruleId":"45357","severity":2,"message":"45358","line":124,"column":46,"nodeType":"45359","messageId":"45360","endLine":124,"endColumn":49,"suggestions":"48293"},{"ruleId":"45357","severity":2,"message":"45358","line":131,"column":17,"nodeType":"45359","messageId":"45360","endLine":131,"endColumn":20,"suggestions":"48294"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":34,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":37,"suggestions":"48295"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":48,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":51,"suggestions":"48296"},{"ruleId":"45357","severity":2,"message":"45358","line":183,"column":46,"nodeType":"45359","messageId":"45360","endLine":183,"endColumn":49,"suggestions":"48297"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":9,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":12,"suggestions":"48298"},{"ruleId":"45357","severity":2,"message":"45358","line":44,"column":9,"nodeType":"45359","messageId":"45360","endLine":44,"endColumn":12,"suggestions":"48299"},{"ruleId":"45357","severity":2,"message":"45358","line":68,"column":9,"nodeType":"45359","messageId":"45360","endLine":68,"endColumn":12,"suggestions":"48300"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":9,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":12,"suggestions":"48301"},{"ruleId":"45357","severity":2,"message":"45358","line":53,"column":14,"nodeType":"45359","messageId":"45360","endLine":53,"endColumn":17,"suggestions":"48302"},{"ruleId":"45357","severity":2,"message":"45358","line":13,"column":12,"nodeType":"45359","messageId":"45360","endLine":13,"endColumn":15,"suggestions":"48303"},{"ruleId":"45357","severity":2,"message":"45358","line":14,"column":29,"nodeType":"45359","messageId":"45360","endLine":14,"endColumn":32,"suggestions":"48304"},{"ruleId":"45357","severity":2,"message":"45358","line":19,"column":75,"nodeType":"45359","messageId":"45360","endLine":19,"endColumn":78,"suggestions":"48305"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":75,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":78,"suggestions":"48306"},{"ruleId":"45357","severity":2,"message":"45358","line":68,"column":15,"nodeType":"45359","messageId":"45360","endLine":68,"endColumn":18,"suggestions":"48307"},{"ruleId":"45357","severity":2,"message":"45358","line":69,"column":20,"nodeType":"45359","messageId":"45360","endLine":69,"endColumn":23,"suggestions":"48308"},{"ruleId":"45357","severity":2,"message":"45358","line":70,"column":80,"nodeType":"45359","messageId":"45360","endLine":70,"endColumn":83,"suggestions":"48309"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":75,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":78,"suggestions":"48310"},{"ruleId":"45357","severity":2,"message":"45358","line":10,"column":46,"nodeType":"45359","messageId":"45360","endLine":10,"endColumn":49,"suggestions":"48311"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":11,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":14,"suggestions":"48312"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":43,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":46,"suggestions":"48313"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":10,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":13,"suggestions":"48314"},{"ruleId":"45357","severity":2,"message":"45358","line":115,"column":43,"nodeType":"45359","messageId":"45360","endLine":115,"endColumn":46,"suggestions":"48315"},{"ruleId":"45357","severity":2,"message":"45358","line":148,"column":10,"nodeType":"45359","messageId":"45360","endLine":148,"endColumn":13,"suggestions":"48316"},{"ruleId":"45357","severity":2,"message":"45358","line":150,"column":43,"nodeType":"45359","messageId":"45360","endLine":150,"endColumn":46,"suggestions":"48317"},{"ruleId":"45357","severity":2,"message":"45358","line":50,"column":11,"nodeType":"45359","messageId":"45360","endLine":50,"endColumn":14,"suggestions":"48318"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":8,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":11,"suggestions":"48319"},{"ruleId":"45357","severity":2,"message":"45358","line":91,"column":39,"nodeType":"45359","messageId":"45360","endLine":91,"endColumn":42,"suggestions":"48320"},{"ruleId":"45357","severity":2,"message":"45358","line":128,"column":35,"nodeType":"45359","messageId":"45360","endLine":128,"endColumn":38,"suggestions":"48321"},{"ruleId":"45357","severity":2,"message":"45358","line":157,"column":35,"nodeType":"45359","messageId":"45360","endLine":157,"endColumn":38,"suggestions":"48322"},{"ruleId":"45357","severity":2,"message":"45358","line":194,"column":22,"nodeType":"45359","messageId":"45360","endLine":194,"endColumn":25,"suggestions":"48323"},{"ruleId":"45357","severity":2,"message":"45358","line":226,"column":26,"nodeType":"45359","messageId":"45360","endLine":226,"endColumn":29,"suggestions":"48324"},{"ruleId":"45357","severity":2,"message":"45358","line":212,"column":26,"nodeType":"45359","messageId":"45360","endLine":212,"endColumn":29,"suggestions":"48325"},{"ruleId":"45357","severity":2,"message":"45358","line":66,"column":47,"nodeType":"45359","messageId":"45360","endLine":66,"endColumn":50,"suggestions":"48326"},{"ruleId":"45357","severity":2,"message":"45358","line":108,"column":43,"nodeType":"45359","messageId":"45360","endLine":108,"endColumn":46,"suggestions":"48327"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":42,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":45,"suggestions":"48328"},{"ruleId":"45357","severity":2,"message":"45358","line":117,"column":40,"nodeType":"45359","messageId":"45360","endLine":117,"endColumn":43,"suggestions":"48329"},{"ruleId":"45357","severity":2,"message":"45358","line":21,"column":35,"nodeType":"45359","messageId":"45360","endLine":21,"endColumn":38,"suggestions":"48330"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":35,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":38,"suggestions":"48331"},{"ruleId":"45357","severity":2,"message":"45358","line":59,"column":30,"nodeType":"45359","messageId":"45360","endLine":59,"endColumn":33,"suggestions":"48332"},{"ruleId":"45357","severity":2,"message":"45358","line":77,"column":30,"nodeType":"45359","messageId":"45360","endLine":77,"endColumn":33,"suggestions":"48333"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":43,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":46,"suggestions":"48334"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":65,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":68,"suggestions":"48335"},{"ruleId":"45357","severity":2,"message":"45358","line":89,"column":59,"nodeType":"45359","messageId":"45360","endLine":89,"endColumn":62,"suggestions":"48336"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":61,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":64,"suggestions":"48337"},{"ruleId":"45357","severity":2,"message":"45358","line":143,"column":43,"nodeType":"45359","messageId":"45360","endLine":143,"endColumn":46,"suggestions":"48338"},{"ruleId":"45357","severity":2,"message":"45358","line":175,"column":57,"nodeType":"45359","messageId":"45360","endLine":175,"endColumn":60,"suggestions":"48339"},{"ruleId":"45357","severity":2,"message":"45358","line":176,"column":61,"nodeType":"45359","messageId":"45360","endLine":176,"endColumn":64,"suggestions":"48340"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":37,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":40,"suggestions":"48341"},{"ruleId":"45357","severity":2,"message":"45358","line":77,"column":28,"nodeType":"45359","messageId":"45360","endLine":77,"endColumn":31,"suggestions":"48342"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":10,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":13,"suggestions":"48343"},{"ruleId":"45357","severity":2,"message":"45358","line":142,"column":10,"nodeType":"45359","messageId":"45360","endLine":142,"endColumn":13,"suggestions":"48344"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":19,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":22,"suggestions":"48345"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":22,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":25,"suggestions":"48346"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":32,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":35,"suggestions":"48347"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":60,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":63,"suggestions":"48348"},{"ruleId":"45357","severity":2,"message":"45358","line":124,"column":46,"nodeType":"45359","messageId":"45360","endLine":124,"endColumn":49,"suggestions":"48349"},{"ruleId":"45357","severity":2,"message":"45358","line":131,"column":27,"nodeType":"45359","messageId":"45360","endLine":131,"endColumn":30,"suggestions":"48350"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":24,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":27,"suggestions":"48351"},{"ruleId":"45357","severity":2,"message":"45358","line":76,"column":25,"nodeType":"45359","messageId":"45360","endLine":76,"endColumn":28,"suggestions":"48352"},{"ruleId":"45357","severity":2,"message":"45358","line":77,"column":25,"nodeType":"45359","messageId":"45360","endLine":77,"endColumn":28,"suggestions":"48353"},{"ruleId":"45357","severity":2,"message":"45358","line":78,"column":36,"nodeType":"45359","messageId":"45360","endLine":78,"endColumn":39,"suggestions":"48354"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":22,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":25,"suggestions":"48355"},{"ruleId":"45357","severity":2,"message":"45358","line":104,"column":28,"nodeType":"45359","messageId":"45360","endLine":104,"endColumn":31,"suggestions":"48356"},{"ruleId":"45357","severity":2,"message":"45358","line":105,"column":28,"nodeType":"45359","messageId":"45360","endLine":105,"endColumn":31,"suggestions":"48357"},{"ruleId":"45357","severity":2,"message":"45358","line":114,"column":32,"nodeType":"45359","messageId":"45360","endLine":114,"endColumn":35,"suggestions":"48358"},{"ruleId":"45357","severity":2,"message":"45358","line":406,"column":31,"nodeType":"45359","messageId":"45360","endLine":406,"endColumn":34,"suggestions":"48359"},{"ruleId":"45357","severity":2,"message":"45358","line":407,"column":31,"nodeType":"45359","messageId":"45360","endLine":407,"endColumn":34,"suggestions":"48360"},{"ruleId":"45357","severity":2,"message":"45358","line":408,"column":14,"nodeType":"45359","messageId":"45360","endLine":408,"endColumn":17,"suggestions":"48361"},{"ruleId":"45357","severity":2,"message":"45358","line":408,"column":40,"nodeType":"45359","messageId":"45360","endLine":408,"endColumn":43,"suggestions":"48362"},{"ruleId":"45357","severity":2,"message":"45358","line":409,"column":14,"nodeType":"45359","messageId":"45360","endLine":409,"endColumn":17,"suggestions":"48363"},{"ruleId":"45357","severity":2,"message":"45358","line":410,"column":20,"nodeType":"45359","messageId":"45360","endLine":410,"endColumn":23,"suggestions":"48364"},{"ruleId":"45357","severity":2,"message":"45358","line":413,"column":31,"nodeType":"45359","messageId":"45360","endLine":413,"endColumn":34,"suggestions":"48365"},{"ruleId":"45357","severity":2,"message":"45358","line":414,"column":32,"nodeType":"45359","messageId":"45360","endLine":414,"endColumn":35,"suggestions":"48366"},{"ruleId":"45357","severity":2,"message":"45358","line":414,"column":70,"nodeType":"45359","messageId":"45360","endLine":414,"endColumn":73,"suggestions":"48367"},{"ruleId":"45357","severity":2,"message":"45358","line":415,"column":32,"nodeType":"45359","messageId":"45360","endLine":415,"endColumn":35,"suggestions":"48368"},{"ruleId":"45357","severity":2,"message":"45358","line":415,"column":46,"nodeType":"45359","messageId":"45360","endLine":415,"endColumn":49,"suggestions":"48369"},{"ruleId":"45357","severity":2,"message":"45358","line":416,"column":31,"nodeType":"45359","messageId":"45360","endLine":416,"endColumn":34,"suggestions":"48370"},{"ruleId":"45357","severity":2,"message":"45358","line":417,"column":31,"nodeType":"45359","messageId":"45360","endLine":417,"endColumn":34,"suggestions":"48371"},{"ruleId":"45357","severity":2,"message":"45358","line":243,"column":63,"nodeType":"45359","messageId":"45360","endLine":243,"endColumn":66,"suggestions":"48372"},{"ruleId":"45357","severity":2,"message":"45358","line":91,"column":47,"nodeType":"45359","messageId":"45360","endLine":91,"endColumn":50,"suggestions":"48373"},{"ruleId":"45357","severity":2,"message":"45358","line":95,"column":47,"nodeType":"45359","messageId":"45360","endLine":95,"endColumn":50,"suggestions":"48374"},{"ruleId":"45357","severity":2,"message":"45358","line":100,"column":34,"nodeType":"45359","messageId":"45360","endLine":100,"endColumn":37,"suggestions":"48375"},{"ruleId":"45357","severity":2,"message":"45358","line":128,"column":47,"nodeType":"45359","messageId":"45360","endLine":128,"endColumn":50,"suggestions":"48376"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":47,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":50,"suggestions":"48377"},{"ruleId":"45357","severity":2,"message":"45358","line":137,"column":34,"nodeType":"45359","messageId":"45360","endLine":137,"endColumn":37,"suggestions":"48378"},{"ruleId":"45357","severity":2,"message":"45358","line":156,"column":48,"nodeType":"45359","messageId":"45360","endLine":156,"endColumn":51,"suggestions":"48379"},{"ruleId":"45357","severity":2,"message":"45358","line":159,"column":48,"nodeType":"45359","messageId":"45360","endLine":159,"endColumn":51,"suggestions":"48380"},{"ruleId":"45357","severity":2,"message":"45358","line":176,"column":45,"nodeType":"45359","messageId":"45360","endLine":176,"endColumn":48,"suggestions":"48381"},{"ruleId":"45357","severity":2,"message":"45358","line":383,"column":32,"nodeType":"45359","messageId":"45360","endLine":383,"endColumn":35,"suggestions":"48382"},{"ruleId":"45357","severity":2,"message":"45358","line":13,"column":15,"nodeType":"45359","messageId":"45360","endLine":13,"endColumn":18,"suggestions":"48383"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":15,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":18,"suggestions":"48384"},{"ruleId":"45357","severity":2,"message":"45358","line":32,"column":15,"nodeType":"45359","messageId":"45360","endLine":32,"endColumn":18,"suggestions":"48385"},{"ruleId":"45357","severity":2,"message":"45358","line":9,"column":75,"nodeType":"45359","messageId":"45360","endLine":9,"endColumn":78,"suggestions":"48386"},{"ruleId":"45357","severity":2,"message":"45358","line":241,"column":48,"nodeType":"45359","messageId":"45360","endLine":241,"endColumn":51,"suggestions":"48387"},{"ruleId":"45357","severity":2,"message":"45358","line":271,"column":48,"nodeType":"45359","messageId":"45360","endLine":271,"endColumn":51,"suggestions":"48388"},{"ruleId":"45357","severity":2,"message":"45358","line":29,"column":25,"nodeType":"45359","messageId":"45360","endLine":29,"endColumn":28,"suggestions":"48389"},{"ruleId":"45357","severity":2,"message":"45358","line":25,"column":21,"nodeType":"45359","messageId":"45360","endLine":25,"endColumn":24,"suggestions":"48390"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":77,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":80,"suggestions":"48391"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":61,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":64,"suggestions":"48392"},{"ruleId":"45357","severity":2,"message":"45358","line":91,"column":77,"nodeType":"45359","messageId":"45360","endLine":91,"endColumn":80,"suggestions":"48393"},{"ruleId":"45357","severity":2,"message":"45358","line":114,"column":61,"nodeType":"45359","messageId":"45360","endLine":114,"endColumn":64,"suggestions":"48394"},{"ruleId":"45357","severity":2,"message":"45358","line":118,"column":77,"nodeType":"45359","messageId":"45360","endLine":118,"endColumn":80,"suggestions":"48395"},{"ruleId":"45357","severity":2,"message":"45358","line":23,"column":21,"nodeType":"45359","messageId":"45360","endLine":23,"endColumn":24,"suggestions":"48396"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":39,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":42,"suggestions":"48397"},{"ruleId":"45357","severity":2,"message":"45358","line":144,"column":39,"nodeType":"45359","messageId":"45360","endLine":144,"endColumn":42,"suggestions":"48398"},{"ruleId":"45357","severity":2,"message":"45358","line":184,"column":39,"nodeType":"45359","messageId":"45360","endLine":184,"endColumn":42,"suggestions":"48399"},{"ruleId":"45357","severity":2,"message":"45358","line":15,"column":67,"nodeType":"45359","messageId":"45360","endLine":15,"endColumn":70,"suggestions":"48400"},{"ruleId":"45357","severity":2,"message":"45358","line":27,"column":66,"nodeType":"45359","messageId":"45360","endLine":27,"endColumn":69,"suggestions":"48401"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":56,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":59,"suggestions":"48402"},{"ruleId":"45357","severity":2,"message":"45358","line":147,"column":43,"nodeType":"45359","messageId":"45360","endLine":147,"endColumn":46,"suggestions":"48403"},{"ruleId":"45357","severity":2,"message":"45358","line":163,"column":43,"nodeType":"45359","messageId":"45360","endLine":163,"endColumn":46,"suggestions":"48404"},{"ruleId":"45357","severity":2,"message":"45358","line":186,"column":43,"nodeType":"45359","messageId":"45360","endLine":186,"endColumn":46,"suggestions":"48405"},{"ruleId":"45357","severity":2,"message":"45358","line":202,"column":43,"nodeType":"45359","messageId":"45360","endLine":202,"endColumn":46,"suggestions":"48406"},{"ruleId":"45357","severity":2,"message":"45358","line":99,"column":43,"nodeType":"45359","messageId":"45360","endLine":99,"endColumn":46,"suggestions":"48407"},{"ruleId":"45357","severity":2,"message":"45358","line":106,"column":35,"nodeType":"45359","messageId":"45360","endLine":106,"endColumn":38,"suggestions":"48408"},{"ruleId":"45357","severity":2,"message":"45358","line":116,"column":43,"nodeType":"45359","messageId":"45360","endLine":116,"endColumn":46,"suggestions":"48409"},{"ruleId":"45357","severity":2,"message":"45358","line":219,"column":43,"nodeType":"45359","messageId":"45360","endLine":219,"endColumn":46,"suggestions":"48410"},{"ruleId":"45357","severity":2,"message":"45358","line":248,"column":43,"nodeType":"45359","messageId":"45360","endLine":248,"endColumn":46,"suggestions":"48411"},{"ruleId":"45357","severity":2,"message":"45358","line":286,"column":43,"nodeType":"45359","messageId":"45360","endLine":286,"endColumn":46,"suggestions":"48412"},{"ruleId":"45357","severity":2,"message":"45358","line":324,"column":43,"nodeType":"45359","messageId":"45360","endLine":324,"endColumn":46,"suggestions":"48413"},{"ruleId":"45357","severity":2,"message":"45358","line":348,"column":43,"nodeType":"45359","messageId":"45360","endLine":348,"endColumn":46,"suggestions":"48414"},{"ruleId":"45357","severity":2,"message":"45358","line":377,"column":43,"nodeType":"45359","messageId":"45360","endLine":377,"endColumn":46,"suggestions":"48415"},{"ruleId":"45357","severity":2,"message":"45358","line":419,"column":43,"nodeType":"45359","messageId":"45360","endLine":419,"endColumn":46,"suggestions":"48416"},{"ruleId":"45357","severity":2,"message":"45358","line":437,"column":43,"nodeType":"45359","messageId":"45360","endLine":437,"endColumn":46,"suggestions":"48417"},{"ruleId":"45357","severity":2,"message":"45358","line":458,"column":43,"nodeType":"45359","messageId":"45360","endLine":458,"endColumn":46,"suggestions":"48418"},{"ruleId":"45357","severity":2,"message":"45358","line":475,"column":43,"nodeType":"45359","messageId":"45360","endLine":475,"endColumn":46,"suggestions":"48419"},{"ruleId":"45357","severity":2,"message":"45358","line":516,"column":59,"nodeType":"45359","messageId":"45360","endLine":516,"endColumn":62,"suggestions":"48420"},{"ruleId":"45357","severity":2,"message":"45358","line":518,"column":59,"nodeType":"45359","messageId":"45360","endLine":518,"endColumn":62,"suggestions":"48421"},{"ruleId":"45357","severity":2,"message":"45358","line":539,"column":43,"nodeType":"45359","messageId":"45360","endLine":539,"endColumn":46,"suggestions":"48422"},{"ruleId":"45357","severity":2,"message":"45358","line":570,"column":43,"nodeType":"45359","messageId":"45360","endLine":570,"endColumn":46,"suggestions":"48423"},{"ruleId":"45357","severity":2,"message":"45358","line":601,"column":55,"nodeType":"45359","messageId":"45360","endLine":601,"endColumn":58,"suggestions":"48424"},{"ruleId":"45357","severity":2,"message":"45358","line":602,"column":51,"nodeType":"45359","messageId":"45360","endLine":602,"endColumn":54,"suggestions":"48425"},{"ruleId":"45357","severity":2,"message":"45358","line":641,"column":48,"nodeType":"45359","messageId":"45360","endLine":641,"endColumn":51,"suggestions":"48426"},{"ruleId":"45357","severity":2,"message":"45358","line":642,"column":50,"nodeType":"45359","messageId":"45360","endLine":642,"endColumn":53,"suggestions":"48427"},{"ruleId":"45357","severity":2,"message":"45358","line":658,"column":67,"nodeType":"45359","messageId":"45360","endLine":658,"endColumn":70,"suggestions":"48428"},{"ruleId":"45357","severity":2,"message":"45358","line":670,"column":43,"nodeType":"45359","messageId":"45360","endLine":670,"endColumn":46,"suggestions":"48429"},{"ruleId":"45357","severity":2,"message":"45358","line":691,"column":43,"nodeType":"45359","messageId":"45360","endLine":691,"endColumn":46,"suggestions":"48430"},{"ruleId":"45357","severity":2,"message":"45358","line":713,"column":43,"nodeType":"45359","messageId":"45360","endLine":713,"endColumn":46,"suggestions":"48431"},{"ruleId":"45357","severity":2,"message":"45358","line":733,"column":43,"nodeType":"45359","messageId":"45360","endLine":733,"endColumn":46,"suggestions":"48432"},{"ruleId":"45357","severity":2,"message":"45358","line":750,"column":43,"nodeType":"45359","messageId":"45360","endLine":750,"endColumn":46,"suggestions":"48433"},{"ruleId":"45357","severity":2,"message":"45358","line":780,"column":53,"nodeType":"45359","messageId":"45360","endLine":780,"endColumn":56,"suggestions":"48434"},{"ruleId":"45357","severity":2,"message":"45358","line":796,"column":55,"nodeType":"45359","messageId":"45360","endLine":796,"endColumn":58,"suggestions":"48435"},{"ruleId":"45357","severity":2,"message":"45358","line":819,"column":43,"nodeType":"45359","messageId":"45360","endLine":819,"endColumn":46,"suggestions":"48436"},{"ruleId":"45357","severity":2,"message":"45358","line":843,"column":43,"nodeType":"45359","messageId":"45360","endLine":843,"endColumn":46,"suggestions":"48437"},{"ruleId":"45357","severity":2,"message":"45358","line":873,"column":43,"nodeType":"45359","messageId":"45360","endLine":873,"endColumn":46,"suggestions":"48438"},{"ruleId":"45357","severity":2,"message":"45358","line":905,"column":43,"nodeType":"45359","messageId":"45360","endLine":905,"endColumn":46,"suggestions":"48439"},{"ruleId":"45357","severity":2,"message":"45358","line":970,"column":43,"nodeType":"45359","messageId":"45360","endLine":970,"endColumn":46,"suggestions":"48440"},{"ruleId":"45357","severity":2,"message":"45358","line":1041,"column":43,"nodeType":"45359","messageId":"45360","endLine":1041,"endColumn":46,"suggestions":"48441"},{"ruleId":"45357","severity":2,"message":"45358","line":1076,"column":43,"nodeType":"45359","messageId":"45360","endLine":1076,"endColumn":46,"suggestions":"48442"},{"ruleId":"45357","severity":2,"message":"45358","line":1130,"column":43,"nodeType":"45359","messageId":"45360","endLine":1130,"endColumn":46,"suggestions":"48443"},{"ruleId":"45357","severity":2,"message":"45358","line":1197,"column":43,"nodeType":"45359","messageId":"45360","endLine":1197,"endColumn":46,"suggestions":"48444"},{"ruleId":"45357","severity":2,"message":"45358","line":1228,"column":43,"nodeType":"45359","messageId":"45360","endLine":1228,"endColumn":46,"suggestions":"48445"},{"ruleId":"45357","severity":2,"message":"45358","line":1246,"column":43,"nodeType":"45359","messageId":"45360","endLine":1246,"endColumn":46,"suggestions":"48446"},{"ruleId":"45357","severity":2,"message":"45358","line":1265,"column":43,"nodeType":"45359","messageId":"45360","endLine":1265,"endColumn":46,"suggestions":"48447"},{"ruleId":"45357","severity":2,"message":"45358","line":1285,"column":43,"nodeType":"45359","messageId":"45360","endLine":1285,"endColumn":46,"suggestions":"48448"},{"ruleId":"45357","severity":2,"message":"45358","line":1316,"column":43,"nodeType":"45359","messageId":"45360","endLine":1316,"endColumn":46,"suggestions":"48449"},{"ruleId":"45357","severity":2,"message":"45358","line":1357,"column":43,"nodeType":"45359","messageId":"45360","endLine":1357,"endColumn":46,"suggestions":"48450"},{"ruleId":"45357","severity":2,"message":"45358","line":1395,"column":43,"nodeType":"45359","messageId":"45360","endLine":1395,"endColumn":46,"suggestions":"48451"},{"ruleId":"45357","severity":2,"message":"45358","line":1432,"column":43,"nodeType":"45359","messageId":"45360","endLine":1432,"endColumn":46,"suggestions":"48452"},{"ruleId":"45357","severity":2,"message":"45358","line":1498,"column":43,"nodeType":"45359","messageId":"45360","endLine":1498,"endColumn":46,"suggestions":"48453"},{"ruleId":"45357","severity":2,"message":"45358","line":1552,"column":43,"nodeType":"45359","messageId":"45360","endLine":1552,"endColumn":46,"suggestions":"48454"},{"ruleId":"45357","severity":2,"message":"45358","line":1598,"column":43,"nodeType":"45359","messageId":"45360","endLine":1598,"endColumn":46,"suggestions":"48455"},{"ruleId":"45357","severity":2,"message":"45358","line":1639,"column":43,"nodeType":"45359","messageId":"45360","endLine":1639,"endColumn":46,"suggestions":"48456"},{"ruleId":"45357","severity":2,"message":"45358","line":1671,"column":43,"nodeType":"45359","messageId":"45360","endLine":1671,"endColumn":46,"suggestions":"48457"},{"ruleId":"45357","severity":2,"message":"45358","line":1694,"column":43,"nodeType":"45359","messageId":"45360","endLine":1694,"endColumn":46,"suggestions":"48458"},{"ruleId":"45357","severity":2,"message":"45358","line":1729,"column":43,"nodeType":"45359","messageId":"45360","endLine":1729,"endColumn":46,"suggestions":"48459"},{"ruleId":"45357","severity":2,"message":"45358","line":1778,"column":43,"nodeType":"45359","messageId":"45360","endLine":1778,"endColumn":46,"suggestions":"48460"},{"ruleId":"45357","severity":2,"message":"45358","line":52,"column":43,"nodeType":"45359","messageId":"45360","endLine":52,"endColumn":46,"suggestions":"48461"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":43,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":46,"suggestions":"48462"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":27,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":30,"suggestions":"48463"},{"ruleId":"45357","severity":2,"message":"45358","line":125,"column":43,"nodeType":"45359","messageId":"45360","endLine":125,"endColumn":46,"suggestions":"48464"},{"ruleId":"45357","severity":2,"message":"45358","line":141,"column":43,"nodeType":"45359","messageId":"45360","endLine":141,"endColumn":46,"suggestions":"48465"},{"ruleId":"45357","severity":2,"message":"45358","line":156,"column":52,"nodeType":"45359","messageId":"45360","endLine":156,"endColumn":55,"suggestions":"48466"},{"ruleId":"45357","severity":2,"message":"45358","line":170,"column":52,"nodeType":"45359","messageId":"45360","endLine":170,"endColumn":55,"suggestions":"48467"},{"ruleId":"45357","severity":2,"message":"45358","line":186,"column":52,"nodeType":"45359","messageId":"45360","endLine":186,"endColumn":55,"suggestions":"48468"},{"ruleId":"45357","severity":2,"message":"45358","line":200,"column":52,"nodeType":"45359","messageId":"45360","endLine":200,"endColumn":55,"suggestions":"48469"},{"ruleId":"45357","severity":2,"message":"45358","line":66,"column":43,"nodeType":"45359","messageId":"45360","endLine":66,"endColumn":46,"suggestions":"48470"},{"ruleId":"45357","severity":2,"message":"45358","line":89,"column":53,"nodeType":"45359","messageId":"45360","endLine":89,"endColumn":56,"suggestions":"48471"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":49,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":52,"suggestions":"48472"},{"ruleId":"45357","severity":2,"message":"45358","line":115,"column":43,"nodeType":"45359","messageId":"45360","endLine":115,"endColumn":46,"suggestions":"48473"},{"ruleId":"45357","severity":2,"message":"45358","line":138,"column":43,"nodeType":"45359","messageId":"45360","endLine":138,"endColumn":46,"suggestions":"48474"},{"ruleId":"45357","severity":2,"message":"45358","line":156,"column":43,"nodeType":"45359","messageId":"45360","endLine":156,"endColumn":46,"suggestions":"48475"},{"ruleId":"45357","severity":2,"message":"45358","line":178,"column":43,"nodeType":"45359","messageId":"45360","endLine":178,"endColumn":46,"suggestions":"48476"},{"ruleId":"45357","severity":2,"message":"45358","line":197,"column":43,"nodeType":"45359","messageId":"45360","endLine":197,"endColumn":46,"suggestions":"48477"},{"ruleId":"45357","severity":2,"message":"45358","line":217,"column":43,"nodeType":"45359","messageId":"45360","endLine":217,"endColumn":46,"suggestions":"48478"},{"ruleId":"45357","severity":2,"message":"45358","line":238,"column":43,"nodeType":"45359","messageId":"45360","endLine":238,"endColumn":46,"suggestions":"48479"},{"ruleId":"45357","severity":2,"message":"45358","line":258,"column":43,"nodeType":"45359","messageId":"45360","endLine":258,"endColumn":46,"suggestions":"48480"},{"ruleId":"45357","severity":2,"message":"45358","line":295,"column":43,"nodeType":"45359","messageId":"45360","endLine":295,"endColumn":46,"suggestions":"48481"},{"ruleId":"45357","severity":2,"message":"45358","line":329,"column":43,"nodeType":"45359","messageId":"45360","endLine":329,"endColumn":46,"suggestions":"48482"},{"ruleId":"45357","severity":2,"message":"45358","line":35,"column":39,"nodeType":"45359","messageId":"45360","endLine":35,"endColumn":42,"suggestions":"48483"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":34,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":37,"suggestions":"48484"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":45,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":48,"suggestions":"48485"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":38,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":41,"suggestions":"48486"},{"ruleId":"45357","severity":2,"message":"45358","line":96,"column":38,"nodeType":"45359","messageId":"45360","endLine":96,"endColumn":41,"suggestions":"48487"},{"ruleId":"45357","severity":2,"message":"45358","line":116,"column":38,"nodeType":"45359","messageId":"45360","endLine":116,"endColumn":41,"suggestions":"48488"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":38,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":41,"suggestions":"48489"},{"ruleId":"45357","severity":2,"message":"45358","line":243,"column":38,"nodeType":"45359","messageId":"45360","endLine":243,"endColumn":41,"suggestions":"48490"},{"ruleId":"45357","severity":2,"message":"45358","line":116,"column":8,"nodeType":"45359","messageId":"45360","endLine":116,"endColumn":11,"suggestions":"48491"},{"ruleId":"45357","severity":2,"message":"45358","line":182,"column":10,"nodeType":"45359","messageId":"45360","endLine":182,"endColumn":13,"suggestions":"48492"},{"ruleId":"45357","severity":2,"message":"45358","line":235,"column":8,"nodeType":"45359","messageId":"45360","endLine":235,"endColumn":11,"suggestions":"48493"},{"ruleId":"45357","severity":2,"message":"45358","line":302,"column":8,"nodeType":"45359","messageId":"45360","endLine":302,"endColumn":11,"suggestions":"48494"},{"ruleId":"45357","severity":2,"message":"45358","line":379,"column":8,"nodeType":"45359","messageId":"45360","endLine":379,"endColumn":11,"suggestions":"48495"},{"ruleId":"45357","severity":2,"message":"45358","line":462,"column":8,"nodeType":"45359","messageId":"45360","endLine":462,"endColumn":11,"suggestions":"48496"},{"ruleId":"45357","severity":2,"message":"45358","line":141,"column":22,"nodeType":"45359","messageId":"45360","endLine":141,"endColumn":25,"suggestions":"48497"},{"ruleId":"45357","severity":2,"message":"45358","line":151,"column":21,"nodeType":"45359","messageId":"45360","endLine":151,"endColumn":24,"suggestions":"48498"},{"ruleId":"45357","severity":2,"message":"45358","line":162,"column":89,"nodeType":"45359","messageId":"45360","endLine":162,"endColumn":92,"suggestions":"48499"},{"ruleId":"45357","severity":2,"message":"45358","line":171,"column":34,"nodeType":"45359","messageId":"45360","endLine":171,"endColumn":37,"suggestions":"48500"},{"ruleId":"45357","severity":2,"message":"45358","line":194,"column":34,"nodeType":"45359","messageId":"45360","endLine":194,"endColumn":37,"suggestions":"48501"},{"ruleId":"45357","severity":2,"message":"45358","line":194,"column":45,"nodeType":"45359","messageId":"45360","endLine":194,"endColumn":48,"suggestions":"48502"},{"ruleId":"45357","severity":2,"message":"45358","line":15,"column":34,"nodeType":"45359","messageId":"45360","endLine":15,"endColumn":37,"suggestions":"48503"},{"ruleId":"45357","severity":2,"message":"45358","line":423,"column":48,"nodeType":"45359","messageId":"45360","endLine":423,"endColumn":51,"suggestions":"48504"},{"ruleId":"45357","severity":2,"message":"45358","line":470,"column":53,"nodeType":"45359","messageId":"45360","endLine":470,"endColumn":56,"suggestions":"48505"},{"ruleId":"45357","severity":2,"message":"45358","line":476,"column":49,"nodeType":"45359","messageId":"45360","endLine":476,"endColumn":52,"suggestions":"48506"},{"ruleId":"45357","severity":2,"message":"45358","line":517,"column":41,"nodeType":"45359","messageId":"45360","endLine":517,"endColumn":44,"suggestions":"48507"},{"ruleId":"45357","severity":2,"message":"45358","line":49,"column":43,"nodeType":"45359","messageId":"45360","endLine":49,"endColumn":46,"suggestions":"48508"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":45,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":48,"suggestions":"48509"},{"ruleId":"45357","severity":2,"message":"45358","line":259,"column":45,"nodeType":"45359","messageId":"45360","endLine":259,"endColumn":48,"suggestions":"48510"},{"ruleId":"45357","severity":2,"message":"45358","line":296,"column":45,"nodeType":"45359","messageId":"45360","endLine":296,"endColumn":48,"suggestions":"48511"},{"ruleId":"45357","severity":2,"message":"45358","line":17,"column":43,"nodeType":"45359","messageId":"45360","endLine":17,"endColumn":46,"suggestions":"48512"},{"ruleId":"45357","severity":2,"message":"45358","line":18,"column":29,"nodeType":"45359","messageId":"45360","endLine":18,"endColumn":32,"suggestions":"48513"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":33,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":36,"suggestions":"48514"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":49,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":52,"suggestions":"48515"},{"ruleId":"45357","severity":2,"message":"45358","line":23,"column":30,"nodeType":"45359","messageId":"45360","endLine":23,"endColumn":33,"suggestions":"48516"},{"ruleId":"45357","severity":2,"message":"45358","line":23,"column":46,"nodeType":"45359","messageId":"45360","endLine":23,"endColumn":49,"suggestions":"48517"},{"ruleId":"45357","severity":2,"message":"45358","line":24,"column":33,"nodeType":"45359","messageId":"45360","endLine":24,"endColumn":36,"suggestions":"48518"},{"ruleId":"45357","severity":2,"message":"45358","line":27,"column":88,"nodeType":"45359","messageId":"45360","endLine":27,"endColumn":91,"suggestions":"48519"},{"ruleId":"45357","severity":2,"message":"45358","line":143,"column":45,"nodeType":"45359","messageId":"45360","endLine":143,"endColumn":48,"suggestions":"48520"},{"ruleId":"45357","severity":2,"message":"45358","line":166,"column":45,"nodeType":"45359","messageId":"45360","endLine":166,"endColumn":48,"suggestions":"48521"},{"ruleId":"45357","severity":2,"message":"45358","line":146,"column":49,"nodeType":"45359","messageId":"45360","endLine":146,"endColumn":52,"suggestions":"48522"},{"ruleId":"45357","severity":2,"message":"45358","line":106,"column":49,"nodeType":"45359","messageId":"45360","endLine":106,"endColumn":52,"suggestions":"48523"},{"ruleId":"45357","severity":2,"message":"45358","line":175,"column":48,"nodeType":"45359","messageId":"45360","endLine":175,"endColumn":51,"suggestions":"48524"},{"ruleId":"45357","severity":2,"message":"45358","line":181,"column":60,"nodeType":"45359","messageId":"45360","endLine":181,"endColumn":63,"suggestions":"48525"},{"ruleId":"45357","severity":2,"message":"45358","line":190,"column":46,"nodeType":"45359","messageId":"45360","endLine":190,"endColumn":49,"suggestions":"48526"},{"ruleId":"45357","severity":2,"message":"45358","line":210,"column":56,"nodeType":"45359","messageId":"45360","endLine":210,"endColumn":59,"suggestions":"48527"},{"ruleId":"45357","severity":2,"message":"45358","line":232,"column":52,"nodeType":"45359","messageId":"45360","endLine":232,"endColumn":55,"suggestions":"48528"},{"ruleId":"45357","severity":2,"message":"45358","line":268,"column":60,"nodeType":"45359","messageId":"45360","endLine":268,"endColumn":63,"suggestions":"48529"},{"ruleId":"45357","severity":2,"message":"45358","line":372,"column":48,"nodeType":"45359","messageId":"45360","endLine":372,"endColumn":51,"suggestions":"48530"},{"ruleId":"45357","severity":2,"message":"45358","line":422,"column":48,"nodeType":"45359","messageId":"45360","endLine":422,"endColumn":51,"suggestions":"48531"},{"ruleId":"45357","severity":2,"message":"45358","line":443,"column":49,"nodeType":"45359","messageId":"45360","endLine":443,"endColumn":52,"suggestions":"48532"},{"ruleId":"45357","severity":2,"message":"45358","line":455,"column":49,"nodeType":"45359","messageId":"45360","endLine":455,"endColumn":52,"suggestions":"48533"},{"ruleId":"45357","severity":2,"message":"45358","line":493,"column":66,"nodeType":"45359","messageId":"45360","endLine":493,"endColumn":69,"suggestions":"48534"},{"ruleId":"45357","severity":2,"message":"45358","line":539,"column":48,"nodeType":"45359","messageId":"45360","endLine":539,"endColumn":51,"suggestions":"48535"},{"ruleId":"45357","severity":2,"message":"45358","line":562,"column":53,"nodeType":"45359","messageId":"45360","endLine":562,"endColumn":56,"suggestions":"48536"},{"ruleId":"45357","severity":2,"message":"45358","line":590,"column":52,"nodeType":"45359","messageId":"45360","endLine":590,"endColumn":55,"suggestions":"48537"},{"ruleId":"45357","severity":2,"message":"45358","line":618,"column":44,"nodeType":"45359","messageId":"45360","endLine":618,"endColumn":47,"suggestions":"48538"},{"ruleId":"45357","severity":2,"message":"45358","line":632,"column":49,"nodeType":"45359","messageId":"45360","endLine":632,"endColumn":52,"suggestions":"48539"},{"ruleId":"45357","severity":2,"message":"45358","line":638,"column":51,"nodeType":"45359","messageId":"45360","endLine":638,"endColumn":54,"suggestions":"48540"},{"ruleId":"45357","severity":2,"message":"45358","line":717,"column":44,"nodeType":"45359","messageId":"45360","endLine":717,"endColumn":47,"suggestions":"48541"},{"ruleId":"45357","severity":2,"message":"45358","line":738,"column":55,"nodeType":"45359","messageId":"45360","endLine":738,"endColumn":58,"suggestions":"48542"},{"ruleId":"45357","severity":2,"message":"45358","line":775,"column":61,"nodeType":"45359","messageId":"45360","endLine":775,"endColumn":64,"suggestions":"48543"},{"ruleId":"45357","severity":2,"message":"45358","line":791,"column":53,"nodeType":"45359","messageId":"45360","endLine":791,"endColumn":56,"suggestions":"48544"},{"ruleId":"45357","severity":2,"message":"45358","line":154,"column":84,"nodeType":"45359","messageId":"45360","endLine":154,"endColumn":87,"suggestions":"48545"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":30,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":33,"suggestions":"48546"},{"ruleId":"45357","severity":2,"message":"45358","line":49,"column":18,"nodeType":"45359","messageId":"45360","endLine":49,"endColumn":21,"suggestions":"48547"},{"ruleId":"45357","severity":2,"message":"45358","line":49,"column":39,"nodeType":"45359","messageId":"45360","endLine":49,"endColumn":42,"suggestions":"48548"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":26,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":29,"suggestions":"48549"},{"ruleId":"45357","severity":2,"message":"45358","line":145,"column":53,"nodeType":"45359","messageId":"45360","endLine":145,"endColumn":56,"suggestions":"48550"},{"ruleId":"45357","severity":2,"message":"45358","line":165,"column":58,"nodeType":"45359","messageId":"45360","endLine":165,"endColumn":61,"suggestions":"48551"},{"ruleId":"45357","severity":2,"message":"45358","line":167,"column":72,"nodeType":"45359","messageId":"45360","endLine":167,"endColumn":75,"suggestions":"48552"},{"ruleId":"45357","severity":2,"message":"45358","line":168,"column":29,"nodeType":"45359","messageId":"45360","endLine":168,"endColumn":32,"suggestions":"48553"},{"ruleId":"45357","severity":2,"message":"45358","line":169,"column":29,"nodeType":"45359","messageId":"45360","endLine":169,"endColumn":32,"suggestions":"48554"},{"ruleId":"45357","severity":2,"message":"45358","line":170,"column":29,"nodeType":"45359","messageId":"45360","endLine":170,"endColumn":32,"suggestions":"48555"},{"ruleId":"45357","severity":2,"message":"45358","line":193,"column":53,"nodeType":"45359","messageId":"45360","endLine":193,"endColumn":56,"suggestions":"48556"},{"ruleId":"45357","severity":2,"message":"45358","line":203,"column":72,"nodeType":"45359","messageId":"45360","endLine":203,"endColumn":75,"suggestions":"48557"},{"ruleId":"45357","severity":2,"message":"45358","line":204,"column":29,"nodeType":"45359","messageId":"45360","endLine":204,"endColumn":32,"suggestions":"48558"},{"ruleId":"45357","severity":2,"message":"45358","line":205,"column":29,"nodeType":"45359","messageId":"45360","endLine":205,"endColumn":32,"suggestions":"48559"},{"ruleId":"45357","severity":2,"message":"45358","line":206,"column":29,"nodeType":"45359","messageId":"45360","endLine":206,"endColumn":32,"suggestions":"48560"},{"ruleId":"45357","severity":2,"message":"45358","line":226,"column":29,"nodeType":"45359","messageId":"45360","endLine":226,"endColumn":32,"suggestions":"48561"},{"ruleId":"45357","severity":2,"message":"45358","line":227,"column":29,"nodeType":"45359","messageId":"45360","endLine":227,"endColumn":32,"suggestions":"48562"},{"ruleId":"45357","severity":2,"message":"45358","line":241,"column":29,"nodeType":"45359","messageId":"45360","endLine":241,"endColumn":32,"suggestions":"48563"},{"ruleId":"45357","severity":2,"message":"45358","line":263,"column":29,"nodeType":"45359","messageId":"45360","endLine":263,"endColumn":32,"suggestions":"48564"},{"ruleId":"45357","severity":2,"message":"45358","line":286,"column":18,"nodeType":"45359","messageId":"45360","endLine":286,"endColumn":21,"suggestions":"48565"},{"ruleId":"45357","severity":2,"message":"45358","line":307,"column":27,"nodeType":"45359","messageId":"45360","endLine":307,"endColumn":30,"suggestions":"48566"},{"ruleId":"45357","severity":2,"message":"45358","line":340,"column":29,"nodeType":"45359","messageId":"45360","endLine":340,"endColumn":32,"suggestions":"48567"},{"ruleId":"45357","severity":2,"message":"45358","line":341,"column":29,"nodeType":"45359","messageId":"45360","endLine":341,"endColumn":32,"suggestions":"48568"},{"ruleId":"45357","severity":2,"message":"45358","line":342,"column":29,"nodeType":"45359","messageId":"45360","endLine":342,"endColumn":32,"suggestions":"48569"},{"ruleId":"45357","severity":2,"message":"45358","line":361,"column":58,"nodeType":"45359","messageId":"45360","endLine":361,"endColumn":61,"suggestions":"48570"},{"ruleId":"45357","severity":2,"message":"45358","line":365,"column":72,"nodeType":"45359","messageId":"45360","endLine":365,"endColumn":75,"suggestions":"48571"},{"ruleId":"45357","severity":2,"message":"45358","line":367,"column":29,"nodeType":"45359","messageId":"45360","endLine":367,"endColumn":32,"suggestions":"48572"},{"ruleId":"45357","severity":2,"message":"45358","line":368,"column":29,"nodeType":"45359","messageId":"45360","endLine":368,"endColumn":32,"suggestions":"48573"},{"ruleId":"45357","severity":2,"message":"45358","line":393,"column":71,"nodeType":"45359","messageId":"45360","endLine":393,"endColumn":74,"suggestions":"48574"},{"ruleId":"45357","severity":2,"message":"45358","line":395,"column":90,"nodeType":"45359","messageId":"45360","endLine":395,"endColumn":93,"suggestions":"48575"},{"ruleId":"45357","severity":2,"message":"45358","line":399,"column":92,"nodeType":"45359","messageId":"45360","endLine":399,"endColumn":95,"suggestions":"48576"},{"ruleId":"45357","severity":2,"message":"45358","line":401,"column":42,"nodeType":"45359","messageId":"45360","endLine":401,"endColumn":45,"suggestions":"48577"},{"ruleId":"45357","severity":2,"message":"45358","line":403,"column":85,"nodeType":"45359","messageId":"45360","endLine":403,"endColumn":88,"suggestions":"48578"},{"ruleId":"45357","severity":2,"message":"45358","line":406,"column":29,"nodeType":"45359","messageId":"45360","endLine":406,"endColumn":32,"suggestions":"48579"},{"ruleId":"45357","severity":2,"message":"45358","line":409,"column":27,"nodeType":"45359","messageId":"45360","endLine":409,"endColumn":30,"suggestions":"48580"},{"ruleId":"45357","severity":2,"message":"45358","line":414,"column":84,"nodeType":"45359","messageId":"45360","endLine":414,"endColumn":87,"suggestions":"48581"},{"ruleId":"45357","severity":2,"message":"45358","line":417,"column":28,"nodeType":"45359","messageId":"45360","endLine":417,"endColumn":31,"suggestions":"48582"},{"ruleId":"45357","severity":2,"message":"45358","line":419,"column":92,"nodeType":"45359","messageId":"45360","endLine":419,"endColumn":95,"suggestions":"48583"},{"ruleId":"45357","severity":2,"message":"45358","line":421,"column":42,"nodeType":"45359","messageId":"45360","endLine":421,"endColumn":45,"suggestions":"48584"},{"ruleId":"45357","severity":2,"message":"45358","line":453,"column":84,"nodeType":"45359","messageId":"45360","endLine":453,"endColumn":87,"suggestions":"48585"},{"ruleId":"45357","severity":2,"message":"45358","line":456,"column":41,"nodeType":"45359","messageId":"45360","endLine":456,"endColumn":44,"suggestions":"48586"},{"ruleId":"45357","severity":2,"message":"45358","line":459,"column":78,"nodeType":"45359","messageId":"45360","endLine":459,"endColumn":81,"suggestions":"48587"},{"ruleId":"45357","severity":2,"message":"45358","line":462,"column":29,"nodeType":"45359","messageId":"45360","endLine":462,"endColumn":32,"suggestions":"48588"},{"ruleId":"45357","severity":2,"message":"45358","line":464,"column":86,"nodeType":"45359","messageId":"45360","endLine":464,"endColumn":89,"suggestions":"48589"},{"ruleId":"45357","severity":2,"message":"45358","line":469,"column":77,"nodeType":"45359","messageId":"45360","endLine":469,"endColumn":80,"suggestions":"48590"},{"ruleId":"45357","severity":2,"message":"45358","line":472,"column":28,"nodeType":"45359","messageId":"45360","endLine":472,"endColumn":31,"suggestions":"48591"},{"ruleId":"45357","severity":2,"message":"45358","line":474,"column":85,"nodeType":"45359","messageId":"45360","endLine":474,"endColumn":88,"suggestions":"48592"},{"ruleId":"45357","severity":2,"message":"45358","line":476,"column":42,"nodeType":"45359","messageId":"45360","endLine":476,"endColumn":45,"suggestions":"48593"},{"ruleId":"45357","severity":2,"message":"45358","line":489,"column":77,"nodeType":"45359","messageId":"45360","endLine":489,"endColumn":80,"suggestions":"48594"},{"ruleId":"45357","severity":2,"message":"45358","line":493,"column":78,"nodeType":"45359","messageId":"45360","endLine":493,"endColumn":81,"suggestions":"48595"},{"ruleId":"45357","severity":2,"message":"45358","line":495,"column":28,"nodeType":"45359","messageId":"45360","endLine":495,"endColumn":31,"suggestions":"48596"},{"ruleId":"45357","severity":2,"message":"45358","line":496,"column":28,"nodeType":"45359","messageId":"45360","endLine":496,"endColumn":31,"suggestions":"48597"},{"ruleId":"45357","severity":2,"message":"45358","line":497,"column":28,"nodeType":"45359","messageId":"45360","endLine":497,"endColumn":31,"suggestions":"48598"},{"ruleId":"45357","severity":2,"message":"45358","line":498,"column":28,"nodeType":"45359","messageId":"45360","endLine":498,"endColumn":31,"suggestions":"48599"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":29,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":32,"suggestions":"48600"},{"ruleId":"45357","severity":2,"message":"45358","line":64,"column":29,"nodeType":"45359","messageId":"45360","endLine":64,"endColumn":32,"suggestions":"48601"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":29,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":32,"suggestions":"48602"},{"ruleId":"45357","severity":2,"message":"45358","line":232,"column":46,"nodeType":"45359","messageId":"45360","endLine":232,"endColumn":49,"suggestions":"48603"},{"ruleId":"45357","severity":2,"message":"45358","line":332,"column":38,"nodeType":"45359","messageId":"45360","endLine":332,"endColumn":41,"suggestions":"48604"},{"ruleId":"45357","severity":2,"message":"45358","line":334,"column":48,"nodeType":"45359","messageId":"45360","endLine":334,"endColumn":51,"suggestions":"48605"},{"ruleId":"45357","severity":2,"message":"45358","line":25,"column":44,"nodeType":"45359","messageId":"45360","endLine":25,"endColumn":47,"suggestions":"48606"},{"ruleId":"45357","severity":2,"message":"45358","line":44,"column":44,"nodeType":"45359","messageId":"45360","endLine":44,"endColumn":47,"suggestions":"48607"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":48,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":51,"suggestions":"48608"},{"ruleId":"45357","severity":2,"message":"45358","line":43,"column":41,"nodeType":"45359","messageId":"45360","endLine":43,"endColumn":44,"suggestions":"48609"},{"ruleId":"45357","severity":2,"message":"45358","line":44,"column":40,"nodeType":"45359","messageId":"45360","endLine":44,"endColumn":43,"suggestions":"48610"},{"ruleId":"45357","severity":2,"message":"45358","line":50,"column":20,"nodeType":"45359","messageId":"45360","endLine":50,"endColumn":23,"suggestions":"48611"},{"ruleId":"45357","severity":2,"message":"45358","line":50,"column":55,"nodeType":"45359","messageId":"45360","endLine":50,"endColumn":58,"suggestions":"48612"},{"ruleId":"45357","severity":2,"message":"45358","line":55,"column":19,"nodeType":"45359","messageId":"45360","endLine":55,"endColumn":22,"suggestions":"48613"},{"ruleId":"45357","severity":2,"message":"45358","line":55,"column":53,"nodeType":"45359","messageId":"45360","endLine":55,"endColumn":56,"suggestions":"48614"},{"ruleId":"45357","severity":2,"message":"45358","line":9,"column":32,"nodeType":"45359","messageId":"45360","endLine":9,"endColumn":35,"suggestions":"48615"},{"ruleId":"45357","severity":2,"message":"45358","line":10,"column":32,"nodeType":"45359","messageId":"45360","endLine":10,"endColumn":35,"suggestions":"48616"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":19,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":22,"suggestions":"48617","suppressions":"48618"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":19,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":22,"suggestions":"48619","suppressions":"48620"},{"ruleId":"45357","severity":2,"message":"45358","line":37,"column":19,"nodeType":"45359","messageId":"45360","endLine":37,"endColumn":22,"suggestions":"48621"},{"ruleId":"45357","severity":2,"message":"45358","line":36,"column":19,"nodeType":"45359","messageId":"45360","endLine":36,"endColumn":22,"suggestions":"48622"},{"ruleId":"45357","severity":2,"message":"45358","line":128,"column":30,"nodeType":"45359","messageId":"45360","endLine":128,"endColumn":33,"suggestions":"48623"},{"ruleId":"45357","severity":2,"message":"45358","line":37,"column":19,"nodeType":"45359","messageId":"45360","endLine":37,"endColumn":22,"suggestions":"48624"},{"ruleId":"45357","severity":2,"message":"45358","line":42,"column":19,"nodeType":"45359","messageId":"45360","endLine":42,"endColumn":22,"suggestions":"48625"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":22,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":25,"suggestions":"48626"},{"ruleId":"45357","severity":2,"message":"45358","line":35,"column":19,"nodeType":"45359","messageId":"45360","endLine":35,"endColumn":22,"suggestions":"48627"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":21,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":24,"suggestions":"48628"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":21,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":24,"suggestions":"48629"},{"ruleId":"45357","severity":2,"message":"45358","line":101,"column":21,"nodeType":"45359","messageId":"45360","endLine":101,"endColumn":24,"suggestions":"48630"},{"ruleId":"45357","severity":2,"message":"45358","line":102,"column":21,"nodeType":"45359","messageId":"45360","endLine":102,"endColumn":24,"suggestions":"48631"},{"ruleId":"45357","severity":2,"message":"45358","line":131,"column":21,"nodeType":"45359","messageId":"45360","endLine":131,"endColumn":24,"suggestions":"48632"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":21,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":24,"suggestions":"48633"},{"ruleId":"45357","severity":2,"message":"45358","line":163,"column":21,"nodeType":"45359","messageId":"45360","endLine":163,"endColumn":24,"suggestions":"48634"},{"ruleId":"45357","severity":2,"message":"45358","line":164,"column":21,"nodeType":"45359","messageId":"45360","endLine":164,"endColumn":24,"suggestions":"48635"},{"ruleId":"45357","severity":2,"message":"45358","line":35,"column":35,"nodeType":"45359","messageId":"45360","endLine":35,"endColumn":38,"suggestions":"48636"},{"ruleId":"45357","severity":2,"message":"45358","line":26,"column":60,"nodeType":"45359","messageId":"45360","endLine":26,"endColumn":63,"suggestions":"48637"},{"ruleId":"45357","severity":2,"message":"45358","line":26,"column":79,"nodeType":"45359","messageId":"45360","endLine":26,"endColumn":82,"suggestions":"48638"},{"ruleId":"45357","severity":2,"message":"45358","line":96,"column":18,"nodeType":"45359","messageId":"45360","endLine":96,"endColumn":21,"suggestions":"48639"},{"ruleId":"45357","severity":2,"message":"45358","line":132,"column":18,"nodeType":"45359","messageId":"45360","endLine":132,"endColumn":21,"suggestions":"48640"},{"ruleId":"45357","severity":2,"message":"45358","line":16,"column":62,"nodeType":"45359","messageId":"45360","endLine":16,"endColumn":65,"suggestions":"48641"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":64,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":67,"suggestions":"48642"},{"ruleId":"45357","severity":2,"message":"45358","line":44,"column":22,"nodeType":"45359","messageId":"45360","endLine":44,"endColumn":25,"suggestions":"48643"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":17,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":20,"suggestions":"48644"},{"ruleId":"45357","severity":2,"message":"45358","line":107,"column":18,"nodeType":"45359","messageId":"45360","endLine":107,"endColumn":21,"suggestions":"48645"},{"ruleId":"45357","severity":2,"message":"45358","line":152,"column":18,"nodeType":"45359","messageId":"45360","endLine":152,"endColumn":21,"suggestions":"48646"},{"ruleId":"45357","severity":2,"message":"45358","line":202,"column":18,"nodeType":"45359","messageId":"45360","endLine":202,"endColumn":21,"suggestions":"48647"},{"ruleId":"45357","severity":2,"message":"45358","line":96,"column":35,"nodeType":"45359","messageId":"45360","endLine":96,"endColumn":38,"suggestions":"48648"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":27,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":30,"suggestions":"48649"},{"ruleId":"45357","severity":2,"message":"45358","line":101,"column":48,"nodeType":"45359","messageId":"45360","endLine":101,"endColumn":51,"suggestions":"48650"},{"ruleId":"45357","severity":2,"message":"45358","line":106,"column":35,"nodeType":"45359","messageId":"45360","endLine":106,"endColumn":38,"suggestions":"48651"},{"ruleId":"45357","severity":2,"message":"45358","line":108,"column":20,"nodeType":"45359","messageId":"45360","endLine":108,"endColumn":23,"suggestions":"48652"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":20,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":23,"suggestions":"48653"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":55,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":58,"suggestions":"48654"},{"ruleId":"45357","severity":2,"message":"45358","line":114,"column":25,"nodeType":"45359","messageId":"45360","endLine":114,"endColumn":28,"suggestions":"48655"},{"ruleId":"45357","severity":2,"message":"45358","line":59,"column":58,"nodeType":"45359","messageId":"45360","endLine":59,"endColumn":61,"suggestions":"48656"},{"ruleId":"45357","severity":2,"message":"45358","line":61,"column":72,"nodeType":"45359","messageId":"45360","endLine":61,"endColumn":75,"suggestions":"48657"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":29,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":32,"suggestions":"48658"},{"ruleId":"45357","severity":2,"message":"45358","line":83,"column":72,"nodeType":"45359","messageId":"45360","endLine":83,"endColumn":75,"suggestions":"48659"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":29,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":32,"suggestions":"48660"},{"ruleId":"45357","severity":2,"message":"45358","line":105,"column":72,"nodeType":"45359","messageId":"45360","endLine":105,"endColumn":75,"suggestions":"48661"},{"ruleId":"45357","severity":2,"message":"45358","line":107,"column":29,"nodeType":"45359","messageId":"45360","endLine":107,"endColumn":32,"suggestions":"48662"},{"ruleId":"45357","severity":2,"message":"45358","line":118,"column":27,"nodeType":"45359","messageId":"45360","endLine":118,"endColumn":30,"suggestions":"48663"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":29,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":32,"suggestions":"48664"},{"ruleId":"45357","severity":2,"message":"45358","line":141,"column":29,"nodeType":"45359","messageId":"45360","endLine":141,"endColumn":32,"suggestions":"48665"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":30,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":33,"suggestions":"48666"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":30,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":33,"suggestions":"48667"},{"ruleId":"45357","severity":2,"message":"45358","line":89,"column":14,"nodeType":"45359","messageId":"45360","endLine":89,"endColumn":17,"suggestions":"48668"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":19,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":22,"suggestions":"48669"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":30,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":33,"suggestions":"48670"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":14,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":17,"suggestions":"48671"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":43,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":46,"suggestions":"48672"},{"ruleId":"45357","severity":2,"message":"45358","line":95,"column":34,"nodeType":"45359","messageId":"45360","endLine":95,"endColumn":37,"suggestions":"48673"},{"ruleId":"45357","severity":2,"message":"45358","line":114,"column":30,"nodeType":"45359","messageId":"45360","endLine":114,"endColumn":33,"suggestions":"48674"},{"ruleId":"45357","severity":2,"message":"45358","line":115,"column":30,"nodeType":"45359","messageId":"45360","endLine":115,"endColumn":33,"suggestions":"48675"},{"ruleId":"45357","severity":2,"message":"45358","line":134,"column":31,"nodeType":"45359","messageId":"45360","endLine":134,"endColumn":34,"suggestions":"48676"},{"ruleId":"45357","severity":2,"message":"45358","line":134,"column":58,"nodeType":"45359","messageId":"45360","endLine":134,"endColumn":61,"suggestions":"48677"},{"ruleId":"45357","severity":2,"message":"45358","line":135,"column":30,"nodeType":"45359","messageId":"45360","endLine":135,"endColumn":33,"suggestions":"48678"},{"ruleId":"45357","severity":2,"message":"45358","line":156,"column":20,"nodeType":"45359","messageId":"45360","endLine":156,"endColumn":23,"suggestions":"48679"},{"ruleId":"45357","severity":2,"message":"45358","line":156,"column":47,"nodeType":"45359","messageId":"45360","endLine":156,"endColumn":50,"suggestions":"48680"},{"ruleId":"45357","severity":2,"message":"45358","line":159,"column":30,"nodeType":"45359","messageId":"45360","endLine":159,"endColumn":33,"suggestions":"48681"},{"ruleId":"45357","severity":2,"message":"45358","line":174,"column":34,"nodeType":"45359","messageId":"45360","endLine":174,"endColumn":37,"suggestions":"48682"},{"ruleId":"45357","severity":2,"message":"45358","line":198,"column":30,"nodeType":"45359","messageId":"45360","endLine":198,"endColumn":33,"suggestions":"48683"},{"ruleId":"45357","severity":2,"message":"45358","line":199,"column":30,"nodeType":"45359","messageId":"45360","endLine":199,"endColumn":33,"suggestions":"48684"},{"ruleId":"45357","severity":2,"message":"45358","line":200,"column":34,"nodeType":"45359","messageId":"45360","endLine":200,"endColumn":37,"suggestions":"48685"},{"ruleId":"45357","severity":2,"message":"45358","line":220,"column":30,"nodeType":"45359","messageId":"45360","endLine":220,"endColumn":33,"suggestions":"48686"},{"ruleId":"45357","severity":2,"message":"45358","line":221,"column":30,"nodeType":"45359","messageId":"45360","endLine":221,"endColumn":33,"suggestions":"48687"},{"ruleId":"45357","severity":2,"message":"45358","line":241,"column":30,"nodeType":"45359","messageId":"45360","endLine":241,"endColumn":33,"suggestions":"48688"},{"ruleId":"45357","severity":2,"message":"45358","line":258,"column":30,"nodeType":"45359","messageId":"45360","endLine":258,"endColumn":33,"suggestions":"48689"},{"ruleId":"45357","severity":2,"message":"45358","line":259,"column":30,"nodeType":"45359","messageId":"45360","endLine":259,"endColumn":33,"suggestions":"48690"},{"ruleId":"45357","severity":2,"message":"45358","line":277,"column":30,"nodeType":"45359","messageId":"45360","endLine":277,"endColumn":33,"suggestions":"48691"},{"ruleId":"45357","severity":2,"message":"45358","line":278,"column":30,"nodeType":"45359","messageId":"45360","endLine":278,"endColumn":33,"suggestions":"48692"},{"ruleId":"45357","severity":2,"message":"45358","line":279,"column":34,"nodeType":"45359","messageId":"45360","endLine":279,"endColumn":37,"suggestions":"48693"},{"ruleId":"45357","severity":2,"message":"45358","line":283,"column":19,"nodeType":"45359","messageId":"45360","endLine":283,"endColumn":22,"suggestions":"48694"},{"ruleId":"45357","severity":2,"message":"45358","line":305,"column":30,"nodeType":"45359","messageId":"45360","endLine":305,"endColumn":33,"suggestions":"48695"},{"ruleId":"45357","severity":2,"message":"45358","line":343,"column":30,"nodeType":"45359","messageId":"45360","endLine":343,"endColumn":33,"suggestions":"48696"},{"ruleId":"45357","severity":2,"message":"45358","line":344,"column":30,"nodeType":"45359","messageId":"45360","endLine":344,"endColumn":33,"suggestions":"48697"},{"ruleId":"45357","severity":2,"message":"45358","line":345,"column":30,"nodeType":"45359","messageId":"45360","endLine":345,"endColumn":33,"suggestions":"48698"},{"ruleId":"45357","severity":2,"message":"45358","line":346,"column":14,"nodeType":"45359","messageId":"45360","endLine":346,"endColumn":17,"suggestions":"48699"},{"ruleId":"45357","severity":2,"message":"45358","line":346,"column":39,"nodeType":"45359","messageId":"45360","endLine":346,"endColumn":42,"suggestions":"48700"},{"ruleId":"45357","severity":2,"message":"45358","line":347,"column":14,"nodeType":"45359","messageId":"45360","endLine":347,"endColumn":17,"suggestions":"48701"},{"ruleId":"45357","severity":2,"message":"45358","line":347,"column":39,"nodeType":"45359","messageId":"45360","endLine":347,"endColumn":42,"suggestions":"48702"},{"ruleId":"45357","severity":2,"message":"45358","line":348,"column":14,"nodeType":"45359","messageId":"45360","endLine":348,"endColumn":17,"suggestions":"48703"},{"ruleId":"45357","severity":2,"message":"45358","line":348,"column":39,"nodeType":"45359","messageId":"45360","endLine":348,"endColumn":42,"suggestions":"48704"},{"ruleId":"45357","severity":2,"message":"45358","line":349,"column":30,"nodeType":"45359","messageId":"45360","endLine":349,"endColumn":33,"suggestions":"48705"},{"ruleId":"45357","severity":2,"message":"45358","line":350,"column":31,"nodeType":"45359","messageId":"45360","endLine":350,"endColumn":34,"suggestions":"48706"},{"ruleId":"45357","severity":2,"message":"45358","line":350,"column":45,"nodeType":"45359","messageId":"45360","endLine":350,"endColumn":48,"suggestions":"48707"},{"ruleId":"45357","severity":2,"message":"45358","line":351,"column":30,"nodeType":"45359","messageId":"45360","endLine":351,"endColumn":33,"suggestions":"48708"},{"ruleId":"45357","severity":2,"message":"45358","line":352,"column":30,"nodeType":"45359","messageId":"45360","endLine":352,"endColumn":33,"suggestions":"48709"},{"ruleId":"45357","severity":2,"message":"45358","line":361,"column":9,"nodeType":"45359","messageId":"45360","endLine":361,"endColumn":12,"suggestions":"48710"},{"ruleId":"45357","severity":2,"message":"45358","line":379,"column":9,"nodeType":"45359","messageId":"45360","endLine":379,"endColumn":12,"suggestions":"48711"},{"ruleId":"45357","severity":2,"message":"45358","line":415,"column":30,"nodeType":"45359","messageId":"45360","endLine":415,"endColumn":33,"suggestions":"48712"},{"ruleId":"45357","severity":2,"message":"45358","line":416,"column":31,"nodeType":"45359","messageId":"45360","endLine":416,"endColumn":34,"suggestions":"48713"},{"ruleId":"45357","severity":2,"message":"45358","line":416,"column":49,"nodeType":"45359","messageId":"45360","endLine":416,"endColumn":52,"suggestions":"48714"},{"ruleId":"45357","severity":2,"message":"45358","line":417,"column":30,"nodeType":"45359","messageId":"45360","endLine":417,"endColumn":33,"suggestions":"48715"},{"ruleId":"45357","severity":2,"message":"45358","line":418,"column":30,"nodeType":"45359","messageId":"45360","endLine":418,"endColumn":33,"suggestions":"48716"},{"ruleId":"45357","severity":2,"message":"45358","line":419,"column":30,"nodeType":"45359","messageId":"45360","endLine":419,"endColumn":33,"suggestions":"48717"},{"ruleId":"45357","severity":2,"message":"45358","line":420,"column":14,"nodeType":"45359","messageId":"45360","endLine":420,"endColumn":17,"suggestions":"48718"},{"ruleId":"45357","severity":2,"message":"45358","line":420,"column":39,"nodeType":"45359","messageId":"45360","endLine":420,"endColumn":42,"suggestions":"48719"},{"ruleId":"45357","severity":2,"message":"45358","line":421,"column":30,"nodeType":"45359","messageId":"45360","endLine":421,"endColumn":33,"suggestions":"48720"},{"ruleId":"45357","severity":2,"message":"45358","line":422,"column":30,"nodeType":"45359","messageId":"45360","endLine":422,"endColumn":33,"suggestions":"48721"},{"ruleId":"45357","severity":2,"message":"45358","line":423,"column":30,"nodeType":"45359","messageId":"45360","endLine":423,"endColumn":33,"suggestions":"48722"},{"ruleId":"45357","severity":2,"message":"45358","line":488,"column":30,"nodeType":"45359","messageId":"45360","endLine":488,"endColumn":33,"suggestions":"48723"},{"ruleId":"45357","severity":2,"message":"45358","line":489,"column":34,"nodeType":"45359","messageId":"45360","endLine":489,"endColumn":37,"suggestions":"48724"},{"ruleId":"45357","severity":2,"message":"45358","line":506,"column":30,"nodeType":"45359","messageId":"45360","endLine":506,"endColumn":33,"suggestions":"48725"},{"ruleId":"45357","severity":2,"message":"45358","line":507,"column":30,"nodeType":"45359","messageId":"45360","endLine":507,"endColumn":33,"suggestions":"48726"},{"ruleId":"45357","severity":2,"message":"45358","line":521,"column":30,"nodeType":"45359","messageId":"45360","endLine":521,"endColumn":33,"suggestions":"48727"},{"ruleId":"45357","severity":2,"message":"45358","line":522,"column":30,"nodeType":"45359","messageId":"45360","endLine":522,"endColumn":33,"suggestions":"48728"},{"ruleId":"45357","severity":2,"message":"45358","line":548,"column":30,"nodeType":"45359","messageId":"45360","endLine":548,"endColumn":33,"suggestions":"48729"},{"ruleId":"45357","severity":2,"message":"45358","line":549,"column":30,"nodeType":"45359","messageId":"45360","endLine":549,"endColumn":33,"suggestions":"48730"},{"ruleId":"45357","severity":2,"message":"45358","line":550,"column":30,"nodeType":"45359","messageId":"45360","endLine":550,"endColumn":33,"suggestions":"48731"},{"ruleId":"45357","severity":2,"message":"45358","line":565,"column":30,"nodeType":"45359","messageId":"45360","endLine":565,"endColumn":33,"suggestions":"48732"},{"ruleId":"45357","severity":2,"message":"45358","line":566,"column":40,"nodeType":"45359","messageId":"45360","endLine":566,"endColumn":43,"suggestions":"48733"},{"ruleId":"45357","severity":2,"message":"45358","line":597,"column":33,"nodeType":"45359","messageId":"45360","endLine":597,"endColumn":36,"suggestions":"48734"},{"ruleId":"45357","severity":2,"message":"45358","line":622,"column":33,"nodeType":"45359","messageId":"45360","endLine":622,"endColumn":36,"suggestions":"48735"},{"ruleId":"45357","severity":2,"message":"45358","line":642,"column":33,"nodeType":"45359","messageId":"45360","endLine":642,"endColumn":36,"suggestions":"48736"},{"ruleId":"45357","severity":2,"message":"45358","line":686,"column":9,"nodeType":"45359","messageId":"45360","endLine":686,"endColumn":12,"suggestions":"48737"},{"ruleId":"45357","severity":2,"message":"45358","line":717,"column":9,"nodeType":"45359","messageId":"45360","endLine":717,"endColumn":12,"suggestions":"48738"},{"ruleId":"45357","severity":2,"message":"45358","line":744,"column":9,"nodeType":"45359","messageId":"45360","endLine":744,"endColumn":12,"suggestions":"48739"},{"ruleId":"45357","severity":2,"message":"45358","line":773,"column":9,"nodeType":"45359","messageId":"45360","endLine":773,"endColumn":12,"suggestions":"48740"},{"ruleId":"45357","severity":2,"message":"45358","line":791,"column":9,"nodeType":"45359","messageId":"45360","endLine":791,"endColumn":12,"suggestions":"48741"},{"ruleId":"45357","severity":2,"message":"45358","line":808,"column":9,"nodeType":"45359","messageId":"45360","endLine":808,"endColumn":12,"suggestions":"48742"},{"ruleId":"45357","severity":2,"message":"45358","line":825,"column":9,"nodeType":"45359","messageId":"45360","endLine":825,"endColumn":12,"suggestions":"48743"},{"ruleId":"45357","severity":2,"message":"45358","line":842,"column":9,"nodeType":"45359","messageId":"45360","endLine":842,"endColumn":12,"suggestions":"48744"},{"ruleId":"45357","severity":2,"message":"45358","line":857,"column":9,"nodeType":"45359","messageId":"45360","endLine":857,"endColumn":12,"suggestions":"48745"},{"ruleId":"45357","severity":2,"message":"45358","line":868,"column":9,"nodeType":"45359","messageId":"45360","endLine":868,"endColumn":12,"suggestions":"48746"},{"ruleId":"45357","severity":2,"message":"45358","line":879,"column":9,"nodeType":"45359","messageId":"45360","endLine":879,"endColumn":12,"suggestions":"48747"},{"ruleId":"45357","severity":2,"message":"45358","line":890,"column":9,"nodeType":"45359","messageId":"45360","endLine":890,"endColumn":12,"suggestions":"48748"},{"ruleId":"45357","severity":2,"message":"45358","line":21,"column":41,"nodeType":"45359","messageId":"45360","endLine":21,"endColumn":44,"suggestions":"48749"},{"ruleId":"45357","severity":2,"message":"45358","line":21,"column":56,"nodeType":"45359","messageId":"45360","endLine":21,"endColumn":59,"suggestions":"48750"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":41,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":44,"suggestions":"48751"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":56,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":59,"suggestions":"48752"},{"ruleId":"45357","severity":2,"message":"45358","line":188,"column":37,"nodeType":"45359","messageId":"45360","endLine":188,"endColumn":40,"suggestions":"48753"},{"ruleId":"45357","severity":2,"message":"45358","line":188,"column":48,"nodeType":"45359","messageId":"45360","endLine":188,"endColumn":51,"suggestions":"48754"},{"ruleId":"45357","severity":2,"message":"45358","line":23,"column":31,"nodeType":"45359","messageId":"45360","endLine":23,"endColumn":34,"suggestions":"48755"},{"ruleId":"45357","severity":2,"message":"45358","line":36,"column":36,"nodeType":"45359","messageId":"45360","endLine":36,"endColumn":39,"suggestions":"48756"},{"ruleId":"45357","severity":2,"message":"45358","line":55,"column":30,"nodeType":"45359","messageId":"45360","endLine":55,"endColumn":33,"suggestions":"48757"},{"ruleId":"45357","severity":2,"message":"45358","line":70,"column":27,"nodeType":"45359","messageId":"45360","endLine":70,"endColumn":30,"suggestions":"48758"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":27,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":30,"suggestions":"48759"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":27,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":30,"suggestions":"48760"},{"ruleId":"45357","severity":2,"message":"45358","line":73,"column":31,"nodeType":"45359","messageId":"45360","endLine":73,"endColumn":34,"suggestions":"48761"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":27,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":30,"suggestions":"48762"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":27,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":30,"suggestions":"48763"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":31,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":34,"suggestions":"48764"},{"ruleId":"45357","severity":2,"message":"45358","line":99,"column":27,"nodeType":"45359","messageId":"45360","endLine":99,"endColumn":30,"suggestions":"48765"},{"ruleId":"45357","severity":2,"message":"45358","line":100,"column":27,"nodeType":"45359","messageId":"45360","endLine":100,"endColumn":30,"suggestions":"48766"},{"ruleId":"45357","severity":2,"message":"45358","line":101,"column":27,"nodeType":"45359","messageId":"45360","endLine":101,"endColumn":30,"suggestions":"48767"},{"ruleId":"45357","severity":2,"message":"45358","line":222,"column":30,"nodeType":"45359","messageId":"45360","endLine":222,"endColumn":33,"suggestions":"48768"},{"ruleId":"45357","severity":2,"message":"45358","line":243,"column":31,"nodeType":"45359","messageId":"45360","endLine":243,"endColumn":34,"suggestions":"48769"},{"ruleId":"45357","severity":2,"message":"45358","line":261,"column":31,"nodeType":"45359","messageId":"45360","endLine":261,"endColumn":34,"suggestions":"48770"},{"ruleId":"45357","severity":2,"message":"45358","line":279,"column":30,"nodeType":"45359","messageId":"45360","endLine":279,"endColumn":33,"suggestions":"48771"},{"ruleId":"45357","severity":2,"message":"45358","line":297,"column":31,"nodeType":"45359","messageId":"45360","endLine":297,"endColumn":34,"suggestions":"48772"},{"ruleId":"45357","severity":2,"message":"45358","line":312,"column":14,"nodeType":"45359","messageId":"45360","endLine":312,"endColumn":17,"suggestions":"48773"},{"ruleId":"45357","severity":2,"message":"45358","line":312,"column":40,"nodeType":"45359","messageId":"45360","endLine":312,"endColumn":43,"suggestions":"48774"},{"ruleId":"45357","severity":2,"message":"45358","line":326,"column":14,"nodeType":"45359","messageId":"45360","endLine":326,"endColumn":17,"suggestions":"48775"},{"ruleId":"45357","severity":2,"message":"45358","line":326,"column":40,"nodeType":"45359","messageId":"45360","endLine":326,"endColumn":43,"suggestions":"48776"},{"ruleId":"45357","severity":2,"message":"45358","line":335,"column":27,"nodeType":"45359","messageId":"45360","endLine":335,"endColumn":30,"suggestions":"48777"},{"ruleId":"45357","severity":2,"message":"45358","line":345,"column":27,"nodeType":"45359","messageId":"45360","endLine":345,"endColumn":30,"suggestions":"48778"},{"ruleId":"45357","severity":2,"message":"45358","line":356,"column":22,"nodeType":"45359","messageId":"45360","endLine":356,"endColumn":25,"suggestions":"48779"},{"ruleId":"45357","severity":2,"message":"45358","line":373,"column":22,"nodeType":"45359","messageId":"45360","endLine":373,"endColumn":25,"suggestions":"48780"},{"ruleId":"45357","severity":2,"message":"45358","line":385,"column":22,"nodeType":"45359","messageId":"45360","endLine":385,"endColumn":25,"suggestions":"48781"},{"ruleId":"45357","severity":2,"message":"45358","line":397,"column":22,"nodeType":"45359","messageId":"45360","endLine":397,"endColumn":25,"suggestions":"48782"},{"ruleId":"45357","severity":2,"message":"45358","line":410,"column":35,"nodeType":"45359","messageId":"45360","endLine":410,"endColumn":38,"suggestions":"48783"},{"ruleId":"45357","severity":2,"message":"45358","line":433,"column":33,"nodeType":"45359","messageId":"45360","endLine":433,"endColumn":36,"suggestions":"48784"},{"ruleId":"45357","severity":2,"message":"45358","line":446,"column":27,"nodeType":"45359","messageId":"45360","endLine":446,"endColumn":30,"suggestions":"48785"},{"ruleId":"45357","severity":2,"message":"45358","line":447,"column":27,"nodeType":"45359","messageId":"45360","endLine":447,"endColumn":30,"suggestions":"48786"},{"ruleId":"45357","severity":2,"message":"45358","line":463,"column":29,"nodeType":"45359","messageId":"45360","endLine":463,"endColumn":32,"suggestions":"48787"},{"ruleId":"45357","severity":2,"message":"45358","line":484,"column":31,"nodeType":"45359","messageId":"45360","endLine":484,"endColumn":34,"suggestions":"48788"},{"ruleId":"45357","severity":2,"message":"45358","line":488,"column":29,"nodeType":"45359","messageId":"45360","endLine":488,"endColumn":32,"suggestions":"48789"},{"ruleId":"45357","severity":2,"message":"45358","line":168,"column":51,"nodeType":"45359","messageId":"45360","endLine":168,"endColumn":54,"suggestions":"48790"},{"ruleId":"45357","severity":2,"message":"45358","line":178,"column":67,"nodeType":"45359","messageId":"45360","endLine":178,"endColumn":70,"suggestions":"48791"},{"ruleId":"45357","severity":2,"message":"45358","line":179,"column":61,"nodeType":"45359","messageId":"45360","endLine":179,"endColumn":64,"suggestions":"48792"},{"ruleId":"45357","severity":2,"message":"45358","line":180,"column":47,"nodeType":"45359","messageId":"45360","endLine":180,"endColumn":50,"suggestions":"48793"},{"ruleId":"45357","severity":2,"message":"45358","line":224,"column":53,"nodeType":"45359","messageId":"45360","endLine":224,"endColumn":56,"suggestions":"48794"},{"ruleId":"45357","severity":2,"message":"45358","line":323,"column":57,"nodeType":"45359","messageId":"45360","endLine":323,"endColumn":60,"suggestions":"48795"},{"ruleId":"45357","severity":2,"message":"45358","line":324,"column":60,"nodeType":"45359","messageId":"45360","endLine":324,"endColumn":63,"suggestions":"48796"},{"ruleId":"45357","severity":2,"message":"45358","line":325,"column":51,"nodeType":"45359","messageId":"45360","endLine":325,"endColumn":54,"suggestions":"48797"},{"ruleId":"45357","severity":2,"message":"45358","line":326,"column":53,"nodeType":"45359","messageId":"45360","endLine":326,"endColumn":56,"suggestions":"48798"},{"ruleId":"45357","severity":2,"message":"45358","line":327,"column":57,"nodeType":"45359","messageId":"45360","endLine":327,"endColumn":60,"suggestions":"48799"},{"ruleId":"45357","severity":2,"message":"45358","line":328,"column":52,"nodeType":"45359","messageId":"45360","endLine":328,"endColumn":55,"suggestions":"48800"},{"ruleId":"45357","severity":2,"message":"45358","line":329,"column":55,"nodeType":"45359","messageId":"45360","endLine":329,"endColumn":58,"suggestions":"48801"},{"ruleId":"45357","severity":2,"message":"45358","line":330,"column":73,"nodeType":"45359","messageId":"45360","endLine":330,"endColumn":76,"suggestions":"48802"},{"ruleId":"45357","severity":2,"message":"45358","line":331,"column":95,"nodeType":"45359","messageId":"45360","endLine":331,"endColumn":98,"suggestions":"48803"},{"ruleId":"45357","severity":2,"message":"45358","line":332,"column":49,"nodeType":"45359","messageId":"45360","endLine":332,"endColumn":52,"suggestions":"48804"},{"ruleId":"45357","severity":2,"message":"45358","line":333,"column":71,"nodeType":"45359","messageId":"45360","endLine":333,"endColumn":74,"suggestions":"48805"},{"ruleId":"45357","severity":2,"message":"45358","line":334,"column":59,"nodeType":"45359","messageId":"45360","endLine":334,"endColumn":62,"suggestions":"48806"},{"ruleId":"45357","severity":2,"message":"45358","line":415,"column":53,"nodeType":"45359","messageId":"45360","endLine":415,"endColumn":56,"suggestions":"48807"},{"ruleId":"45357","severity":2,"message":"45358","line":416,"column":60,"nodeType":"45359","messageId":"45360","endLine":416,"endColumn":63,"suggestions":"48808"},{"ruleId":"45357","severity":2,"message":"45358","line":417,"column":56,"nodeType":"45359","messageId":"45360","endLine":417,"endColumn":59,"suggestions":"48809"},{"ruleId":"45357","severity":2,"message":"45358","line":418,"column":64,"nodeType":"45359","messageId":"45360","endLine":418,"endColumn":67,"suggestions":"48810"},{"ruleId":"45357","severity":2,"message":"45358","line":419,"column":60,"nodeType":"45359","messageId":"45360","endLine":419,"endColumn":63,"suggestions":"48811"},{"ruleId":"45357","severity":2,"message":"45358","line":456,"column":63,"nodeType":"45359","messageId":"45360","endLine":456,"endColumn":66,"suggestions":"48812"},{"ruleId":"45357","severity":2,"message":"45358","line":480,"column":61,"nodeType":"45359","messageId":"45360","endLine":480,"endColumn":64,"suggestions":"48813"},{"ruleId":"45357","severity":2,"message":"45358","line":481,"column":59,"nodeType":"45359","messageId":"45360","endLine":481,"endColumn":62,"suggestions":"48814"},{"ruleId":"45357","severity":2,"message":"45358","line":503,"column":60,"nodeType":"45359","messageId":"45360","endLine":503,"endColumn":63,"suggestions":"48815"},{"ruleId":"45357","severity":2,"message":"45358","line":516,"column":54,"nodeType":"45359","messageId":"45360","endLine":516,"endColumn":57,"suggestions":"48816"},{"ruleId":"45357","severity":2,"message":"45358","line":551,"column":47,"nodeType":"45359","messageId":"45360","endLine":551,"endColumn":50,"suggestions":"48817"},{"ruleId":"45357","severity":2,"message":"45358","line":583,"column":47,"nodeType":"45359","messageId":"45360","endLine":583,"endColumn":50,"suggestions":"48818"},{"ruleId":"45357","severity":2,"message":"45358","line":628,"column":53,"nodeType":"45359","messageId":"45360","endLine":628,"endColumn":56,"suggestions":"48819"},{"ruleId":"45357","severity":2,"message":"45358","line":690,"column":65,"nodeType":"45359","messageId":"45360","endLine":690,"endColumn":68,"suggestions":"48820"},{"ruleId":"45357","severity":2,"message":"45358","line":691,"column":59,"nodeType":"45359","messageId":"45360","endLine":691,"endColumn":62,"suggestions":"48821"},{"ruleId":"45357","severity":2,"message":"45358","line":692,"column":53,"nodeType":"45359","messageId":"45360","endLine":692,"endColumn":56,"suggestions":"48822"},{"ruleId":"45357","severity":2,"message":"45358","line":693,"column":43,"nodeType":"45359","messageId":"45360","endLine":693,"endColumn":46,"suggestions":"48823"},{"ruleId":"45357","severity":2,"message":"45358","line":694,"column":53,"nodeType":"45359","messageId":"45360","endLine":694,"endColumn":56,"suggestions":"48824"},{"ruleId":"45357","severity":2,"message":"45358","line":695,"column":55,"nodeType":"45359","messageId":"45360","endLine":695,"endColumn":58,"suggestions":"48825"},{"ruleId":"45357","severity":2,"message":"45358","line":696,"column":67,"nodeType":"45359","messageId":"45360","endLine":696,"endColumn":70,"suggestions":"48826"},{"ruleId":"45357","severity":2,"message":"45358","line":697,"column":59,"nodeType":"45359","messageId":"45360","endLine":697,"endColumn":62,"suggestions":"48827"},{"ruleId":"45357","severity":2,"message":"45358","line":698,"column":49,"nodeType":"45359","messageId":"45360","endLine":698,"endColumn":52,"suggestions":"48828"},{"ruleId":"45357","severity":2,"message":"45358","line":699,"column":61,"nodeType":"45359","messageId":"45360","endLine":699,"endColumn":64,"suggestions":"48829"},{"ruleId":"45357","severity":2,"message":"45358","line":700,"column":63,"nodeType":"45359","messageId":"45360","endLine":700,"endColumn":66,"suggestions":"48830"},{"ruleId":"45357","severity":2,"message":"45358","line":701,"column":59,"nodeType":"45359","messageId":"45360","endLine":701,"endColumn":62,"suggestions":"48831"},{"ruleId":"45357","severity":2,"message":"45358","line":744,"column":49,"nodeType":"45359","messageId":"45360","endLine":744,"endColumn":52,"suggestions":"48832"},{"ruleId":"45357","severity":2,"message":"45358","line":767,"column":57,"nodeType":"45359","messageId":"45360","endLine":767,"endColumn":60,"suggestions":"48833"},{"ruleId":"45357","severity":2,"message":"45358","line":768,"column":69,"nodeType":"45359","messageId":"45360","endLine":768,"endColumn":72,"suggestions":"48834"},{"ruleId":"45357","severity":2,"message":"45358","line":769,"column":59,"nodeType":"45359","messageId":"45360","endLine":769,"endColumn":62,"suggestions":"48835"},{"ruleId":"45357","severity":2,"message":"45358","line":818,"column":71,"nodeType":"45359","messageId":"45360","endLine":818,"endColumn":74,"suggestions":"48836"},{"ruleId":"45357","severity":2,"message":"45358","line":819,"column":63,"nodeType":"45359","messageId":"45360","endLine":819,"endColumn":66,"suggestions":"48837"},{"ruleId":"45357","severity":2,"message":"45358","line":897,"column":45,"nodeType":"45359","messageId":"45360","endLine":897,"endColumn":48,"suggestions":"48838"},{"ruleId":"45357","severity":2,"message":"45358","line":920,"column":49,"nodeType":"45359","messageId":"45360","endLine":920,"endColumn":52,"suggestions":"48839"},{"ruleId":"45357","severity":2,"message":"45358","line":937,"column":49,"nodeType":"45359","messageId":"45360","endLine":937,"endColumn":52,"suggestions":"48840"},{"ruleId":"45357","severity":2,"message":"45358","line":983,"column":55,"nodeType":"45359","messageId":"45360","endLine":983,"endColumn":58,"suggestions":"48841"},{"ruleId":"45357","severity":2,"message":"45358","line":1012,"column":53,"nodeType":"45359","messageId":"45360","endLine":1012,"endColumn":56,"suggestions":"48842"},{"ruleId":"45357","severity":2,"message":"45358","line":1034,"column":45,"nodeType":"45359","messageId":"45360","endLine":1034,"endColumn":48,"suggestions":"48843"},{"ruleId":"45357","severity":2,"message":"45358","line":1075,"column":43,"nodeType":"45359","messageId":"45360","endLine":1075,"endColumn":46,"suggestions":"48844"},{"ruleId":"45357","severity":2,"message":"45358","line":1144,"column":65,"nodeType":"45359","messageId":"45360","endLine":1144,"endColumn":68,"suggestions":"48845"},{"ruleId":"45357","severity":2,"message":"45358","line":1231,"column":57,"nodeType":"45359","messageId":"45360","endLine":1231,"endColumn":60,"suggestions":"48846"},{"ruleId":"45357","severity":2,"message":"45358","line":61,"column":30,"nodeType":"45359","messageId":"45360","endLine":61,"endColumn":33,"suggestions":"48847"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":18,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":21,"suggestions":"48848"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":39,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":42,"suggestions":"48849"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":18,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":21,"suggestions":"48850"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":39,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":42,"suggestions":"48851"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":30,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":33,"suggestions":"48852"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":30,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":33,"suggestions":"48853"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":30,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":33,"suggestions":"48854"},{"ruleId":"45357","severity":2,"message":"45358","line":107,"column":30,"nodeType":"45359","messageId":"45360","endLine":107,"endColumn":33,"suggestions":"48855"},{"ruleId":"45357","severity":2,"message":"45358","line":28,"column":33,"nodeType":"45359","messageId":"45360","endLine":28,"endColumn":36,"suggestions":"48856"},{"ruleId":"45357","severity":2,"message":"45358","line":29,"column":14,"nodeType":"45359","messageId":"45360","endLine":29,"endColumn":17,"suggestions":"48857"},{"ruleId":"45357","severity":2,"message":"45358","line":29,"column":42,"nodeType":"45359","messageId":"45360","endLine":29,"endColumn":45,"suggestions":"48858"},{"ruleId":"45357","severity":2,"message":"45358","line":30,"column":14,"nodeType":"45359","messageId":"45360","endLine":30,"endColumn":17,"suggestions":"48859"},{"ruleId":"45357","severity":2,"message":"45358","line":30,"column":42,"nodeType":"45359","messageId":"45360","endLine":30,"endColumn":45,"suggestions":"48860"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":14,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":17,"suggestions":"48861"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":42,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":45,"suggestions":"48862"},{"ruleId":"45357","severity":2,"message":"45358","line":42,"column":33,"nodeType":"45359","messageId":"45360","endLine":42,"endColumn":36,"suggestions":"48863"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":27,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":30,"suggestions":"48864"},{"ruleId":"45357","severity":2,"message":"45358","line":91,"column":27,"nodeType":"45359","messageId":"45360","endLine":91,"endColumn":30,"suggestions":"48865"},{"ruleId":"45357","severity":2,"message":"45358","line":97,"column":27,"nodeType":"45359","messageId":"45360","endLine":97,"endColumn":30,"suggestions":"48866"},{"ruleId":"45357","severity":2,"message":"45358","line":106,"column":27,"nodeType":"45359","messageId":"45360","endLine":106,"endColumn":30,"suggestions":"48867"},{"ruleId":"45357","severity":2,"message":"45358","line":50,"column":43,"nodeType":"45359","messageId":"45360","endLine":50,"endColumn":46,"suggestions":"48868"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":45,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":48,"suggestions":"48869"},{"ruleId":"45357","severity":2,"message":"45358","line":246,"column":45,"nodeType":"45359","messageId":"45360","endLine":246,"endColumn":48,"suggestions":"48870"},{"ruleId":"45357","severity":2,"message":"45358","line":303,"column":45,"nodeType":"45359","messageId":"45360","endLine":303,"endColumn":48,"suggestions":"48871"},{"ruleId":"45357","severity":2,"message":"45358","line":351,"column":45,"nodeType":"45359","messageId":"45360","endLine":351,"endColumn":48,"suggestions":"48872"},{"ruleId":"45357","severity":2,"message":"45358","line":406,"column":45,"nodeType":"45359","messageId":"45360","endLine":406,"endColumn":48,"suggestions":"48873"},{"ruleId":"45357","severity":2,"message":"45358","line":452,"column":45,"nodeType":"45359","messageId":"45360","endLine":452,"endColumn":48,"suggestions":"48874"},{"ruleId":"45357","severity":2,"message":"45358","line":20,"column":24,"nodeType":"45359","messageId":"45360","endLine":20,"endColumn":27,"suggestions":"48875"},{"ruleId":"45357","severity":2,"message":"45358","line":30,"column":24,"nodeType":"45359","messageId":"45360","endLine":30,"endColumn":27,"suggestions":"48876"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":24,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":27,"suggestions":"48877"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":25,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":28,"suggestions":"48878"},{"ruleId":"45357","severity":2,"message":"45358","line":49,"column":26,"nodeType":"45359","messageId":"45360","endLine":49,"endColumn":29,"suggestions":"48879"},{"ruleId":"45357","severity":2,"message":"45358","line":34,"column":63,"nodeType":"45359","messageId":"45360","endLine":34,"endColumn":66,"suggestions":"48880"},{"ruleId":"45357","severity":2,"message":"45358","line":101,"column":50,"nodeType":"45359","messageId":"45360","endLine":101,"endColumn":53,"suggestions":"48881"},{"ruleId":"45357","severity":2,"message":"45358","line":42,"column":57,"nodeType":"45359","messageId":"45360","endLine":42,"endColumn":60,"suggestions":"48882"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":63,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":66,"suggestions":"48883"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":73,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":76,"suggestions":"48884"},{"ruleId":"45357","severity":2,"message":"45358","line":115,"column":33,"nodeType":"45359","messageId":"45360","endLine":115,"endColumn":36,"suggestions":"48885"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":33,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":36,"suggestions":"48886"},{"ruleId":"45357","severity":2,"message":"45358","line":157,"column":33,"nodeType":"45359","messageId":"45360","endLine":157,"endColumn":36,"suggestions":"48887"},{"ruleId":"45357","severity":2,"message":"45358","line":184,"column":33,"nodeType":"45359","messageId":"45360","endLine":184,"endColumn":36,"suggestions":"48888"},{"ruleId":"45357","severity":2,"message":"45358","line":204,"column":33,"nodeType":"45359","messageId":"45360","endLine":204,"endColumn":36,"suggestions":"48889"},{"ruleId":"45357","severity":2,"message":"45358","line":225,"column":33,"nodeType":"45359","messageId":"45360","endLine":225,"endColumn":36,"suggestions":"48890"},{"ruleId":"45357","severity":2,"message":"45358","line":247,"column":33,"nodeType":"45359","messageId":"45360","endLine":247,"endColumn":36,"suggestions":"48891"},{"ruleId":"45357","severity":2,"message":"45358","line":233,"column":61,"nodeType":"45359","messageId":"45360","endLine":233,"endColumn":64,"suggestions":"48892"},{"ruleId":"45357","severity":2,"message":"45358","line":14,"column":26,"nodeType":"45359","messageId":"45360","endLine":14,"endColumn":29,"suggestions":"48893"},{"ruleId":"45357","severity":2,"message":"45358","line":15,"column":35,"nodeType":"45359","messageId":"45360","endLine":15,"endColumn":38,"suggestions":"48894"},{"ruleId":"45357","severity":2,"message":"45358","line":18,"column":34,"nodeType":"45359","messageId":"45360","endLine":18,"endColumn":37,"suggestions":"48895"},{"ruleId":"45357","severity":2,"message":"45358","line":56,"column":86,"nodeType":"45359","messageId":"45360","endLine":56,"endColumn":89,"suggestions":"48896"},{"ruleId":"45357","severity":2,"message":"45358","line":61,"column":29,"nodeType":"45359","messageId":"45360","endLine":61,"endColumn":32,"suggestions":"48897"},{"ruleId":"45357","severity":2,"message":"45358","line":62,"column":20,"nodeType":"45359","messageId":"45360","endLine":62,"endColumn":23,"suggestions":"48898"},{"ruleId":"45357","severity":2,"message":"45358","line":102,"column":30,"nodeType":"45359","messageId":"45360","endLine":102,"endColumn":33,"suggestions":"48899"},{"ruleId":"45357","severity":2,"message":"45358","line":103,"column":18,"nodeType":"45359","messageId":"45360","endLine":103,"endColumn":21,"suggestions":"48900"},{"ruleId":"45357","severity":2,"message":"45358","line":103,"column":39,"nodeType":"45359","messageId":"45360","endLine":103,"endColumn":42,"suggestions":"48901"},{"ruleId":"45357","severity":2,"message":"45358","line":104,"column":18,"nodeType":"45359","messageId":"45360","endLine":104,"endColumn":21,"suggestions":"48902"},{"ruleId":"45357","severity":2,"message":"45358","line":104,"column":43,"nodeType":"45359","messageId":"45360","endLine":104,"endColumn":46,"suggestions":"48903"},{"ruleId":"45357","severity":2,"message":"45358","line":124,"column":30,"nodeType":"45359","messageId":"45360","endLine":124,"endColumn":33,"suggestions":"48904"},{"ruleId":"45357","severity":2,"message":"45358","line":125,"column":30,"nodeType":"45359","messageId":"45360","endLine":125,"endColumn":33,"suggestions":"48905"},{"ruleId":"45357","severity":2,"message":"45358","line":126,"column":30,"nodeType":"45359","messageId":"45360","endLine":126,"endColumn":33,"suggestions":"48906"},{"ruleId":"45357","severity":2,"message":"45358","line":28,"column":44,"nodeType":"45359","messageId":"45360","endLine":28,"endColumn":47,"suggestions":"48907"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":44,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":47,"suggestions":"48908"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":58,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":61,"suggestions":"48909"},{"ruleId":"45357","severity":2,"message":"45358","line":50,"column":44,"nodeType":"45359","messageId":"45360","endLine":50,"endColumn":47,"suggestions":"48910"},{"ruleId":"45357","severity":2,"message":"45358","line":69,"column":45,"nodeType":"45359","messageId":"45360","endLine":69,"endColumn":48,"suggestions":"48911"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":56,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":59,"suggestions":"48912"},{"ruleId":"45357","severity":2,"message":"45358","line":81,"column":45,"nodeType":"45359","messageId":"45360","endLine":81,"endColumn":48,"suggestions":"48913"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":64,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":67,"suggestions":"48914"},{"ruleId":"45357","severity":2,"message":"45358","line":104,"column":36,"nodeType":"45359","messageId":"45360","endLine":104,"endColumn":39,"suggestions":"48915"},{"ruleId":"45357","severity":2,"message":"45358","line":125,"column":62,"nodeType":"45359","messageId":"45360","endLine":125,"endColumn":65,"suggestions":"48916"},{"ruleId":"45357","severity":2,"message":"45358","line":134,"column":57,"nodeType":"45359","messageId":"45360","endLine":134,"endColumn":60,"suggestions":"48917"},{"ruleId":"45357","severity":2,"message":"45358","line":118,"column":83,"nodeType":"45359","messageId":"45360","endLine":118,"endColumn":86,"suggestions":"48918"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":33,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":36,"suggestions":"48919"},{"ruleId":"45357","severity":2,"message":"45358","line":74,"column":43,"nodeType":"45359","messageId":"45360","endLine":74,"endColumn":46,"suggestions":"48920"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":45,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":48,"suggestions":"48921"},{"ruleId":"45357","severity":2,"message":"45358","line":108,"column":49,"nodeType":"45359","messageId":"45360","endLine":108,"endColumn":52,"suggestions":"48922"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":49,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":52,"suggestions":"48923"},{"ruleId":"45357","severity":2,"message":"45358","line":124,"column":49,"nodeType":"45359","messageId":"45360","endLine":124,"endColumn":52,"suggestions":"48924"},{"ruleId":"45357","severity":2,"message":"45358","line":170,"column":49,"nodeType":"45359","messageId":"45360","endLine":170,"endColumn":52,"suggestions":"48925"},{"ruleId":"45357","severity":2,"message":"45358","line":171,"column":49,"nodeType":"45359","messageId":"45360","endLine":171,"endColumn":52,"suggestions":"48926"},{"ruleId":"45357","severity":2,"message":"45358","line":172,"column":53,"nodeType":"45359","messageId":"45360","endLine":172,"endColumn":56,"suggestions":"48927"},{"ruleId":"45357","severity":2,"message":"45358","line":177,"column":57,"nodeType":"45359","messageId":"45360","endLine":177,"endColumn":60,"suggestions":"48928"},{"ruleId":"45357","severity":2,"message":"45358","line":129,"column":22,"nodeType":"45359","messageId":"45360","endLine":129,"endColumn":25,"suggestions":"48929"},{"ruleId":"45357","severity":2,"message":"45358","line":153,"column":22,"nodeType":"45359","messageId":"45360","endLine":153,"endColumn":25,"suggestions":"48930"},{"ruleId":"45357","severity":2,"message":"45358","line":187,"column":38,"nodeType":"45359","messageId":"45360","endLine":187,"endColumn":41,"suggestions":"48931"},{"ruleId":"45357","severity":2,"message":"45358","line":200,"column":38,"nodeType":"45359","messageId":"45360","endLine":200,"endColumn":41,"suggestions":"48932"},{"ruleId":"45357","severity":2,"message":"45358","line":231,"column":38,"nodeType":"45359","messageId":"45360","endLine":231,"endColumn":41,"suggestions":"48933"},{"ruleId":"45357","severity":2,"message":"45358","line":277,"column":38,"nodeType":"45359","messageId":"45360","endLine":277,"endColumn":41,"suggestions":"48934"},{"ruleId":"45357","severity":2,"message":"45358","line":303,"column":38,"nodeType":"45359","messageId":"45360","endLine":303,"endColumn":41,"suggestions":"48935"},{"ruleId":"45357","severity":2,"message":"45358","line":34,"column":21,"nodeType":"45359","messageId":"45360","endLine":34,"endColumn":24,"suggestions":"48936"},{"ruleId":"45357","severity":2,"message":"45358","line":30,"column":60,"nodeType":"45359","messageId":"45360","endLine":30,"endColumn":63,"suggestions":"48937"},{"ruleId":"45357","severity":2,"message":"45358","line":279,"column":29,"nodeType":"45359","messageId":"45360","endLine":279,"endColumn":32,"suggestions":"48938"},{"ruleId":"45357","severity":2,"message":"45358","line":298,"column":34,"nodeType":"45359","messageId":"45360","endLine":298,"endColumn":37,"suggestions":"48939"},{"ruleId":"45357","severity":2,"message":"45358","line":324,"column":37,"nodeType":"45359","messageId":"45360","endLine":324,"endColumn":40,"suggestions":"48940"},{"ruleId":"45357","severity":2,"message":"45358","line":357,"column":29,"nodeType":"45359","messageId":"45360","endLine":357,"endColumn":32,"suggestions":"48941"},{"ruleId":"45357","severity":2,"message":"45358","line":418,"column":17,"nodeType":"45359","messageId":"45360","endLine":418,"endColumn":20,"suggestions":"48942"},{"ruleId":"45357","severity":2,"message":"45358","line":424,"column":19,"nodeType":"45359","messageId":"45360","endLine":424,"endColumn":22,"suggestions":"48943"},{"ruleId":"45357","severity":2,"message":"45358","line":485,"column":18,"nodeType":"45359","messageId":"45360","endLine":485,"endColumn":21,"suggestions":"48944"},{"ruleId":"45357","severity":2,"message":"45358","line":614,"column":76,"nodeType":"45359","messageId":"45360","endLine":614,"endColumn":79,"suggestions":"48945"},{"ruleId":"45357","severity":2,"message":"45358","line":673,"column":88,"nodeType":"45359","messageId":"45360","endLine":673,"endColumn":91,"suggestions":"48946"},{"ruleId":"45357","severity":2,"message":"45358","line":693,"column":40,"nodeType":"45359","messageId":"45360","endLine":693,"endColumn":43,"suggestions":"48947"},{"ruleId":"45357","severity":2,"message":"45358","line":713,"column":22,"nodeType":"45359","messageId":"45360","endLine":713,"endColumn":25,"suggestions":"48948"},{"ruleId":"45357","severity":2,"message":"45358","line":716,"column":43,"nodeType":"45359","messageId":"45360","endLine":716,"endColumn":46,"suggestions":"48949"},{"ruleId":"45357","severity":2,"message":"45358","line":36,"column":21,"nodeType":"45359","messageId":"45360","endLine":36,"endColumn":24,"suggestions":"48950"},{"ruleId":"45357","severity":2,"message":"45358","line":46,"column":68,"nodeType":"45359","messageId":"45360","endLine":46,"endColumn":71,"suggestions":"48951"},{"ruleId":"45357","severity":2,"message":"45358","line":56,"column":68,"nodeType":"45359","messageId":"45360","endLine":56,"endColumn":71,"suggestions":"48952"},{"ruleId":"45357","severity":2,"message":"45358","line":1206,"column":28,"nodeType":"45359","messageId":"45360","endLine":1206,"endColumn":31,"suggestions":"48953"},{"ruleId":"45357","severity":2,"message":"45358","line":1207,"column":28,"nodeType":"45359","messageId":"45360","endLine":1207,"endColumn":31,"suggestions":"48954"},{"ruleId":"45357","severity":2,"message":"45358","line":1208,"column":28,"nodeType":"45359","messageId":"45360","endLine":1208,"endColumn":31,"suggestions":"48955"},{"ruleId":"45357","severity":2,"message":"45358","line":1209,"column":28,"nodeType":"45359","messageId":"45360","endLine":1209,"endColumn":31,"suggestions":"48956"},{"ruleId":"45357","severity":2,"message":"45358","line":1210,"column":28,"nodeType":"45359","messageId":"45360","endLine":1210,"endColumn":31,"suggestions":"48957"},{"ruleId":"45357","severity":2,"message":"45358","line":1839,"column":28,"nodeType":"45359","messageId":"45360","endLine":1839,"endColumn":31,"suggestions":"48958"},{"ruleId":"45357","severity":2,"message":"45358","line":1840,"column":28,"nodeType":"45359","messageId":"45360","endLine":1840,"endColumn":31,"suggestions":"48959"},{"ruleId":"45357","severity":2,"message":"45358","line":1841,"column":28,"nodeType":"45359","messageId":"45360","endLine":1841,"endColumn":31,"suggestions":"48960"},{"ruleId":"45357","severity":2,"message":"45358","line":1842,"column":32,"nodeType":"45359","messageId":"45360","endLine":1842,"endColumn":35,"suggestions":"48961"},{"ruleId":"45357","severity":2,"message":"45358","line":1892,"column":28,"nodeType":"45359","messageId":"45360","endLine":1892,"endColumn":31,"suggestions":"48962"},{"ruleId":"45357","severity":2,"message":"45358","line":1893,"column":28,"nodeType":"45359","messageId":"45360","endLine":1893,"endColumn":31,"suggestions":"48963"},{"ruleId":"45357","severity":2,"message":"45358","line":1894,"column":28,"nodeType":"45359","messageId":"45360","endLine":1894,"endColumn":31,"suggestions":"48964"},{"ruleId":"45357","severity":2,"message":"45358","line":1895,"column":32,"nodeType":"45359","messageId":"45360","endLine":1895,"endColumn":35,"suggestions":"48965"},{"ruleId":"45357","severity":2,"message":"45358","line":1898,"column":32,"nodeType":"45359","messageId":"45360","endLine":1898,"endColumn":35,"suggestions":"48966"},{"ruleId":"45357","severity":2,"message":"45358","line":162,"column":47,"nodeType":"45359","messageId":"45360","endLine":162,"endColumn":50,"suggestions":"48967"},{"ruleId":"45357","severity":2,"message":"45358","line":185,"column":47,"nodeType":"45359","messageId":"45360","endLine":185,"endColumn":50,"suggestions":"48968"},{"ruleId":"45357","severity":2,"message":"45358","line":200,"column":47,"nodeType":"45359","messageId":"45360","endLine":200,"endColumn":50,"suggestions":"48969"},{"ruleId":"45357","severity":2,"message":"45358","line":213,"column":47,"nodeType":"45359","messageId":"45360","endLine":213,"endColumn":50,"suggestions":"48970"},{"ruleId":"45357","severity":2,"message":"45358","line":231,"column":47,"nodeType":"45359","messageId":"45360","endLine":231,"endColumn":50,"suggestions":"48971"},{"ruleId":"45357","severity":2,"message":"45358","line":243,"column":47,"nodeType":"45359","messageId":"45360","endLine":243,"endColumn":50,"suggestions":"48972"},{"ruleId":"45357","severity":2,"message":"45358","line":295,"column":47,"nodeType":"45359","messageId":"45360","endLine":295,"endColumn":50,"suggestions":"48973"},{"ruleId":"45357","severity":2,"message":"45358","line":311,"column":47,"nodeType":"45359","messageId":"45360","endLine":311,"endColumn":50,"suggestions":"48974"},{"ruleId":"45357","severity":2,"message":"45358","line":329,"column":47,"nodeType":"45359","messageId":"45360","endLine":329,"endColumn":50,"suggestions":"48975"},{"ruleId":"45357","severity":2,"message":"45358","line":348,"column":47,"nodeType":"45359","messageId":"45360","endLine":348,"endColumn":50,"suggestions":"48976"},{"ruleId":"45357","severity":2,"message":"45358","line":384,"column":47,"nodeType":"45359","messageId":"45360","endLine":384,"endColumn":50,"suggestions":"48977"},{"ruleId":"45357","severity":2,"message":"45358","line":400,"column":47,"nodeType":"45359","messageId":"45360","endLine":400,"endColumn":50,"suggestions":"48978"},{"ruleId":"45357","severity":2,"message":"45358","line":426,"column":47,"nodeType":"45359","messageId":"45360","endLine":426,"endColumn":50,"suggestions":"48979"},{"ruleId":"45357","severity":2,"message":"45358","line":435,"column":47,"nodeType":"45359","messageId":"45360","endLine":435,"endColumn":50,"suggestions":"48980"},{"ruleId":"45357","severity":2,"message":"45358","line":447,"column":47,"nodeType":"45359","messageId":"45360","endLine":447,"endColumn":50,"suggestions":"48981"},{"ruleId":"45357","severity":2,"message":"45358","line":459,"column":47,"nodeType":"45359","messageId":"45360","endLine":459,"endColumn":50,"suggestions":"48982"},{"ruleId":"45357","severity":2,"message":"45358","line":481,"column":47,"nodeType":"45359","messageId":"45360","endLine":481,"endColumn":50,"suggestions":"48983"},{"ruleId":"45357","severity":2,"message":"45358","line":507,"column":47,"nodeType":"45359","messageId":"45360","endLine":507,"endColumn":50,"suggestions":"48984"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":61,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":64,"suggestions":"48985"},{"ruleId":"45357","severity":2,"message":"45358","line":95,"column":61,"nodeType":"45359","messageId":"45360","endLine":95,"endColumn":64,"suggestions":"48986"},{"ruleId":"45357","severity":2,"message":"45358","line":89,"column":56,"nodeType":"45359","messageId":"45360","endLine":89,"endColumn":59,"suggestions":"48987"},{"ruleId":"45357","severity":2,"message":"45358","line":100,"column":49,"nodeType":"45359","messageId":"45360","endLine":100,"endColumn":52,"suggestions":"48988"},{"ruleId":"45357","severity":2,"message":"45358","line":116,"column":58,"nodeType":"45359","messageId":"45360","endLine":116,"endColumn":61,"suggestions":"48989"},{"ruleId":"45357","severity":2,"message":"45358","line":125,"column":63,"nodeType":"45359","messageId":"45360","endLine":125,"endColumn":66,"suggestions":"48990"},{"ruleId":"45357","severity":2,"message":"45358","line":154,"column":55,"nodeType":"45359","messageId":"45360","endLine":154,"endColumn":58,"suggestions":"48991"},{"ruleId":"45357","severity":2,"message":"45358","line":37,"column":31,"nodeType":"45359","messageId":"45360","endLine":37,"endColumn":34,"suggestions":"48992"},{"ruleId":"45357","severity":2,"message":"45358","line":64,"column":31,"nodeType":"45359","messageId":"45360","endLine":64,"endColumn":34,"suggestions":"48993"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":14,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":17,"suggestions":"48994"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":40,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":43,"suggestions":"48995"},{"ruleId":"45357","severity":2,"message":"45358","line":150,"column":41,"nodeType":"45359","messageId":"45360","endLine":150,"endColumn":44,"suggestions":"48996"},{"ruleId":"45357","severity":2,"message":"45358","line":28,"column":9,"nodeType":"45359","messageId":"45360","endLine":28,"endColumn":12,"suggestions":"48997"},{"ruleId":"45357","severity":2,"message":"45358","line":83,"column":59,"nodeType":"45359","messageId":"45360","endLine":83,"endColumn":62,"suggestions":"48998"},{"ruleId":"45357","severity":2,"message":"45358","line":83,"column":89,"nodeType":"45359","messageId":"45360","endLine":83,"endColumn":92,"suggestions":"48999"},{"ruleId":"45357","severity":2,"message":"45358","line":130,"column":56,"nodeType":"45359","messageId":"45360","endLine":130,"endColumn":59,"suggestions":"49000"},{"ruleId":"45357","severity":2,"message":"45358","line":130,"column":83,"nodeType":"45359","messageId":"45360","endLine":130,"endColumn":86,"suggestions":"49001"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":46,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":49,"suggestions":"49002"},{"ruleId":"45357","severity":2,"message":"45358","line":28,"column":46,"nodeType":"45359","messageId":"45360","endLine":28,"endColumn":49,"suggestions":"49003"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":39,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":42,"suggestions":"49004"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":60,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":63,"suggestions":"49005"},{"ruleId":"45357","severity":2,"message":"45358","line":23,"column":32,"nodeType":"45359","messageId":"45360","endLine":23,"endColumn":35,"suggestions":"49006"},{"ruleId":"45357","severity":2,"message":"45358","line":29,"column":21,"nodeType":"45359","messageId":"45360","endLine":29,"endColumn":24,"suggestions":"49007"},{"ruleId":"45357","severity":2,"message":"45358","line":254,"column":69,"nodeType":"45359","messageId":"45360","endLine":254,"endColumn":72,"suggestions":"49008"},{"ruleId":"45357","severity":2,"message":"45358","line":262,"column":88,"nodeType":"45359","messageId":"45360","endLine":262,"endColumn":91,"suggestions":"49009"},{"ruleId":"45357","severity":2,"message":"45358","line":328,"column":69,"nodeType":"45359","messageId":"45360","endLine":328,"endColumn":72,"suggestions":"49010"},{"ruleId":"45357","severity":2,"message":"45358","line":335,"column":86,"nodeType":"45359","messageId":"45360","endLine":335,"endColumn":89,"suggestions":"49011"},{"ruleId":"45357","severity":2,"message":"45358","line":385,"column":69,"nodeType":"45359","messageId":"45360","endLine":385,"endColumn":72,"suggestions":"49012"},{"ruleId":"45357","severity":2,"message":"45358","line":391,"column":86,"nodeType":"45359","messageId":"45360","endLine":391,"endColumn":89,"suggestions":"49013"},{"ruleId":"45357","severity":2,"message":"45358","line":461,"column":89,"nodeType":"45359","messageId":"45360","endLine":461,"endColumn":92,"suggestions":"49014"},{"ruleId":"45357","severity":2,"message":"45358","line":515,"column":86,"nodeType":"45359","messageId":"45360","endLine":515,"endColumn":89,"suggestions":"49015"},{"ruleId":"45357","severity":2,"message":"45358","line":572,"column":86,"nodeType":"45359","messageId":"45360","endLine":572,"endColumn":89,"suggestions":"49016"},{"ruleId":"45357","severity":2,"message":"45358","line":34,"column":21,"nodeType":"45359","messageId":"45360","endLine":34,"endColumn":24,"suggestions":"49017"},{"ruleId":"45357","severity":2,"message":"45358","line":278,"column":79,"nodeType":"45359","messageId":"45360","endLine":278,"endColumn":82,"suggestions":"49018"},{"ruleId":"45357","severity":2,"message":"45358","line":284,"column":77,"nodeType":"45359","messageId":"45360","endLine":284,"endColumn":80,"suggestions":"49019"},{"ruleId":"45357","severity":2,"message":"45358","line":339,"column":73,"nodeType":"45359","messageId":"45360","endLine":339,"endColumn":76,"suggestions":"49020"},{"ruleId":"45357","severity":2,"message":"45358","line":346,"column":48,"nodeType":"45359","messageId":"45360","endLine":346,"endColumn":51,"suggestions":"49021"},{"ruleId":"45357","severity":2,"message":"45358","line":358,"column":76,"nodeType":"45359","messageId":"45360","endLine":358,"endColumn":79,"suggestions":"49022"},{"ruleId":"45357","severity":2,"message":"45358","line":397,"column":41,"nodeType":"45359","messageId":"45360","endLine":397,"endColumn":44,"suggestions":"49023"},{"ruleId":"45357","severity":2,"message":"45358","line":450,"column":83,"nodeType":"45359","messageId":"45360","endLine":450,"endColumn":86,"suggestions":"49024"},{"ruleId":"45357","severity":2,"message":"45358","line":493,"column":83,"nodeType":"45359","messageId":"45360","endLine":493,"endColumn":86,"suggestions":"49025"},{"ruleId":"45357","severity":2,"message":"45358","line":497,"column":33,"nodeType":"45359","messageId":"45360","endLine":497,"endColumn":36,"suggestions":"49026"},{"ruleId":"45357","severity":2,"message":"45358","line":498,"column":33,"nodeType":"45359","messageId":"45360","endLine":498,"endColumn":36,"suggestions":"49027"},{"ruleId":"45357","severity":2,"message":"45358","line":68,"column":29,"nodeType":"45359","messageId":"45360","endLine":68,"endColumn":32,"suggestions":"49028"},{"ruleId":"45357","severity":2,"message":"45358","line":75,"column":29,"nodeType":"45359","messageId":"45360","endLine":75,"endColumn":32,"suggestions":"49029"},{"ruleId":"45357","severity":2,"message":"45358","line":183,"column":16,"nodeType":"45359","messageId":"45360","endLine":183,"endColumn":19,"suggestions":"49030"},{"ruleId":"45357","severity":2,"message":"45358","line":251,"column":16,"nodeType":"45359","messageId":"45360","endLine":251,"endColumn":19,"suggestions":"49031"},{"ruleId":"45357","severity":2,"message":"45358","line":284,"column":16,"nodeType":"45359","messageId":"45360","endLine":284,"endColumn":19,"suggestions":"49032"},{"ruleId":"45357","severity":2,"message":"45358","line":324,"column":16,"nodeType":"45359","messageId":"45360","endLine":324,"endColumn":19,"suggestions":"49033"},{"ruleId":"45357","severity":2,"message":"45358","line":353,"column":16,"nodeType":"45359","messageId":"45360","endLine":353,"endColumn":19,"suggestions":"49034"},{"ruleId":"45357","severity":2,"message":"45358","line":429,"column":16,"nodeType":"45359","messageId":"45360","endLine":429,"endColumn":19,"suggestions":"49035"},{"ruleId":"45357","severity":2,"message":"45358","line":471,"column":16,"nodeType":"45359","messageId":"45360","endLine":471,"endColumn":19,"suggestions":"49036"},{"ruleId":"45357","severity":2,"message":"45358","line":512,"column":16,"nodeType":"45359","messageId":"45360","endLine":512,"endColumn":19,"suggestions":"49037"},{"ruleId":"45357","severity":2,"message":"45358","line":544,"column":16,"nodeType":"45359","messageId":"45360","endLine":544,"endColumn":19,"suggestions":"49038"},{"ruleId":"45357","severity":2,"message":"45358","line":599,"column":16,"nodeType":"45359","messageId":"45360","endLine":599,"endColumn":19,"suggestions":"49039"},{"ruleId":"45357","severity":2,"message":"45358","line":636,"column":16,"nodeType":"45359","messageId":"45360","endLine":636,"endColumn":19,"suggestions":"49040"},{"ruleId":"45357","severity":2,"message":"45358","line":686,"column":16,"nodeType":"45359","messageId":"45360","endLine":686,"endColumn":19,"suggestions":"49041"},{"ruleId":"45357","severity":2,"message":"45358","line":719,"column":16,"nodeType":"45359","messageId":"45360","endLine":719,"endColumn":19,"suggestions":"49042"},{"ruleId":"45357","severity":2,"message":"45358","line":1356,"column":31,"nodeType":"45359","messageId":"45360","endLine":1356,"endColumn":34,"suggestions":"49043"},{"ruleId":"45357","severity":2,"message":"45358","line":1357,"column":31,"nodeType":"45359","messageId":"45360","endLine":1357,"endColumn":34,"suggestions":"49044"},{"ruleId":"45357","severity":2,"message":"45358","line":56,"column":27,"nodeType":"45359","messageId":"45360","endLine":56,"endColumn":30,"suggestions":"49045"},{"ruleId":"45357","severity":2,"message":"45358","line":57,"column":14,"nodeType":"45359","messageId":"45360","endLine":57,"endColumn":17,"suggestions":"49046"},{"ruleId":"45357","severity":2,"message":"45358","line":57,"column":36,"nodeType":"45359","messageId":"45360","endLine":57,"endColumn":39,"suggestions":"49047"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":14,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":17,"suggestions":"49048"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":36,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":39,"suggestions":"49049"},{"ruleId":"45357","severity":2,"message":"45358","line":59,"column":27,"nodeType":"45359","messageId":"45360","endLine":59,"endColumn":30,"suggestions":"49050"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":27,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":30,"suggestions":"49051"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":14,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":17,"suggestions":"49052"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":41,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":44,"suggestions":"49053"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":58,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":61,"suggestions":"49054"},{"ruleId":"45357","severity":2,"message":"45358","line":89,"column":31,"nodeType":"45359","messageId":"45360","endLine":89,"endColumn":34,"suggestions":"49055"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":31,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":34,"suggestions":"49056"},{"ruleId":"45357","severity":2,"message":"45358","line":51,"column":32,"nodeType":"45359","messageId":"45360","endLine":51,"endColumn":35,"suggestions":"49057"},{"ruleId":"45357","severity":2,"message":"45358","line":54,"column":37,"nodeType":"45359","messageId":"45360","endLine":54,"endColumn":40,"suggestions":"49058"},{"ruleId":"45357","severity":2,"message":"45358","line":54,"column":48,"nodeType":"45359","messageId":"45360","endLine":54,"endColumn":51,"suggestions":"49059"},{"ruleId":"45357","severity":2,"message":"45358","line":273,"column":46,"nodeType":"45359","messageId":"45360","endLine":273,"endColumn":49,"suggestions":"49060"},{"ruleId":"45357","severity":2,"message":"45358","line":274,"column":39,"nodeType":"45359","messageId":"45360","endLine":274,"endColumn":42,"suggestions":"49061"},{"ruleId":"45357","severity":2,"message":"45358","line":276,"column":37,"nodeType":"45359","messageId":"45360","endLine":276,"endColumn":40,"suggestions":"49062"},{"ruleId":"45357","severity":2,"message":"45358","line":276,"column":48,"nodeType":"45359","messageId":"45360","endLine":276,"endColumn":51,"suggestions":"49063"},{"ruleId":"45357","severity":2,"message":"45358","line":212,"column":31,"nodeType":"45359","messageId":"45360","endLine":212,"endColumn":34,"suggestions":"49064"},{"ruleId":"45357","severity":2,"message":"45358","line":226,"column":31,"nodeType":"45359","messageId":"45360","endLine":226,"endColumn":34,"suggestions":"49065"},{"ruleId":"45357","severity":2,"message":"45358","line":252,"column":36,"nodeType":"45359","messageId":"45360","endLine":252,"endColumn":39,"suggestions":"49066"},{"ruleId":"45357","severity":2,"message":"45358","line":253,"column":36,"nodeType":"45359","messageId":"45360","endLine":253,"endColumn":39,"suggestions":"49067"},{"ruleId":"45357","severity":2,"message":"45358","line":254,"column":47,"nodeType":"45359","messageId":"45360","endLine":254,"endColumn":50,"suggestions":"49068"},{"ruleId":"45357","severity":2,"message":"45358","line":252,"column":49,"nodeType":"45359","messageId":"45360","endLine":252,"endColumn":52,"suggestions":"49069"},{"ruleId":"45357","severity":2,"message":"45358","line":301,"column":51,"nodeType":"45359","messageId":"45360","endLine":301,"endColumn":54,"suggestions":"49070"},{"ruleId":"45357","severity":2,"message":"45358","line":352,"column":47,"nodeType":"45359","messageId":"45360","endLine":352,"endColumn":50,"suggestions":"49071"},{"ruleId":"45357","severity":2,"message":"45358","line":388,"column":47,"nodeType":"45359","messageId":"45360","endLine":388,"endColumn":50,"suggestions":"49072"},{"ruleId":"45357","severity":2,"message":"45358","line":51,"column":47,"nodeType":"45359","messageId":"45360","endLine":51,"endColumn":50,"suggestions":"49073"},{"ruleId":"45357","severity":2,"message":"45358","line":52,"column":30,"nodeType":"45359","messageId":"45360","endLine":52,"endColumn":33,"suggestions":"49074"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":15,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":18,"suggestions":"49075"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":47,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":50,"suggestions":"49076"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":30,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":33,"suggestions":"49077"},{"ruleId":"45357","severity":2,"message":"45358","line":120,"column":47,"nodeType":"45359","messageId":"45360","endLine":120,"endColumn":50,"suggestions":"49078"},{"ruleId":"45357","severity":2,"message":"45358","line":121,"column":30,"nodeType":"45359","messageId":"45360","endLine":121,"endColumn":33,"suggestions":"49079"},{"ruleId":"45357","severity":2,"message":"45358","line":139,"column":47,"nodeType":"45359","messageId":"45360","endLine":139,"endColumn":50,"suggestions":"49080"},{"ruleId":"45357","severity":2,"message":"45358","line":140,"column":30,"nodeType":"45359","messageId":"45360","endLine":140,"endColumn":33,"suggestions":"49081"},{"ruleId":"45357","severity":2,"message":"45358","line":148,"column":47,"nodeType":"45359","messageId":"45360","endLine":148,"endColumn":50,"suggestions":"49082"},{"ruleId":"45357","severity":2,"message":"45358","line":149,"column":30,"nodeType":"45359","messageId":"45360","endLine":149,"endColumn":33,"suggestions":"49083"},{"ruleId":"45357","severity":2,"message":"45358","line":181,"column":47,"nodeType":"45359","messageId":"45360","endLine":181,"endColumn":50,"suggestions":"49084"},{"ruleId":"45357","severity":2,"message":"45358","line":182,"column":30,"nodeType":"45359","messageId":"45360","endLine":182,"endColumn":33,"suggestions":"49085"},{"ruleId":"45357","severity":2,"message":"45358","line":207,"column":47,"nodeType":"45359","messageId":"45360","endLine":207,"endColumn":50,"suggestions":"49086"},{"ruleId":"45357","severity":2,"message":"45358","line":208,"column":30,"nodeType":"45359","messageId":"45360","endLine":208,"endColumn":33,"suggestions":"49087"},{"ruleId":"45357","severity":2,"message":"45358","line":225,"column":49,"nodeType":"45359","messageId":"45360","endLine":225,"endColumn":52,"suggestions":"49088"},{"ruleId":"45357","severity":2,"message":"45358","line":226,"column":32,"nodeType":"45359","messageId":"45360","endLine":226,"endColumn":35,"suggestions":"49089"},{"ruleId":"45357","severity":2,"message":"45358","line":238,"column":49,"nodeType":"45359","messageId":"45360","endLine":238,"endColumn":52,"suggestions":"49090"},{"ruleId":"45357","severity":2,"message":"45358","line":239,"column":32,"nodeType":"45359","messageId":"45360","endLine":239,"endColumn":35,"suggestions":"49091"},{"ruleId":"45357","severity":2,"message":"45358","line":249,"column":15,"nodeType":"45359","messageId":"45360","endLine":249,"endColumn":18,"suggestions":"49092"},{"ruleId":"45357","severity":2,"message":"45358","line":294,"column":15,"nodeType":"45359","messageId":"45360","endLine":294,"endColumn":18,"suggestions":"49093"},{"ruleId":"45357","severity":2,"message":"45358","line":97,"column":51,"nodeType":"45359","messageId":"45360","endLine":97,"endColumn":54,"suggestions":"49094"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":51,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":54,"suggestions":"49095"},{"ruleId":"45357","severity":2,"message":"45358","line":102,"column":51,"nodeType":"45359","messageId":"45360","endLine":102,"endColumn":54,"suggestions":"49096"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":27,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":30,"suggestions":"49097"},{"ruleId":"45357","severity":2,"message":"45358","line":118,"column":31,"nodeType":"45359","messageId":"45360","endLine":118,"endColumn":34,"suggestions":"49098"},{"ruleId":"45357","severity":2,"message":"45358","line":244,"column":40,"nodeType":"45359","messageId":"45360","endLine":244,"endColumn":43,"suggestions":"49099"},{"ruleId":"45357","severity":2,"message":"45358","line":246,"column":16,"nodeType":"45359","messageId":"45360","endLine":246,"endColumn":19,"suggestions":"49100"},{"ruleId":"45357","severity":2,"message":"45358","line":250,"column":27,"nodeType":"45359","messageId":"45360","endLine":250,"endColumn":30,"suggestions":"49101"},{"ruleId":"45357","severity":2,"message":"45358","line":251,"column":63,"nodeType":"45359","messageId":"45360","endLine":251,"endColumn":66,"suggestions":"49102"},{"ruleId":"45357","severity":2,"message":"45358","line":252,"column":67,"nodeType":"45359","messageId":"45360","endLine":252,"endColumn":70,"suggestions":"49103"},{"ruleId":"45357","severity":2,"message":"45358","line":310,"column":46,"nodeType":"45359","messageId":"45360","endLine":310,"endColumn":49,"suggestions":"49104"},{"ruleId":"45357","severity":2,"message":"45358","line":342,"column":44,"nodeType":"45359","messageId":"45360","endLine":342,"endColumn":47,"suggestions":"49105"},{"ruleId":"45357","severity":2,"message":"45358","line":395,"column":33,"nodeType":"45359","messageId":"45360","endLine":395,"endColumn":36,"suggestions":"49106"},{"ruleId":"45357","severity":2,"message":"45358","line":413,"column":33,"nodeType":"45359","messageId":"45360","endLine":413,"endColumn":36,"suggestions":"49107"},{"ruleId":"45357","severity":2,"message":"45358","line":460,"column":61,"nodeType":"45359","messageId":"45360","endLine":460,"endColumn":64,"suggestions":"49108"},{"ruleId":"45357","severity":2,"message":"45358","line":42,"column":33,"nodeType":"45359","messageId":"45360","endLine":42,"endColumn":36,"suggestions":"49109"},{"ruleId":"45357","severity":2,"message":"45358","line":79,"column":27,"nodeType":"45359","messageId":"45360","endLine":79,"endColumn":30,"suggestions":"49110"},{"ruleId":"45357","severity":2,"message":"45358","line":80,"column":14,"nodeType":"45359","messageId":"45360","endLine":80,"endColumn":17,"suggestions":"49111"},{"ruleId":"45357","severity":2,"message":"45358","line":80,"column":36,"nodeType":"45359","messageId":"45360","endLine":80,"endColumn":39,"suggestions":"49112"},{"ruleId":"45357","severity":2,"message":"45358","line":81,"column":14,"nodeType":"45359","messageId":"45360","endLine":81,"endColumn":17,"suggestions":"49113"},{"ruleId":"45357","severity":2,"message":"45358","line":81,"column":36,"nodeType":"45359","messageId":"45360","endLine":81,"endColumn":39,"suggestions":"49114"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":27,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":30,"suggestions":"49115"},{"ruleId":"45357","severity":2,"message":"45358","line":83,"column":27,"nodeType":"45359","messageId":"45360","endLine":83,"endColumn":30,"suggestions":"49116"},{"ruleId":"45357","severity":2,"message":"45358","line":84,"column":27,"nodeType":"45359","messageId":"45360","endLine":84,"endColumn":30,"suggestions":"49117"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":27,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":30,"suggestions":"49118"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":27,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":30,"suggestions":"49119"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":27,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":30,"suggestions":"49120"},{"ruleId":"45357","severity":2,"message":"45358","line":88,"column":27,"nodeType":"45359","messageId":"45360","endLine":88,"endColumn":30,"suggestions":"49121"},{"ruleId":"45357","severity":2,"message":"45358","line":89,"column":27,"nodeType":"45359","messageId":"45360","endLine":89,"endColumn":30,"suggestions":"49122"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":27,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":30,"suggestions":"49123"},{"ruleId":"45357","severity":2,"message":"45358","line":91,"column":27,"nodeType":"45359","messageId":"45360","endLine":91,"endColumn":30,"suggestions":"49124"},{"ruleId":"45357","severity":2,"message":"45358","line":92,"column":27,"nodeType":"45359","messageId":"45360","endLine":92,"endColumn":30,"suggestions":"49125"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":27,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":30,"suggestions":"49126"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":27,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":30,"suggestions":"49127"},{"ruleId":"45357","severity":2,"message":"45358","line":95,"column":27,"nodeType":"45359","messageId":"45360","endLine":95,"endColumn":30,"suggestions":"49128"},{"ruleId":"45357","severity":2,"message":"45358","line":96,"column":27,"nodeType":"45359","messageId":"45360","endLine":96,"endColumn":30,"suggestions":"49129"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":14,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":17,"suggestions":"49130"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":45,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":48,"suggestions":"49131"},{"ruleId":"45357","severity":2,"message":"45358","line":116,"column":36,"nodeType":"45359","messageId":"45360","endLine":116,"endColumn":39,"suggestions":"49132"},{"ruleId":"45357","severity":2,"message":"45358","line":121,"column":36,"nodeType":"45359","messageId":"45360","endLine":121,"endColumn":39,"suggestions":"49133"},{"ruleId":"45357","severity":2,"message":"45358","line":122,"column":36,"nodeType":"45359","messageId":"45360","endLine":122,"endColumn":39,"suggestions":"49134"},{"ruleId":"45357","severity":2,"message":"45358","line":48,"column":31,"nodeType":"45359","messageId":"45360","endLine":48,"endColumn":34,"suggestions":"49135"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":14,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":17,"suggestions":"49136"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":40,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":43,"suggestions":"49137"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":14,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":17,"suggestions":"49138"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":40,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":43,"suggestions":"49139"},{"ruleId":"45357","severity":2,"message":"45358","line":103,"column":27,"nodeType":"45359","messageId":"45360","endLine":103,"endColumn":30,"suggestions":"49140"},{"ruleId":"45357","severity":2,"message":"45358","line":104,"column":27,"nodeType":"45359","messageId":"45360","endLine":104,"endColumn":30,"suggestions":"49141"},{"ruleId":"45357","severity":2,"message":"45358","line":105,"column":27,"nodeType":"45359","messageId":"45360","endLine":105,"endColumn":30,"suggestions":"49142"},{"ruleId":"45357","severity":2,"message":"45358","line":106,"column":14,"nodeType":"45359","messageId":"45360","endLine":106,"endColumn":17,"suggestions":"49143"},{"ruleId":"45357","severity":2,"message":"45358","line":106,"column":40,"nodeType":"45359","messageId":"45360","endLine":106,"endColumn":43,"suggestions":"49144"},{"ruleId":"45357","severity":2,"message":"45358","line":127,"column":13,"nodeType":"45359","messageId":"45360","endLine":127,"endColumn":16,"suggestions":"49145"},{"ruleId":"45357","severity":2,"message":"45358","line":145,"column":33,"nodeType":"45359","messageId":"45360","endLine":145,"endColumn":36,"suggestions":"49146"},{"ruleId":"45357","severity":2,"message":"45358","line":284,"column":8,"nodeType":"45359","messageId":"45360","endLine":284,"endColumn":11,"suggestions":"49147"},{"ruleId":"45357","severity":2,"message":"45358","line":286,"column":54,"nodeType":"45359","messageId":"45360","endLine":286,"endColumn":57,"suggestions":"49148"},{"ruleId":"45357","severity":2,"message":"45358","line":350,"column":27,"nodeType":"45359","messageId":"45360","endLine":350,"endColumn":30,"suggestions":"49149"},{"ruleId":"45357","severity":2,"message":"45358","line":351,"column":27,"nodeType":"45359","messageId":"45360","endLine":351,"endColumn":30,"suggestions":"49150"},{"ruleId":"45357","severity":2,"message":"45358","line":352,"column":27,"nodeType":"45359","messageId":"45360","endLine":352,"endColumn":30,"suggestions":"49151"},{"ruleId":"45357","severity":2,"message":"45358","line":353,"column":27,"nodeType":"45359","messageId":"45360","endLine":353,"endColumn":30,"suggestions":"49152"},{"ruleId":"45357","severity":2,"message":"45358","line":354,"column":31,"nodeType":"45359","messageId":"45360","endLine":354,"endColumn":34,"suggestions":"49153"},{"ruleId":"45357","severity":2,"message":"45358","line":385,"column":31,"nodeType":"45359","messageId":"45360","endLine":385,"endColumn":34,"suggestions":"49154"},{"ruleId":"45357","severity":2,"message":"45358","line":394,"column":31,"nodeType":"45359","messageId":"45360","endLine":394,"endColumn":34,"suggestions":"49155"},{"ruleId":"45357","severity":2,"message":"45358","line":395,"column":27,"nodeType":"45359","messageId":"45360","endLine":395,"endColumn":30,"suggestions":"49156"},{"ruleId":"45357","severity":2,"message":"45358","line":396,"column":27,"nodeType":"45359","messageId":"45360","endLine":396,"endColumn":30,"suggestions":"49157"},{"ruleId":"45357","severity":2,"message":"45358","line":397,"column":27,"nodeType":"45359","messageId":"45360","endLine":397,"endColumn":30,"suggestions":"49158"},{"ruleId":"45357","severity":2,"message":"45358","line":424,"column":8,"nodeType":"45359","messageId":"45360","endLine":424,"endColumn":11,"suggestions":"49159"},{"ruleId":"45357","severity":2,"message":"45358","line":454,"column":8,"nodeType":"45359","messageId":"45360","endLine":454,"endColumn":11,"suggestions":"49160"},{"ruleId":"45357","severity":2,"message":"45358","line":470,"column":8,"nodeType":"45359","messageId":"45360","endLine":470,"endColumn":11,"suggestions":"49161"},{"ruleId":"45357","severity":2,"message":"45358","line":496,"column":27,"nodeType":"45359","messageId":"45360","endLine":496,"endColumn":30,"suggestions":"49162"},{"ruleId":"45357","severity":2,"message":"45358","line":497,"column":27,"nodeType":"45359","messageId":"45360","endLine":497,"endColumn":30,"suggestions":"49163"},{"ruleId":"45357","severity":2,"message":"45358","line":498,"column":27,"nodeType":"45359","messageId":"45360","endLine":498,"endColumn":30,"suggestions":"49164"},{"ruleId":"45357","severity":2,"message":"45358","line":519,"column":31,"nodeType":"45359","messageId":"45360","endLine":519,"endColumn":34,"suggestions":"49165"},{"ruleId":"45357","severity":2,"message":"45358","line":546,"column":14,"nodeType":"45359","messageId":"45360","endLine":546,"endColumn":17,"suggestions":"49166"},{"ruleId":"45357","severity":2,"message":"45358","line":546,"column":36,"nodeType":"45359","messageId":"45360","endLine":546,"endColumn":39,"suggestions":"49167"},{"ruleId":"45357","severity":2,"message":"45358","line":547,"column":14,"nodeType":"45359","messageId":"45360","endLine":547,"endColumn":17,"suggestions":"49168"},{"ruleId":"45357","severity":2,"message":"45358","line":547,"column":36,"nodeType":"45359","messageId":"45360","endLine":547,"endColumn":39,"suggestions":"49169"},{"ruleId":"45357","severity":2,"message":"45358","line":548,"column":27,"nodeType":"45359","messageId":"45360","endLine":548,"endColumn":30,"suggestions":"49170"},{"ruleId":"45357","severity":2,"message":"45358","line":549,"column":27,"nodeType":"45359","messageId":"45360","endLine":549,"endColumn":30,"suggestions":"49171"},{"ruleId":"45357","severity":2,"message":"45358","line":563,"column":31,"nodeType":"45359","messageId":"45360","endLine":563,"endColumn":34,"suggestions":"49172"},{"ruleId":"45357","severity":2,"message":"45358","line":564,"column":27,"nodeType":"45359","messageId":"45360","endLine":564,"endColumn":30,"suggestions":"49173"},{"ruleId":"45357","severity":2,"message":"45358","line":579,"column":31,"nodeType":"45359","messageId":"45360","endLine":579,"endColumn":34,"suggestions":"49174"},{"ruleId":"45357","severity":2,"message":"45358","line":593,"column":27,"nodeType":"45359","messageId":"45360","endLine":593,"endColumn":30,"suggestions":"49175"},{"ruleId":"45357","severity":2,"message":"45358","line":610,"column":31,"nodeType":"45359","messageId":"45360","endLine":610,"endColumn":34,"suggestions":"49176"},{"ruleId":"45357","severity":2,"message":"45358","line":612,"column":27,"nodeType":"45359","messageId":"45360","endLine":612,"endColumn":30,"suggestions":"49177"},{"ruleId":"45357","severity":2,"message":"45358","line":613,"column":27,"nodeType":"45359","messageId":"45360","endLine":613,"endColumn":30,"suggestions":"49178"},{"ruleId":"45357","severity":2,"message":"45358","line":646,"column":31,"nodeType":"45359","messageId":"45360","endLine":646,"endColumn":34,"suggestions":"49179"},{"ruleId":"45357","severity":2,"message":"45358","line":647,"column":27,"nodeType":"45359","messageId":"45360","endLine":647,"endColumn":30,"suggestions":"49180"},{"ruleId":"45357","severity":2,"message":"45358","line":674,"column":27,"nodeType":"45359","messageId":"45360","endLine":674,"endColumn":30,"suggestions":"49181"},{"ruleId":"45357","severity":2,"message":"45358","line":676,"column":16,"nodeType":"45359","messageId":"45360","endLine":676,"endColumn":19,"suggestions":"49182"},{"ruleId":"45357","severity":2,"message":"45358","line":680,"column":16,"nodeType":"45359","messageId":"45360","endLine":680,"endColumn":19,"suggestions":"49183"},{"ruleId":"45357","severity":2,"message":"45358","line":684,"column":16,"nodeType":"45359","messageId":"45360","endLine":684,"endColumn":19,"suggestions":"49184"},{"ruleId":"45357","severity":2,"message":"45358","line":700,"column":14,"nodeType":"45359","messageId":"45360","endLine":700,"endColumn":17,"suggestions":"49185"},{"ruleId":"45357","severity":2,"message":"45358","line":700,"column":36,"nodeType":"45359","messageId":"45360","endLine":700,"endColumn":39,"suggestions":"49186"},{"ruleId":"45357","severity":2,"message":"45358","line":701,"column":27,"nodeType":"45359","messageId":"45360","endLine":701,"endColumn":30,"suggestions":"49187"},{"ruleId":"45357","severity":2,"message":"45358","line":702,"column":27,"nodeType":"45359","messageId":"45360","endLine":702,"endColumn":30,"suggestions":"49188"},{"ruleId":"45357","severity":2,"message":"45358","line":716,"column":27,"nodeType":"45359","messageId":"45360","endLine":716,"endColumn":30,"suggestions":"49189"},{"ruleId":"45357","severity":2,"message":"45358","line":717,"column":27,"nodeType":"45359","messageId":"45360","endLine":717,"endColumn":30,"suggestions":"49190"},{"ruleId":"45357","severity":2,"message":"45358","line":732,"column":14,"nodeType":"45359","messageId":"45360","endLine":732,"endColumn":17,"suggestions":"49191"},{"ruleId":"45357","severity":2,"message":"45358","line":732,"column":36,"nodeType":"45359","messageId":"45360","endLine":732,"endColumn":39,"suggestions":"49192"},{"ruleId":"45357","severity":2,"message":"45358","line":733,"column":27,"nodeType":"45359","messageId":"45360","endLine":733,"endColumn":30,"suggestions":"49193"},{"ruleId":"45357","severity":2,"message":"45358","line":734,"column":27,"nodeType":"45359","messageId":"45360","endLine":734,"endColumn":30,"suggestions":"49194"},{"ruleId":"45357","severity":2,"message":"45358","line":838,"column":33,"nodeType":"45359","messageId":"45360","endLine":838,"endColumn":36,"suggestions":"49195"},{"ruleId":"45357","severity":2,"message":"45358","line":877,"column":33,"nodeType":"45359","messageId":"45360","endLine":877,"endColumn":36,"suggestions":"49196"},{"ruleId":"45357","severity":2,"message":"45358","line":896,"column":13,"nodeType":"45359","messageId":"45360","endLine":896,"endColumn":16,"suggestions":"49197"},{"ruleId":"45357","severity":2,"message":"45358","line":935,"column":33,"nodeType":"45359","messageId":"45360","endLine":935,"endColumn":36,"suggestions":"49198"},{"ruleId":"45357","severity":2,"message":"45358","line":983,"column":33,"nodeType":"45359","messageId":"45360","endLine":983,"endColumn":36,"suggestions":"49199"},{"ruleId":"45357","severity":2,"message":"45358","line":1022,"column":33,"nodeType":"45359","messageId":"45360","endLine":1022,"endColumn":36,"suggestions":"49200"},{"ruleId":"45357","severity":2,"message":"45358","line":1067,"column":33,"nodeType":"45359","messageId":"45360","endLine":1067,"endColumn":36,"suggestions":"49201"},{"ruleId":"45357","severity":2,"message":"45358","line":1068,"column":33,"nodeType":"45359","messageId":"45360","endLine":1068,"endColumn":36,"suggestions":"49202"},{"ruleId":"45357","severity":2,"message":"45358","line":1069,"column":33,"nodeType":"45359","messageId":"45360","endLine":1069,"endColumn":36,"suggestions":"49203"},{"ruleId":"45357","severity":2,"message":"45358","line":1070,"column":37,"nodeType":"45359","messageId":"45360","endLine":1070,"endColumn":40,"suggestions":"49204"},{"ruleId":"45357","severity":2,"message":"45358","line":1090,"column":39,"nodeType":"45359","messageId":"45360","endLine":1090,"endColumn":42,"suggestions":"49205"},{"ruleId":"45357","severity":2,"message":"45358","line":1100,"column":30,"nodeType":"45359","messageId":"45360","endLine":1100,"endColumn":33,"suggestions":"49206"},{"ruleId":"45357","severity":2,"message":"45358","line":1118,"column":39,"nodeType":"45359","messageId":"45360","endLine":1118,"endColumn":42,"suggestions":"49207"},{"ruleId":"45357","severity":2,"message":"45358","line":1139,"column":39,"nodeType":"45359","messageId":"45360","endLine":1139,"endColumn":42,"suggestions":"49208"},{"ruleId":"45357","severity":2,"message":"45358","line":1171,"column":33,"nodeType":"45359","messageId":"45360","endLine":1171,"endColumn":36,"suggestions":"49209"},{"ruleId":"45357","severity":2,"message":"45358","line":1187,"column":33,"nodeType":"45359","messageId":"45360","endLine":1187,"endColumn":36,"suggestions":"49210"},{"ruleId":"45357","severity":2,"message":"45358","line":307,"column":16,"nodeType":"45359","messageId":"45360","endLine":307,"endColumn":19,"suggestions":"49211"},{"ruleId":"45357","severity":2,"message":"45358","line":332,"column":27,"nodeType":"45359","messageId":"45360","endLine":332,"endColumn":30,"suggestions":"49212"},{"ruleId":"45357","severity":2,"message":"45358","line":374,"column":27,"nodeType":"45359","messageId":"45360","endLine":374,"endColumn":30,"suggestions":"49213"},{"ruleId":"45357","severity":2,"message":"45358","line":375,"column":24,"nodeType":"45359","messageId":"45360","endLine":375,"endColumn":27,"suggestions":"49214"},{"ruleId":"45357","severity":2,"message":"45358","line":376,"column":27,"nodeType":"45359","messageId":"45360","endLine":376,"endColumn":30,"suggestions":"49215"},{"ruleId":"45357","severity":2,"message":"45358","line":377,"column":27,"nodeType":"45359","messageId":"45360","endLine":377,"endColumn":30,"suggestions":"49216"},{"ruleId":"45357","severity":2,"message":"45358","line":437,"column":40,"nodeType":"45359","messageId":"45360","endLine":437,"endColumn":43,"suggestions":"49217"},{"ruleId":"45357","severity":2,"message":"45358","line":441,"column":27,"nodeType":"45359","messageId":"45360","endLine":441,"endColumn":30,"suggestions":"49218"},{"ruleId":"45357","severity":2,"message":"45358","line":453,"column":16,"nodeType":"45359","messageId":"45360","endLine":453,"endColumn":19,"suggestions":"49219"},{"ruleId":"45357","severity":2,"message":"45358","line":486,"column":31,"nodeType":"45359","messageId":"45360","endLine":486,"endColumn":34,"suggestions":"49220"},{"ruleId":"45357","severity":2,"message":"45358","line":506,"column":37,"nodeType":"45359","messageId":"45360","endLine":506,"endColumn":40,"suggestions":"49221"},{"ruleId":"45357","severity":2,"message":"45358","line":509,"column":31,"nodeType":"45359","messageId":"45360","endLine":509,"endColumn":34,"suggestions":"49222"},{"ruleId":"45357","severity":2,"message":"45358","line":517,"column":50,"nodeType":"45359","messageId":"45360","endLine":517,"endColumn":53,"suggestions":"49223"},{"ruleId":"45357","severity":2,"message":"45358","line":544,"column":8,"nodeType":"45359","messageId":"45360","endLine":544,"endColumn":11,"suggestions":"49224"},{"ruleId":"45357","severity":2,"message":"45358","line":574,"column":32,"nodeType":"45359","messageId":"45360","endLine":574,"endColumn":35,"suggestions":"49225"},{"ruleId":"45357","severity":2,"message":"45358","line":594,"column":16,"nodeType":"45359","messageId":"45360","endLine":594,"endColumn":19,"suggestions":"49226"},{"ruleId":"45357","severity":2,"message":"45358","line":635,"column":49,"nodeType":"45359","messageId":"45360","endLine":635,"endColumn":52,"suggestions":"49227"},{"ruleId":"45357","severity":2,"message":"45358","line":716,"column":49,"nodeType":"45359","messageId":"45360","endLine":716,"endColumn":52,"suggestions":"49228"},{"ruleId":"45357","severity":2,"message":"45358","line":762,"column":74,"nodeType":"45359","messageId":"45360","endLine":762,"endColumn":77,"suggestions":"49229"},{"ruleId":"45357","severity":2,"message":"45358","line":806,"column":49,"nodeType":"45359","messageId":"45360","endLine":806,"endColumn":52,"suggestions":"49230"},{"ruleId":"45357","severity":2,"message":"45358","line":855,"column":37,"nodeType":"45359","messageId":"45360","endLine":855,"endColumn":40,"suggestions":"49231"},{"ruleId":"45357","severity":2,"message":"45358","line":864,"column":27,"nodeType":"45359","messageId":"45360","endLine":864,"endColumn":30,"suggestions":"49232"},{"ruleId":"45357","severity":2,"message":"45358","line":865,"column":27,"nodeType":"45359","messageId":"45360","endLine":865,"endColumn":30,"suggestions":"49233"},{"ruleId":"45357","severity":2,"message":"45358","line":866,"column":27,"nodeType":"45359","messageId":"45360","endLine":866,"endColumn":30,"suggestions":"49234"},{"ruleId":"45357","severity":2,"message":"45358","line":867,"column":27,"nodeType":"45359","messageId":"45360","endLine":867,"endColumn":30,"suggestions":"49235"},{"ruleId":"45357","severity":2,"message":"45358","line":868,"column":27,"nodeType":"45359","messageId":"45360","endLine":868,"endColumn":30,"suggestions":"49236"},{"ruleId":"45357","severity":2,"message":"45358","line":884,"column":27,"nodeType":"45359","messageId":"45360","endLine":884,"endColumn":30,"suggestions":"49237"},{"ruleId":"45357","severity":2,"message":"45358","line":926,"column":41,"nodeType":"45359","messageId":"45360","endLine":926,"endColumn":44,"suggestions":"49238"},{"ruleId":"45357","severity":2,"message":"45358","line":929,"column":40,"nodeType":"45359","messageId":"45360","endLine":929,"endColumn":43,"suggestions":"49239"},{"ruleId":"45357","severity":2,"message":"45358","line":966,"column":46,"nodeType":"45359","messageId":"45360","endLine":966,"endColumn":49,"suggestions":"49240"},{"ruleId":"45357","severity":2,"message":"45358","line":969,"column":27,"nodeType":"45359","messageId":"45360","endLine":969,"endColumn":30,"suggestions":"49241"},{"ruleId":"45357","severity":2,"message":"45358","line":972,"column":27,"nodeType":"45359","messageId":"45360","endLine":972,"endColumn":30,"suggestions":"49242"},{"ruleId":"45357","severity":2,"message":"45358","line":973,"column":27,"nodeType":"45359","messageId":"45360","endLine":973,"endColumn":30,"suggestions":"49243"},{"ruleId":"45357","severity":2,"message":"45358","line":974,"column":27,"nodeType":"45359","messageId":"45360","endLine":974,"endColumn":30,"suggestions":"49244"},{"ruleId":"45357","severity":2,"message":"45358","line":986,"column":43,"nodeType":"45359","messageId":"45360","endLine":986,"endColumn":46,"suggestions":"49245"},{"ruleId":"45357","severity":2,"message":"45358","line":989,"column":27,"nodeType":"45359","messageId":"45360","endLine":989,"endColumn":30,"suggestions":"49246"},{"ruleId":"45357","severity":2,"message":"45358","line":990,"column":27,"nodeType":"45359","messageId":"45360","endLine":990,"endColumn":30,"suggestions":"49247"},{"ruleId":"45357","severity":2,"message":"45358","line":991,"column":27,"nodeType":"45359","messageId":"45360","endLine":991,"endColumn":30,"suggestions":"49248"},{"ruleId":"45357","severity":2,"message":"45358","line":992,"column":27,"nodeType":"45359","messageId":"45360","endLine":992,"endColumn":30,"suggestions":"49249"},{"ruleId":"45357","severity":2,"message":"45358","line":1007,"column":46,"nodeType":"45359","messageId":"45360","endLine":1007,"endColumn":49,"suggestions":"49250"},{"ruleId":"45357","severity":2,"message":"45358","line":1013,"column":16,"nodeType":"45359","messageId":"45360","endLine":1013,"endColumn":19,"suggestions":"49251"},{"ruleId":"45357","severity":2,"message":"45358","line":1016,"column":27,"nodeType":"45359","messageId":"45360","endLine":1016,"endColumn":30,"suggestions":"49252"},{"ruleId":"45357","severity":2,"message":"45358","line":1017,"column":27,"nodeType":"45359","messageId":"45360","endLine":1017,"endColumn":30,"suggestions":"49253"},{"ruleId":"45357","severity":2,"message":"45358","line":1028,"column":65,"nodeType":"45359","messageId":"45360","endLine":1028,"endColumn":68,"suggestions":"49254"},{"ruleId":"45357","severity":2,"message":"45358","line":1038,"column":83,"nodeType":"45359","messageId":"45360","endLine":1038,"endColumn":86,"suggestions":"49255"},{"ruleId":"45357","severity":2,"message":"45358","line":1049,"column":42,"nodeType":"45359","messageId":"45360","endLine":1049,"endColumn":45,"suggestions":"49256"},{"ruleId":"45357","severity":2,"message":"45358","line":1051,"column":27,"nodeType":"45359","messageId":"45360","endLine":1051,"endColumn":30,"suggestions":"49257"},{"ruleId":"45357","severity":2,"message":"45358","line":1058,"column":42,"nodeType":"45359","messageId":"45360","endLine":1058,"endColumn":45,"suggestions":"49258"},{"ruleId":"45357","severity":2,"message":"45358","line":1060,"column":27,"nodeType":"45359","messageId":"45360","endLine":1060,"endColumn":30,"suggestions":"49259"},{"ruleId":"45357","severity":2,"message":"45358","line":1061,"column":27,"nodeType":"45359","messageId":"45360","endLine":1061,"endColumn":30,"suggestions":"49260"},{"ruleId":"45357","severity":2,"message":"45358","line":1069,"column":42,"nodeType":"45359","messageId":"45360","endLine":1069,"endColumn":45,"suggestions":"49261"},{"ruleId":"45357","severity":2,"message":"45358","line":1074,"column":27,"nodeType":"45359","messageId":"45360","endLine":1074,"endColumn":30,"suggestions":"49262"},{"ruleId":"45357","severity":2,"message":"45358","line":1075,"column":27,"nodeType":"45359","messageId":"45360","endLine":1075,"endColumn":30,"suggestions":"49263"},{"ruleId":"45357","severity":2,"message":"45358","line":1086,"column":29,"nodeType":"45359","messageId":"45360","endLine":1086,"endColumn":32,"suggestions":"49264"},{"ruleId":"45357","severity":2,"message":"45358","line":1103,"column":29,"nodeType":"45359","messageId":"45360","endLine":1103,"endColumn":32,"suggestions":"49265"},{"ruleId":"45357","severity":2,"message":"45358","line":1121,"column":17,"nodeType":"45359","messageId":"45360","endLine":1121,"endColumn":20,"suggestions":"49266"},{"ruleId":"45357","severity":2,"message":"45358","line":1155,"column":24,"nodeType":"45359","messageId":"45360","endLine":1155,"endColumn":27,"suggestions":"49267"},{"ruleId":"45357","severity":2,"message":"45358","line":1156,"column":27,"nodeType":"45359","messageId":"45360","endLine":1156,"endColumn":30,"suggestions":"49268"},{"ruleId":"45357","severity":2,"message":"45358","line":1159,"column":27,"nodeType":"45359","messageId":"45360","endLine":1159,"endColumn":30,"suggestions":"49269"},{"ruleId":"45357","severity":2,"message":"45358","line":1174,"column":8,"nodeType":"45359","messageId":"45360","endLine":1174,"endColumn":11,"suggestions":"49270"},{"ruleId":"45357","severity":2,"message":"45358","line":1190,"column":38,"nodeType":"45359","messageId":"45360","endLine":1190,"endColumn":41,"suggestions":"49271"},{"ruleId":"45357","severity":2,"message":"45358","line":1192,"column":16,"nodeType":"45359","messageId":"45360","endLine":1192,"endColumn":19,"suggestions":"49272"},{"ruleId":"45357","severity":2,"message":"45358","line":1192,"column":36,"nodeType":"45359","messageId":"45360","endLine":1192,"endColumn":39,"suggestions":"49273"},{"ruleId":"45357","severity":2,"message":"45358","line":1366,"column":8,"nodeType":"45359","messageId":"45360","endLine":1366,"endColumn":11,"suggestions":"49274"},{"ruleId":"45357","severity":2,"message":"45358","line":1440,"column":8,"nodeType":"45359","messageId":"45360","endLine":1440,"endColumn":11,"suggestions":"49275"},{"ruleId":"45357","severity":2,"message":"45358","line":1448,"column":9,"nodeType":"45359","messageId":"45360","endLine":1448,"endColumn":12,"suggestions":"49276"},{"ruleId":"45357","severity":2,"message":"45358","line":1448,"column":57,"nodeType":"45359","messageId":"45360","endLine":1448,"endColumn":60,"suggestions":"49277"},{"ruleId":"45357","severity":2,"message":"45358","line":1501,"column":8,"nodeType":"45359","messageId":"45360","endLine":1501,"endColumn":11,"suggestions":"49278"},{"ruleId":"45357","severity":2,"message":"45358","line":1536,"column":8,"nodeType":"45359","messageId":"45360","endLine":1536,"endColumn":11,"suggestions":"49279"},{"ruleId":"45357","severity":2,"message":"45358","line":1549,"column":8,"nodeType":"45359","messageId":"45360","endLine":1549,"endColumn":11,"suggestions":"49280"},{"ruleId":"45357","severity":2,"message":"45358","line":1562,"column":8,"nodeType":"45359","messageId":"45360","endLine":1562,"endColumn":11,"suggestions":"49281"},{"ruleId":"45357","severity":2,"message":"45358","line":1577,"column":8,"nodeType":"45359","messageId":"45360","endLine":1577,"endColumn":11,"suggestions":"49282"},{"ruleId":"45357","severity":2,"message":"45358","line":1598,"column":8,"nodeType":"45359","messageId":"45360","endLine":1598,"endColumn":11,"suggestions":"49283"},{"ruleId":"45357","severity":2,"message":"45358","line":1612,"column":8,"nodeType":"45359","messageId":"45360","endLine":1612,"endColumn":11,"suggestions":"49284"},{"ruleId":"45357","severity":2,"message":"45358","line":105,"column":40,"nodeType":"45359","messageId":"45360","endLine":105,"endColumn":43,"suggestions":"49285"},{"ruleId":"45357","severity":2,"message":"45358","line":147,"column":52,"nodeType":"45359","messageId":"45360","endLine":147,"endColumn":55,"suggestions":"49286"},{"ruleId":"45357","severity":2,"message":"45358","line":174,"column":50,"nodeType":"45359","messageId":"45360","endLine":174,"endColumn":53,"suggestions":"49287"},{"ruleId":"45357","severity":2,"message":"45358","line":202,"column":52,"nodeType":"45359","messageId":"45360","endLine":202,"endColumn":55,"suggestions":"49288"},{"ruleId":"45357","severity":2,"message":"45358","line":237,"column":33,"nodeType":"45359","messageId":"45360","endLine":237,"endColumn":36,"suggestions":"49289"},{"ruleId":"45357","severity":2,"message":"45358","line":241,"column":16,"nodeType":"45359","messageId":"45360","endLine":241,"endColumn":19,"suggestions":"49290"},{"ruleId":"45357","severity":2,"message":"45358","line":486,"column":59,"nodeType":"45359","messageId":"45360","endLine":486,"endColumn":62,"suggestions":"49291"},{"ruleId":"45357","severity":2,"message":"45358","line":522,"column":55,"nodeType":"45359","messageId":"45360","endLine":522,"endColumn":58,"suggestions":"49292"},{"ruleId":"45357","severity":2,"message":"45358","line":541,"column":55,"nodeType":"45359","messageId":"45360","endLine":541,"endColumn":58,"suggestions":"49293"},{"ruleId":"45357","severity":2,"message":"45358","line":586,"column":55,"nodeType":"45359","messageId":"45360","endLine":586,"endColumn":58,"suggestions":"49294"},{"ruleId":"45357","severity":2,"message":"45358","line":824,"column":65,"nodeType":"45359","messageId":"45360","endLine":824,"endColumn":68,"suggestions":"49295"},{"ruleId":"45357","severity":2,"message":"45358","line":907,"column":59,"nodeType":"45359","messageId":"45360","endLine":907,"endColumn":62,"suggestions":"49296"},{"ruleId":"45357","severity":2,"message":"45358","line":911,"column":59,"nodeType":"45359","messageId":"45360","endLine":911,"endColumn":62,"suggestions":"49297"},{"ruleId":"45357","severity":2,"message":"45358","line":953,"column":42,"nodeType":"45359","messageId":"45360","endLine":953,"endColumn":45,"suggestions":"49298"},{"ruleId":"45357","severity":2,"message":"45358","line":956,"column":23,"nodeType":"45359","messageId":"45360","endLine":956,"endColumn":26,"suggestions":"49299"},{"ruleId":"45357","severity":2,"message":"45358","line":960,"column":52,"nodeType":"45359","messageId":"45360","endLine":960,"endColumn":55,"suggestions":"49300"},{"ruleId":"45357","severity":2,"message":"45358","line":962,"column":40,"nodeType":"45359","messageId":"45360","endLine":962,"endColumn":43,"suggestions":"49301"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":41,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":44,"suggestions":"49302"},{"ruleId":"45357","severity":2,"message":"45358","line":50,"column":30,"nodeType":"45359","messageId":"45360","endLine":50,"endColumn":33,"suggestions":"49303"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":41,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":44,"suggestions":"49304"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":30,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":33,"suggestions":"49305"},{"ruleId":"45357","severity":2,"message":"45358","line":69,"column":75,"nodeType":"45359","messageId":"45360","endLine":69,"endColumn":78,"suggestions":"49306"},{"ruleId":"45357","severity":2,"message":"45358","line":70,"column":30,"nodeType":"45359","messageId":"45360","endLine":70,"endColumn":33,"suggestions":"49307"},{"ruleId":"45357","severity":2,"message":"45358","line":36,"column":52,"nodeType":"45359","messageId":"45360","endLine":36,"endColumn":55,"suggestions":"49308"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":27,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":30,"suggestions":"49309"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":62,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":65,"suggestions":"49310"},{"ruleId":"45357","severity":2,"message":"45358","line":42,"column":25,"nodeType":"45359","messageId":"45360","endLine":42,"endColumn":28,"suggestions":"49311"},{"ruleId":"45357","severity":2,"message":"45358","line":67,"column":25,"nodeType":"45359","messageId":"45360","endLine":67,"endColumn":28,"suggestions":"49312"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":25,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":28,"suggestions":"49313"},{"ruleId":"45357","severity":2,"message":"45358","line":54,"column":27,"nodeType":"45359","messageId":"45360","endLine":54,"endColumn":30,"suggestions":"49314"},{"ruleId":"45357","severity":2,"message":"45358","line":55,"column":14,"nodeType":"45359","messageId":"45360","endLine":55,"endColumn":17,"suggestions":"49315"},{"ruleId":"45357","severity":2,"message":"45358","line":55,"column":36,"nodeType":"45359","messageId":"45360","endLine":55,"endColumn":39,"suggestions":"49316"},{"ruleId":"45357","severity":2,"message":"45358","line":56,"column":14,"nodeType":"45359","messageId":"45360","endLine":56,"endColumn":17,"suggestions":"49317"},{"ruleId":"45357","severity":2,"message":"45358","line":56,"column":36,"nodeType":"45359","messageId":"45360","endLine":56,"endColumn":39,"suggestions":"49318"},{"ruleId":"45357","severity":2,"message":"45358","line":57,"column":27,"nodeType":"45359","messageId":"45360","endLine":57,"endColumn":30,"suggestions":"49319"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":27,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":30,"suggestions":"49320"},{"ruleId":"45357","severity":2,"message":"45358","line":59,"column":27,"nodeType":"45359","messageId":"45360","endLine":59,"endColumn":30,"suggestions":"49321"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":14,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":17,"suggestions":"49322"},{"ruleId":"45357","severity":2,"message":"45358","line":61,"column":16,"nodeType":"45359","messageId":"45360","endLine":61,"endColumn":19,"suggestions":"49323"},{"ruleId":"45357","severity":2,"message":"45358","line":64,"column":27,"nodeType":"45359","messageId":"45360","endLine":64,"endColumn":30,"suggestions":"49324"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":31,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":34,"suggestions":"49325"},{"ruleId":"45357","severity":2,"message":"45358","line":82,"column":17,"nodeType":"45359","messageId":"45360","endLine":82,"endColumn":20,"suggestions":"49326"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":28,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":31,"suggestions":"49327"},{"ruleId":"45357","severity":2,"message":"45358","line":85,"column":47,"nodeType":"45359","messageId":"45360","endLine":85,"endColumn":50,"suggestions":"49328"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":27,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":30,"suggestions":"49329"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":27,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":30,"suggestions":"49330"},{"ruleId":"45357","severity":2,"message":"45358","line":40,"column":27,"nodeType":"45359","messageId":"45360","endLine":40,"endColumn":30,"suggestions":"49331"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":14,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":17,"suggestions":"49332"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":36,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":39,"suggestions":"49333"},{"ruleId":"45357","severity":2,"message":"45358","line":42,"column":14,"nodeType":"45359","messageId":"45360","endLine":42,"endColumn":17,"suggestions":"49334"},{"ruleId":"45357","severity":2,"message":"45358","line":42,"column":36,"nodeType":"45359","messageId":"45360","endLine":42,"endColumn":39,"suggestions":"49335"},{"ruleId":"45357","severity":2,"message":"45358","line":43,"column":27,"nodeType":"45359","messageId":"45360","endLine":43,"endColumn":30,"suggestions":"49336"},{"ruleId":"45357","severity":2,"message":"45358","line":44,"column":27,"nodeType":"45359","messageId":"45360","endLine":44,"endColumn":30,"suggestions":"49337"},{"ruleId":"45357","severity":2,"message":"45358","line":45,"column":27,"nodeType":"45359","messageId":"45360","endLine":45,"endColumn":30,"suggestions":"49338"},{"ruleId":"45357","severity":2,"message":"45358","line":46,"column":27,"nodeType":"45359","messageId":"45360","endLine":46,"endColumn":30,"suggestions":"49339"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":14,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":17,"suggestions":"49340"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":40,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":43,"suggestions":"49341"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":17,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":20,"suggestions":"49342"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":27,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":30,"suggestions":"49343"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":28,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":31,"suggestions":"49344"},{"ruleId":"45357","severity":2,"message":"45358","line":94,"column":44,"nodeType":"45359","messageId":"45360","endLine":94,"endColumn":47,"suggestions":"49345"},{"ruleId":"45357","severity":2,"message":"45358","line":95,"column":28,"nodeType":"45359","messageId":"45360","endLine":95,"endColumn":31,"suggestions":"49346"},{"ruleId":"45357","severity":2,"message":"45358","line":95,"column":47,"nodeType":"45359","messageId":"45360","endLine":95,"endColumn":50,"suggestions":"49347"},{"ruleId":"45357","severity":2,"message":"45358","line":96,"column":27,"nodeType":"45359","messageId":"45360","endLine":96,"endColumn":30,"suggestions":"49348"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":17,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":20,"suggestions":"49349"},{"ruleId":"45357","severity":2,"message":"45358","line":98,"column":44,"nodeType":"45359","messageId":"45360","endLine":98,"endColumn":47,"suggestions":"49350"},{"ruleId":"45357","severity":2,"message":"45358","line":101,"column":27,"nodeType":"45359","messageId":"45360","endLine":101,"endColumn":30,"suggestions":"49351"},{"ruleId":"45357","severity":2,"message":"45358","line":103,"column":17,"nodeType":"45359","messageId":"45360","endLine":103,"endColumn":20,"suggestions":"49352"},{"ruleId":"45357","severity":2,"message":"45358","line":103,"column":44,"nodeType":"45359","messageId":"45360","endLine":103,"endColumn":47,"suggestions":"49353"},{"ruleId":"45357","severity":2,"message":"45358","line":106,"column":27,"nodeType":"45359","messageId":"45360","endLine":106,"endColumn":30,"suggestions":"49354"},{"ruleId":"45357","severity":2,"message":"45358","line":107,"column":28,"nodeType":"45359","messageId":"45360","endLine":107,"endColumn":31,"suggestions":"49355"},{"ruleId":"45357","severity":2,"message":"45358","line":107,"column":55,"nodeType":"45359","messageId":"45360","endLine":107,"endColumn":58,"suggestions":"49356"},{"ruleId":"45357","severity":2,"message":"45358","line":108,"column":14,"nodeType":"45359","messageId":"45360","endLine":108,"endColumn":17,"suggestions":"49357"},{"ruleId":"45357","severity":2,"message":"45358","line":108,"column":36,"nodeType":"45359","messageId":"45360","endLine":108,"endColumn":39,"suggestions":"49358"},{"ruleId":"45357","severity":2,"message":"45358","line":109,"column":27,"nodeType":"45359","messageId":"45360","endLine":109,"endColumn":30,"suggestions":"49359"},{"ruleId":"45357","severity":2,"message":"45358","line":110,"column":27,"nodeType":"45359","messageId":"45360","endLine":110,"endColumn":30,"suggestions":"49360"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":14,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":17,"suggestions":"49361"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":36,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":39,"suggestions":"49362"},{"ruleId":"45357","severity":2,"message":"45358","line":112,"column":27,"nodeType":"45359","messageId":"45360","endLine":112,"endColumn":30,"suggestions":"49363"},{"ruleId":"45357","severity":2,"message":"45358","line":113,"column":27,"nodeType":"45359","messageId":"45360","endLine":113,"endColumn":30,"suggestions":"49364"},{"ruleId":"45357","severity":2,"message":"45358","line":124,"column":17,"nodeType":"45359","messageId":"45360","endLine":124,"endColumn":20,"suggestions":"49365"},{"ruleId":"45357","severity":2,"message":"45358","line":127,"column":27,"nodeType":"45359","messageId":"45360","endLine":127,"endColumn":30,"suggestions":"49366"},{"ruleId":"45357","severity":2,"message":"45358","line":128,"column":27,"nodeType":"45359","messageId":"45360","endLine":128,"endColumn":30,"suggestions":"49367"},{"ruleId":"45357","severity":2,"message":"45358","line":129,"column":27,"nodeType":"45359","messageId":"45360","endLine":129,"endColumn":30,"suggestions":"49368"},{"ruleId":"45357","severity":2,"message":"45358","line":130,"column":27,"nodeType":"45359","messageId":"45360","endLine":130,"endColumn":30,"suggestions":"49369"},{"ruleId":"45357","severity":2,"message":"45358","line":163,"column":27,"nodeType":"45359","messageId":"45360","endLine":163,"endColumn":30,"suggestions":"49370"},{"ruleId":"45357","severity":2,"message":"45358","line":193,"column":27,"nodeType":"45359","messageId":"45360","endLine":193,"endColumn":30,"suggestions":"49371"},{"ruleId":"45357","severity":2,"message":"45358","line":337,"column":40,"nodeType":"45359","messageId":"45360","endLine":337,"endColumn":43,"suggestions":"49372"},{"ruleId":"45357","severity":2,"message":"45358","line":366,"column":40,"nodeType":"45359","messageId":"45360","endLine":366,"endColumn":43,"suggestions":"49373"},{"ruleId":"45357","severity":2,"message":"45358","line":378,"column":25,"nodeType":"45359","messageId":"45360","endLine":378,"endColumn":28,"suggestions":"49374"},{"ruleId":"45357","severity":2,"message":"45358","line":414,"column":25,"nodeType":"45359","messageId":"45360","endLine":414,"endColumn":28,"suggestions":"49375"},{"ruleId":"45357","severity":2,"message":"45358","line":418,"column":25,"nodeType":"45359","messageId":"45360","endLine":418,"endColumn":28,"suggestions":"49376"},{"ruleId":"45357","severity":2,"message":"45358","line":422,"column":40,"nodeType":"45359","messageId":"45360","endLine":422,"endColumn":43,"suggestions":"49377"},{"ruleId":"45357","severity":2,"message":"45358","line":440,"column":24,"nodeType":"45359","messageId":"45360","endLine":440,"endColumn":27,"suggestions":"49378"},{"ruleId":"45357","severity":2,"message":"45358","line":453,"column":33,"nodeType":"45359","messageId":"45360","endLine":453,"endColumn":36,"suggestions":"49379"},{"ruleId":"45357","severity":2,"message":"45358","line":468,"column":32,"nodeType":"45359","messageId":"45360","endLine":468,"endColumn":35,"suggestions":"49380"},{"ruleId":"45357","severity":2,"message":"45358","line":482,"column":15,"nodeType":"45359","messageId":"45360","endLine":482,"endColumn":18,"suggestions":"49381"},{"ruleId":"45357","severity":2,"message":"45358","line":487,"column":25,"nodeType":"45359","messageId":"45360","endLine":487,"endColumn":28,"suggestions":"49382"},{"ruleId":"45357","severity":2,"message":"45358","line":491,"column":25,"nodeType":"45359","messageId":"45360","endLine":491,"endColumn":28,"suggestions":"49383"},{"ruleId":"45357","severity":2,"message":"45358","line":518,"column":40,"nodeType":"45359","messageId":"45360","endLine":518,"endColumn":43,"suggestions":"49384"},{"ruleId":"45357","severity":2,"message":"45358","line":529,"column":25,"nodeType":"45359","messageId":"45360","endLine":529,"endColumn":28,"suggestions":"49385"},{"ruleId":"45357","severity":2,"message":"45358","line":637,"column":40,"nodeType":"45359","messageId":"45360","endLine":637,"endColumn":43,"suggestions":"49386"},{"ruleId":"45357","severity":2,"message":"45358","line":668,"column":40,"nodeType":"45359","messageId":"45360","endLine":668,"endColumn":43,"suggestions":"49387"},{"ruleId":"45357","severity":2,"message":"45358","line":677,"column":25,"nodeType":"45359","messageId":"45360","endLine":677,"endColumn":28,"suggestions":"49388"},{"ruleId":"45357","severity":2,"message":"45358","line":706,"column":25,"nodeType":"45359","messageId":"45360","endLine":706,"endColumn":28,"suggestions":"49389"},{"ruleId":"45357","severity":2,"message":"45358","line":710,"column":25,"nodeType":"45359","messageId":"45360","endLine":710,"endColumn":28,"suggestions":"49390"},{"ruleId":"45357","severity":2,"message":"45358","line":842,"column":43,"nodeType":"45359","messageId":"45360","endLine":842,"endColumn":46,"suggestions":"49391"},{"ruleId":"45357","severity":2,"message":"45358","line":884,"column":43,"nodeType":"45359","messageId":"45360","endLine":884,"endColumn":46,"suggestions":"49392"},{"ruleId":"45357","severity":2,"message":"45358","line":925,"column":19,"nodeType":"45359","messageId":"45360","endLine":925,"endColumn":22,"suggestions":"49393"},{"ruleId":"45357","severity":2,"message":"45358","line":953,"column":18,"nodeType":"45359","messageId":"45360","endLine":953,"endColumn":21,"suggestions":"49394"},{"ruleId":"45357","severity":2,"message":"45358","line":957,"column":44,"nodeType":"45359","messageId":"45360","endLine":957,"endColumn":47,"suggestions":"49395"},{"ruleId":"45357","severity":2,"message":"45358","line":1005,"column":19,"nodeType":"45359","messageId":"45360","endLine":1005,"endColumn":22,"suggestions":"49396"},{"ruleId":"45357","severity":2,"message":"45358","line":1011,"column":43,"nodeType":"45359","messageId":"45360","endLine":1011,"endColumn":46,"suggestions":"49397"},{"ruleId":"45357","severity":2,"message":"45358","line":1052,"column":19,"nodeType":"45359","messageId":"45360","endLine":1052,"endColumn":22,"suggestions":"49398"},{"ruleId":"45357","severity":2,"message":"45358","line":1058,"column":43,"nodeType":"45359","messageId":"45360","endLine":1058,"endColumn":46,"suggestions":"49399"},{"ruleId":"45357","severity":2,"message":"45358","line":1121,"column":19,"nodeType":"45359","messageId":"45360","endLine":1121,"endColumn":22,"suggestions":"49400"},{"ruleId":"45357","severity":2,"message":"45358","line":1143,"column":18,"nodeType":"45359","messageId":"45360","endLine":1143,"endColumn":21,"suggestions":"49401"},{"ruleId":"45357","severity":2,"message":"45358","line":1169,"column":41,"nodeType":"45359","messageId":"45360","endLine":1169,"endColumn":44,"suggestions":"49402"},{"ruleId":"45357","severity":2,"message":"45358","line":1170,"column":36,"nodeType":"45359","messageId":"45360","endLine":1170,"endColumn":39,"suggestions":"49403"},{"ruleId":"45357","severity":2,"message":"45358","line":1209,"column":17,"nodeType":"45359","messageId":"45360","endLine":1209,"endColumn":20,"suggestions":"49404"},{"ruleId":"45357","severity":2,"message":"45358","line":1229,"column":32,"nodeType":"45359","messageId":"45360","endLine":1229,"endColumn":35,"suggestions":"49405"},{"ruleId":"45357","severity":2,"message":"45358","line":381,"column":27,"nodeType":"45359","messageId":"45360","endLine":381,"endColumn":30,"suggestions":"49406"},{"ruleId":"45357","severity":2,"message":"45358","line":382,"column":14,"nodeType":"45359","messageId":"45360","endLine":382,"endColumn":17,"suggestions":"49407"},{"ruleId":"45357","severity":2,"message":"45358","line":382,"column":36,"nodeType":"45359","messageId":"45360","endLine":382,"endColumn":39,"suggestions":"49408"},{"ruleId":"45357","severity":2,"message":"45358","line":383,"column":14,"nodeType":"45359","messageId":"45360","endLine":383,"endColumn":17,"suggestions":"49409"},{"ruleId":"45357","severity":2,"message":"45358","line":383,"column":36,"nodeType":"45359","messageId":"45360","endLine":383,"endColumn":39,"suggestions":"49410"},{"ruleId":"45357","severity":2,"message":"45358","line":384,"column":27,"nodeType":"45359","messageId":"45360","endLine":384,"endColumn":30,"suggestions":"49411"},{"ruleId":"45357","severity":2,"message":"45358","line":385,"column":27,"nodeType":"45359","messageId":"45360","endLine":385,"endColumn":30,"suggestions":"49412"},{"ruleId":"45357","severity":2,"message":"45358","line":386,"column":27,"nodeType":"45359","messageId":"45360","endLine":386,"endColumn":30,"suggestions":"49413"},{"ruleId":"45357","severity":2,"message":"45358","line":387,"column":27,"nodeType":"45359","messageId":"45360","endLine":387,"endColumn":30,"suggestions":"49414"},{"ruleId":"45357","severity":2,"message":"45358","line":388,"column":27,"nodeType":"45359","messageId":"45360","endLine":388,"endColumn":30,"suggestions":"49415"},{"ruleId":"45357","severity":2,"message":"45358","line":389,"column":14,"nodeType":"45359","messageId":"45360","endLine":389,"endColumn":17,"suggestions":"49416"},{"ruleId":"45357","severity":2,"message":"45358","line":389,"column":40,"nodeType":"45359","messageId":"45360","endLine":389,"endColumn":43,"suggestions":"49417"},{"ruleId":"45357","severity":2,"message":"45358","line":390,"column":27,"nodeType":"45359","messageId":"45360","endLine":390,"endColumn":30,"suggestions":"49418"},{"ruleId":"45357","severity":2,"message":"45358","line":391,"column":31,"nodeType":"45359","messageId":"45360","endLine":391,"endColumn":34,"suggestions":"49419"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":44,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":47,"suggestions":"49420"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":29,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":32,"suggestions":"49421"},{"ruleId":"45357","severity":2,"message":"45358","line":39,"column":52,"nodeType":"45359","messageId":"45360","endLine":39,"endColumn":55,"suggestions":"49422"},{"ruleId":"45357","severity":2,"message":"45358","line":72,"column":44,"nodeType":"45359","messageId":"45360","endLine":72,"endColumn":47,"suggestions":"49423"},{"ruleId":"45357","severity":2,"message":"45358","line":73,"column":29,"nodeType":"45359","messageId":"45360","endLine":73,"endColumn":32,"suggestions":"49424"},{"ruleId":"45357","severity":2,"message":"45358","line":73,"column":52,"nodeType":"45359","messageId":"45360","endLine":73,"endColumn":55,"suggestions":"49425"},{"ruleId":"45357","severity":2,"message":"45358","line":107,"column":44,"nodeType":"45359","messageId":"45360","endLine":107,"endColumn":47,"suggestions":"49426"},{"ruleId":"45357","severity":2,"message":"45358","line":108,"column":29,"nodeType":"45359","messageId":"45360","endLine":108,"endColumn":32,"suggestions":"49427"},{"ruleId":"45357","severity":2,"message":"45358","line":108,"column":52,"nodeType":"45359","messageId":"45360","endLine":108,"endColumn":55,"suggestions":"49428"},{"ruleId":"45357","severity":2,"message":"45358","line":133,"column":8,"nodeType":"45359","messageId":"45360","endLine":133,"endColumn":11,"suggestions":"49429"},{"ruleId":"45357","severity":2,"message":"45358","line":159,"column":8,"nodeType":"45359","messageId":"45360","endLine":159,"endColumn":11,"suggestions":"49430"},{"ruleId":"45357","severity":2,"message":"45358","line":178,"column":8,"nodeType":"45359","messageId":"45360","endLine":178,"endColumn":11,"suggestions":"49431"},{"ruleId":"45357","severity":2,"message":"45358","line":252,"column":31,"nodeType":"45359","messageId":"45360","endLine":252,"endColumn":34,"suggestions":"49432"},{"ruleId":"45357","severity":2,"message":"45358","line":252,"column":45,"nodeType":"45359","messageId":"45360","endLine":252,"endColumn":48,"suggestions":"49433"},{"ruleId":"45357","severity":2,"message":"45358","line":252,"column":51,"nodeType":"45359","messageId":"45360","endLine":252,"endColumn":54,"suggestions":"49434"},{"ruleId":"45357","severity":2,"message":"45358","line":253,"column":14,"nodeType":"45359","messageId":"45360","endLine":253,"endColumn":17,"suggestions":"49435"},{"ruleId":"45357","severity":2,"message":"45358","line":55,"column":49,"nodeType":"45359","messageId":"45360","endLine":55,"endColumn":52,"suggestions":"49436"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":44,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":47,"suggestions":"49437"},{"ruleId":"45357","severity":2,"message":"45358","line":60,"column":81,"nodeType":"45359","messageId":"45360","endLine":60,"endColumn":84,"suggestions":"49438"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":43,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":46,"suggestions":"49439"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":80,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":83,"suggestions":"49440"},{"ruleId":"45357","severity":2,"message":"45358","line":104,"column":49,"nodeType":"45359","messageId":"45360","endLine":104,"endColumn":52,"suggestions":"49441"},{"ruleId":"45357","severity":2,"message":"45358","line":107,"column":46,"nodeType":"45359","messageId":"45360","endLine":107,"endColumn":49,"suggestions":"49442"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":43,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":46,"suggestions":"49443"},{"ruleId":"45357","severity":2,"message":"45358","line":111,"column":80,"nodeType":"45359","messageId":"45360","endLine":111,"endColumn":83,"suggestions":"49444"},{"ruleId":"45568","severity":1,"message":"45569","line":29,"column":5,"nodeType":"45570","endLine":29,"endColumn":43,"suppressions":"49445"},{"ruleId":"45568","severity":1,"message":"45569","line":17,"column":12,"nodeType":"45570","endLine":17,"endColumn":88,"suppressions":"49446"},{"ruleId":"45568","severity":1,"message":"45569","line":21,"column":12,"nodeType":"45570","endLine":21,"endColumn":88,"suppressions":"49447"},{"ruleId":"49448","severity":2,"message":"49449","line":30,"column":5,"nodeType":null,"endLine":30,"endColumn":12,"suppressions":"49450"},{"ruleId":"49448","severity":2,"message":"49451","line":30,"column":5,"nodeType":null,"endLine":30,"endColumn":12,"suppressions":"49452"},{"ruleId":"49448","severity":2,"message":"49453","line":34,"column":5,"nodeType":null,"endLine":34,"endColumn":12,"suppressions":"49454"},{"ruleId":"49448","severity":2,"message":"49455","line":29,"column":5,"nodeType":null,"endLine":29,"endColumn":12,"suppressions":"49456"},{"ruleId":"49448","severity":2,"message":"49457","line":30,"column":5,"nodeType":null,"endLine":30,"endColumn":12,"suppressions":"49458"},{"ruleId":"45357","severity":2,"message":"45358","line":23,"column":61,"nodeType":"45359","messageId":"45360","endLine":23,"endColumn":64,"suggestions":"49459"},{"ruleId":"45357","severity":2,"message":"45358","line":35,"column":8,"nodeType":"45359","messageId":"45360","endLine":35,"endColumn":11,"suggestions":"49460"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":64,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":67,"suggestions":"49461"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":91,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":94,"suggestions":"49462"},{"ruleId":"45357","severity":2,"message":"45358","line":46,"column":67,"nodeType":"45359","messageId":"45360","endLine":46,"endColumn":70,"suggestions":"49463"},{"ruleId":"45357","severity":2,"message":"45358","line":51,"column":70,"nodeType":"45359","messageId":"45360","endLine":51,"endColumn":73,"suggestions":"49464"},{"ruleId":"45357","severity":2,"message":"45358","line":56,"column":66,"nodeType":"45359","messageId":"45360","endLine":56,"endColumn":69,"suggestions":"49465"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":71,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":74,"suggestions":"49466"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":77,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":80,"suggestions":"49467"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":80,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":83,"suggestions":"49468"},{"ruleId":"45357","severity":2,"message":"45358","line":71,"column":55,"nodeType":"45359","messageId":"45360","endLine":71,"endColumn":58,"suggestions":"49469"},{"ruleId":"45357","severity":2,"message":"45358","line":187,"column":48,"nodeType":"45359","messageId":"45360","endLine":187,"endColumn":51,"suggestions":"49470"},{"ruleId":"45357","severity":2,"message":"45358","line":193,"column":47,"nodeType":"45359","messageId":"45360","endLine":193,"endColumn":50,"suggestions":"49471"},{"ruleId":"45357","severity":2,"message":"45358","line":196,"column":64,"nodeType":"45359","messageId":"45360","endLine":196,"endColumn":67,"suggestions":"49472"},{"ruleId":"45357","severity":2,"message":"45358","line":197,"column":48,"nodeType":"45359","messageId":"45360","endLine":197,"endColumn":51,"suggestions":"49473"},{"ruleId":"45357","severity":2,"message":"45358","line":200,"column":34,"nodeType":"45359","messageId":"45360","endLine":200,"endColumn":37,"suggestions":"49474"},{"ruleId":"45357","severity":2,"message":"45358","line":250,"column":20,"nodeType":"45359","messageId":"45360","endLine":250,"endColumn":23,"suggestions":"49475"},{"ruleId":"45357","severity":2,"message":"45358","line":255,"column":27,"nodeType":"45359","messageId":"45360","endLine":255,"endColumn":30,"suggestions":"49476"},{"ruleId":"45357","severity":2,"message":"45358","line":256,"column":20,"nodeType":"45359","messageId":"45360","endLine":256,"endColumn":23,"suggestions":"49477"},{"ruleId":"45357","severity":2,"message":"45358","line":261,"column":27,"nodeType":"45359","messageId":"45360","endLine":261,"endColumn":30,"suggestions":"49478"},{"ruleId":"45357","severity":2,"message":"45358","line":262,"column":20,"nodeType":"45359","messageId":"45360","endLine":262,"endColumn":23,"suggestions":"49479"},{"ruleId":"45357","severity":2,"message":"45358","line":324,"column":37,"nodeType":"45359","messageId":"45360","endLine":324,"endColumn":40,"suggestions":"49480"},{"ruleId":"45357","severity":2,"message":"45358","line":331,"column":28,"nodeType":"45359","messageId":"45360","endLine":331,"endColumn":31,"suggestions":"49481"},{"ruleId":"45357","severity":2,"message":"45358","line":332,"column":28,"nodeType":"45359","messageId":"45360","endLine":332,"endColumn":31,"suggestions":"49482"},{"ruleId":"45357","severity":2,"message":"45358","line":333,"column":28,"nodeType":"45359","messageId":"45360","endLine":333,"endColumn":31,"suggestions":"49483"},{"ruleId":"45357","severity":2,"message":"45358","line":334,"column":28,"nodeType":"45359","messageId":"45360","endLine":334,"endColumn":31,"suggestions":"49484"},{"ruleId":"45357","severity":2,"message":"45358","line":335,"column":28,"nodeType":"45359","messageId":"45360","endLine":335,"endColumn":31,"suggestions":"49485"},{"ruleId":"45357","severity":2,"message":"45358","line":336,"column":28,"nodeType":"45359","messageId":"45360","endLine":336,"endColumn":31,"suggestions":"49486"},{"ruleId":"45357","severity":2,"message":"45358","line":337,"column":28,"nodeType":"45359","messageId":"45360","endLine":337,"endColumn":31,"suggestions":"49487"},{"ruleId":"45357","severity":2,"message":"45358","line":338,"column":28,"nodeType":"45359","messageId":"45360","endLine":338,"endColumn":31,"suggestions":"49488"},{"ruleId":"45357","severity":2,"message":"45358","line":339,"column":28,"nodeType":"45359","messageId":"45360","endLine":339,"endColumn":31,"suggestions":"49489"},{"ruleId":"45357","severity":2,"message":"45358","line":340,"column":28,"nodeType":"45359","messageId":"45360","endLine":340,"endColumn":31,"suggestions":"49490"},{"ruleId":"45357","severity":2,"message":"45358","line":341,"column":28,"nodeType":"45359","messageId":"45360","endLine":341,"endColumn":31,"suggestions":"49491"},{"ruleId":"45357","severity":2,"message":"45358","line":351,"column":54,"nodeType":"45359","messageId":"45360","endLine":351,"endColumn":57,"suggestions":"49492"},{"ruleId":"45357","severity":2,"message":"45358","line":369,"column":84,"nodeType":"45359","messageId":"45360","endLine":369,"endColumn":87,"suggestions":"49493"},{"ruleId":"45357","severity":2,"message":"45358","line":370,"column":80,"nodeType":"45359","messageId":"45360","endLine":370,"endColumn":83,"suggestions":"49494"},{"ruleId":"45357","severity":2,"message":"45358","line":396,"column":84,"nodeType":"45359","messageId":"45360","endLine":396,"endColumn":87,"suggestions":"49495"},{"ruleId":"45357","severity":2,"message":"45358","line":397,"column":80,"nodeType":"45359","messageId":"45360","endLine":397,"endColumn":83,"suggestions":"49496"},{"ruleId":"45357","severity":2,"message":"45358","line":16,"column":41,"nodeType":"45359","messageId":"45360","endLine":16,"endColumn":44,"suggestions":"49497"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":16,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":19,"suggestions":"49498"},{"ruleId":"45357","severity":2,"message":"45358","line":22,"column":41,"nodeType":"45359","messageId":"45360","endLine":22,"endColumn":44,"suggestions":"49499"},{"ruleId":"45357","severity":2,"message":"45358","line":31,"column":16,"nodeType":"45359","messageId":"45360","endLine":31,"endColumn":19,"suggestions":"49500"},{"ruleId":"45357","severity":2,"message":"45358","line":53,"column":20,"nodeType":"45359","messageId":"45360","endLine":53,"endColumn":23,"suggestions":"49501"},{"ruleId":"45357","severity":2,"message":"45358","line":81,"column":20,"nodeType":"45359","messageId":"45360","endLine":81,"endColumn":23,"suggestions":"49502"},{"ruleId":"45357","severity":2,"message":"45358","line":87,"column":22,"nodeType":"45359","messageId":"45360","endLine":87,"endColumn":25,"suggestions":"49503"},{"ruleId":"45357","severity":2,"message":"45358","line":118,"column":20,"nodeType":"45359","messageId":"45360","endLine":118,"endColumn":23,"suggestions":"49504"},{"ruleId":"45357","severity":2,"message":"45358","line":130,"column":30,"nodeType":"45359","messageId":"45360","endLine":130,"endColumn":33,"suggestions":"49505"},{"ruleId":"45357","severity":2,"message":"45358","line":157,"column":16,"nodeType":"45359","messageId":"45360","endLine":157,"endColumn":19,"suggestions":"49506"},{"ruleId":"45357","severity":2,"message":"45358","line":204,"column":16,"nodeType":"45359","messageId":"45360","endLine":204,"endColumn":19,"suggestions":"49507"},{"ruleId":"45357","severity":2,"message":"45358","line":237,"column":20,"nodeType":"45359","messageId":"45360","endLine":237,"endColumn":23,"suggestions":"49508"},{"ruleId":"45357","severity":2,"message":"45358","line":292,"column":16,"nodeType":"45359","messageId":"45360","endLine":292,"endColumn":19,"suggestions":"49509"},{"ruleId":"45357","severity":2,"message":"45358","line":345,"column":16,"nodeType":"45359","messageId":"45360","endLine":345,"endColumn":19,"suggestions":"49510"},{"ruleId":"45357","severity":2,"message":"45358","line":358,"column":16,"nodeType":"45359","messageId":"45360","endLine":358,"endColumn":19,"suggestions":"49511"},{"ruleId":"45357","severity":2,"message":"45358","line":395,"column":16,"nodeType":"45359","messageId":"45360","endLine":395,"endColumn":19,"suggestions":"49512"},{"ruleId":"45357","severity":2,"message":"45358","line":474,"column":16,"nodeType":"45359","messageId":"45360","endLine":474,"endColumn":19,"suggestions":"49513"},{"ruleId":"45357","severity":2,"message":"45358","line":497,"column":22,"nodeType":"45359","messageId":"45360","endLine":497,"endColumn":25,"suggestions":"49514"},{"ruleId":"45357","severity":2,"message":"45358","line":524,"column":21,"nodeType":"45359","messageId":"45360","endLine":524,"endColumn":24,"suggestions":"49515"},{"ruleId":"45357","severity":2,"message":"45358","line":554,"column":22,"nodeType":"45359","messageId":"45360","endLine":554,"endColumn":25,"suggestions":"49516"},{"ruleId":"45357","severity":2,"message":"45358","line":569,"column":29,"nodeType":"45359","messageId":"45360","endLine":569,"endColumn":32,"suggestions":"49517"},{"ruleId":"45357","severity":2,"message":"45358","line":589,"column":22,"nodeType":"45359","messageId":"45360","endLine":589,"endColumn":25,"suggestions":"49518"},{"ruleId":"45357","severity":2,"message":"45358","line":613,"column":20,"nodeType":"45359","messageId":"45360","endLine":613,"endColumn":23,"suggestions":"49519"},{"ruleId":"45357","severity":2,"message":"45358","line":623,"column":23,"nodeType":"45359","messageId":"45360","endLine":623,"endColumn":26,"suggestions":"49520"},{"ruleId":"45357","severity":2,"message":"45358","line":633,"column":29,"nodeType":"45359","messageId":"45360","endLine":633,"endColumn":32,"suggestions":"49521"},{"ruleId":"45357","severity":2,"message":"45358","line":729,"column":16,"nodeType":"45359","messageId":"45360","endLine":729,"endColumn":19,"suggestions":"49522"},{"ruleId":"45357","severity":2,"message":"45358","line":743,"column":20,"nodeType":"45359","messageId":"45360","endLine":743,"endColumn":23,"suggestions":"49523"},{"ruleId":"45357","severity":2,"message":"45358","line":752,"column":15,"nodeType":"45359","messageId":"45360","endLine":752,"endColumn":18,"suggestions":"49524"},{"ruleId":"45357","severity":2,"message":"45358","line":761,"column":18,"nodeType":"45359","messageId":"45360","endLine":761,"endColumn":21,"suggestions":"49525"},{"ruleId":"45357","severity":2,"message":"45358","line":770,"column":15,"nodeType":"45359","messageId":"45360","endLine":770,"endColumn":18,"suggestions":"49526"},{"ruleId":"45357","severity":2,"message":"45358","line":786,"column":20,"nodeType":"45359","messageId":"45360","endLine":786,"endColumn":23,"suggestions":"49527"},{"ruleId":"45357","severity":2,"message":"45358","line":799,"column":26,"nodeType":"45359","messageId":"45360","endLine":799,"endColumn":29,"suggestions":"49528"},{"ruleId":"45357","severity":2,"message":"45358","line":813,"column":22,"nodeType":"45359","messageId":"45360","endLine":813,"endColumn":25,"suggestions":"49529"},{"ruleId":"45357","severity":2,"message":"45358","line":825,"column":22,"nodeType":"45359","messageId":"45360","endLine":825,"endColumn":25,"suggestions":"49530"},{"ruleId":"45357","severity":2,"message":"45358","line":858,"column":22,"nodeType":"45359","messageId":"45360","endLine":858,"endColumn":25,"suggestions":"49531"},{"ruleId":"45357","severity":2,"message":"45358","line":868,"column":22,"nodeType":"45359","messageId":"45360","endLine":868,"endColumn":25,"suggestions":"49532"},{"ruleId":"45357","severity":2,"message":"45358","line":878,"column":16,"nodeType":"45359","messageId":"45360","endLine":878,"endColumn":19,"suggestions":"49533"},{"ruleId":"45357","severity":2,"message":"45358","line":884,"column":24,"nodeType":"45359","messageId":"45360","endLine":884,"endColumn":27,"suggestions":"49534"},{"ruleId":"45357","severity":2,"message":"45358","line":895,"column":29,"nodeType":"45359","messageId":"45360","endLine":895,"endColumn":32,"suggestions":"49535"},{"ruleId":"45357","severity":2,"message":"45358","line":942,"column":14,"nodeType":"45359","messageId":"45360","endLine":942,"endColumn":17,"suggestions":"49536"},{"ruleId":"45357","severity":2,"message":"45358","line":962,"column":15,"nodeType":"45359","messageId":"45360","endLine":962,"endColumn":18,"suggestions":"49537"},{"ruleId":"45357","severity":2,"message":"45358","line":986,"column":16,"nodeType":"45359","messageId":"45360","endLine":986,"endColumn":19,"suggestions":"49538"},{"ruleId":"45357","severity":2,"message":"45358","line":1027,"column":16,"nodeType":"45359","messageId":"45360","endLine":1027,"endColumn":19,"suggestions":"49539"},{"ruleId":"45357","severity":2,"message":"45358","line":1040,"column":16,"nodeType":"45359","messageId":"45360","endLine":1040,"endColumn":19,"suggestions":"49540"},{"ruleId":"45357","severity":2,"message":"45358","line":1051,"column":29,"nodeType":"45359","messageId":"45360","endLine":1051,"endColumn":32,"suggestions":"49541"},{"ruleId":"45357","severity":2,"message":"45358","line":1052,"column":29,"nodeType":"45359","messageId":"45360","endLine":1052,"endColumn":32,"suggestions":"49542"},{"ruleId":"45357","severity":2,"message":"45358","line":1095,"column":16,"nodeType":"45359","messageId":"45360","endLine":1095,"endColumn":19,"suggestions":"49543"},{"ruleId":"45357","severity":2,"message":"45358","line":1116,"column":18,"nodeType":"45359","messageId":"45360","endLine":1116,"endColumn":21,"suggestions":"49544"},{"ruleId":"45357","severity":2,"message":"45358","line":1128,"column":27,"nodeType":"45359","messageId":"45360","endLine":1128,"endColumn":30,"suggestions":"49545"},{"ruleId":"45357","severity":2,"message":"45358","line":1149,"column":16,"nodeType":"45359","messageId":"45360","endLine":1149,"endColumn":19,"suggestions":"49546"},{"ruleId":"45357","severity":2,"message":"45358","line":1323,"column":27,"nodeType":"45359","messageId":"45360","endLine":1323,"endColumn":30,"suggestions":"49547"},{"ruleId":"45357","severity":2,"message":"45358","line":1351,"column":19,"nodeType":"45359","messageId":"45360","endLine":1351,"endColumn":22,"suggestions":"49548"},{"ruleId":"45357","severity":2,"message":"45358","line":1369,"column":27,"nodeType":"45359","messageId":"45360","endLine":1369,"endColumn":30,"suggestions":"49549"},{"ruleId":"45357","severity":2,"message":"45358","line":1380,"column":20,"nodeType":"45359","messageId":"45360","endLine":1380,"endColumn":23,"suggestions":"49550"},{"ruleId":"45357","severity":2,"message":"45358","line":1388,"column":16,"nodeType":"45359","messageId":"45360","endLine":1388,"endColumn":19,"suggestions":"49551"},{"ruleId":"45357","severity":2,"message":"45358","line":1395,"column":21,"nodeType":"45359","messageId":"45360","endLine":1395,"endColumn":24,"suggestions":"49552"},{"ruleId":"45357","severity":2,"message":"45358","line":1404,"column":21,"nodeType":"45359","messageId":"45360","endLine":1404,"endColumn":24,"suggestions":"49553"},{"ruleId":"45357","severity":2,"message":"45358","line":1424,"column":17,"nodeType":"45359","messageId":"45360","endLine":1424,"endColumn":20,"suggestions":"49554"},{"ruleId":"45357","severity":2,"message":"45358","line":1439,"column":17,"nodeType":"45359","messageId":"45360","endLine":1439,"endColumn":20,"suggestions":"49555"},{"ruleId":"45357","severity":2,"message":"45358","line":46,"column":23,"nodeType":"45359","messageId":"45360","endLine":46,"endColumn":26,"suggestions":"49556"},{"ruleId":"45357","severity":2,"message":"45358","line":65,"column":64,"nodeType":"45359","messageId":"45360","endLine":65,"endColumn":67,"suggestions":"49557"},{"ruleId":"45357","severity":2,"message":"45358","line":63,"column":43,"nodeType":"45359","messageId":"45360","endLine":63,"endColumn":46,"suggestions":"49558"},{"ruleId":"45357","severity":2,"message":"45358","line":76,"column":43,"nodeType":"45359","messageId":"45360","endLine":76,"endColumn":46,"suggestions":"49559"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":43,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":46,"suggestions":"49560"},{"ruleId":"45357","severity":2,"message":"45358","line":101,"column":43,"nodeType":"45359","messageId":"45360","endLine":101,"endColumn":46,"suggestions":"49561"},{"ruleId":"45357","severity":2,"message":"45358","line":41,"column":21,"nodeType":"45359","messageId":"45360","endLine":41,"endColumn":24,"suggestions":"49562"},{"ruleId":"45357","severity":2,"message":"45358","line":38,"column":19,"nodeType":"45359","messageId":"45360","endLine":38,"endColumn":22,"suggestions":"49563"},{"ruleId":"45357","severity":2,"message":"45358","line":47,"column":19,"nodeType":"45359","messageId":"45360","endLine":47,"endColumn":22,"suggestions":"49564"},{"ruleId":"45357","severity":2,"message":"45358","line":76,"column":34,"nodeType":"45359","messageId":"45360","endLine":76,"endColumn":37,"suggestions":"49565"},{"ruleId":"45357","severity":2,"message":"45358","line":90,"column":10,"nodeType":"45359","messageId":"45360","endLine":90,"endColumn":13,"suggestions":"49566"},{"ruleId":"45357","severity":2,"message":"45358","line":29,"column":9,"nodeType":"45359","messageId":"45360","endLine":29,"endColumn":12,"suggestions":"49567"},{"ruleId":"45357","severity":2,"message":"45358","line":35,"column":18,"nodeType":"45359","messageId":"45360","endLine":35,"endColumn":21,"suggestions":"49568"},{"ruleId":"45357","severity":2,"message":"45358","line":35,"column":57,"nodeType":"45359","messageId":"45360","endLine":35,"endColumn":60,"suggestions":"49569"},{"ruleId":"45357","severity":2,"message":"45358","line":86,"column":43,"nodeType":"45359","messageId":"45360","endLine":86,"endColumn":46,"suggestions":"49570"},{"ruleId":"45357","severity":2,"message":"45358","line":93,"column":15,"nodeType":"45359","messageId":"45360","endLine":93,"endColumn":18,"suggestions":"49571"},{"ruleId":"45357","severity":2,"message":"45358","line":114,"column":43,"nodeType":"45359","messageId":"45360","endLine":114,"endColumn":46,"suggestions":"49572"},{"ruleId":"45357","severity":2,"message":"45358","line":115,"column":48,"nodeType":"45359","messageId":"45360","endLine":115,"endColumn":51,"suggestions":"49573"},{"ruleId":"45357","severity":2,"message":"45358","line":134,"column":43,"nodeType":"45359","messageId":"45360","endLine":134,"endColumn":46,"suggestions":"49574"},{"ruleId":"45357","severity":2,"message":"45358","line":163,"column":43,"nodeType":"45359","messageId":"45360","endLine":163,"endColumn":46,"suggestions":"49575"},{"ruleId":"45357","severity":2,"message":"45358","line":169,"column":28,"nodeType":"45359","messageId":"45360","endLine":169,"endColumn":31,"suggestions":"49576"},{"ruleId":"45357","severity":2,"message":"45358","line":187,"column":43,"nodeType":"45359","messageId":"45360","endLine":187,"endColumn":46,"suggestions":"49577"},{"ruleId":"45357","severity":2,"message":"45358","line":216,"column":43,"nodeType":"45359","messageId":"45360","endLine":216,"endColumn":46,"suggestions":"49578"},{"ruleId":"45357","severity":2,"message":"45358","line":220,"column":42,"nodeType":"45359","messageId":"45360","endLine":220,"endColumn":45,"suggestions":"49579"},{"ruleId":"45357","severity":2,"message":"45358","line":252,"column":43,"nodeType":"45359","messageId":"45360","endLine":252,"endColumn":46,"suggestions":"49580"},{"ruleId":"45357","severity":2,"message":"45358","line":287,"column":43,"nodeType":"45359","messageId":"45360","endLine":287,"endColumn":46,"suggestions":"49581"},{"ruleId":"45357","severity":2,"message":"45358","line":288,"column":40,"nodeType":"45359","messageId":"45360","endLine":288,"endColumn":43,"suggestions":"49582"},{"ruleId":"45357","severity":2,"message":"45358","line":318,"column":43,"nodeType":"45359","messageId":"45360","endLine":318,"endColumn":46,"suggestions":"49583"},{"ruleId":"45357","severity":2,"message":"45358","line":319,"column":48,"nodeType":"45359","messageId":"45360","endLine":319,"endColumn":51,"suggestions":"49584"},{"ruleId":"45357","severity":2,"message":"45358","line":355,"column":43,"nodeType":"45359","messageId":"45360","endLine":355,"endColumn":46,"suggestions":"49585"},{"ruleId":"45357","severity":2,"message":"45358","line":356,"column":48,"nodeType":"45359","messageId":"45360","endLine":356,"endColumn":51,"suggestions":"49586"},{"ruleId":"45357","severity":2,"message":"45358","line":358,"column":13,"nodeType":"45359","messageId":"45360","endLine":358,"endColumn":16,"suggestions":"49587"},{"ruleId":"45357","severity":2,"message":"45358","line":361,"column":13,"nodeType":"45359","messageId":"45360","endLine":361,"endColumn":16,"suggestions":"49588"},{"ruleId":"45357","severity":2,"message":"45358","line":405,"column":61,"nodeType":"45359","messageId":"45360","endLine":405,"endColumn":64,"suggestions":"49589"},{"ruleId":"45357","severity":2,"message":"45358","line":445,"column":43,"nodeType":"45359","messageId":"45360","endLine":445,"endColumn":46,"suggestions":"49590"},{"ruleId":"45357","severity":2,"message":"45358","line":449,"column":36,"nodeType":"45359","messageId":"45360","endLine":449,"endColumn":39,"suggestions":"49591"},{"ruleId":"45357","severity":2,"message":"45358","line":450,"column":36,"nodeType":"45359","messageId":"45360","endLine":450,"endColumn":39,"suggestions":"49592"},{"ruleId":"45357","severity":2,"message":"45358","line":474,"column":43,"nodeType":"45359","messageId":"45360","endLine":474,"endColumn":46,"suggestions":"49593"},{"ruleId":"45357","severity":2,"message":"45358","line":480,"column":15,"nodeType":"45359","messageId":"45360","endLine":480,"endColumn":18,"suggestions":"49594"},{"ruleId":"45357","severity":2,"message":"45358","line":507,"column":43,"nodeType":"45359","messageId":"45360","endLine":507,"endColumn":46,"suggestions":"49595"},{"ruleId":"45357","severity":2,"message":"45358","line":512,"column":30,"nodeType":"45359","messageId":"45360","endLine":512,"endColumn":33,"suggestions":"49596"},{"ruleId":"45357","severity":2,"message":"45358","line":537,"column":43,"nodeType":"45359","messageId":"45360","endLine":537,"endColumn":46,"suggestions":"49597"},{"ruleId":"45357","severity":2,"message":"45358","line":573,"column":43,"nodeType":"45359","messageId":"45360","endLine":573,"endColumn":46,"suggestions":"49598"},{"ruleId":"45357","severity":2,"message":"45358","line":581,"column":43,"nodeType":"45359","messageId":"45360","endLine":581,"endColumn":46,"suggestions":"49599"},{"ruleId":"45357","severity":2,"message":"45358","line":602,"column":43,"nodeType":"45359","messageId":"45360","endLine":602,"endColumn":46,"suggestions":"49600"},{"ruleId":"45357","severity":2,"message":"45358","line":603,"column":48,"nodeType":"45359","messageId":"45360","endLine":603,"endColumn":51,"suggestions":"49601"},{"ruleId":"45357","severity":2,"message":"45358","line":622,"column":43,"nodeType":"45359","messageId":"45360","endLine":622,"endColumn":46,"suggestions":"49602"},{"ruleId":"45357","severity":2,"message":"45358","line":645,"column":43,"nodeType":"45359","messageId":"45360","endLine":645,"endColumn":46,"suggestions":"49603"},{"ruleId":"45357","severity":2,"message":"45358","line":646,"column":50,"nodeType":"45359","messageId":"45360","endLine":646,"endColumn":53,"suggestions":"49604"},{"ruleId":"45357","severity":2,"message":"45358","line":705,"column":39,"nodeType":"45359","messageId":"45360","endLine":705,"endColumn":42,"suggestions":"49605"},{"ruleId":"45357","severity":2,"message":"45358","line":709,"column":39,"nodeType":"45359","messageId":"45360","endLine":709,"endColumn":42,"suggestions":"49606"},{"ruleId":"45357","severity":2,"message":"45358","line":714,"column":15,"nodeType":"45359","messageId":"45360","endLine":714,"endColumn":18,"suggestions":"49607"},{"ruleId":"45357","severity":2,"message":"45358","line":718,"column":38,"nodeType":"45359","messageId":"45360","endLine":718,"endColumn":41,"suggestions":"49608"},{"ruleId":"45357","severity":2,"message":"45358","line":734,"column":51,"nodeType":"45359","messageId":"45360","endLine":734,"endColumn":54,"suggestions":"49609"},{"ruleId":"45357","severity":2,"message":"45358","line":739,"column":55,"nodeType":"45359","messageId":"45360","endLine":739,"endColumn":58,"suggestions":"49610"},{"ruleId":"45357","severity":2,"message":"45358","line":743,"column":61,"nodeType":"45359","messageId":"45360","endLine":743,"endColumn":64,"suggestions":"49611"},{"ruleId":"45357","severity":2,"message":"45358","line":749,"column":67,"nodeType":"45359","messageId":"45360","endLine":749,"endColumn":70,"suggestions":"49612"},{"ruleId":"45357","severity":2,"message":"45358","line":750,"column":73,"nodeType":"45359","messageId":"45360","endLine":750,"endColumn":76,"suggestions":"49613"},{"ruleId":"45357","severity":2,"message":"45358","line":789,"column":13,"nodeType":"45359","messageId":"45360","endLine":789,"endColumn":16,"suggestions":"49614"},{"ruleId":"45357","severity":2,"message":"45358","line":799,"column":64,"nodeType":"45359","messageId":"45360","endLine":799,"endColumn":67,"suggestions":"49615"},{"ruleId":"45357","severity":2,"message":"45358","line":826,"column":43,"nodeType":"45359","messageId":"45360","endLine":826,"endColumn":46,"suggestions":"49616"},{"ruleId":"45357","severity":2,"message":"45358","line":831,"column":30,"nodeType":"45359","messageId":"45360","endLine":831,"endColumn":33,"suggestions":"49617"},{"ruleId":"45357","severity":2,"message":"45358","line":851,"column":43,"nodeType":"45359","messageId":"45360","endLine":851,"endColumn":46,"suggestions":"49618"},{"ruleId":"45357","severity":2,"message":"45358","line":852,"column":52,"nodeType":"45359","messageId":"45360","endLine":852,"endColumn":55,"suggestions":"49619"},{"ruleId":"45357","severity":2,"message":"45358","line":874,"column":43,"nodeType":"45359","messageId":"45360","endLine":874,"endColumn":46,"suggestions":"49620"},{"ruleId":"45357","severity":2,"message":"45358","line":882,"column":43,"nodeType":"45359","messageId":"45360","endLine":882,"endColumn":46,"suggestions":"49621"},{"ruleId":"45357","severity":2,"message":"45358","line":900,"column":55,"nodeType":"45359","messageId":"45360","endLine":900,"endColumn":58,"suggestions":"49622"},{"ruleId":"45357","severity":2,"message":"45358","line":913,"column":43,"nodeType":"45359","messageId":"45360","endLine":913,"endColumn":46,"suggestions":"49623"},{"ruleId":"45357","severity":2,"message":"45358","line":933,"column":51,"nodeType":"45359","messageId":"45360","endLine":933,"endColumn":54,"suggestions":"49624"},{"ruleId":"45357","severity":2,"message":"45358","line":946,"column":51,"nodeType":"45359","messageId":"45360","endLine":946,"endColumn":54,"suggestions":"49625"},{"ruleId":"45357","severity":2,"message":"45358","line":976,"column":43,"nodeType":"45359","messageId":"45360","endLine":976,"endColumn":46,"suggestions":"49626"},{"ruleId":"45357","severity":2,"message":"45358","line":995,"column":51,"nodeType":"45359","messageId":"45360","endLine":995,"endColumn":54,"suggestions":"49627"},{"ruleId":"45357","severity":2,"message":"45358","line":1009,"column":51,"nodeType":"45359","messageId":"45360","endLine":1009,"endColumn":54,"suggestions":"49628"},{"ruleId":"45357","severity":2,"message":"45358","line":1034,"column":43,"nodeType":"45359","messageId":"45360","endLine":1034,"endColumn":46,"suggestions":"49629"},{"ruleId":"45357","severity":2,"message":"45358","line":1117,"column":43,"nodeType":"45359","messageId":"45360","endLine":1117,"endColumn":46,"suggestions":"49630"},{"ruleId":"45357","severity":2,"message":"45358","line":1157,"column":43,"nodeType":"45359","messageId":"45360","endLine":1157,"endColumn":46,"suggestions":"49631"},{"ruleId":"45357","severity":2,"message":"45358","line":1190,"column":43,"nodeType":"45359","messageId":"45360","endLine":1190,"endColumn":46,"suggestions":"49632"},{"ruleId":"45357","severity":2,"message":"45358","line":1217,"column":43,"nodeType":"45359","messageId":"45360","endLine":1217,"endColumn":46,"suggestions":"49633"},{"ruleId":"45357","severity":2,"message":"45358","line":1243,"column":43,"nodeType":"45359","messageId":"45360","endLine":1243,"endColumn":46,"suggestions":"49634"},{"ruleId":"45357","severity":2,"message":"45358","line":70,"column":13,"nodeType":"45359","messageId":"45360","endLine":70,"endColumn":16,"suggestions":"49635"},{"ruleId":"45357","severity":2,"message":"45358","line":267,"column":47,"nodeType":"45359","messageId":"45360","endLine":267,"endColumn":50,"suggestions":"49636"},{"ruleId":"45357","severity":2,"message":"45358","line":58,"column":43,"nodeType":"45359","messageId":"45360","endLine":58,"endColumn":46,"suggestions":"49637"},{"ruleId":"45357","severity":2,"message":"45358","line":59,"column":61,"nodeType":"45359","messageId":"45360","endLine":59,"endColumn":64,"suggestions":"49638"},{"ruleId":"45357","severity":2,"message":"45358","line":20,"column":33,"nodeType":"45359","messageId":"45360","endLine":20,"endColumn":36,"suggestions":"49639"},{"ruleId":"45357","severity":2,"message":"45358","line":20,"column":63,"nodeType":"45359","messageId":"45360","endLine":20,"endColumn":66,"suggestions":"49640"},{"ruleId":"45357","severity":2,"message":"45358","line":21,"column":44,"nodeType":"45359","messageId":"45360","endLine":21,"endColumn":47,"suggestions":"49641"},{"ruleId":"45357","severity":2,"message":"45358","line":25,"column":35,"nodeType":"45359","messageId":"45360","endLine":25,"endColumn":38,"suggestions":"49642"},{"ruleId":"45357","severity":2,"message":"45358","line":37,"column":32,"nodeType":"45359","messageId":"45360","endLine":37,"endColumn":35,"suggestions":"49643"},"@typescript-eslint/no-explicit-any","Unexpected any. Specify a different type.","TSAnyKeyword","unexpectedAny",["49644","49645"],["49646","49647"],["49648","49649"],["49650","49651"],["49652","49653"],["49654","49655"],["49656","49657"],["49658","49659"],["49660","49661"],["49662","49663"],["49664","49665"],["49666","49667"],["49668","49669"],["49670","49671"],["49672","49673"],["49674","49675"],["49676","49677"],["49678","49679"],["49680","49681"],["49682","49683"],["49684","49685"],["49686","49687"],["49688","49689"],["49690","49691"],["49692","49693"],["49694","49695"],["49696","49697"],["49698","49699"],["49700","49701"],["49702","49703"],["49704","49705"],["49706","49707"],["49708","49709"],["49710","49711"],["49712","49713"],["49714","49715"],["49716","49717"],["49718","49719"],["49720","49721"],["49722","49723"],["49724","49725"],["49726","49727"],["49728","49729"],["49730","49731"],["49732","49733"],["49734","49735"],["49736","49737"],["49738","49739"],["49740","49741"],["49742","49743"],["49744","49745"],["49746","49747"],["49748","49749"],["49750","49751"],["49752","49753"],["49754","49755"],["49756","49757"],"no-restricted-imports","'@/lib/localDb' import is restricted from being used by a pattern. The localDb compatibility barrel is restricted — import the owning domain module from `@/lib/db/` instead.","ImportDeclaration","patternWithCustomMessage",["49758","49759"],"no-restricted-syntax","New local `toNumber` definitions are barred — import `toNumber` from `@/shared/utils/numeric` instead (#7879). See that module's JSDoc for the canonical coercion shape and the `toNumberOrNull`/`toNumberArray` variants.","FunctionDeclaration","restrictedSyntax",["49760","49761"],["49762","49763"],["49764","49765"],["49766","49767"],["49768","49769"],["49770","49771"],["49772","49773"],["49774","49775"],["49776","49777"],["49778","49779"],["49780","49781"],["49782","49783"],["49784","49785"],["49786","49787"],["49788","49789"],["49790","49791"],["49792","49793"],["49794","49795"],["49796","49797"],["49798","49799"],["49800","49801"],["49802","49803"],["49804","49805"],["49806","49807"],["49808","49809"],["49810","49811"],["49812","49813"],["49814","49815"],["49816","49817"],["49818","49819"],["49820","49821"],["49822","49823"],["49824","49825"],["49826","49827"],["49828","49829"],["49830","49831"],["49832","49833"],["49834","49835"],["49836","49837"],["49838","49839"],["49840","49841"],["49842","49843"],["49844","49845"],["49846","49847"],["49848","49849"],["49850","49851"],["49852","49853"],["49854","49855"],["49856","49857"],["49858","49859"],["49860","49861"],["49862","49863"],["49864","49865"],["49866","49867"],"VariableDeclarator",["49868","49869"],["49870","49871"],["49872","49873"],["49874","49875"],["49876","49877"],["49878","49879"],["49880","49881"],["49882","49883"],["49884","49885"],["49886","49887"],["49888","49889"],["49890","49891"],["49892","49893"],["49894","49895"],["49896","49897"],["49898","49899"],["49900","49901"],["49902","49903"],["49904","49905"],["49906","49907"],["49908","49909"],["49910","49911"],["49912","49913"],["49914","49915"],["49916","49917"],["49918","49919"],["49920","49921"],["49922","49923"],["49924","49925"],["49926","49927"],["49928","49929"],["49930","49931"],["49932","49933"],["49934","49935"],["49936","49937"],["49938","49939"],["49940","49941"],["49942","49943"],["49944","49945"],["49946","49947"],["49948"],["49949","49950"],["49951"],["49952","49953"],["49954"],["49955","49956"],["49957"],["49958","49959"],["49960","49961"],["49962","49963"],["49964","49965"],["49966","49967"],["49968","49969"],["49970","49971"],["49972","49973"],["49974","49975"],["49976","49977"],["49978","49979"],["49980","49981"],["49982","49983"],["49984","49985"],["49986","49987"],["49988","49989"],["49990","49991"],"react-hooks/exhaustive-deps","React Hook useMemo has a missing dependency: 'versionInfo'. Either include it or remove the dependency array. Mutable values like 'versionInfo.current' aren't valid dependencies because mutating them doesn't re-render the component.","ArrayExpression",["49992"],"React Hook useEffect has a missing dependency: 'fetchData'. Either include it or remove the dependency array.",["49993"],["49994"],"react-hooks/set-state-in-effect","Error: Calling setState synchronously within an effect can trigger cascading renders\n\nEffects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following:\n* Update external systems with the latest state from React.\n* Subscribe for updates from some external system, calling setState in a callback function when external state changes.\n\nCalling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect).\n\n/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/BatchConceptCard.tsx:23:9\n 21 | if (stored !== null) {\n 22 | // eslint-disable-next-line react-hooks/set-state-in-effect -- localStorage hydration, runs once\n> 23 | setCollapsed(stored === \"true\");\n | ^^^^^^^^^^^^ Avoid calling setState() directly within an effect\n 24 | }\n 25 | } catch {\n 26 | // localStorage unavailable (SSR/private mode) — keep default",["49995"],"Error: Calling setState synchronously within an effect can trigger cascading renders\n\nEffects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following:\n* Update external systems with the latest state from React.\n* Subscribe for updates from some external system, calling setState in a callback function when external state changes.\n\nCalling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect).\n\n/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/batch/components/FilesConceptCard.tsx:32:9\n 30 | if (stored !== null) {\n 31 | // eslint-disable-next-line react-hooks/set-state-in-effect -- localStorage hydration, runs once\n> 32 | setCollapsed(stored === \"true\");\n | ^^^^^^^^^^^^ Avoid calling setState() directly within an effect\n 33 | }\n 34 | } catch {\n 35 | // localStorage unavailable — keep default",["49996"],"React Hook useEffect has missing dependencies: 'onResult' and 't'. Either include them or remove the dependency array. If 'onResult' changes too often, find the parent component that defines it and wrap that definition in useCallback.",["49997"],["49998"],"Türkçe-güvenli arama için matchesSearch() kullan (@/shared/utils/turkishText). Ham toLowerCase().includes() İ/ı karakterlerini bozar.","CallExpression",["49999"],["50000"],["50001"],["50002"],["50003"],"@next/next/no-img-element","Using `` could result in slower LCP and higher bandwidth. Consider using `` from `next/image` or a custom image loader to automatically optimize images. This may incur additional usage or cost from your provider. See: https://nextjs.org/docs/messages/no-img-element","JSXOpeningElement",["50004"],"React Hook useEffect has a missing dependency: 'LOCAL_PROVIDERS'. Either include it or remove the dependency array.",["50005"],["50006"],"React Hook useEffect has a missing dependency: 'loadSavedMappings'. Either include it or remove the dependency array.",["50007"],["50008"],"Error: Calling setState synchronously within an effect can trigger cascading renders\n\nEffects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following:\n* Update external systems with the latest state from React.\n* Subscribe for updates from some external system, calling setState in a callback function when external state changes.\n\nCalling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect).\n\n/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/cli-code/components/ToolDetailClient.tsx:97:7\n 95 | /* eslint-disable react-hooks/set-state-in-effect */\n 96 | Promise.all([\n> 97 | fetchConnections(),\n | ^^^^^^^^^^^^^^^^ Avoid calling setState() directly within an effect\n 98 | fetchApiKeys(),\n 99 | fetchCloudSettings(),\n 100 | fetchDynamicModels(),",["50009"],["50010"],"React Hook useEffect has missing dependencies: 'plans' and 'selectedConn'. Either include them or remove the dependency array.",["50011"],["50012"],"React Hook useEffect has missing dependencies: 'editPoolExclusive' and 'plans'. Either include them or remove the dependency array. If 'setExclusive' needs the current value of 'editPoolExclusive', you can also switch to useReducer instead of useState and read 'editPoolExclusive' in the reducer.",["50013"],["50014"],"React Hook useEffect has a missing dependency: 'groupId'. Either include it or remove the dependency array.",["50015"],["50016"],"React Hook useEffect has a missing dependency: 'pools'. Either include it or remove the dependency array.",["50017"],["50018"],"React Hook useEffect has a complex expression in the dependency array. Extract it to a separate variable so it can be statically checked.",["50019"],"React Hook useEffect has missing dependencies: 'configState' and 'setConfigState'. Either include them or remove the dependency array. If 'setConfigState' changes too often, find the parent component that defines it and wrap that definition in useCallback.",["50020"],["50021"],"React Hook useEffect has missing dependencies: 'configState', 'reasoningSpec', and 'setConfigState'. Either include them or remove the dependency array. If 'setConfigState' changes too often, find the parent component that defines it and wrap that definition in useCallback.",["50022"],["50023"],["50024"],"The 'clearResults' function makes the dependencies of useCallback Hook (at line 476) change on every render. To fix this, wrap the definition of 'clearResults' in its own useCallback() Hook.",["50025"],["50026"],["50027"],"React Hook useEffect has a missing dependency: 'getUpstreamHeadersRecord'. Either include it or remove the dependency array. If 'getUpstreamHeadersRecord' changes too often, find the parent component that defines it and wrap that definition in useCallback.",["50028"],["50029"],"React Hook useEffect has a missing dependency: 'setProviderDisplayMode'. Either include it or remove the dependency array. If 'setProviderDisplayMode' changes too often, find the parent component that defines it and wrap that definition in useCallback.",["50030"],["50031"],"React Hook useEffect has missing dependencies: 'setActiveCategory', 'setActiveServiceKind', 'setModelSearchQuery', 'setSearchQuery', and 'setShowFreeOnly'. Either include them or remove the dependency array. If 'setSearchQuery' changes too often, find the parent component that defines it and wrap that definition in useCallback.",["50032"],["50033"],["50034"],"React Hook useCallback has a missing dependency: 'L'. Either include it or remove the dependency array.",["50035"],["50036"],"React Hook useEffect has a missing dependency: 'customThemeColor'. Either include it or remove the dependency array.",["50037"],["50038"],"React Hook useEffect has missing dependencies: 'notify' and 't'. Either include them or remove the dependency array.",["50039"],["50040"],"@next/next/no-html-link-for-pages","Do not use an `` element to navigate to `/api/settings/mitm/`. Use `` from `next/link` instead. See: https://nextjs.org/docs/messages/no-html-link-for-pages","React Hook useCallback has a missing dependency: 'load'. Either include it or remove the dependency array.",["50041"],"React Hook useEffect has a missing dependency: 't'. Either include it or remove the dependency array.",["50042"],"Error: Calling setState synchronously within an effect can trigger cascading renders\n\nEffects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following:\n* Update external systems with the latest state from React.\n* Subscribe for updates from some external system, calling setState in a callback function when external state changes.\n\nCalling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect).\n\n/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/FreePoolTab.tsx:52:16\n 50 | const saved = loadDisabledSources();\n 51 | // eslint-disable-next-line react-hooks/set-state-in-effect -- localStorage hydration, runs once\n> 52 | if (saved) setDisabledSources(saved);\n | ^^^^^^^^^^^^^^^^^^ Avoid calling setState() directly within an effect\n 53 | }, []);\n 54 | // Wrapper setters that also reset page to 1\n 55 | const setFilterProtocol = (v: string) => {",["50043"],"Error: Calling setState synchronously within an effect can trigger cascading renders\n\nEffects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following:\n* Update external systems with the latest state from React.\n* Subscribe for updates from some external system, calling setState in a callback function when external state changes.\n\nCalling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect).\n\n/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/src/app/(dashboard)/dashboard/settings/components/proxy/FreePoolTab.tsx:101:5\n 99 | useEffect(() => {\n 100 | // eslint-disable-next-line react-hooks/set-state-in-effect -- async data fetch on filter change\n> 101 | loadData();\n | ^^^^^^^^ Avoid calling setState() directly within an effect\n 102 | }, [loadData]);\n 103 |\n 104 | const handleSync = async () => {",["50044"],"React Hook useEffect has missing dependencies: 'forceOpen' and 'onOpenChange'. Either include them or remove the dependency array. If 'onOpenChange' changes too often, find the parent component that defines it and wrap that definition in useCallback.",["50045"],["50046"],"React Hook useEffect has missing dependencies: 'defaultOpen', 'forceOpen', and 'onOpenChange'. Either include them or remove the dependency array. If 'onOpenChange' changes too often, find the parent component that defines it and wrap that definition in useCallback.",["50047"],["50048"],"React Hook useEffect has a missing dependency: 'onFirstOpen'. Either include it or remove the dependency array. If 'onFirstOpen' changes too often, find the parent component that defines it and wrap that definition in useCallback.",["50049"],["50050"],["50051"],["50052"],"React Hook useMemo has missing dependencies: 'errorSet' and 'lastSet'. Either include them or remove the dependency array.",["50053"],["50054"],["50055"],"'@omniroute/open-sse/executors/base' import is restricted from being used by a pattern. Executor implementations must stay behind an open-sse handler or service boundary.","'@omniroute/open-sse/executors/codex.ts' import is restricted from being used by a pattern. Executor implementations must stay behind an open-sse handler or service boundary.","'@omniroute/open-sse/executors/zai-web.ts' import is restricted from being used by a pattern. Executor implementations must stay behind an open-sse handler or service boundary.","'../../../../lib/localDb' import is restricted from being used by a pattern. The localDb compatibility barrel is restricted — import the owning domain module from `@/lib/db/` instead.","'@omniroute/open-sse/executors/cliproxyapi.ts' import is restricted from being used by a pattern. Executor implementations must stay behind an open-sse handler or service boundary.","'@omniroute/open-sse/executors/codex/tools.ts' import is restricted from being used by a pattern. Executor implementations must stay behind an open-sse handler or service boundary.","'@omniroute/open-sse/executors/index.ts' import is restricted from being used by a pattern. Executor implementations must stay behind an open-sse handler or service boundary.",["50056"],"React Hook useCallback has a missing dependency: 'channels'. Either include it or remove the dependency array.",["50057"],"React Hook useCallback has a complex expression in the dependency array. Extract it to a separate variable so it can be statically checked.","'./localDb.ts' import is restricted from being used by a pattern. The localDb compatibility barrel is restricted — import the owning domain module from `@/lib/db/` instead.","'../localDb' import is restricted from being used by a pattern. The localDb compatibility barrel is restricted — import the owning domain module from `@/lib/db/` instead.","ExportNamedDeclaration",["50058"],"React Hook useEffect has a missing dependency: 'router'. Either include it or remove the dependency array.",["50059"],["50060"],"React Hook useEffect has a missing dependency: 'fetchProviderModels'. Either include it or remove the dependency array.",["50061"],["50062"],["50063"],["50064"],"React Hook useEffect has missing dependencies: 'resetFields' and 't'. Either include them or remove the dependency array.",["50065"],"React Hook useCallback has a missing dependency: 'columnSortMap'. Either include it or remove the dependency array.",["50066"],["50067"],"The 'openDetail' function makes the dependencies of useImperativeHandle Hook (at line 633) change on every render. To fix this, wrap the definition of 'openDetail' in its own useCallback() Hook.",["50068"],"React Hook useEffect has a missing dependency: 'openDetail'. Either include it or remove the dependency array.",["50069"],"React Hook useCallback has missing dependencies: 'closeDetail' and 'openDetail'. Either include them or remove the dependency array.",["50070"],["50071"],"React Hook useEffect has a missing dependency: 'visibleSections'. Either include it or remove the dependency array.",["50072"],["50073"],["50074","50075"],["50076","50077"],["50078","50079"],["50080","50081"],["50082","50083"],["50084","50085"],["50086","50087"],["50088","50089"],["50090","50091"],["50092","50093"],["50094","50095"],["50096","50097"],["50098","50099"],["50100","50101"],["50102","50103"],["50104","50105"],["50106","50107"],["50108","50109"],["50110","50111"],["50112","50113"],["50114","50115"],["50116","50117"],["50118","50119"],["50120","50121"],["50122","50123"],["50124","50125"],["50126","50127"],["50128","50129"],["50130","50131"],["50132","50133"],["50134","50135"],["50136","50137"],["50138","50139"],["50140","50141"],["50142","50143"],["50144","50145"],["50146","50147"],["50148","50149"],["50150","50151"],["50152","50153"],["50154","50155"],["50156","50157"],["50158","50159"],["50160","50161"],["50162","50163"],["50164","50165"],["50166","50167"],["50168","50169"],["50170","50171"],["50172","50173"],["50174","50175"],["50176","50177"],["50178","50179"],["50180","50181"],["50182","50183"],["50184","50185"],["50186","50187"],["50188","50189"],["50190","50191"],["50192","50193"],["50194","50195"],["50196","50197"],["50198","50199"],["50200","50201"],["50202","50203"],["50204","50205"],["50206","50207"],["50208","50209"],["50210","50211"],["50212","50213"],["50214","50215"],["50216","50217"],["50218","50219"],["50220","50221"],["50222","50223"],["50224","50225"],["50226","50227"],["50228","50229"],["50230","50231"],["50232","50233"],["50234","50235"],["50236","50237"],["50238","50239"],["50240","50241"],["50242","50243"],["50244","50245"],["50246","50247"],["50248","50249"],["50250","50251"],["50252","50253"],["50254","50255"],["50256","50257"],["50258","50259"],["50260","50261"],["50262","50263"],["50264","50265"],["50266","50267"],["50268","50269"],["50270","50271"],["50272","50273"],["50274","50275"],["50276","50277"],["50278","50279"],["50280","50281"],["50282","50283"],["50284","50285"],["50286","50287"],["50288","50289"],["50290","50291"],["50292","50293"],["50294","50295"],["50296","50297"],["50298","50299"],["50300","50301"],["50302","50303"],["50304","50305"],["50306","50307"],["50308","50309"],["50310","50311"],["50312","50313"],["50314","50315"],["50316","50317"],["50318","50319"],["50320","50321"],["50322","50323"],["50324","50325"],["50326","50327"],["50328","50329"],["50330","50331"],["50332","50333"],["50334","50335"],["50336","50337"],["50338","50339"],["50340","50341"],["50342","50343"],["50344","50345"],["50346","50347"],["50348","50349"],["50350","50351"],["50352","50353"],["50354","50355"],["50356","50357"],["50358","50359"],["50360","50361"],["50362","50363"],["50364","50365"],["50366","50367"],["50368","50369"],["50370","50371"],["50372","50373"],["50374","50375"],["50376","50377"],["50378","50379"],["50380","50381"],["50382","50383"],["50384","50385"],["50386","50387"],["50388","50389"],["50390","50391"],["50392","50393"],["50394","50395"],["50396","50397"],["50398","50399"],["50400","50401"],["50402","50403"],["50404","50405"],["50406","50407"],["50408","50409"],["50410","50411"],["50412","50413"],["50414","50415"],["50416","50417"],["50418","50419"],["50420","50421"],["50422","50423"],["50424","50425"],["50426","50427"],["50428","50429"],["50430","50431"],["50432","50433"],["50434","50435"],["50436","50437"],["50438","50439"],["50440","50441"],["50442","50443"],["50444","50445"],["50446","50447"],["50448","50449"],["50450","50451"],["50452","50453"],["50454","50455"],["50456","50457"],["50458","50459"],["50460","50461"],["50462","50463"],["50464","50465"],["50466","50467"],["50468","50469"],["50470","50471"],["50472","50473"],["50474","50475"],["50476","50477"],["50478","50479"],["50480","50481"],["50482","50483"],["50484","50485"],["50486","50487"],["50488","50489"],["50490","50491"],["50492","50493"],["50494","50495"],["50496","50497"],["50498","50499"],["50500","50501"],["50502","50503"],["50504","50505"],["50506","50507"],["50508","50509"],["50510","50511"],["50512","50513"],["50514","50515"],["50516","50517"],["50518","50519"],["50520","50521"],["50522","50523"],["50524","50525"],["50526","50527"],["50528","50529"],["50530","50531"],["50532","50533"],["50534","50535"],["50536","50537"],["50538","50539"],["50540","50541"],["50542","50543"],["50544","50545"],["50546","50547"],["50548","50549"],["50550","50551"],["50552","50553"],["50554","50555"],["50556","50557"],["50558","50559"],["50560","50561"],["50562","50563"],["50564","50565"],["50566","50567"],["50568","50569"],["50570","50571"],["50572","50573"],["50574","50575"],["50576","50577"],["50578","50579"],["50580","50581"],["50582","50583"],["50584","50585"],["50586","50587"],["50588","50589"],["50590","50591"],["50592","50593"],["50594","50595"],["50596","50597"],["50598","50599"],["50600","50601"],["50602","50603"],["50604","50605"],["50606","50607"],["50608","50609"],["50610","50611"],["50612","50613"],["50614","50615"],["50616","50617"],["50618","50619"],["50620","50621"],["50622","50623"],["50624","50625"],["50626","50627"],["50628","50629"],["50630","50631"],["50632","50633"],["50634","50635"],["50636","50637"],["50638","50639"],["50640","50641"],["50642","50643"],["50644","50645"],["50646","50647"],["50648","50649"],["50650","50651"],["50652","50653"],["50654","50655"],["50656","50657"],["50658","50659"],["50660","50661"],["50662","50663"],["50664","50665"],["50666","50667"],["50668","50669"],["50670","50671"],["50672","50673"],["50674","50675"],["50676","50677"],["50678","50679"],["50680","50681"],["50682","50683"],["50684","50685"],["50686","50687"],["50688","50689"],["50690","50691"],["50692","50693"],["50694","50695"],["50696","50697"],["50698","50699"],["50700","50701"],["50702","50703"],["50704","50705"],["50706","50707"],["50708","50709"],["50710","50711"],["50712","50713"],["50714","50715"],["50716","50717"],["50718","50719"],["50720","50721"],["50722","50723"],["50724","50725"],["50726","50727"],["50728","50729"],["50730","50731"],["50732","50733"],["50734","50735"],["50736","50737"],["50738","50739"],["50740"],["50741","50742"],["50743","50744"],["50745","50746"],["50747","50748"],["50749","50750"],["50751","50752"],["50753","50754"],["50755","50756"],["50757","50758"],["50759","50760"],["50761","50762"],["50763","50764"],["50765","50766"],["50767","50768"],["50769","50770"],["50771","50772"],["50773","50774"],["50775","50776"],["50777","50778"],["50779","50780"],["50781","50782"],["50783","50784"],["50785","50786"],["50787","50788"],["50789","50790"],["50791","50792"],["50793","50794"],["50795","50796"],["50797","50798"],["50799","50800"],["50801","50802"],["50803","50804"],["50805","50806"],["50807"],["50808","50809"],["50810","50811"],["50812","50813"],["50814","50815"],["50816","50817"],["50818","50819"],["50820","50821"],["50822","50823"],["50824","50825"],["50826","50827"],["50828","50829"],["50830","50831"],["50832","50833"],["50834","50835"],["50836","50837"],["50838","50839"],["50840","50841"],["50842","50843"],["50844","50845"],["50846","50847"],["50848","50849"],["50850","50851"],["50852","50853"],["50854","50855"],["50856","50857"],["50858","50859"],["50860","50861"],["50862","50863"],["50864","50865"],["50866","50867"],["50868","50869"],["50870","50871"],["50872","50873"],["50874","50875"],["50876","50877"],["50878","50879"],["50880","50881"],["50882","50883"],["50884","50885"],["50886","50887"],["50888","50889"],["50890","50891"],["50892","50893"],["50894","50895"],["50896","50897"],["50898","50899"],["50900","50901"],["50902","50903"],["50904","50905"],["50906","50907"],["50908","50909"],["50910","50911"],["50912","50913"],["50914","50915"],["50916","50917"],["50918","50919"],["50920","50921"],["50922","50923"],["50924","50925"],["50926","50927"],["50928","50929"],["50930","50931"],["50932","50933"],["50934","50935"],["50936","50937"],["50938","50939"],["50940","50941"],["50942","50943"],["50944","50945"],["50946","50947"],["50948","50949"],["50950","50951"],["50952","50953"],["50954","50955"],["50956","50957"],["50958","50959"],["50960","50961"],["50962","50963"],["50964","50965"],["50966","50967"],["50968","50969"],["50970","50971"],["50972","50973"],["50974","50975"],["50976","50977"],["50978","50979"],["50980","50981"],["50982","50983"],["50984","50985"],["50986","50987"],["50988","50989"],["50990","50991"],["50992","50993"],["50994","50995"],["50996","50997"],["50998","50999"],["51000","51001"],["51002","51003"],["51004","51005"],["51006","51007"],["51008","51009"],["51010","51011"],["51012","51013"],["51014","51015"],["51016","51017"],["51018","51019"],["51020","51021"],["51022","51023"],["51024","51025"],["51026","51027"],["51028","51029"],["51030","51031"],["51032","51033"],["51034","51035"],["51036","51037"],["51038","51039"],["51040","51041"],["51042","51043"],["51044","51045"],["51046","51047"],["51048","51049"],["51050","51051"],["51052","51053"],["51054","51055"],["51056","51057"],["51058","51059"],["51060","51061"],["51062","51063"],["51064","51065"],["51066","51067"],["51068","51069"],["51070","51071"],["51072","51073"],["51074","51075"],["51076","51077"],["51078","51079"],["51080","51081"],["51082","51083"],["51084","51085"],["51086","51087"],["51088","51089"],["51090","51091"],["51092","51093"],["51094","51095"],["51096","51097"],["51098","51099"],["51100","51101"],["51102","51103"],["51104","51105"],["51106","51107"],["51108","51109"],["51110","51111"],["51112","51113"],["51114","51115"],["51116","51117"],["51118","51119"],["51120","51121"],["51122","51123"],["51124","51125"],["51126","51127"],["51128","51129"],["51130","51131"],["51132","51133"],["51134","51135"],["51136","51137"],["51138","51139"],["51140","51141"],["51142","51143"],["51144","51145"],["51146","51147"],["51148","51149"],["51150","51151"],["51152","51153"],["51154","51155"],["51156","51157"],["51158","51159"],["51160","51161"],["51162","51163"],["51164","51165"],["51166","51167"],["51168","51169"],["51170","51171"],["51172","51173"],["51174","51175"],["51176","51177"],["51178","51179"],["51180","51181"],["51182","51183"],["51184","51185"],["51186","51187"],["51188","51189"],["51190","51191"],["51192","51193"],["51194","51195"],["51196","51197"],["51198","51199"],["51200","51201"],["51202","51203"],["51204","51205"],["51206","51207"],["51208","51209"],["51210","51211"],["51212","51213"],["51214","51215"],["51216","51217"],["51218","51219"],["51220","51221"],["51222","51223"],["51224","51225"],["51226","51227"],["51228","51229"],["51230","51231"],["51232","51233"],["51234","51235"],["51236","51237"],["51238","51239"],["51240","51241"],["51242","51243"],["51244","51245"],["51246","51247"],["51248","51249"],["51250","51251"],["51252","51253"],["51254","51255"],["51256","51257"],["51258","51259"],["51260","51261"],["51262","51263"],["51264","51265"],["51266","51267"],["51268","51269"],["51270","51271"],["51272","51273"],["51274","51275"],["51276","51277"],["51278","51279"],["51280","51281"],["51282","51283"],["51284","51285"],["51286","51287"],["51288","51289"],["51290","51291"],["51292","51293"],["51294","51295"],["51296","51297"],["51298","51299"],["51300","51301"],["51302","51303"],["51304","51305"],["51306","51307"],["51308","51309"],["51310","51311"],["51312","51313"],["51314","51315"],["51316","51317"],["51318","51319"],["51320","51321"],["51322","51323"],["51324","51325"],["51326","51327"],["51328","51329"],["51330","51331"],["51332","51333"],["51334","51335"],["51336","51337"],["51338","51339"],["51340","51341"],["51342","51343"],["51344","51345"],["51346","51347"],["51348","51349"],["51350","51351"],["51352","51353"],["51354","51355"],["51356","51357"],["51358","51359"],["51360","51361"],["51362","51363"],["51364","51365"],["51366","51367"],["51368","51369"],["51370","51371"],["51372","51373"],["51374","51375"],["51376","51377"],["51378","51379"],["51380","51381"],["51382","51383"],["51384","51385"],["51386","51387"],["51388","51389"],["51390","51391"],["51392","51393"],["51394","51395"],["51396","51397"],["51398","51399"],["51400","51401"],["51402","51403"],["51404","51405"],["51406","51407"],["51408","51409"],["51410","51411"],["51412","51413"],["51414","51415"],["51416","51417"],["51418","51419"],["51420","51421"],["51422","51423"],["51424","51425"],["51426","51427"],["51428","51429"],["51430","51431"],["51432","51433"],["51434","51435"],["51436","51437"],["51438","51439"],["51440","51441"],["51442","51443"],["51444","51445"],["51446","51447"],["51448","51449"],["51450","51451"],["51452","51453"],["51454","51455"],["51456","51457"],["51458","51459"],["51460","51461"],["51462","51463"],["51464","51465"],["51466","51467"],["51468","51469"],["51470","51471"],["51472","51473"],["51474","51475"],["51476","51477"],["51478","51479"],["51480","51481"],["51482","51483"],["51484","51485"],["51486","51487"],["51488","51489"],["51490","51491"],["51492","51493"],["51494","51495"],["51496","51497"],["51498","51499"],["51500","51501"],["51502","51503"],["51504","51505"],["51506","51507"],["51508","51509"],["51510","51511"],["51512","51513"],["51514","51515"],["51516","51517"],["51518","51519"],["51520","51521"],["51522","51523"],["51524","51525"],["51526","51527"],["51528","51529"],["51530","51531"],["51532","51533"],["51534","51535"],["51536","51537"],["51538","51539"],["51540","51541"],["51542","51543"],["51544","51545"],["51546","51547"],["51548","51549"],["51550","51551"],["51552","51553"],["51554","51555"],["51556","51557"],["51558","51559"],["51560","51561"],["51562","51563"],["51564","51565"],["51566","51567"],["51568","51569"],["51570","51571"],["51572","51573"],["51574","51575"],["51576","51577"],["51578","51579"],["51580","51581"],["51582","51583"],["51584","51585"],["51586","51587"],["51588","51589"],["51590","51591"],["51592","51593"],["51594","51595"],["51596","51597"],["51598","51599"],["51600","51601"],["51602","51603"],["51604","51605"],["51606","51607"],["51608","51609"],["51610","51611"],["51612","51613"],["51614","51615"],["51616","51617"],["51618","51619"],["51620","51621"],["51622","51623"],["51624","51625"],["51626","51627"],["51628","51629"],["51630","51631"],["51632","51633"],["51634","51635"],["51636","51637"],["51638","51639"],["51640","51641"],["51642","51643"],["51644","51645"],["51646","51647"],["51648","51649"],["51650","51651"],["51652","51653"],["51654","51655"],["51656","51657"],["51658","51659"],["51660","51661"],["51662","51663"],["51664","51665"],["51666","51667"],["51668","51669"],["51670","51671"],["51672","51673"],["51674","51675"],["51676","51677"],["51678","51679"],["51680","51681"],["51682","51683"],["51684","51685"],["51686","51687"],["51688","51689"],["51690","51691"],["51692","51693"],["51694","51695"],["51696","51697"],["51698","51699"],["51700","51701"],["51702","51703"],["51704","51705"],["51706","51707"],["51708","51709"],["51710","51711"],["51712","51713"],["51714","51715"],["51716","51717"],["51718","51719"],["51720","51721"],["51722","51723"],["51724","51725"],["51726","51727"],["51728","51729"],["51730","51731"],["51732","51733"],["51734","51735"],["51736","51737"],["51738","51739"],["51740","51741"],["51742","51743"],["51744","51745"],["51746","51747"],["51748","51749"],["51750","51751"],["51752","51753"],["51754","51755"],["51756","51757"],["51758","51759"],["51760","51761"],["51762","51763"],["51764","51765"],["51766","51767"],["51768","51769"],["51770","51771"],["51772","51773"],["51774","51775"],["51776","51777"],["51778","51779"],["51780","51781"],["51782","51783"],["51784","51785"],["51786","51787"],["51788","51789"],["51790","51791"],["51792","51793"],["51794","51795"],["51796","51797"],["51798","51799"],["51800","51801"],["51802","51803"],["51804","51805"],["51806","51807"],["51808","51809"],["51810","51811"],["51812","51813"],["51814","51815"],["51816","51817"],["51818","51819"],["51820","51821"],["51822","51823"],["51824","51825"],["51826","51827"],["51828","51829"],["51830","51831"],["51832","51833"],["51834","51835"],["51836","51837"],["51838","51839"],["51840","51841"],["51842","51843"],["51844","51845"],["51846","51847"],["51848","51849"],["51850","51851"],["51852","51853"],["51854","51855"],["51856","51857"],["51858","51859"],["51860","51861"],["51862","51863"],["51864","51865"],["51866","51867"],["51868","51869"],["51870","51871"],["51872","51873"],["51874","51875"],["51876","51877"],["51878","51879"],["51880","51881"],["51882","51883"],["51884","51885"],["51886","51887"],["51888","51889"],["51890","51891"],["51892","51893"],["51894","51895"],["51896","51897"],["51898","51899"],["51900","51901"],["51902","51903"],["51904","51905"],["51906","51907"],["51908","51909"],["51910","51911"],["51912","51913"],["51914","51915"],["51916","51917"],["51918","51919"],["51920","51921"],["51922","51923"],["51924","51925"],["51926","51927"],["51928","51929"],["51930","51931"],["51932","51933"],["51934","51935"],["51936","51937"],["51938","51939"],["51940","51941"],["51942","51943"],["51944","51945"],["51946","51947"],["51948","51949"],["51950","51951"],["51952","51953"],["51954","51955"],["51956","51957"],["51958","51959"],["51960","51961"],["51962","51963"],["51964","51965"],["51966","51967"],["51968","51969"],["51970","51971"],["51972","51973"],["51974","51975"],["51976","51977"],["51978","51979"],["51980","51981"],["51982","51983"],["51984","51985"],["51986","51987"],["51988","51989"],["51990","51991"],["51992","51993"],["51994","51995"],["51996","51997"],["51998","51999"],["52000","52001"],["52002","52003"],["52004","52005"],["52006","52007"],["52008","52009"],["52010","52011"],["52012","52013"],["52014","52015"],["52016","52017"],["52018","52019"],["52020","52021"],["52022","52023"],["52024","52025"],["52026","52027"],["52028","52029"],["52030","52031"],["52032","52033"],["52034","52035"],["52036","52037"],["52038","52039"],["52040","52041"],["52042"],["52043","52044"],["52045"],["52046","52047"],["52048","52049"],["52050","52051"],["52052","52053"],["52054","52055"],["52056","52057"],["52058","52059"],["52060","52061"],["52062","52063"],["52064","52065"],["52066","52067"],["52068","52069"],["52070","52071"],["52072","52073"],["52074","52075"],["52076","52077"],["52078","52079"],["52080","52081"],["52082","52083"],["52084","52085"],["52086","52087"],["52088","52089"],["52090","52091"],["52092","52093"],["52094","52095"],["52096","52097"],["52098","52099"],["52100","52101"],["52102","52103"],["52104","52105"],["52106","52107"],["52108","52109"],["52110","52111"],["52112","52113"],["52114","52115"],["52116","52117"],["52118","52119"],["52120","52121"],["52122","52123"],["52124","52125"],["52126","52127"],["52128","52129"],["52130","52131"],["52132","52133"],["52134","52135"],["52136","52137"],["52138","52139"],["52140","52141"],["52142","52143"],["52144","52145"],["52146","52147"],["52148","52149"],["52150","52151"],["52152","52153"],["52154","52155"],["52156","52157"],["52158","52159"],["52160","52161"],["52162","52163"],["52164","52165"],["52166","52167"],["52168","52169"],["52170","52171"],["52172","52173"],["52174","52175"],["52176","52177"],["52178","52179"],["52180","52181"],["52182","52183"],["52184","52185"],["52186","52187"],["52188","52189"],["52190","52191"],["52192","52193"],["52194","52195"],["52196","52197"],["52198","52199"],["52200","52201"],["52202","52203"],["52204","52205"],["52206","52207"],["52208","52209"],["52210","52211"],["52212","52213"],["52214","52215"],["52216","52217"],["52218","52219"],["52220","52221"],["52222","52223"],["52224","52225"],["52226","52227"],["52228","52229"],["52230","52231"],["52232","52233"],["52234","52235"],["52236","52237"],["52238","52239"],["52240","52241"],["52242","52243"],["52244","52245"],["52246","52247"],["52248","52249"],["52250","52251"],["52252","52253"],["52254","52255"],["52256","52257"],["52258","52259"],["52260","52261"],["52262","52263"],["52264","52265"],["52266","52267"],["52268","52269"],["52270","52271"],["52272","52273"],["52274","52275"],["52276","52277"],["52278","52279"],["52280","52281"],["52282","52283"],["52284","52285"],["52286","52287"],["52288","52289"],["52290","52291"],["52292","52293"],["52294","52295"],["52296","52297"],["52298","52299"],["52300","52301"],["52302","52303"],["52304","52305"],["52306","52307"],["52308","52309"],["52310","52311"],["52312","52313"],["52314","52315"],["52316","52317"],["52318","52319"],["52320","52321"],["52322","52323"],["52324","52325"],["52326","52327"],["52328","52329"],["52330","52331"],["52332","52333"],["52334","52335"],["52336","52337"],["52338","52339"],["52340","52341"],["52342","52343"],["52344","52345"],["52346","52347"],["52348","52349"],["52350","52351"],["52352","52353"],["52354","52355"],["52356","52357"],["52358","52359"],["52360","52361"],["52362","52363"],["52364","52365"],["52366","52367"],["52368","52369"],["52370","52371"],["52372","52373"],["52374","52375"],["52376","52377"],["52378","52379"],["52380","52381"],["52382","52383"],["52384","52385"],["52386","52387"],["52388","52389"],["52390","52391"],["52392","52393"],["52394","52395"],["52396","52397"],["52398","52399"],["52400","52401"],["52402","52403"],["52404","52405"],["52406","52407"],["52408","52409"],["52410","52411"],["52412","52413"],["52414","52415"],["52416","52417"],["52418","52419"],["52420","52421"],["52422","52423"],["52424","52425"],["52426","52427"],["52428","52429"],["52430","52431"],["52432","52433"],["52434","52435"],["52436","52437"],["52438","52439"],["52440","52441"],["52442","52443"],["52444","52445"],["52446","52447"],["52448","52449"],["52450","52451"],["52452","52453"],["52454","52455"],["52456","52457"],["52458","52459"],["52460","52461"],["52462","52463"],["52464","52465"],["52466","52467"],["52468","52469"],["52470","52471"],["52472","52473"],["52474","52475"],["52476","52477"],["52478","52479"],["52480","52481"],["52482","52483"],["52484","52485"],["52486","52487"],["52488","52489"],["52490","52491"],["52492","52493"],["52494","52495"],["52496","52497"],["52498","52499"],["52500","52501"],["52502","52503"],["52504","52505"],["52506","52507"],["52508","52509"],["52510","52511"],["52512","52513"],["52514","52515"],["52516","52517"],["52518","52519"],["52520","52521"],["52522","52523"],["52524","52525"],["52526","52527"],["52528","52529"],["52530","52531"],["52532","52533"],["52534","52535"],["52536","52537"],["52538","52539"],["52540","52541"],["52542","52543"],["52544","52545"],["52546","52547"],["52548","52549"],["52550","52551"],["52552","52553"],["52554","52555"],["52556","52557"],["52558","52559"],["52560","52561"],["52562","52563"],["52564","52565"],["52566","52567"],["52568","52569"],["52570","52571"],["52572","52573"],["52574","52575"],["52576","52577"],["52578","52579"],["52580","52581"],["52582","52583"],["52584","52585"],["52586","52587"],["52588","52589"],["52590","52591"],["52592","52593"],["52594","52595"],["52596","52597"],["52598","52599"],["52600","52601"],["52602","52603"],["52604","52605"],["52606","52607"],["52608","52609"],["52610","52611"],["52612","52613"],["52614","52615"],["52616","52617"],["52618","52619"],["52620","52621"],["52622","52623"],["52624","52625"],["52626","52627"],["52628","52629"],["52630","52631"],["52632","52633"],["52634","52635"],["52636","52637"],["52638","52639"],["52640","52641"],["52642","52643"],["52644","52645"],["52646","52647"],["52648","52649"],["52650","52651"],["52652","52653"],["52654","52655"],["52656","52657"],["52658","52659"],["52660","52661"],["52662","52663"],["52664","52665"],["52666","52667"],["52668","52669"],["52670","52671"],["52672","52673"],["52674","52675"],["52676","52677"],["52678","52679"],["52680","52681"],["52682","52683"],["52684","52685"],["52686","52687"],["52688","52689"],["52690","52691"],["52692","52693"],["52694","52695"],["52696","52697"],["52698","52699"],["52700","52701"],["52702","52703"],["52704","52705"],["52706","52707"],["52708","52709"],["52710","52711"],["52712","52713"],["52714","52715"],["52716","52717"],["52718","52719"],["52720","52721"],["52722","52723"],["52724","52725"],["52726","52727"],["52728","52729"],["52730","52731"],["52732","52733"],["52734","52735"],["52736","52737"],["52738","52739"],["52740","52741"],["52742","52743"],["52744","52745"],["52746","52747"],["52748","52749"],["52750","52751"],["52752","52753"],["52754","52755"],["52756","52757"],["52758","52759"],["52760","52761"],["52762","52763"],["52764","52765"],["52766","52767"],["52768","52769"],["52770","52771"],["52772","52773"],["52774","52775"],["52776","52777"],["52778","52779"],["52780","52781"],["52782","52783"],["52784","52785"],["52786","52787"],["52788","52789"],["52790","52791"],["52792","52793"],["52794","52795"],["52796","52797"],["52798","52799"],["52800","52801"],["52802","52803"],["52804","52805"],["52806","52807"],["52808","52809"],["52810","52811"],["52812","52813"],["52814","52815"],["52816","52817"],["52818","52819"],["52820","52821"],["52822","52823"],["52824","52825"],["52826","52827"],["52828","52829"],["52830","52831"],["52832","52833"],["52834","52835"],["52836","52837"],["52838","52839"],["52840","52841"],["52842","52843"],["52844","52845"],["52846","52847"],["52848","52849"],["52850","52851"],["52852","52853"],["52854","52855"],["52856","52857"],["52858","52859"],["52860","52861"],["52862","52863"],["52864","52865"],["52866","52867"],["52868","52869"],["52870","52871"],["52872","52873"],["52874","52875"],["52876","52877"],["52878","52879"],["52880","52881"],["52882","52883"],["52884","52885"],["52886","52887"],["52888","52889"],["52890","52891"],["52892","52893"],["52894","52895"],["52896","52897"],["52898","52899"],["52900","52901"],["52902","52903"],["52904","52905"],["52906","52907"],["52908","52909"],["52910"],["52911","52912"],["52913","52914"],["52915","52916"],["52917","52918"],["52919","52920"],["52921","52922"],["52923","52924"],["52925","52926"],["52927","52928"],["52929","52930"],["52931","52932"],["52933","52934"],["52935","52936"],["52937","52938"],["52939","52940"],["52941","52942"],["52943","52944"],["52945","52946"],["52947","52948"],["52949","52950"],["52951","52952"],["52953","52954"],["52955","52956"],["52957","52958"],["52959","52960"],["52961","52962"],["52963","52964"],["52965","52966"],["52967","52968"],["52969","52970"],["52971","52972"],["52973","52974"],["52975","52976"],["52977","52978"],["52979","52980"],["52981","52982"],["52983","52984"],["52985","52986"],["52987","52988"],["52989","52990"],["52991","52992"],["52993","52994"],["52995","52996"],["52997","52998"],["52999","53000"],["53001","53002"],["53003","53004"],["53005","53006"],["53007","53008"],["53009","53010"],["53011","53012"],["53013","53014"],["53015","53016"],["53017","53018"],["53019","53020"],["53021","53022"],["53023","53024"],["53025","53026"],["53027","53028"],["53029","53030"],["53031","53032"],["53033","53034"],["53035","53036"],["53037","53038"],["53039","53040"],["53041","53042"],["53043","53044"],["53045","53046"],["53047","53048"],["53049","53050"],["53051","53052"],["53053","53054"],["53055","53056"],["53057","53058"],["53059","53060"],["53061","53062"],["53063","53064"],["53065","53066"],["53067","53068"],["53069","53070"],["53071","53072"],["53073","53074"],["53075","53076"],["53077","53078"],["53079","53080"],["53081","53082"],["53083","53084"],["53085","53086"],["53087","53088"],["53089","53090"],["53091","53092"],["53093","53094"],["53095","53096"],["53097","53098"],["53099","53100"],["53101","53102"],["53103","53104"],["53105","53106"],["53107","53108"],["53109","53110"],["53111","53112"],["53113","53114"],["53115","53116"],["53117","53118"],["53119","53120"],["53121","53122"],["53123","53124"],["53125","53126"],["53127","53128"],["53129","53130"],["53131","53132"],["53133","53134"],["53135","53136"],["53137","53138"],["53139","53140"],["53141","53142"],["53143","53144"],["53145","53146"],["53147","53148"],["53149","53150"],["53151","53152"],["53153","53154"],["53155","53156"],["53157","53158"],["53159","53160"],["53161","53162"],["53163","53164"],["53165","53166"],["53167","53168"],["53169","53170"],["53171","53172"],["53173","53174"],["53175","53176"],["53177","53178"],["53179","53180"],["53181","53182"],["53183","53184"],["53185","53186"],["53187","53188"],["53189","53190"],["53191","53192"],["53193","53194"],["53195","53196"],["53197","53198"],["53199","53200"],["53201","53202"],["53203","53204"],["53205","53206"],["53207","53208"],["53209","53210"],["53211","53212"],["53213","53214"],["53215","53216"],["53217","53218"],["53219","53220"],["53221","53222"],["53223","53224"],["53225","53226"],["53227","53228"],["53229","53230"],["53231","53232"],["53233","53234"],["53235","53236"],["53237","53238"],["53239","53240"],["53241","53242"],["53243","53244"],["53245","53246"],["53247","53248"],["53249","53250"],["53251","53252"],["53253","53254"],["53255","53256"],["53257","53258"],["53259","53260"],["53261","53262"],["53263","53264"],["53265","53266"],["53267","53268"],["53269","53270"],["53271","53272"],["53273","53274"],["53275","53276"],["53277","53278"],["53279","53280"],["53281","53282"],["53283","53284"],["53285","53286"],["53287","53288"],["53289","53290"],["53291","53292"],["53293","53294"],["53295","53296"],["53297","53298"],["53299","53300"],["53301","53302"],["53303","53304"],["53305","53306"],["53307","53308"],["53309","53310"],["53311","53312"],["53313","53314"],["53315","53316"],["53317","53318"],["53319","53320"],["53321","53322"],["53323","53324"],["53325","53326"],["53327","53328"],["53329","53330"],["53331","53332"],["53333","53334"],["53335","53336"],["53337","53338"],["53339","53340"],["53341","53342"],["53343","53344"],["53345","53346"],["53347","53348"],["53349","53350"],["53351","53352"],["53353","53354"],["53355","53356"],["53357","53358"],["53359","53360"],["53361","53362"],["53363","53364"],["53365","53366"],["53367","53368"],["53369","53370"],["53371","53372"],["53373","53374"],["53375","53376"],["53377","53378"],["53379","53380"],["53381","53382"],["53383","53384"],["53385","53386"],["53387","53388"],["53389","53390"],["53391","53392"],["53393","53394"],["53395","53396"],["53397","53398"],["53399","53400"],["53401","53402"],["53403","53404"],["53405","53406"],["53407","53408"],["53409","53410"],["53411","53412"],["53413","53414"],["53415","53416"],["53417","53418"],["53419","53420"],["53421","53422"],["53423","53424"],["53425","53426"],["53427","53428"],["53429","53430"],["53431","53432"],["53433","53434"],["53435","53436"],["53437","53438"],["53439","53440"],["53441","53442"],["53443","53444"],["53445","53446"],["53447","53448"],["53449","53450"],["53451","53452"],["53453","53454"],["53455","53456"],["53457","53458"],["53459","53460"],["53461","53462"],["53463","53464"],["53465","53466"],["53467","53468"],["53469","53470"],["53471","53472"],["53473","53474"],["53475","53476"],["53477","53478"],["53479","53480"],["53481","53482"],["53483","53484"],["53485","53486"],["53487","53488"],["53489","53490"],["53491","53492"],["53493","53494"],["53495","53496"],["53497","53498"],["53499","53500"],["53501","53502"],["53503","53504"],["53505","53506"],["53507","53508"],["53509","53510"],["53511","53512"],["53513","53514"],["53515","53516"],["53517","53518"],["53519","53520"],["53521","53522"],["53523","53524"],["53525","53526"],["53527","53528"],["53529","53530"],["53531","53532"],["53533","53534"],["53535","53536"],["53537","53538"],["53539"],["53540","53541"],["53542"],["53543","53544"],["53545"],["53546","53547"],["53548"],["53549","53550"],["53551"],["53552","53553"],["53554"],["53555","53556"],["53557"],["53558","53559"],["53560"],["53561","53562"],["53563"],["53564","53565"],["53566"],["53567","53568"],["53569"],["53570","53571"],["53572"],["53573","53574"],["53575","53576"],["53577","53578"],["53579","53580"],["53581","53582"],["53583","53584"],["53585","53586"],["53587","53588"],["53589","53590"],["53591","53592"],["53593","53594"],["53595","53596"],["53597","53598"],["53599","53600"],["53601","53602"],["53603","53604"],["53605","53606"],["53607","53608"],["53609","53610"],["53611","53612"],["53613","53614"],["53615","53616"],["53617","53618"],["53619","53620"],["53621","53622"],["53623","53624"],["53625","53626"],["53627","53628"],["53629","53630"],["53631","53632"],["53633","53634"],["53635","53636"],["53637","53638"],["53639","53640"],["53641","53642"],["53643","53644"],["53645","53646"],["53647","53648"],["53649","53650"],["53651","53652"],["53653","53654"],["53655","53656"],["53657","53658"],["53659","53660"],["53661","53662"],["53663","53664"],["53665","53666"],["53667","53668"],["53669","53670"],["53671","53672"],["53673","53674"],["53675","53676"],["53677","53678"],["53679","53680"],["53681","53682"],["53683","53684"],["53685","53686"],["53687","53688"],["53689","53690"],["53691","53692"],["53693","53694"],["53695","53696"],["53697","53698"],["53699","53700"],["53701","53702"],["53703","53704"],["53705","53706"],["53707","53708"],["53709","53710"],["53711","53712"],["53713","53714"],["53715","53716"],["53717","53718"],["53719","53720"],["53721","53722"],["53723","53724"],["53725","53726"],["53727","53728"],["53729","53730"],["53731","53732"],["53733","53734"],["53735","53736"],["53737","53738"],["53739","53740"],["53741","53742"],["53743","53744"],["53745","53746"],["53747","53748"],["53749","53750"],["53751","53752"],["53753","53754"],["53755","53756"],["53757","53758"],["53759","53760"],["53761","53762"],["53763","53764"],["53765","53766"],["53767","53768"],["53769","53770"],["53771","53772"],["53773","53774"],["53775","53776"],["53777","53778"],["53779","53780"],["53781","53782"],["53783","53784"],["53785","53786"],["53787","53788"],["53789","53790"],["53791","53792"],["53793","53794"],["53795"],["53796","53797"],["53798"],["53799","53800"],["53801"],["53802","53803"],["53804","53805"],["53806","53807"],["53808","53809"],["53810","53811"],["53812","53813"],["53814","53815"],["53816","53817"],["53818","53819"],["53820","53821"],["53822","53823"],["53824","53825"],["53826","53827"],["53828","53829"],["53830","53831"],["53832","53833"],["53834","53835"],["53836","53837"],["53838","53839"],["53840","53841"],["53842"],["53843","53844"],["53845"],["53846","53847"],["53848","53849"],["53850","53851"],["53852","53853"],["53854","53855"],["53856","53857"],["53858","53859"],["53860","53861"],["53862"],["53863","53864"],["53865"],["53866","53867"],["53868","53869"],["53870","53871"],["53872","53873"],["53874","53875"],["53876","53877"],["53878","53879"],["53880","53881"],["53882","53883"],["53884","53885"],["53886","53887"],["53888","53889"],["53890","53891"],["53892","53893"],["53894","53895"],["53896","53897"],["53898","53899"],["53900","53901"],["53902","53903"],["53904","53905"],["53906","53907"],["53908","53909"],["53910","53911"],["53912","53913"],["53914","53915"],["53916","53917"],["53918","53919"],["53920","53921"],["53922","53923"],["53924","53925"],["53926","53927"],["53928","53929"],["53930","53931"],["53932","53933"],["53934","53935"],["53936","53937"],["53938","53939"],["53940","53941"],["53942","53943"],["53944","53945"],["53946","53947"],["53948","53949"],["53950","53951"],["53952","53953"],["53954","53955"],["53956","53957"],["53958","53959"],["53960","53961"],["53962","53963"],["53964","53965"],["53966","53967"],["53968","53969"],["53970","53971"],["53972","53973"],["53974","53975"],["53976","53977"],["53978","53979"],["53980","53981"],["53982","53983"],["53984","53985"],["53986","53987"],["53988","53989"],["53990","53991"],["53992","53993"],["53994","53995"],["53996","53997"],["53998","53999"],["54000","54001"],["54002","54003"],["54004","54005"],["54006","54007"],["54008","54009"],["54010","54011"],["54012","54013"],["54014","54015"],["54016","54017"],["54018","54019"],["54020","54021"],["54022","54023"],["54024","54025"],["54026","54027"],["54028","54029"],["54030","54031"],["54032","54033"],["54034","54035"],["54036","54037"],["54038","54039"],["54040","54041"],["54042","54043"],["54044","54045"],["54046","54047"],["54048","54049"],["54050","54051"],["54052","54053"],["54054","54055"],["54056","54057"],["54058","54059"],["54060","54061"],["54062","54063"],["54064","54065"],["54066","54067"],["54068","54069"],["54070","54071"],["54072","54073"],["54074","54075"],["54076","54077"],["54078","54079"],["54080","54081"],["54082","54083"],["54084","54085"],["54086","54087"],["54088","54089"],["54090","54091"],["54092","54093"],["54094","54095"],["54096","54097"],["54098","54099"],["54100","54101"],["54102","54103"],["54104","54105"],["54106","54107"],["54108","54109"],["54110","54111"],["54112","54113"],["54114","54115"],["54116","54117"],["54118","54119"],["54120","54121"],["54122","54123"],["54124","54125"],["54126","54127"],["54128","54129"],["54130","54131"],["54132","54133"],["54134","54135"],["54136","54137"],["54138","54139"],["54140","54141"],["54142","54143"],["54144","54145"],["54146","54147"],["54148","54149"],["54150","54151"],["54152","54153"],["54154","54155"],["54156","54157"],["54158","54159"],["54160","54161"],["54162","54163"],["54164","54165"],["54166","54167"],["54168","54169"],["54170","54171"],["54172","54173"],["54174","54175"],["54176","54177"],["54178","54179"],["54180","54181"],["54182","54183"],["54184","54185"],["54186","54187"],["54188","54189"],["54190"],["54191","54192"],["54193","54194"],["54195","54196"],["54197","54198"],["54199","54200"],["54201","54202"],["54203","54204"],["54205","54206"],["54207","54208"],["54209","54210"],["54211","54212"],["54213","54214"],["54215","54216"],["54217","54218"],["54219","54220"],["54221","54222"],["54223","54224"],["54225","54226"],["54227","54228"],["54229","54230"],["54231","54232"],["54233","54234"],["54235","54236"],["54237","54238"],["54239","54240"],["54241","54242"],["54243","54244"],["54245","54246"],["54247","54248"],["54249","54250"],["54251","54252"],["54253","54254"],["54255","54256"],["54257","54258"],["54259","54260"],["54261","54262"],["54263","54264"],["54265","54266"],["54267","54268"],["54269","54270"],["54271","54272"],["54273","54274"],["54275","54276"],["54277","54278"],["54279","54280"],["54281","54282"],["54283","54284"],["54285","54286"],["54287","54288"],["54289","54290"],["54291","54292"],["54293","54294"],["54295","54296"],["54297","54298"],["54299","54300"],["54301","54302"],["54303","54304"],["54305","54306"],["54307","54308"],["54309","54310"],["54311","54312"],["54313","54314"],["54315","54316"],["54317","54318"],["54319","54320"],["54321","54322"],["54323","54324"],["54325","54326"],["54327","54328"],["54329","54330"],["54331","54332"],["54333","54334"],["54335","54336"],["54337","54338"],["54339","54340"],["54341","54342"],["54343","54344"],["54345","54346"],["54347","54348"],["54349","54350"],["54351","54352"],["54353","54354"],["54355","54356"],["54357","54358"],["54359","54360"],["54361","54362"],["54363","54364"],["54365","54366"],["54367","54368"],["54369","54370"],["54371","54372"],["54373","54374"],["54375","54376"],["54377","54378"],["54379","54380"],["54381","54382"],["54383","54384"],["54385","54386"],["54387","54388"],["54389","54390"],["54391","54392"],["54393","54394"],["54395","54396"],["54397","54398"],["54399","54400"],["54401","54402"],["54403","54404"],["54405","54406"],["54407","54408"],["54409","54410"],["54411","54412"],["54413","54414"],["54415","54416"],["54417","54418"],["54419","54420"],["54421","54422"],["54423","54424"],["54425","54426"],["54427","54428"],["54429","54430"],["54431","54432"],["54433","54434"],["54435","54436"],["54437","54438"],["54439","54440"],["54441","54442"],["54443","54444"],["54445","54446"],["54447","54448"],["54449","54450"],["54451","54452"],["54453","54454"],["54455","54456"],["54457","54458"],["54459","54460"],["54461","54462"],["54463","54464"],["54465","54466"],["54467","54468"],["54469","54470"],["54471","54472"],["54473","54474"],["54475","54476"],["54477","54478"],["54479","54480"],["54481","54482"],["54483","54484"],["54485","54486"],["54487","54488"],["54489","54490"],["54491","54492"],["54493","54494"],["54495","54496"],["54497","54498"],["54499","54500"],["54501","54502"],["54503","54504"],["54505","54506"],["54507","54508"],["54509","54510"],["54511","54512"],["54513","54514"],["54515","54516"],["54517","54518"],["54519","54520"],["54521","54522"],["54523","54524"],["54525","54526"],["54527","54528"],["54529","54530"],["54531","54532"],["54533","54534"],["54535","54536"],["54537","54538"],["54539","54540"],["54541","54542"],["54543","54544"],["54545","54546"],["54547","54548"],["54549","54550"],["54551","54552"],["54553","54554"],["54555","54556"],["54557","54558"],["54559","54560"],["54561","54562"],["54563","54564"],["54565","54566"],["54567","54568"],["54569","54570"],["54571","54572"],["54573","54574"],["54575","54576"],["54577","54578"],["54579","54580"],["54581","54582"],["54583","54584"],["54585","54586"],["54587","54588"],["54589","54590"],["54591","54592"],["54593","54594"],["54595","54596"],["54597","54598"],["54599","54600"],["54601","54602"],["54603","54604"],["54605","54606"],["54607","54608"],["54609","54610"],["54611","54612"],["54613","54614"],["54615","54616"],["54617","54618"],["54619","54620"],["54621","54622"],["54623","54624"],["54625","54626"],["54627","54628"],["54629","54630"],["54631","54632"],["54633","54634"],["54635","54636"],["54637","54638"],["54639","54640"],["54641","54642"],["54643","54644"],["54645","54646"],["54647","54648"],["54649","54650"],["54651","54652"],["54653","54654"],["54655","54656"],["54657","54658"],["54659","54660"],["54661","54662"],["54663","54664"],["54665","54666"],["54667","54668"],["54669","54670"],["54671","54672"],["54673","54674"],["54675","54676"],["54677","54678"],["54679","54680"],["54681","54682"],["54683","54684"],["54685","54686"],["54687","54688"],["54689","54690"],["54691","54692"],["54693","54694"],["54695","54696"],["54697","54698"],["54699","54700"],["54701","54702"],["54703","54704"],["54705","54706"],["54707","54708"],["54709","54710"],["54711","54712"],["54713","54714"],["54715","54716"],["54717","54718"],["54719","54720"],["54721","54722"],["54723","54724"],["54725","54726"],["54727","54728"],["54729","54730"],["54731","54732"],["54733","54734"],["54735","54736"],["54737","54738"],["54739","54740"],["54741","54742"],["54743","54744"],["54745","54746"],["54747","54748"],["54749","54750"],["54751","54752"],["54753","54754"],["54755","54756"],["54757","54758"],["54759","54760"],["54761","54762"],["54763","54764"],["54765","54766"],["54767","54768"],["54769","54770"],["54771","54772"],["54773","54774"],["54775","54776"],["54777","54778"],["54779","54780"],["54781","54782"],["54783","54784"],["54785"],["54786","54787"],["54788","54789"],["54790","54791"],["54792","54793"],["54794","54795"],["54796","54797"],["54798","54799"],["54800","54801"],["54802","54803"],["54804","54805"],["54806","54807"],["54808","54809"],["54810","54811"],["54812","54813"],["54814","54815"],["54816","54817"],["54818","54819"],["54820","54821"],["54822","54823"],["54824","54825"],["54826","54827"],["54828","54829"],["54830","54831"],["54832","54833"],["54834","54835"],["54836","54837"],["54838","54839"],["54840","54841"],["54842","54843"],["54844","54845"],["54846","54847"],["54848","54849"],["54850","54851"],["54852","54853"],["54854","54855"],["54856","54857"],["54858","54859"],["54860","54861"],["54862","54863"],["54864","54865"],["54866","54867"],["54868","54869"],["54870","54871"],["54872","54873"],["54874","54875"],["54876","54877"],["54878","54879"],["54880","54881"],["54882","54883"],["54884","54885"],["54886","54887"],["54888","54889"],["54890","54891"],["54892","54893"],["54894","54895"],["54896","54897"],["54898","54899"],["54900","54901"],["54902","54903"],["54904","54905"],["54906","54907"],["54908","54909"],["54910","54911"],["54912","54913"],["54914","54915"],["54916","54917"],["54918","54919"],["54920","54921"],["54922","54923"],["54924","54925"],["54926","54927"],["54928","54929"],["54930","54931"],["54932","54933"],["54934","54935"],["54936","54937"],["54938","54939"],["54940","54941"],["54942","54943"],["54944","54945"],["54946","54947"],["54948","54949"],["54950","54951"],["54952","54953"],["54954","54955"],["54956","54957"],["54958","54959"],["54960","54961"],["54962","54963"],["54964","54965"],["54966","54967"],["54968","54969"],["54970","54971"],["54972","54973"],["54974","54975"],["54976","54977"],["54978","54979"],["54980","54981"],["54982","54983"],["54984","54985"],["54986","54987"],["54988","54989"],["54990","54991"],["54992","54993"],["54994","54995"],["54996","54997"],["54998","54999"],["55000","55001"],["55002","55003"],["55004","55005"],["55006","55007"],["55008","55009"],["55010","55011"],["55012","55013"],["55014","55015"],["55016","55017"],["55018","55019"],["55020","55021"],["55022","55023"],["55024","55025"],["55026","55027"],["55028","55029"],["55030","55031"],["55032","55033"],["55034","55035"],["55036","55037"],["55038","55039"],["55040","55041"],["55042","55043"],["55044","55045"],["55046","55047"],["55048","55049"],["55050","55051"],["55052","55053"],["55054","55055"],["55056","55057"],["55058","55059"],["55060","55061"],["55062","55063"],["55064","55065"],["55066","55067"],["55068","55069"],["55070","55071"],["55072","55073"],["55074","55075"],["55076","55077"],["55078","55079"],["55080","55081"],["55082","55083"],["55084","55085"],["55086","55087"],["55088","55089"],["55090","55091"],["55092","55093"],["55094","55095"],["55096","55097"],["55098","55099"],["55100","55101"],["55102","55103"],["55104","55105"],["55106","55107"],["55108","55109"],["55110","55111"],["55112","55113"],["55114","55115"],["55116","55117"],["55118","55119"],["55120","55121"],["55122","55123"],["55124","55125"],["55126","55127"],["55128","55129"],["55130","55131"],["55132","55133"],["55134","55135"],["55136","55137"],["55138","55139"],["55140","55141"],["55142","55143"],["55144","55145"],["55146","55147"],["55148","55149"],["55150","55151"],["55152","55153"],["55154","55155"],["55156","55157"],["55158","55159"],["55160","55161"],["55162","55163"],["55164","55165"],["55166","55167"],["55168","55169"],["55170","55171"],["55172","55173"],["55174","55175"],["55176","55177"],["55178","55179"],["55180","55181"],["55182","55183"],["55184","55185"],["55186","55187"],["55188","55189"],["55190","55191"],["55192","55193"],["55194","55195"],["55196","55197"],["55198","55199"],["55200","55201"],["55202","55203"],["55204","55205"],["55206","55207"],["55208","55209"],["55210","55211"],["55212","55213"],["55214","55215"],["55216","55217"],["55218","55219"],["55220","55221"],["55222","55223"],["55224","55225"],["55226","55227"],["55228","55229"],["55230","55231"],["55232","55233"],["55234","55235"],["55236","55237"],["55238","55239"],["55240","55241"],["55242","55243"],["55244","55245"],["55246","55247"],["55248","55249"],["55250","55251"],["55252","55253"],["55254","55255"],["55256","55257"],["55258","55259"],["55260","55261"],["55262","55263"],["55264","55265"],["55266","55267"],["55268","55269"],["55270","55271"],["55272","55273"],["55274","55275"],["55276","55277"],["55278","55279"],["55280","55281"],["55282","55283"],["55284","55285"],["55286","55287"],["55288","55289"],["55290","55291"],["55292","55293"],["55294","55295"],["55296","55297"],["55298","55299"],["55300","55301"],["55302","55303"],["55304","55305"],["55306","55307"],["55308","55309"],["55310","55311"],["55312","55313"],["55314","55315"],["55316","55317"],["55318","55319"],["55320","55321"],["55322","55323"],["55324","55325"],["55326","55327"],["55328","55329"],["55330","55331"],["55332","55333"],["55334","55335"],["55336","55337"],["55338","55339"],["55340","55341"],["55342","55343"],["55344","55345"],["55346","55347"],["55348","55349"],["55350","55351"],["55352","55353"],["55354","55355"],["55356","55357"],["55358","55359"],["55360","55361"],["55362","55363"],["55364","55365"],["55366","55367"],["55368","55369"],["55370","55371"],["55372","55373"],["55374","55375"],["55376","55377"],["55378","55379"],["55380","55381"],["55382","55383"],["55384","55385"],["55386","55387"],["55388","55389"],["55390","55391"],["55392","55393"],["55394","55395"],["55396","55397"],["55398","55399"],["55400","55401"],["55402","55403"],["55404","55405"],["55406","55407"],["55408","55409"],["55410","55411"],["55412","55413"],["55414","55415"],["55416","55417"],["55418","55419"],["55420","55421"],["55422","55423"],["55424","55425"],["55426","55427"],["55428","55429"],["55430","55431"],["55432","55433"],["55434","55435"],["55436","55437"],["55438","55439"],["55440","55441"],["55442","55443"],["55444","55445"],["55446","55447"],["55448","55449"],["55450","55451"],["55452","55453"],["55454","55455"],["55456","55457"],["55458","55459"],["55460","55461"],["55462","55463"],["55464","55465"],["55466","55467"],["55468","55469"],["55470","55471"],["55472","55473"],["55474","55475"],["55476","55477"],["55478","55479"],["55480","55481"],["55482","55483"],["55484","55485"],["55486","55487"],["55488","55489"],["55490","55491"],["55492","55493"],["55494","55495"],["55496","55497"],["55498","55499"],["55500","55501"],["55502","55503"],["55504","55505"],["55506","55507"],["55508","55509"],["55510","55511"],["55512","55513"],["55514","55515"],["55516","55517"],["55518","55519"],["55520","55521"],["55522","55523"],["55524","55525"],["55526","55527"],["55528","55529"],["55530","55531"],["55532","55533"],["55534","55535"],["55536","55537"],["55538","55539"],["55540","55541"],["55542","55543"],["55544","55545"],["55546","55547"],["55548","55549"],["55550","55551"],["55552","55553"],["55554","55555"],["55556","55557"],["55558","55559"],["55560","55561"],["55562","55563"],["55564","55565"],["55566","55567"],["55568","55569"],["55570","55571"],["55572","55573"],["55574","55575"],["55576","55577"],["55578","55579"],["55580","55581"],["55582","55583"],["55584","55585"],["55586","55587"],["55588","55589"],["55590","55591"],["55592","55593"],["55594","55595"],["55596","55597"],["55598","55599"],["55600","55601"],["55602","55603"],["55604","55605"],["55606","55607"],["55608","55609"],["55610","55611"],["55612","55613"],["55614","55615"],["55616","55617"],["55618","55619"],["55620","55621"],["55622","55623"],["55624","55625"],["55626","55627"],["55628","55629"],["55630","55631"],["55632","55633"],["55634","55635"],["55636","55637"],["55638","55639"],["55640","55641"],["55642","55643"],["55644","55645"],["55646","55647"],["55648","55649"],["55650","55651"],["55652","55653"],["55654","55655"],["55656","55657"],["55658","55659"],["55660","55661"],["55662","55663"],["55664","55665"],["55666","55667"],["55668","55669"],["55670","55671"],["55672","55673"],["55674","55675"],["55676","55677"],["55678","55679"],["55680","55681"],["55682","55683"],["55684","55685"],["55686","55687"],["55688","55689"],["55690","55691"],["55692","55693"],["55694","55695"],["55696","55697"],["55698","55699"],["55700","55701"],["55702","55703"],["55704","55705"],["55706","55707"],["55708","55709"],["55710","55711"],["55712","55713"],["55714","55715"],["55716","55717"],["55718","55719"],["55720","55721"],["55722","55723"],["55724","55725"],["55726","55727"],["55728","55729"],["55730","55731"],["55732","55733"],["55734","55735"],["55736","55737"],["55738","55739"],["55740","55741"],["55742","55743"],["55744","55745"],["55746","55747"],["55748","55749"],["55750","55751"],["55752","55753"],["55754","55755"],["55756","55757"],["55758","55759"],["55760","55761"],["55762","55763"],["55764","55765"],["55766","55767"],["55768","55769"],["55770","55771"],["55772","55773"],["55774","55775"],["55776","55777"],["55778","55779"],["55780","55781"],["55782","55783"],["55784","55785"],["55786","55787"],["55788","55789"],["55790","55791"],["55792","55793"],["55794","55795"],["55796","55797"],["55798","55799"],["55800","55801"],["55802","55803"],["55804","55805"],["55806","55807"],["55808","55809"],["55810","55811"],["55812","55813"],["55814","55815"],["55816","55817"],["55818","55819"],["55820","55821"],["55822","55823"],["55824","55825"],["55826","55827"],["55828","55829"],["55830","55831"],["55832","55833"],["55834","55835"],["55836","55837"],["55838","55839"],["55840","55841"],["55842","55843"],["55844","55845"],["55846","55847"],["55848","55849"],["55850","55851"],["55852","55853"],["55854","55855"],["55856","55857"],["55858","55859"],["55860","55861"],["55862","55863"],["55864","55865"],["55866","55867"],["55868","55869"],["55870","55871"],["55872","55873"],["55874","55875"],["55876","55877"],["55878","55879"],["55880","55881"],["55882","55883"],["55884","55885"],["55886","55887"],["55888","55889"],["55890","55891"],["55892","55893"],["55894","55895"],["55896","55897"],["55898","55899"],["55900","55901"],["55902","55903"],["55904","55905"],["55906","55907"],["55908"],["55909","55910"],["55911"],["55912","55913"],["55914","55915"],["55916","55917"],["55918","55919"],["55920","55921"],["55922","55923"],["55924","55925"],["55926","55927"],["55928","55929"],["55930","55931"],["55932","55933"],["55934","55935"],["55936","55937"],["55938","55939"],["55940","55941"],["55942","55943"],["55944","55945"],["55946","55947"],["55948","55949"],["55950","55951"],["55952","55953"],["55954","55955"],["55956","55957"],["55958","55959"],["55960","55961"],["55962","55963"],["55964","55965"],["55966","55967"],["55968","55969"],["55970","55971"],["55972","55973"],["55974","55975"],["55976","55977"],["55978","55979"],["55980","55981"],["55982","55983"],["55984","55985"],["55986","55987"],["55988","55989"],["55990","55991"],["55992","55993"],["55994","55995"],["55996","55997"],["55998","55999"],["56000","56001"],["56002","56003"],["56004","56005"],["56006","56007"],["56008","56009"],["56010","56011"],["56012","56013"],["56014","56015"],["56016","56017"],["56018","56019"],["56020","56021"],["56022","56023"],["56024","56025"],["56026","56027"],["56028","56029"],["56030","56031"],["56032","56033"],["56034","56035"],["56036","56037"],["56038","56039"],["56040","56041"],["56042","56043"],["56044","56045"],["56046","56047"],["56048","56049"],["56050","56051"],["56052","56053"],["56054","56055"],["56056","56057"],["56058","56059"],["56060","56061"],["56062","56063"],["56064","56065"],["56066","56067"],["56068","56069"],["56070","56071"],["56072","56073"],["56074","56075"],["56076","56077"],["56078","56079"],["56080","56081"],["56082","56083"],["56084","56085"],["56086","56087"],["56088","56089"],["56090","56091"],["56092","56093"],["56094","56095"],["56096","56097"],["56098","56099"],["56100","56101"],["56102","56103"],["56104","56105"],["56106","56107"],["56108","56109"],["56110","56111"],["56112","56113"],["56114","56115"],["56116","56117"],["56118","56119"],["56120","56121"],["56122","56123"],["56124","56125"],["56126","56127"],["56128","56129"],["56130","56131"],["56132","56133"],["56134","56135"],["56136","56137"],["56138","56139"],["56140","56141"],["56142","56143"],["56144","56145"],["56146","56147"],["56148","56149"],["56150","56151"],["56152","56153"],["56154","56155"],["56156","56157"],["56158","56159"],["56160","56161"],["56162","56163"],["56164","56165"],["56166","56167"],["56168","56169"],["56170","56171"],["56172","56173"],["56174","56175"],["56176","56177"],["56178","56179"],["56180","56181"],["56182","56183"],["56184","56185"],["56186","56187"],["56188","56189"],["56190","56191"],["56192","56193"],["56194","56195"],["56196","56197"],["56198","56199"],["56200","56201"],["56202","56203"],["56204","56205"],["56206","56207"],["56208","56209"],["56210","56211"],["56212","56213"],["56214","56215"],["56216","56217"],["56218","56219"],["56220","56221"],["56222","56223"],["56224","56225"],["56226","56227"],["56228","56229"],["56230","56231"],["56232","56233"],["56234","56235"],["56236","56237"],["56238","56239"],["56240","56241"],["56242","56243"],["56244","56245"],["56246","56247"],["56248","56249"],["56250","56251"],["56252","56253"],["56254","56255"],["56256","56257"],["56258","56259"],["56260","56261"],["56262","56263"],["56264","56265"],["56266","56267"],["56268","56269"],["56270","56271"],["56272","56273"],["56274","56275"],["56276","56277"],["56278","56279"],["56280","56281"],["56282","56283"],["56284","56285"],["56286","56287"],["56288","56289"],["56290","56291"],["56292","56293"],["56294","56295"],["56296","56297"],["56298","56299"],["56300","56301"],["56302","56303"],["56304","56305"],["56306","56307"],["56308","56309"],["56310","56311"],["56312","56313"],["56314","56315"],["56316","56317"],["56318","56319"],["56320","56321"],["56322","56323"],["56324","56325"],["56326","56327"],["56328","56329"],["56330","56331"],["56332","56333"],["56334","56335"],["56336","56337"],["56338","56339"],["56340","56341"],["56342","56343"],["56344","56345"],["56346","56347"],["56348","56349"],["56350","56351"],["56352","56353"],["56354","56355"],["56356","56357"],["56358","56359"],["56360","56361"],["56362","56363"],["56364","56365"],["56366","56367"],["56368","56369"],["56370","56371"],["56372","56373"],["56374","56375"],["56376","56377"],["56378","56379"],["56380","56381"],["56382","56383"],["56384","56385"],["56386","56387"],["56388","56389"],["56390","56391"],["56392","56393"],["56394","56395"],["56396","56397"],["56398","56399"],["56400","56401"],["56402","56403"],["56404","56405"],["56406","56407"],["56408","56409"],["56410","56411"],["56412","56413"],["56414","56415"],["56416","56417"],["56418","56419"],["56420","56421"],["56422","56423"],["56424","56425"],["56426","56427"],["56428","56429"],["56430","56431"],["56432","56433"],["56434","56435"],["56436","56437"],["56438","56439"],["56440","56441"],["56442","56443"],["56444","56445"],["56446","56447"],["56448","56449"],["56450","56451"],["56452","56453"],["56454","56455"],["56456","56457"],["56458","56459"],["56460","56461"],["56462","56463"],["56464","56465"],["56466","56467"],["56468","56469"],["56470","56471"],["56472","56473"],["56474","56475"],["56476","56477"],["56478","56479"],["56480","56481"],["56482","56483"],["56484","56485"],["56486","56487"],["56488","56489"],["56490","56491"],["56492","56493"],["56494","56495"],["56496","56497"],["56498","56499"],["56500","56501"],["56502","56503"],["56504","56505"],["56506","56507"],["56508","56509"],["56510","56511"],["56512","56513"],["56514","56515"],["56516","56517"],["56518","56519"],["56520","56521"],["56522","56523"],["56524","56525"],["56526","56527"],["56528","56529"],["56530","56531"],["56532","56533"],["56534","56535"],["56536","56537"],["56538","56539"],["56540","56541"],["56542","56543"],["56544","56545"],["56546","56547"],["56548","56549"],["56550","56551"],["56552","56553"],["56554","56555"],["56556","56557"],["56558","56559"],["56560","56561"],["56562","56563"],["56564","56565"],["56566","56567"],["56568","56569"],["56570","56571"],["56572","56573"],["56574","56575"],["56576","56577"],["56578","56579"],["56580","56581"],["56582","56583"],["56584","56585"],["56586","56587"],["56588","56589"],["56590","56591"],["56592","56593"],["56594","56595"],["56596","56597"],["56598","56599"],["56600","56601"],["56602","56603"],["56604","56605"],["56606","56607"],["56608","56609"],["56610","56611"],["56612","56613"],["56614","56615"],["56616","56617"],["56618","56619"],["56620","56621"],["56622","56623"],["56624","56625"],["56626","56627"],["56628","56629"],["56630","56631"],["56632","56633"],["56634","56635"],["56636","56637"],["56638","56639"],["56640","56641"],["56642","56643"],["56644","56645"],["56646","56647"],["56648","56649"],["56650","56651"],["56652","56653"],["56654","56655"],["56656","56657"],["56658","56659"],["56660","56661"],["56662","56663"],["56664","56665"],["56666","56667"],["56668","56669"],["56670","56671"],["56672","56673"],["56674","56675"],["56676","56677"],["56678","56679"],["56680","56681"],["56682","56683"],["56684","56685"],["56686","56687"],["56688","56689"],["56690","56691"],["56692","56693"],["56694","56695"],["56696","56697"],["56698","56699"],["56700","56701"],["56702","56703"],["56704","56705"],["56706","56707"],["56708","56709"],["56710","56711"],["56712","56713"],["56714","56715"],["56716","56717"],["56718","56719"],["56720","56721"],["56722","56723"],["56724","56725"],["56726","56727"],["56728","56729"],["56730","56731"],["56732","56733"],["56734","56735"],["56736","56737"],["56738","56739"],["56740","56741"],["56742","56743"],["56744","56745"],["56746","56747"],["56748","56749"],["56750","56751"],["56752","56753"],["56754","56755"],["56756","56757"],["56758","56759"],["56760","56761"],["56762","56763"],["56764","56765"],["56766","56767"],["56768","56769"],["56770","56771"],["56772","56773"],["56774","56775"],["56776","56777"],["56778","56779"],["56780","56781"],["56782","56783"],["56784","56785"],["56786","56787"],["56788","56789"],["56790","56791"],["56792","56793"],["56794","56795"],["56796","56797"],["56798","56799"],["56800","56801"],["56802","56803"],["56804","56805"],["56806","56807"],["56808","56809"],["56810","56811"],["56812","56813"],["56814","56815"],["56816","56817"],["56818","56819"],["56820","56821"],["56822","56823"],["56824","56825"],["56826","56827"],["56828","56829"],["56830","56831"],["56832","56833"],["56834","56835"],["56836","56837"],["56838","56839"],["56840","56841"],["56842","56843"],["56844","56845"],["56846","56847"],["56848","56849"],["56850","56851"],["56852","56853"],["56854","56855"],["56856","56857"],["56858","56859"],["56860","56861"],["56862","56863"],["56864","56865"],["56866","56867"],["56868","56869"],["56870","56871"],["56872","56873"],["56874","56875"],["56876","56877"],["56878","56879"],["56880","56881"],["56882","56883"],["56884","56885"],["56886","56887"],["56888","56889"],["56890","56891"],["56892","56893"],["56894","56895"],["56896","56897"],["56898","56899"],["56900","56901"],["56902","56903"],["56904","56905"],["56906","56907"],["56908","56909"],["56910","56911"],["56912","56913"],["56914","56915"],["56916","56917"],["56918","56919"],["56920","56921"],["56922","56923"],["56924","56925"],["56926","56927"],["56928","56929"],["56930","56931"],["56932","56933"],["56934","56935"],["56936","56937"],["56938","56939"],["56940","56941"],["56942","56943"],["56944","56945"],["56946","56947"],["56948","56949"],["56950","56951"],["56952","56953"],["56954","56955"],["56956","56957"],["56958","56959"],["56960","56961"],["56962","56963"],["56964","56965"],["56966","56967"],["56968","56969"],["56970","56971"],["56972","56973"],["56974","56975"],["56976","56977"],["56978","56979"],["56980","56981"],["56982","56983"],["56984","56985"],["56986","56987"],["56988","56989"],["56990","56991"],["56992","56993"],["56994","56995"],["56996","56997"],["56998","56999"],["57000","57001"],["57002","57003"],["57004","57005"],["57006","57007"],["57008","57009"],["57010","57011"],["57012","57013"],["57014","57015"],["57016","57017"],["57018","57019"],["57020","57021"],["57022","57023"],["57024","57025"],["57026","57027"],["57028","57029"],["57030","57031"],["57032","57033"],["57034","57035"],["57036","57037"],["57038","57039"],["57040","57041"],["57042","57043"],["57044","57045"],["57046","57047"],["57048","57049"],["57050","57051"],["57052","57053"],["57054","57055"],["57056","57057"],["57058","57059"],["57060","57061"],["57062","57063"],["57064","57065"],["57066","57067"],["57068","57069"],["57070","57071"],["57072","57073"],["57074","57075"],["57076","57077"],["57078","57079"],["57080","57081"],["57082","57083"],["57084","57085"],["57086","57087"],["57088","57089"],["57090","57091"],["57092","57093"],["57094","57095"],["57096","57097"],["57098","57099"],["57100","57101"],["57102","57103"],["57104","57105"],["57106","57107"],["57108","57109"],["57110","57111"],["57112","57113"],["57114","57115"],["57116","57117"],["57118","57119"],["57120","57121"],["57122","57123"],["57124","57125"],["57126","57127"],["57128","57129"],["57130","57131"],["57132","57133"],["57134","57135"],["57136","57137"],["57138","57139"],["57140","57141"],["57142","57143"],["57144","57145"],["57146","57147"],["57148","57149"],["57150","57151"],["57152","57153"],["57154","57155"],["57156","57157"],["57158","57159"],["57160","57161"],["57162","57163"],["57164","57165"],["57166","57167"],["57168","57169"],["57170","57171"],["57172","57173"],["57174","57175"],["57176","57177"],["57178","57179"],["57180","57181"],["57182","57183"],["57184","57185"],["57186","57187"],["57188","57189"],["57190","57191"],["57192","57193"],["57194","57195"],["57196","57197"],["57198","57199"],["57200","57201"],["57202","57203"],["57204","57205"],["57206","57207"],["57208","57209"],["57210","57211"],["57212","57213"],["57214","57215"],["57216","57217"],["57218","57219"],["57220","57221"],["57222","57223"],["57224","57225"],["57226","57227"],["57228","57229"],["57230","57231"],["57232","57233"],["57234","57235"],["57236","57237"],["57238","57239"],["57240","57241"],["57242","57243"],["57244","57245"],["57246","57247"],["57248","57249"],["57250","57251"],["57252","57253"],["57254","57255"],["57256","57257"],["57258","57259"],["57260","57261"],["57262","57263"],["57264","57265"],["57266","57267"],["57268","57269"],["57270","57271"],["57272","57273"],["57274","57275"],["57276","57277"],["57278","57279"],["57280","57281"],["57282","57283"],["57284","57285"],["57286","57287"],["57288","57289"],["57290","57291"],["57292","57293"],["57294","57295"],["57296","57297"],["57298","57299"],["57300","57301"],["57302","57303"],["57304","57305"],["57306","57307"],["57308","57309"],["57310","57311"],["57312","57313"],["57314","57315"],["57316","57317"],["57318","57319"],["57320","57321"],["57322","57323"],["57324","57325"],["57326","57327"],["57328","57329"],["57330","57331"],["57332","57333"],["57334","57335"],["57336","57337"],["57338","57339"],["57340","57341"],["57342","57343"],["57344","57345"],["57346","57347"],["57348","57349"],["57350","57351"],["57352","57353"],["57354","57355"],["57356","57357"],["57358","57359"],["57360","57361"],["57362","57363"],["57364","57365"],["57366","57367"],["57368","57369"],["57370","57371"],["57372","57373"],["57374","57375"],["57376","57377"],["57378","57379"],["57380","57381"],["57382","57383"],["57384","57385"],["57386","57387"],["57388","57389"],["57390","57391"],["57392","57393"],["57394","57395"],["57396","57397"],["57398","57399"],["57400","57401"],["57402","57403"],["57404","57405"],["57406","57407"],["57408","57409"],["57410","57411"],["57412","57413"],["57414","57415"],["57416","57417"],["57418","57419"],["57420","57421"],["57422","57423"],["57424","57425"],["57426","57427"],["57428","57429"],["57430","57431"],["57432","57433"],["57434","57435"],["57436","57437"],["57438","57439"],["57440","57441"],["57442","57443"],["57444","57445"],["57446","57447"],["57448","57449"],["57450","57451"],["57452","57453"],["57454","57455"],["57456","57457"],["57458","57459"],["57460","57461"],["57462","57463"],["57464","57465"],["57466","57467"],["57468","57469"],["57470","57471"],["57472","57473"],["57474","57475"],["57476","57477"],["57478","57479"],["57480","57481"],["57482","57483"],["57484","57485"],["57486","57487"],["57488","57489"],["57490","57491"],["57492","57493"],["57494","57495"],["57496","57497"],["57498","57499"],["57500","57501"],["57502","57503"],["57504","57505"],["57506","57507"],["57508","57509"],["57510","57511"],["57512","57513"],["57514","57515"],["57516","57517"],["57518","57519"],["57520","57521"],["57522","57523"],["57524","57525"],["57526","57527"],["57528","57529"],["57530","57531"],["57532","57533"],["57534","57535"],["57536","57537"],["57538","57539"],["57540","57541"],["57542","57543"],["57544","57545"],["57546","57547"],["57548","57549"],["57550","57551"],["57552","57553"],["57554","57555"],["57556","57557"],["57558","57559"],["57560"],["57561"],["57562"],"react-hooks/immutability","Error: This value cannot be modified\n\nModifying a variable defined outside a component or hook is not allowed. Consider using an effect.\n\n/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-improve-prompt.test.tsx:30:5\n 28 | captureRef.current = useHook();\n 29 | // eslint-disable-next-line react-hooks/immutability -- test harness: intentionally writes to outer capture object from inside component\n> 30 | hookRef.current = captureRef.current;\n | ^^^^^^^ value cannot be modified\n 31 | return null;\n 32 | }\n 33 |\n\nHint: If this value is a Ref (value returned by `useRef()`), rename the variable to end in \"Ref\".",["57563"],"Error: This value cannot be modified\n\nModifying a variable defined outside a component or hook is not allowed. Consider using an effect.\n\n/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-presets.test.tsx:30:5\n 28 | captureRef.current = useHook();\n 29 | // eslint-disable-next-line react-hooks/immutability -- test harness: intentionally writes to outer capture object from inside component\n> 30 | hookRef.current = captureRef.current;\n | ^^^^^^^ value cannot be modified\n 31 | return null;\n 32 | }\n 33 |\n\nHint: If this value is a Ref (value returned by `useRef()`), rename the variable to end in \"Ref\".",["57564"],"Error: This value cannot be modified\n\nModifying a variable defined outside a component or hook is not allowed. Consider using an effect.\n\n/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-stream-metrics.test.tsx:34:5\n 32 | // This is safe because captureRef lives inside the component.\n 33 | // eslint-disable-next-line react-hooks/immutability -- test harness: intentionally writes to outer capture object from inside component\n> 34 | hookRef.current = captureRef.current;\n | ^^^^^^^ value cannot be modified\n 35 | return null;\n 36 | }\n 37 |\n\nHint: If this value is a Ref (value returned by `useRef()`), rename the variable to end in \"Ref\".",["57565"],"Error: This value cannot be modified\n\nModifying a variable defined outside a component or hook is not allowed. Consider using an effect.\n\n/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-structured-output.test.tsx:29:5\n 27 | captureRef.current = useHook();\n 28 | // eslint-disable-next-line react-hooks/immutability -- test harness: intentionally writes to outer capture object from inside component\n> 29 | hookRef.current = captureRef.current;\n | ^^^^^^^ value cannot be modified\n 30 | return null;\n 31 | }\n 32 |\n\nHint: If this value is a Ref (value returned by `useRef()`), rename the variable to end in \"Ref\".",["57566"],"Error: This value cannot be modified\n\nModifying a variable defined outside a component or hook is not allowed. Consider using an effect.\n\n/home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/sweep-reds-basereds-2/tests/unit/ui/use-tools-builder.test.tsx:30:5\n 28 | captureRef.current = useHook();\n 29 | // eslint-disable-next-line react-hooks/immutability -- test harness: intentionally writes to outer capture object from inside component\n> 30 | hookRef.current = captureRef.current;\n | ^^^^^^^ value cannot be modified\n 31 | return null;\n 32 | }\n 33 |\n\nHint: If this value is a Ref (value returned by `useRef()`), rename the variable to end in \"Ref\".",["57567"],["57568","57569"],["57570","57571"],["57572","57573"],["57574","57575"],["57576","57577"],["57578","57579"],["57580","57581"],["57582","57583"],["57584","57585"],["57586","57587"],["57588","57589"],["57590","57591"],["57592","57593"],["57594","57595"],["57596","57597"],["57598","57599"],["57600","57601"],["57602","57603"],["57604","57605"],["57606","57607"],["57608","57609"],["57610","57611"],["57612","57613"],["57614","57615"],["57616","57617"],["57618","57619"],["57620","57621"],["57622","57623"],["57624","57625"],["57626","57627"],["57628","57629"],["57630","57631"],["57632","57633"],["57634","57635"],["57636","57637"],["57638","57639"],["57640","57641"],["57642","57643"],["57644","57645"],["57646","57647"],["57648","57649"],["57650","57651"],["57652","57653"],["57654","57655"],["57656","57657"],["57658","57659"],["57660","57661"],["57662","57663"],["57664","57665"],["57666","57667"],["57668","57669"],["57670","57671"],["57672","57673"],["57674","57675"],["57676","57677"],["57678","57679"],["57680","57681"],["57682","57683"],["57684","57685"],["57686","57687"],["57688","57689"],["57690","57691"],["57692","57693"],["57694","57695"],["57696","57697"],["57698","57699"],["57700","57701"],["57702","57703"],["57704","57705"],["57706","57707"],["57708","57709"],["57710","57711"],["57712","57713"],["57714","57715"],["57716","57717"],["57718","57719"],["57720","57721"],["57722","57723"],["57724","57725"],["57726","57727"],["57728","57729"],["57730","57731"],["57732","57733"],["57734","57735"],["57736","57737"],["57738","57739"],["57740","57741"],["57742","57743"],["57744","57745"],["57746","57747"],["57748","57749"],["57750","57751"],["57752","57753"],["57754","57755"],["57756","57757"],["57758","57759"],["57760","57761"],["57762","57763"],["57764","57765"],["57766","57767"],["57768","57769"],["57770","57771"],["57772","57773"],["57774","57775"],["57776","57777"],["57778","57779"],["57780","57781"],["57782","57783"],["57784","57785"],["57786","57787"],["57788","57789"],["57790","57791"],["57792","57793"],["57794","57795"],["57796","57797"],["57798","57799"],["57800","57801"],["57802","57803"],["57804","57805"],["57806","57807"],["57808","57809"],["57810","57811"],["57812","57813"],["57814","57815"],["57816","57817"],["57818","57819"],["57820","57821"],["57822","57823"],["57824","57825"],["57826","57827"],["57828","57829"],["57830","57831"],["57832","57833"],["57834","57835"],["57836","57837"],["57838","57839"],["57840","57841"],["57842","57843"],["57844","57845"],["57846","57847"],["57848","57849"],["57850","57851"],["57852","57853"],["57854","57855"],["57856","57857"],["57858","57859"],["57860","57861"],["57862","57863"],["57864","57865"],["57866","57867"],["57868","57869"],["57870","57871"],["57872","57873"],["57874","57875"],["57876","57877"],["57878","57879"],["57880","57881"],["57882","57883"],["57884","57885"],["57886","57887"],["57888","57889"],["57890","57891"],["57892","57893"],["57894","57895"],["57896","57897"],["57898","57899"],["57900","57901"],["57902","57903"],["57904","57905"],["57906","57907"],["57908","57909"],["57910","57911"],["57912","57913"],["57914","57915"],["57916","57917"],["57918","57919"],["57920","57921"],["57922","57923"],["57924","57925"],["57926","57927"],["57928","57929"],["57930","57931"],["57932","57933"],["57934","57935"],["57936","57937"],{"messageId":"57938","fix":"57939","desc":"57940"},{"messageId":"57941","fix":"57942","desc":"57943"},{"messageId":"57938","fix":"57944","desc":"57940"},{"messageId":"57941","fix":"57945","desc":"57943"},{"messageId":"57938","fix":"57946","desc":"57940"},{"messageId":"57941","fix":"57947","desc":"57943"},{"messageId":"57938","fix":"57948","desc":"57940"},{"messageId":"57941","fix":"57949","desc":"57943"},{"messageId":"57938","fix":"57950","desc":"57940"},{"messageId":"57941","fix":"57951","desc":"57943"},{"messageId":"57938","fix":"57952","desc":"57940"},{"messageId":"57941","fix":"57953","desc":"57943"},{"messageId":"57938","fix":"57954","desc":"57940"},{"messageId":"57941","fix":"57955","desc":"57943"},{"messageId":"57938","fix":"57956","desc":"57940"},{"messageId":"57941","fix":"57957","desc":"57943"},{"messageId":"57938","fix":"57958","desc":"57940"},{"messageId":"57941","fix":"57959","desc":"57943"},{"messageId":"57938","fix":"57960","desc":"57940"},{"messageId":"57941","fix":"57961","desc":"57943"},{"messageId":"57938","fix":"57962","desc":"57940"},{"messageId":"57941","fix":"57963","desc":"57943"},{"messageId":"57938","fix":"57964","desc":"57940"},{"messageId":"57941","fix":"57965","desc":"57943"},{"messageId":"57938","fix":"57966","desc":"57940"},{"messageId":"57941","fix":"57967","desc":"57943"},{"messageId":"57938","fix":"57968","desc":"57940"},{"messageId":"57941","fix":"57969","desc":"57943"},{"messageId":"57938","fix":"57970","desc":"57940"},{"messageId":"57941","fix":"57971","desc":"57943"},{"messageId":"57938","fix":"57972","desc":"57940"},{"messageId":"57941","fix":"57973","desc":"57943"},{"messageId":"57938","fix":"57974","desc":"57940"},{"messageId":"57941","fix":"57975","desc":"57943"},{"messageId":"57938","fix":"57976","desc":"57940"},{"messageId":"57941","fix":"57977","desc":"57943"},{"messageId":"57938","fix":"57978","desc":"57940"},{"messageId":"57941","fix":"57979","desc":"57943"},{"messageId":"57938","fix":"57980","desc":"57940"},{"messageId":"57941","fix":"57981","desc":"57943"},{"messageId":"57938","fix":"57982","desc":"57940"},{"messageId":"57941","fix":"57983","desc":"57943"},{"messageId":"57938","fix":"57984","desc":"57940"},{"messageId":"57941","fix":"57985","desc":"57943"},{"messageId":"57938","fix":"57986","desc":"57940"},{"messageId":"57941","fix":"57987","desc":"57943"},{"messageId":"57938","fix":"57988","desc":"57940"},{"messageId":"57941","fix":"57989","desc":"57943"},{"messageId":"57938","fix":"57990","desc":"57940"},{"messageId":"57941","fix":"57991","desc":"57943"},{"messageId":"57938","fix":"57992","desc":"57940"},{"messageId":"57941","fix":"57993","desc":"57943"},{"messageId":"57938","fix":"57994","desc":"57940"},{"messageId":"57941","fix":"57995","desc":"57943"},{"messageId":"57938","fix":"57996","desc":"57940"},{"messageId":"57941","fix":"57997","desc":"57943"},{"messageId":"57938","fix":"57998","desc":"57940"},{"messageId":"57941","fix":"57999","desc":"57943"},{"messageId":"57938","fix":"58000","desc":"57940"},{"messageId":"57941","fix":"58001","desc":"57943"},{"messageId":"57938","fix":"58002","desc":"57940"},{"messageId":"57941","fix":"58003","desc":"57943"},{"messageId":"57938","fix":"58004","desc":"57940"},{"messageId":"57941","fix":"58005","desc":"57943"},{"messageId":"57938","fix":"58006","desc":"57940"},{"messageId":"57941","fix":"58007","desc":"57943"},{"messageId":"57938","fix":"58008","desc":"57940"},{"messageId":"57941","fix":"58009","desc":"57943"},{"messageId":"57938","fix":"58010","desc":"57940"},{"messageId":"57941","fix":"58011","desc":"57943"},{"messageId":"57938","fix":"58012","desc":"57940"},{"messageId":"57941","fix":"58013","desc":"57943"},{"messageId":"57938","fix":"58014","desc":"57940"},{"messageId":"57941","fix":"58015","desc":"57943"},{"messageId":"57938","fix":"58016","desc":"57940"},{"messageId":"57941","fix":"58017","desc":"57943"},{"messageId":"57938","fix":"58018","desc":"57940"},{"messageId":"57941","fix":"58019","desc":"57943"},{"messageId":"57938","fix":"58020","desc":"57940"},{"messageId":"57941","fix":"58021","desc":"57943"},{"messageId":"57938","fix":"58022","desc":"57940"},{"messageId":"57941","fix":"58023","desc":"57943"},{"messageId":"57938","fix":"58024","desc":"57940"},{"messageId":"57941","fix":"58025","desc":"57943"},{"messageId":"57938","fix":"58026","desc":"57940"},{"messageId":"57941","fix":"58027","desc":"57943"},{"messageId":"57938","fix":"58028","desc":"57940"},{"messageId":"57941","fix":"58029","desc":"57943"},{"messageId":"57938","fix":"58030","desc":"57940"},{"messageId":"57941","fix":"58031","desc":"57943"},{"messageId":"57938","fix":"58032","desc":"57940"},{"messageId":"57941","fix":"58033","desc":"57943"},{"messageId":"57938","fix":"58034","desc":"57940"},{"messageId":"57941","fix":"58035","desc":"57943"},{"messageId":"57938","fix":"58036","desc":"57940"},{"messageId":"57941","fix":"58037","desc":"57943"},{"messageId":"57938","fix":"58038","desc":"57940"},{"messageId":"57941","fix":"58039","desc":"57943"},{"messageId":"57938","fix":"58040","desc":"57940"},{"messageId":"57941","fix":"58041","desc":"57943"},{"messageId":"57938","fix":"58042","desc":"57940"},{"messageId":"57941","fix":"58043","desc":"57943"},{"messageId":"57938","fix":"58044","desc":"57940"},{"messageId":"57941","fix":"58045","desc":"57943"},{"messageId":"57938","fix":"58046","desc":"57940"},{"messageId":"57941","fix":"58047","desc":"57943"},{"messageId":"57938","fix":"58048","desc":"57940"},{"messageId":"57941","fix":"58049","desc":"57943"},{"messageId":"57938","fix":"58050","desc":"57940"},{"messageId":"57941","fix":"58051","desc":"57943"},{"messageId":"57938","fix":"58052","desc":"57940"},{"messageId":"57941","fix":"58053","desc":"57943"},{"messageId":"57938","fix":"58054","desc":"57940"},{"messageId":"57941","fix":"58055","desc":"57943"},{"messageId":"57938","fix":"58056","desc":"57940"},{"messageId":"57941","fix":"58057","desc":"57943"},{"messageId":"57938","fix":"58058","desc":"57940"},{"messageId":"57941","fix":"58059","desc":"57943"},{"messageId":"57938","fix":"58060","desc":"57940"},{"messageId":"57941","fix":"58061","desc":"57943"},{"messageId":"57938","fix":"58062","desc":"57940"},{"messageId":"57941","fix":"58063","desc":"57943"},{"messageId":"57938","fix":"58064","desc":"57940"},{"messageId":"57941","fix":"58065","desc":"57943"},{"messageId":"57938","fix":"58066","desc":"57940"},{"messageId":"57941","fix":"58067","desc":"57943"},{"messageId":"57938","fix":"58068","desc":"57940"},{"messageId":"57941","fix":"58069","desc":"57943"},{"messageId":"57938","fix":"58070","desc":"57940"},{"messageId":"57941","fix":"58071","desc":"57943"},{"messageId":"57938","fix":"58072","desc":"57940"},{"messageId":"57941","fix":"58073","desc":"57943"},{"messageId":"57938","fix":"58074","desc":"57940"},{"messageId":"57941","fix":"58075","desc":"57943"},{"messageId":"57938","fix":"58076","desc":"57940"},{"messageId":"57941","fix":"58077","desc":"57943"},{"messageId":"57938","fix":"58078","desc":"57940"},{"messageId":"57941","fix":"58079","desc":"57943"},{"messageId":"57938","fix":"58080","desc":"57940"},{"messageId":"57941","fix":"58081","desc":"57943"},{"messageId":"57938","fix":"58082","desc":"57940"},{"messageId":"57941","fix":"58083","desc":"57943"},{"messageId":"57938","fix":"58084","desc":"57940"},{"messageId":"57941","fix":"58085","desc":"57943"},{"messageId":"57938","fix":"58086","desc":"57940"},{"messageId":"57941","fix":"58087","desc":"57943"},{"messageId":"57938","fix":"58088","desc":"57940"},{"messageId":"57941","fix":"58089","desc":"57943"},{"messageId":"57938","fix":"58090","desc":"57940"},{"messageId":"57941","fix":"58091","desc":"57943"},{"messageId":"57938","fix":"58092","desc":"57940"},{"messageId":"57941","fix":"58093","desc":"57943"},{"messageId":"57938","fix":"58094","desc":"57940"},{"messageId":"57941","fix":"58095","desc":"57943"},{"messageId":"57938","fix":"58096","desc":"57940"},{"messageId":"57941","fix":"58097","desc":"57943"},{"messageId":"57938","fix":"58098","desc":"57940"},{"messageId":"57941","fix":"58099","desc":"57943"},{"messageId":"57938","fix":"58100","desc":"57940"},{"messageId":"57941","fix":"58101","desc":"57943"},{"messageId":"57938","fix":"58102","desc":"57940"},{"messageId":"57941","fix":"58103","desc":"57943"},{"messageId":"57938","fix":"58104","desc":"57940"},{"messageId":"57941","fix":"58105","desc":"57943"},{"messageId":"57938","fix":"58106","desc":"57940"},{"messageId":"57941","fix":"58107","desc":"57943"},{"messageId":"57938","fix":"58108","desc":"57940"},{"messageId":"57941","fix":"58109","desc":"57943"},{"messageId":"57938","fix":"58110","desc":"57940"},{"messageId":"57941","fix":"58111","desc":"57943"},{"messageId":"57938","fix":"58112","desc":"57940"},{"messageId":"57941","fix":"58113","desc":"57943"},{"messageId":"57938","fix":"58114","desc":"57940"},{"messageId":"57941","fix":"58115","desc":"57943"},{"messageId":"57938","fix":"58116","desc":"57940"},{"messageId":"57941","fix":"58117","desc":"57943"},{"messageId":"57938","fix":"58118","desc":"57940"},{"messageId":"57941","fix":"58119","desc":"57943"},{"messageId":"57938","fix":"58120","desc":"57940"},{"messageId":"57941","fix":"58121","desc":"57943"},{"messageId":"57938","fix":"58122","desc":"57940"},{"messageId":"57941","fix":"58123","desc":"57943"},{"messageId":"57938","fix":"58124","desc":"57940"},{"messageId":"57941","fix":"58125","desc":"57943"},{"messageId":"57938","fix":"58126","desc":"57940"},{"messageId":"57941","fix":"58127","desc":"57943"},{"messageId":"57938","fix":"58128","desc":"57940"},{"messageId":"57941","fix":"58129","desc":"57943"},{"messageId":"57938","fix":"58130","desc":"57940"},{"messageId":"57941","fix":"58131","desc":"57943"},{"messageId":"57938","fix":"58132","desc":"57940"},{"messageId":"57941","fix":"58133","desc":"57943"},{"messageId":"57938","fix":"58134","desc":"57940"},{"messageId":"57941","fix":"58135","desc":"57943"},{"messageId":"57938","fix":"58136","desc":"57940"},{"messageId":"57941","fix":"58137","desc":"57943"},{"messageId":"57938","fix":"58138","desc":"57940"},{"messageId":"57941","fix":"58139","desc":"57943"},{"messageId":"57938","fix":"58140","desc":"57940"},{"messageId":"57941","fix":"58141","desc":"57943"},{"messageId":"57938","fix":"58142","desc":"57940"},{"messageId":"57941","fix":"58143","desc":"57943"},{"messageId":"57938","fix":"58144","desc":"57940"},{"messageId":"57941","fix":"58145","desc":"57943"},{"messageId":"57938","fix":"58146","desc":"57940"},{"messageId":"57941","fix":"58147","desc":"57943"},{"messageId":"57938","fix":"58148","desc":"57940"},{"messageId":"57941","fix":"58149","desc":"57943"},{"messageId":"57938","fix":"58150","desc":"57940"},{"messageId":"57941","fix":"58151","desc":"57943"},{"messageId":"57938","fix":"58152","desc":"57940"},{"messageId":"57941","fix":"58153","desc":"57943"},{"messageId":"57938","fix":"58154","desc":"57940"},{"messageId":"57941","fix":"58155","desc":"57943"},{"messageId":"57938","fix":"58156","desc":"57940"},{"messageId":"57941","fix":"58157","desc":"57943"},{"messageId":"57938","fix":"58158","desc":"57940"},{"messageId":"57941","fix":"58159","desc":"57943"},{"messageId":"57938","fix":"58160","desc":"57940"},{"messageId":"57941","fix":"58161","desc":"57943"},{"messageId":"57938","fix":"58162","desc":"57940"},{"messageId":"57941","fix":"58163","desc":"57943"},{"messageId":"57938","fix":"58164","desc":"57940"},{"messageId":"57941","fix":"58165","desc":"57943"},{"messageId":"57938","fix":"58166","desc":"57940"},{"messageId":"57941","fix":"58167","desc":"57943"},{"messageId":"57938","fix":"58168","desc":"57940"},{"messageId":"57941","fix":"58169","desc":"57943"},{"messageId":"57938","fix":"58170","desc":"57940"},{"messageId":"57941","fix":"58171","desc":"57943"},{"messageId":"57938","fix":"58172","desc":"57940"},{"messageId":"57941","fix":"58173","desc":"57943"},{"messageId":"57938","fix":"58174","desc":"57940"},{"messageId":"57941","fix":"58175","desc":"57943"},{"messageId":"57938","fix":"58176","desc":"57940"},{"messageId":"57941","fix":"58177","desc":"57943"},{"messageId":"57938","fix":"58178","desc":"57940"},{"messageId":"57941","fix":"58179","desc":"57943"},{"messageId":"57938","fix":"58180","desc":"57940"},{"messageId":"57941","fix":"58181","desc":"57943"},{"messageId":"57938","fix":"58182","desc":"57940"},{"messageId":"57941","fix":"58183","desc":"57943"},{"messageId":"57938","fix":"58184","desc":"57940"},{"messageId":"57941","fix":"58185","desc":"57943"},{"messageId":"57938","fix":"58186","desc":"57940"},{"messageId":"57941","fix":"58187","desc":"57943"},{"messageId":"57938","fix":"58188","desc":"57940"},{"messageId":"57941","fix":"58189","desc":"57943"},{"messageId":"57938","fix":"58190","desc":"57940"},{"messageId":"57941","fix":"58191","desc":"57943"},{"messageId":"57938","fix":"58192","desc":"57940"},{"messageId":"57941","fix":"58193","desc":"57943"},{"messageId":"57938","fix":"58194","desc":"57940"},{"messageId":"57941","fix":"58195","desc":"57943"},{"messageId":"57938","fix":"58196","desc":"57940"},{"messageId":"57941","fix":"58197","desc":"57943"},{"messageId":"57938","fix":"58198","desc":"57940"},{"messageId":"57941","fix":"58199","desc":"57943"},{"messageId":"57938","fix":"58200","desc":"57940"},{"messageId":"57941","fix":"58201","desc":"57943"},{"messageId":"57938","fix":"58202","desc":"57940"},{"messageId":"57941","fix":"58203","desc":"57943"},{"messageId":"57938","fix":"58204","desc":"57940"},{"messageId":"57941","fix":"58205","desc":"57943"},{"messageId":"57938","fix":"58206","desc":"57940"},{"messageId":"57941","fix":"58207","desc":"57943"},{"messageId":"57938","fix":"58208","desc":"57940"},{"messageId":"57941","fix":"58209","desc":"57943"},{"messageId":"57938","fix":"58210","desc":"57940"},{"messageId":"57941","fix":"58211","desc":"57943"},{"messageId":"57938","fix":"58212","desc":"57940"},{"messageId":"57941","fix":"58213","desc":"57943"},{"messageId":"57938","fix":"58214","desc":"57940"},{"messageId":"57941","fix":"58215","desc":"57943"},{"messageId":"57938","fix":"58216","desc":"57940"},{"messageId":"57941","fix":"58217","desc":"57943"},{"messageId":"57938","fix":"58218","desc":"57940"},{"messageId":"57941","fix":"58219","desc":"57943"},{"messageId":"57938","fix":"58220","desc":"57940"},{"messageId":"57941","fix":"58221","desc":"57943"},{"messageId":"57938","fix":"58222","desc":"57940"},{"messageId":"57941","fix":"58223","desc":"57943"},{"messageId":"57938","fix":"58224","desc":"57940"},{"messageId":"57941","fix":"58225","desc":"57943"},{"messageId":"57938","fix":"58226","desc":"57940"},{"messageId":"57941","fix":"58227","desc":"57943"},{"messageId":"57938","fix":"58228","desc":"57940"},{"messageId":"57941","fix":"58229","desc":"57943"},{"messageId":"57938","fix":"58230","desc":"57940"},{"messageId":"57941","fix":"58231","desc":"57943"},{"messageId":"57938","fix":"58232","desc":"57940"},{"messageId":"57941","fix":"58233","desc":"57943"},{"messageId":"57938","fix":"58234","desc":"57940"},{"messageId":"57941","fix":"58235","desc":"57943"},{"messageId":"57938","fix":"58236","desc":"57940"},{"messageId":"57941","fix":"58237","desc":"57943"},{"messageId":"57938","fix":"58238","desc":"57940"},{"messageId":"57941","fix":"58239","desc":"57943"},{"messageId":"57938","fix":"58240","desc":"57940"},{"messageId":"57941","fix":"58241","desc":"57943"},{"messageId":"57938","fix":"58242","desc":"57940"},{"messageId":"57941","fix":"58243","desc":"57943"},{"messageId":"57938","fix":"58244","desc":"57940"},{"messageId":"57941","fix":"58245","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"58248","desc":"57940"},{"messageId":"57941","fix":"58249","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"58250","desc":"57940"},{"messageId":"57941","fix":"58251","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"58252","desc":"57940"},{"messageId":"57941","fix":"58253","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"58254","desc":"57940"},{"messageId":"57941","fix":"58255","desc":"57943"},{"messageId":"57938","fix":"58256","desc":"57940"},{"messageId":"57941","fix":"58257","desc":"57943"},{"messageId":"57938","fix":"58258","desc":"57940"},{"messageId":"57941","fix":"58259","desc":"57943"},{"messageId":"57938","fix":"58260","desc":"57940"},{"messageId":"57941","fix":"58261","desc":"57943"},{"messageId":"57938","fix":"58262","desc":"57940"},{"messageId":"57941","fix":"58263","desc":"57943"},{"messageId":"57938","fix":"58264","desc":"57940"},{"messageId":"57941","fix":"58265","desc":"57943"},{"messageId":"57938","fix":"58266","desc":"57940"},{"messageId":"57941","fix":"58267","desc":"57943"},{"messageId":"57938","fix":"58268","desc":"57940"},{"messageId":"57941","fix":"58269","desc":"57943"},{"messageId":"57938","fix":"58270","desc":"57940"},{"messageId":"57941","fix":"58271","desc":"57943"},{"messageId":"57938","fix":"58272","desc":"57940"},{"messageId":"57941","fix":"58273","desc":"57943"},{"messageId":"57938","fix":"58274","desc":"57940"},{"messageId":"57941","fix":"58275","desc":"57943"},{"messageId":"57938","fix":"58276","desc":"57940"},{"messageId":"57941","fix":"58277","desc":"57943"},{"messageId":"57938","fix":"58278","desc":"57940"},{"messageId":"57941","fix":"58279","desc":"57943"},{"messageId":"57938","fix":"58280","desc":"57940"},{"messageId":"57941","fix":"58281","desc":"57943"},{"messageId":"57938","fix":"58282","desc":"57940"},{"messageId":"57941","fix":"58283","desc":"57943"},{"messageId":"57938","fix":"58284","desc":"57940"},{"messageId":"57941","fix":"58285","desc":"57943"},{"messageId":"57938","fix":"58286","desc":"57940"},{"messageId":"57941","fix":"58287","desc":"57943"},{"desc":"58288","fix":"58289"},{"desc":"58290","fix":"58291"},{"kind":"58246","justification":"58292"},{"kind":"58246","justification":"58293"},{"kind":"58246","justification":"58293"},{"desc":"58294","fix":"58295"},{"kind":"58246","justification":"58247"},{"kind":"58246","justification":"58296"},{"kind":"58246","justification":"58296"},{"kind":"58246","justification":"58296"},{"kind":"58246","justification":"58296"},{"kind":"58246","justification":"58296"},{"kind":"58246","justification":"58247"},{"desc":"58297","fix":"58298"},{"kind":"58246","justification":"58247"},{"desc":"58299","fix":"58300"},{"kind":"58246","justification":"58296"},{"kind":"58246","justification":"58247"},{"kind":"58246","justification":"58301"},{"desc":"58302","fix":"58303"},{"kind":"58246","justification":"58247"},{"desc":"58304","fix":"58305"},{"kind":"58246","justification":"58247"},{"desc":"58306","fix":"58307"},{"kind":"58246","justification":"58247"},{"desc":"58308","fix":"58309"},{"kind":"58246","justification":"58247"},{"kind":"58246","justification":"58247"},{"desc":"58310","fix":"58311"},{"kind":"58246","justification":"58247"},{"desc":"58312","fix":"58313"},{"kind":"58246","justification":"58247"},{"kind":"58246","justification":"58247"},{"desc":"58314","fix":"58315"},{"kind":"58246","justification":"58247"},{"kind":"58246","justification":"58247"},{"desc":"58316","fix":"58317"},{"kind":"58246","justification":"58318"},{"desc":"58319","fix":"58320"},{"kind":"58246","justification":"58247"},{"desc":"58321","fix":"58322"},{"kind":"58246","justification":"58247"},{"kind":"58246","justification":"58296"},{"desc":"58323","fix":"58324"},{"kind":"58246","justification":"58247"},{"desc":"58325","fix":"58326"},{"kind":"58246","justification":"58247"},{"desc":"58327","fix":"58328"},{"kind":"58246","justification":"58247"},{"desc":"58329","fix":"58330"},{"desc":"58331","fix":"58332"},{"kind":"58246","justification":"58293"},{"kind":"58246","justification":"58333"},{"desc":"58334","fix":"58335"},{"kind":"58246","justification":"58247"},{"desc":"58336","fix":"58337"},{"kind":"58246","justification":"58247"},{"desc":"58338","fix":"58339"},{"kind":"58246","justification":"58247"},{"desc":"58327","fix":"58340"},{"kind":"58246","justification":"58247"},{"desc":"58341","fix":"58342"},{"kind":"58246","justification":"58247"},{"kind":"58246","justification":"58296"},{"kind":"58246","justification":"58296"},{"desc":"58343","fix":"58344"},{"desc":"58345","fix":"58346"},{"desc":"58347","fix":"58348"},{"kind":"58246","justification":"58247"},{"desc":"58349","fix":"58350"},{"kind":"58246","justification":"58247"},{"kind":"58246","justification":"58351"},{"kind":"58246","justification":"58352"},{"desc":"58353","fix":"58354"},{"desc":"58355","fix":"58356"},{"desc":"58357","fix":"58358"},{"desc":"58359","fix":"58360"},{"desc":"58361","fix":"58362"},{"desc":"58363","fix":"58364"},{"desc":"58363","fix":"58365"},{"desc":"58366","fix":"58367"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"58368","desc":"57940"},{"messageId":"57941","fix":"58369","desc":"57943"},{"messageId":"57938","fix":"58370","desc":"57940"},{"messageId":"57941","fix":"58371","desc":"57943"},{"messageId":"57938","fix":"58372","desc":"57940"},{"messageId":"57941","fix":"58373","desc":"57943"},{"messageId":"57938","fix":"58374","desc":"57940"},{"messageId":"57941","fix":"58375","desc":"57943"},{"messageId":"57938","fix":"58376","desc":"57940"},{"messageId":"57941","fix":"58377","desc":"57943"},{"messageId":"57938","fix":"58378","desc":"57940"},{"messageId":"57941","fix":"58379","desc":"57943"},{"messageId":"57938","fix":"58380","desc":"57940"},{"messageId":"57941","fix":"58381","desc":"57943"},{"messageId":"57938","fix":"58382","desc":"57940"},{"messageId":"57941","fix":"58383","desc":"57943"},{"messageId":"57938","fix":"58384","desc":"57940"},{"messageId":"57941","fix":"58385","desc":"57943"},{"messageId":"57938","fix":"58386","desc":"57940"},{"messageId":"57941","fix":"58387","desc":"57943"},{"messageId":"57938","fix":"58388","desc":"57940"},{"messageId":"57941","fix":"58389","desc":"57943"},{"messageId":"57938","fix":"58390","desc":"57940"},{"messageId":"57941","fix":"58391","desc":"57943"},{"messageId":"57938","fix":"58392","desc":"57940"},{"messageId":"57941","fix":"58393","desc":"57943"},{"messageId":"57938","fix":"58394","desc":"57940"},{"messageId":"57941","fix":"58395","desc":"57943"},{"messageId":"57938","fix":"58396","desc":"57940"},{"messageId":"57941","fix":"58397","desc":"57943"},{"messageId":"57938","fix":"58398","desc":"57940"},{"messageId":"57941","fix":"58399","desc":"57943"},{"messageId":"57938","fix":"58400","desc":"57940"},{"messageId":"57941","fix":"58401","desc":"57943"},{"messageId":"57938","fix":"58402","desc":"57940"},{"messageId":"57941","fix":"58403","desc":"57943"},{"messageId":"57938","fix":"58404","desc":"57940"},{"messageId":"57941","fix":"58405","desc":"57943"},{"messageId":"57938","fix":"58406","desc":"57940"},{"messageId":"57941","fix":"58407","desc":"57943"},{"messageId":"57938","fix":"58408","desc":"57940"},{"messageId":"57941","fix":"58409","desc":"57943"},{"messageId":"57938","fix":"58410","desc":"57940"},{"messageId":"57941","fix":"58411","desc":"57943"},{"messageId":"57938","fix":"58412","desc":"57940"},{"messageId":"57941","fix":"58413","desc":"57943"},{"messageId":"57938","fix":"58414","desc":"57940"},{"messageId":"57941","fix":"58415","desc":"57943"},{"messageId":"57938","fix":"58416","desc":"57940"},{"messageId":"57941","fix":"58417","desc":"57943"},{"messageId":"57938","fix":"58418","desc":"57940"},{"messageId":"57941","fix":"58419","desc":"57943"},{"messageId":"57938","fix":"58420","desc":"57940"},{"messageId":"57941","fix":"58421","desc":"57943"},{"messageId":"57938","fix":"58422","desc":"57940"},{"messageId":"57941","fix":"58423","desc":"57943"},{"messageId":"57938","fix":"58424","desc":"57940"},{"messageId":"57941","fix":"58425","desc":"57943"},{"messageId":"57938","fix":"58426","desc":"57940"},{"messageId":"57941","fix":"58427","desc":"57943"},{"messageId":"57938","fix":"58428","desc":"57940"},{"messageId":"57941","fix":"58429","desc":"57943"},{"messageId":"57938","fix":"58430","desc":"57940"},{"messageId":"57941","fix":"58431","desc":"57943"},{"messageId":"57938","fix":"58432","desc":"57940"},{"messageId":"57941","fix":"58433","desc":"57943"},{"messageId":"57938","fix":"58434","desc":"57940"},{"messageId":"57941","fix":"58435","desc":"57943"},{"messageId":"57938","fix":"58436","desc":"57940"},{"messageId":"57941","fix":"58437","desc":"57943"},{"messageId":"57938","fix":"58438","desc":"57940"},{"messageId":"57941","fix":"58439","desc":"57943"},{"messageId":"57938","fix":"58440","desc":"57940"},{"messageId":"57941","fix":"58441","desc":"57943"},{"messageId":"57938","fix":"58442","desc":"57940"},{"messageId":"57941","fix":"58443","desc":"57943"},{"messageId":"57938","fix":"58444","desc":"57940"},{"messageId":"57941","fix":"58445","desc":"57943"},{"messageId":"57938","fix":"58446","desc":"57940"},{"messageId":"57941","fix":"58447","desc":"57943"},{"messageId":"57938","fix":"58448","desc":"57940"},{"messageId":"57941","fix":"58449","desc":"57943"},{"messageId":"57938","fix":"58450","desc":"57940"},{"messageId":"57941","fix":"58451","desc":"57943"},{"messageId":"57938","fix":"58452","desc":"57940"},{"messageId":"57941","fix":"58453","desc":"57943"},{"messageId":"57938","fix":"58454","desc":"57940"},{"messageId":"57941","fix":"58455","desc":"57943"},{"messageId":"57938","fix":"58456","desc":"57940"},{"messageId":"57941","fix":"58457","desc":"57943"},{"messageId":"57938","fix":"58458","desc":"57940"},{"messageId":"57941","fix":"58459","desc":"57943"},{"messageId":"57938","fix":"58460","desc":"57940"},{"messageId":"57941","fix":"58461","desc":"57943"},{"messageId":"57938","fix":"58462","desc":"57940"},{"messageId":"57941","fix":"58463","desc":"57943"},{"messageId":"57938","fix":"58464","desc":"57940"},{"messageId":"57941","fix":"58465","desc":"57943"},{"messageId":"57938","fix":"58466","desc":"57940"},{"messageId":"57941","fix":"58467","desc":"57943"},{"messageId":"57938","fix":"58468","desc":"57940"},{"messageId":"57941","fix":"58469","desc":"57943"},{"messageId":"57938","fix":"58470","desc":"57940"},{"messageId":"57941","fix":"58471","desc":"57943"},{"messageId":"57938","fix":"58472","desc":"57940"},{"messageId":"57941","fix":"58473","desc":"57943"},{"messageId":"57938","fix":"58474","desc":"57940"},{"messageId":"57941","fix":"58475","desc":"57943"},{"messageId":"57938","fix":"58476","desc":"57940"},{"messageId":"57941","fix":"58477","desc":"57943"},{"messageId":"57938","fix":"58478","desc":"57940"},{"messageId":"57941","fix":"58479","desc":"57943"},{"messageId":"57938","fix":"58480","desc":"57940"},{"messageId":"57941","fix":"58481","desc":"57943"},{"messageId":"57938","fix":"58482","desc":"57940"},{"messageId":"57941","fix":"58483","desc":"57943"},{"messageId":"57938","fix":"58484","desc":"57940"},{"messageId":"57941","fix":"58485","desc":"57943"},{"messageId":"57938","fix":"58486","desc":"57940"},{"messageId":"57941","fix":"58487","desc":"57943"},{"messageId":"57938","fix":"58488","desc":"57940"},{"messageId":"57941","fix":"58489","desc":"57943"},{"messageId":"57938","fix":"58490","desc":"57940"},{"messageId":"57941","fix":"58491","desc":"57943"},{"messageId":"57938","fix":"58492","desc":"57940"},{"messageId":"57941","fix":"58493","desc":"57943"},{"messageId":"57938","fix":"58494","desc":"57940"},{"messageId":"57941","fix":"58495","desc":"57943"},{"messageId":"57938","fix":"58496","desc":"57940"},{"messageId":"57941","fix":"58497","desc":"57943"},{"messageId":"57938","fix":"58498","desc":"57940"},{"messageId":"57941","fix":"58499","desc":"57943"},{"messageId":"57938","fix":"58500","desc":"57940"},{"messageId":"57941","fix":"58501","desc":"57943"},{"messageId":"57938","fix":"58502","desc":"57940"},{"messageId":"57941","fix":"58503","desc":"57943"},{"messageId":"57938","fix":"58504","desc":"57940"},{"messageId":"57941","fix":"58505","desc":"57943"},{"messageId":"57938","fix":"58506","desc":"57940"},{"messageId":"57941","fix":"58507","desc":"57943"},{"messageId":"57938","fix":"58508","desc":"57940"},{"messageId":"57941","fix":"58509","desc":"57943"},{"messageId":"57938","fix":"58510","desc":"57940"},{"messageId":"57941","fix":"58511","desc":"57943"},{"messageId":"57938","fix":"58512","desc":"57940"},{"messageId":"57941","fix":"58513","desc":"57943"},{"messageId":"57938","fix":"58514","desc":"57940"},{"messageId":"57941","fix":"58515","desc":"57943"},{"messageId":"57938","fix":"58516","desc":"57940"},{"messageId":"57941","fix":"58517","desc":"57943"},{"messageId":"57938","fix":"58518","desc":"57940"},{"messageId":"57941","fix":"58519","desc":"57943"},{"messageId":"57938","fix":"58520","desc":"57940"},{"messageId":"57941","fix":"58521","desc":"57943"},{"messageId":"57938","fix":"58522","desc":"57940"},{"messageId":"57941","fix":"58523","desc":"57943"},{"messageId":"57938","fix":"58524","desc":"57940"},{"messageId":"57941","fix":"58525","desc":"57943"},{"messageId":"57938","fix":"58526","desc":"57940"},{"messageId":"57941","fix":"58527","desc":"57943"},{"messageId":"57938","fix":"58528","desc":"57940"},{"messageId":"57941","fix":"58529","desc":"57943"},{"messageId":"57938","fix":"58530","desc":"57940"},{"messageId":"57941","fix":"58531","desc":"57943"},{"messageId":"57938","fix":"58532","desc":"57940"},{"messageId":"57941","fix":"58533","desc":"57943"},{"messageId":"57938","fix":"58534","desc":"57940"},{"messageId":"57941","fix":"58535","desc":"57943"},{"messageId":"57938","fix":"58536","desc":"57940"},{"messageId":"57941","fix":"58537","desc":"57943"},{"messageId":"57938","fix":"58538","desc":"57940"},{"messageId":"57941","fix":"58539","desc":"57943"},{"messageId":"57938","fix":"58540","desc":"57940"},{"messageId":"57941","fix":"58541","desc":"57943"},{"messageId":"57938","fix":"58542","desc":"57940"},{"messageId":"57941","fix":"58543","desc":"57943"},{"messageId":"57938","fix":"58544","desc":"57940"},{"messageId":"57941","fix":"58545","desc":"57943"},{"messageId":"57938","fix":"58546","desc":"57940"},{"messageId":"57941","fix":"58547","desc":"57943"},{"messageId":"57938","fix":"58548","desc":"57940"},{"messageId":"57941","fix":"58549","desc":"57943"},{"messageId":"57938","fix":"58550","desc":"57940"},{"messageId":"57941","fix":"58551","desc":"57943"},{"messageId":"57938","fix":"58552","desc":"57940"},{"messageId":"57941","fix":"58553","desc":"57943"},{"messageId":"57938","fix":"58554","desc":"57940"},{"messageId":"57941","fix":"58555","desc":"57943"},{"messageId":"57938","fix":"58556","desc":"57940"},{"messageId":"57941","fix":"58557","desc":"57943"},{"messageId":"57938","fix":"58558","desc":"57940"},{"messageId":"57941","fix":"58559","desc":"57943"},{"messageId":"57938","fix":"58560","desc":"57940"},{"messageId":"57941","fix":"58561","desc":"57943"},{"messageId":"57938","fix":"58562","desc":"57940"},{"messageId":"57941","fix":"58563","desc":"57943"},{"messageId":"57938","fix":"58564","desc":"57940"},{"messageId":"57941","fix":"58565","desc":"57943"},{"messageId":"57938","fix":"58566","desc":"57940"},{"messageId":"57941","fix":"58567","desc":"57943"},{"messageId":"57938","fix":"58568","desc":"57940"},{"messageId":"57941","fix":"58569","desc":"57943"},{"messageId":"57938","fix":"58570","desc":"57940"},{"messageId":"57941","fix":"58571","desc":"57943"},{"messageId":"57938","fix":"58572","desc":"57940"},{"messageId":"57941","fix":"58573","desc":"57943"},{"messageId":"57938","fix":"58574","desc":"57940"},{"messageId":"57941","fix":"58575","desc":"57943"},{"messageId":"57938","fix":"58576","desc":"57940"},{"messageId":"57941","fix":"58577","desc":"57943"},{"messageId":"57938","fix":"58578","desc":"57940"},{"messageId":"57941","fix":"58579","desc":"57943"},{"messageId":"57938","fix":"58580","desc":"57940"},{"messageId":"57941","fix":"58581","desc":"57943"},{"messageId":"57938","fix":"58582","desc":"57940"},{"messageId":"57941","fix":"58583","desc":"57943"},{"messageId":"57938","fix":"58584","desc":"57940"},{"messageId":"57941","fix":"58585","desc":"57943"},{"messageId":"57938","fix":"58586","desc":"57940"},{"messageId":"57941","fix":"58587","desc":"57943"},{"messageId":"57938","fix":"58588","desc":"57940"},{"messageId":"57941","fix":"58589","desc":"57943"},{"messageId":"57938","fix":"58590","desc":"57940"},{"messageId":"57941","fix":"58591","desc":"57943"},{"messageId":"57938","fix":"58592","desc":"57940"},{"messageId":"57941","fix":"58593","desc":"57943"},{"messageId":"57938","fix":"58594","desc":"57940"},{"messageId":"57941","fix":"58595","desc":"57943"},{"messageId":"57938","fix":"58596","desc":"57940"},{"messageId":"57941","fix":"58597","desc":"57943"},{"messageId":"57938","fix":"58598","desc":"57940"},{"messageId":"57941","fix":"58599","desc":"57943"},{"messageId":"57938","fix":"58600","desc":"57940"},{"messageId":"57941","fix":"58601","desc":"57943"},{"messageId":"57938","fix":"58602","desc":"57940"},{"messageId":"57941","fix":"58603","desc":"57943"},{"messageId":"57938","fix":"58604","desc":"57940"},{"messageId":"57941","fix":"58605","desc":"57943"},{"messageId":"57938","fix":"58606","desc":"57940"},{"messageId":"57941","fix":"58607","desc":"57943"},{"messageId":"57938","fix":"58608","desc":"57940"},{"messageId":"57941","fix":"58609","desc":"57943"},{"messageId":"57938","fix":"58610","desc":"57940"},{"messageId":"57941","fix":"58611","desc":"57943"},{"messageId":"57938","fix":"58612","desc":"57940"},{"messageId":"57941","fix":"58613","desc":"57943"},{"messageId":"57938","fix":"58614","desc":"57940"},{"messageId":"57941","fix":"58615","desc":"57943"},{"messageId":"57938","fix":"58616","desc":"57940"},{"messageId":"57941","fix":"58617","desc":"57943"},{"messageId":"57938","fix":"58618","desc":"57940"},{"messageId":"57941","fix":"58619","desc":"57943"},{"messageId":"57938","fix":"58620","desc":"57940"},{"messageId":"57941","fix":"58621","desc":"57943"},{"messageId":"57938","fix":"58622","desc":"57940"},{"messageId":"57941","fix":"58623","desc":"57943"},{"messageId":"57938","fix":"58624","desc":"57940"},{"messageId":"57941","fix":"58625","desc":"57943"},{"messageId":"57938","fix":"58626","desc":"57940"},{"messageId":"57941","fix":"58627","desc":"57943"},{"messageId":"57938","fix":"58628","desc":"57940"},{"messageId":"57941","fix":"58629","desc":"57943"},{"messageId":"57938","fix":"58630","desc":"57940"},{"messageId":"57941","fix":"58631","desc":"57943"},{"messageId":"57938","fix":"58632","desc":"57940"},{"messageId":"57941","fix":"58633","desc":"57943"},{"messageId":"57938","fix":"58634","desc":"57940"},{"messageId":"57941","fix":"58635","desc":"57943"},{"messageId":"57938","fix":"58636","desc":"57940"},{"messageId":"57941","fix":"58637","desc":"57943"},{"messageId":"57938","fix":"58638","desc":"57940"},{"messageId":"57941","fix":"58639","desc":"57943"},{"messageId":"57938","fix":"58640","desc":"57940"},{"messageId":"57941","fix":"58641","desc":"57943"},{"messageId":"57938","fix":"58642","desc":"57940"},{"messageId":"57941","fix":"58643","desc":"57943"},{"messageId":"57938","fix":"58644","desc":"57940"},{"messageId":"57941","fix":"58645","desc":"57943"},{"messageId":"57938","fix":"58646","desc":"57940"},{"messageId":"57941","fix":"58647","desc":"57943"},{"messageId":"57938","fix":"58648","desc":"57940"},{"messageId":"57941","fix":"58649","desc":"57943"},{"messageId":"57938","fix":"58650","desc":"57940"},{"messageId":"57941","fix":"58651","desc":"57943"},{"messageId":"57938","fix":"58652","desc":"57940"},{"messageId":"57941","fix":"58653","desc":"57943"},{"messageId":"57938","fix":"58654","desc":"57940"},{"messageId":"57941","fix":"58655","desc":"57943"},{"messageId":"57938","fix":"58656","desc":"57940"},{"messageId":"57941","fix":"58657","desc":"57943"},{"messageId":"57938","fix":"58658","desc":"57940"},{"messageId":"57941","fix":"58659","desc":"57943"},{"messageId":"57938","fix":"58660","desc":"57940"},{"messageId":"57941","fix":"58661","desc":"57943"},{"messageId":"57938","fix":"58662","desc":"57940"},{"messageId":"57941","fix":"58663","desc":"57943"},{"messageId":"57938","fix":"58664","desc":"57940"},{"messageId":"57941","fix":"58665","desc":"57943"},{"messageId":"57938","fix":"58666","desc":"57940"},{"messageId":"57941","fix":"58667","desc":"57943"},{"messageId":"57938","fix":"58668","desc":"57940"},{"messageId":"57941","fix":"58669","desc":"57943"},{"messageId":"57938","fix":"58670","desc":"57940"},{"messageId":"57941","fix":"58671","desc":"57943"},{"messageId":"57938","fix":"58672","desc":"57940"},{"messageId":"57941","fix":"58673","desc":"57943"},{"messageId":"57938","fix":"58674","desc":"57940"},{"messageId":"57941","fix":"58675","desc":"57943"},{"messageId":"57938","fix":"58676","desc":"57940"},{"messageId":"57941","fix":"58677","desc":"57943"},{"messageId":"57938","fix":"58678","desc":"57940"},{"messageId":"57941","fix":"58679","desc":"57943"},{"messageId":"57938","fix":"58680","desc":"57940"},{"messageId":"57941","fix":"58681","desc":"57943"},{"messageId":"57938","fix":"58682","desc":"57940"},{"messageId":"57941","fix":"58683","desc":"57943"},{"messageId":"57938","fix":"58684","desc":"57940"},{"messageId":"57941","fix":"58685","desc":"57943"},{"messageId":"57938","fix":"58686","desc":"57940"},{"messageId":"57941","fix":"58687","desc":"57943"},{"messageId":"57938","fix":"58688","desc":"57940"},{"messageId":"57941","fix":"58689","desc":"57943"},{"messageId":"57938","fix":"58690","desc":"57940"},{"messageId":"57941","fix":"58691","desc":"57943"},{"messageId":"57938","fix":"58692","desc":"57940"},{"messageId":"57941","fix":"58693","desc":"57943"},{"messageId":"57938","fix":"58694","desc":"57940"},{"messageId":"57941","fix":"58695","desc":"57943"},{"messageId":"57938","fix":"58696","desc":"57940"},{"messageId":"57941","fix":"58697","desc":"57943"},{"messageId":"57938","fix":"58698","desc":"57940"},{"messageId":"57941","fix":"58699","desc":"57943"},{"messageId":"57938","fix":"58700","desc":"57940"},{"messageId":"57941","fix":"58701","desc":"57943"},{"messageId":"57938","fix":"58702","desc":"57940"},{"messageId":"57941","fix":"58703","desc":"57943"},{"messageId":"57938","fix":"58704","desc":"57940"},{"messageId":"57941","fix":"58705","desc":"57943"},{"messageId":"57938","fix":"58706","desc":"57940"},{"messageId":"57941","fix":"58707","desc":"57943"},{"messageId":"57938","fix":"58708","desc":"57940"},{"messageId":"57941","fix":"58709","desc":"57943"},{"messageId":"57938","fix":"58710","desc":"57940"},{"messageId":"57941","fix":"58711","desc":"57943"},{"messageId":"57938","fix":"58712","desc":"57940"},{"messageId":"57941","fix":"58713","desc":"57943"},{"messageId":"57938","fix":"58714","desc":"57940"},{"messageId":"57941","fix":"58715","desc":"57943"},{"messageId":"57938","fix":"58716","desc":"57940"},{"messageId":"57941","fix":"58717","desc":"57943"},{"messageId":"57938","fix":"58718","desc":"57940"},{"messageId":"57941","fix":"58719","desc":"57943"},{"messageId":"57938","fix":"58720","desc":"57940"},{"messageId":"57941","fix":"58721","desc":"57943"},{"messageId":"57938","fix":"58722","desc":"57940"},{"messageId":"57941","fix":"58723","desc":"57943"},{"messageId":"57938","fix":"58724","desc":"57940"},{"messageId":"57941","fix":"58725","desc":"57943"},{"messageId":"57938","fix":"58726","desc":"57940"},{"messageId":"57941","fix":"58727","desc":"57943"},{"messageId":"57938","fix":"58728","desc":"57940"},{"messageId":"57941","fix":"58729","desc":"57943"},{"messageId":"57938","fix":"58730","desc":"57940"},{"messageId":"57941","fix":"58731","desc":"57943"},{"messageId":"57938","fix":"58732","desc":"57940"},{"messageId":"57941","fix":"58733","desc":"57943"},{"messageId":"57938","fix":"58734","desc":"57940"},{"messageId":"57941","fix":"58735","desc":"57943"},{"messageId":"57938","fix":"58736","desc":"57940"},{"messageId":"57941","fix":"58737","desc":"57943"},{"messageId":"57938","fix":"58738","desc":"57940"},{"messageId":"57941","fix":"58739","desc":"57943"},{"messageId":"57938","fix":"58740","desc":"57940"},{"messageId":"57941","fix":"58741","desc":"57943"},{"messageId":"57938","fix":"58742","desc":"57940"},{"messageId":"57941","fix":"58743","desc":"57943"},{"messageId":"57938","fix":"58744","desc":"57940"},{"messageId":"57941","fix":"58745","desc":"57943"},{"messageId":"57938","fix":"58746","desc":"57940"},{"messageId":"57941","fix":"58747","desc":"57943"},{"messageId":"57938","fix":"58748","desc":"57940"},{"messageId":"57941","fix":"58749","desc":"57943"},{"messageId":"57938","fix":"58750","desc":"57940"},{"messageId":"57941","fix":"58751","desc":"57943"},{"messageId":"57938","fix":"58752","desc":"57940"},{"messageId":"57941","fix":"58753","desc":"57943"},{"messageId":"57938","fix":"58754","desc":"57940"},{"messageId":"57941","fix":"58755","desc":"57943"},{"messageId":"57938","fix":"58756","desc":"57940"},{"messageId":"57941","fix":"58757","desc":"57943"},{"messageId":"57938","fix":"58758","desc":"57940"},{"messageId":"57941","fix":"58759","desc":"57943"},{"messageId":"57938","fix":"58760","desc":"57940"},{"messageId":"57941","fix":"58761","desc":"57943"},{"messageId":"57938","fix":"58762","desc":"57940"},{"messageId":"57941","fix":"58763","desc":"57943"},{"messageId":"57938","fix":"58764","desc":"57940"},{"messageId":"57941","fix":"58765","desc":"57943"},{"messageId":"57938","fix":"58766","desc":"57940"},{"messageId":"57941","fix":"58767","desc":"57943"},{"messageId":"57938","fix":"58768","desc":"57940"},{"messageId":"57941","fix":"58769","desc":"57943"},{"messageId":"57938","fix":"58770","desc":"57940"},{"messageId":"57941","fix":"58771","desc":"57943"},{"messageId":"57938","fix":"58772","desc":"57940"},{"messageId":"57941","fix":"58773","desc":"57943"},{"messageId":"57938","fix":"58774","desc":"57940"},{"messageId":"57941","fix":"58775","desc":"57943"},{"messageId":"57938","fix":"58776","desc":"57940"},{"messageId":"57941","fix":"58777","desc":"57943"},{"messageId":"57938","fix":"58778","desc":"57940"},{"messageId":"57941","fix":"58779","desc":"57943"},{"messageId":"57938","fix":"58780","desc":"57940"},{"messageId":"57941","fix":"58781","desc":"57943"},{"messageId":"57938","fix":"58782","desc":"57940"},{"messageId":"57941","fix":"58783","desc":"57943"},{"messageId":"57938","fix":"58784","desc":"57940"},{"messageId":"57941","fix":"58785","desc":"57943"},{"messageId":"57938","fix":"58786","desc":"57940"},{"messageId":"57941","fix":"58787","desc":"57943"},{"messageId":"57938","fix":"58788","desc":"57940"},{"messageId":"57941","fix":"58789","desc":"57943"},{"messageId":"57938","fix":"58790","desc":"57940"},{"messageId":"57941","fix":"58791","desc":"57943"},{"messageId":"57938","fix":"58792","desc":"57940"},{"messageId":"57941","fix":"58793","desc":"57943"},{"messageId":"57938","fix":"58794","desc":"57940"},{"messageId":"57941","fix":"58795","desc":"57943"},{"messageId":"57938","fix":"58796","desc":"57940"},{"messageId":"57941","fix":"58797","desc":"57943"},{"messageId":"57938","fix":"58798","desc":"57940"},{"messageId":"57941","fix":"58799","desc":"57943"},{"messageId":"57938","fix":"58800","desc":"57940"},{"messageId":"57941","fix":"58801","desc":"57943"},{"messageId":"57938","fix":"58802","desc":"57940"},{"messageId":"57941","fix":"58803","desc":"57943"},{"messageId":"57938","fix":"58804","desc":"57940"},{"messageId":"57941","fix":"58805","desc":"57943"},{"messageId":"57938","fix":"58806","desc":"57940"},{"messageId":"57941","fix":"58807","desc":"57943"},{"messageId":"57938","fix":"58808","desc":"57940"},{"messageId":"57941","fix":"58809","desc":"57943"},{"messageId":"57938","fix":"58810","desc":"57940"},{"messageId":"57941","fix":"58811","desc":"57943"},{"messageId":"57938","fix":"58812","desc":"57940"},{"messageId":"57941","fix":"58813","desc":"57943"},{"messageId":"57938","fix":"58814","desc":"57940"},{"messageId":"57941","fix":"58815","desc":"57943"},{"messageId":"57938","fix":"58816","desc":"57940"},{"messageId":"57941","fix":"58817","desc":"57943"},{"messageId":"57938","fix":"58818","desc":"57940"},{"messageId":"57941","fix":"58819","desc":"57943"},{"messageId":"57938","fix":"58820","desc":"57940"},{"messageId":"57941","fix":"58821","desc":"57943"},{"messageId":"57938","fix":"58822","desc":"57940"},{"messageId":"57941","fix":"58823","desc":"57943"},{"messageId":"57938","fix":"58824","desc":"57940"},{"messageId":"57941","fix":"58825","desc":"57943"},{"messageId":"57938","fix":"58826","desc":"57940"},{"messageId":"57941","fix":"58827","desc":"57943"},{"messageId":"57938","fix":"58828","desc":"57940"},{"messageId":"57941","fix":"58829","desc":"57943"},{"messageId":"57938","fix":"58830","desc":"57940"},{"messageId":"57941","fix":"58831","desc":"57943"},{"messageId":"57938","fix":"58832","desc":"57940"},{"messageId":"57941","fix":"58833","desc":"57943"},{"messageId":"57938","fix":"58834","desc":"57940"},{"messageId":"57941","fix":"58835","desc":"57943"},{"messageId":"57938","fix":"58836","desc":"57940"},{"messageId":"57941","fix":"58837","desc":"57943"},{"messageId":"57938","fix":"58838","desc":"57940"},{"messageId":"57941","fix":"58839","desc":"57943"},{"messageId":"57938","fix":"58840","desc":"57940"},{"messageId":"57941","fix":"58841","desc":"57943"},{"messageId":"57938","fix":"58842","desc":"57940"},{"messageId":"57941","fix":"58843","desc":"57943"},{"messageId":"57938","fix":"58844","desc":"57940"},{"messageId":"57941","fix":"58845","desc":"57943"},{"messageId":"57938","fix":"58846","desc":"57940"},{"messageId":"57941","fix":"58847","desc":"57943"},{"messageId":"57938","fix":"58848","desc":"57940"},{"messageId":"57941","fix":"58849","desc":"57943"},{"messageId":"57938","fix":"58850","desc":"57940"},{"messageId":"57941","fix":"58851","desc":"57943"},{"messageId":"57938","fix":"58852","desc":"57940"},{"messageId":"57941","fix":"58853","desc":"57943"},{"messageId":"57938","fix":"58854","desc":"57940"},{"messageId":"57941","fix":"58855","desc":"57943"},{"messageId":"57938","fix":"58856","desc":"57940"},{"messageId":"57941","fix":"58857","desc":"57943"},{"messageId":"57938","fix":"58858","desc":"57940"},{"messageId":"57941","fix":"58859","desc":"57943"},{"messageId":"57938","fix":"58860","desc":"57940"},{"messageId":"57941","fix":"58861","desc":"57943"},{"messageId":"57938","fix":"58862","desc":"57940"},{"messageId":"57941","fix":"58863","desc":"57943"},{"messageId":"57938","fix":"58864","desc":"57940"},{"messageId":"57941","fix":"58865","desc":"57943"},{"messageId":"57938","fix":"58866","desc":"57940"},{"messageId":"57941","fix":"58867","desc":"57943"},{"messageId":"57938","fix":"58868","desc":"57940"},{"messageId":"57941","fix":"58869","desc":"57943"},{"messageId":"57938","fix":"58870","desc":"57940"},{"messageId":"57941","fix":"58871","desc":"57943"},{"messageId":"57938","fix":"58872","desc":"57940"},{"messageId":"57941","fix":"58873","desc":"57943"},{"messageId":"57938","fix":"58874","desc":"57940"},{"messageId":"57941","fix":"58875","desc":"57943"},{"messageId":"57938","fix":"58876","desc":"57940"},{"messageId":"57941","fix":"58877","desc":"57943"},{"messageId":"57938","fix":"58878","desc":"57940"},{"messageId":"57941","fix":"58879","desc":"57943"},{"messageId":"57938","fix":"58880","desc":"57940"},{"messageId":"57941","fix":"58881","desc":"57943"},{"messageId":"57938","fix":"58882","desc":"57940"},{"messageId":"57941","fix":"58883","desc":"57943"},{"messageId":"57938","fix":"58884","desc":"57940"},{"messageId":"57941","fix":"58885","desc":"57943"},{"messageId":"57938","fix":"58886","desc":"57940"},{"messageId":"57941","fix":"58887","desc":"57943"},{"messageId":"57938","fix":"58888","desc":"57940"},{"messageId":"57941","fix":"58889","desc":"57943"},{"messageId":"57938","fix":"58890","desc":"57940"},{"messageId":"57941","fix":"58891","desc":"57943"},{"messageId":"57938","fix":"58892","desc":"57940"},{"messageId":"57941","fix":"58893","desc":"57943"},{"messageId":"57938","fix":"58894","desc":"57940"},{"messageId":"57941","fix":"58895","desc":"57943"},{"messageId":"57938","fix":"58896","desc":"57940"},{"messageId":"57941","fix":"58897","desc":"57943"},{"messageId":"57938","fix":"58898","desc":"57940"},{"messageId":"57941","fix":"58899","desc":"57943"},{"messageId":"57938","fix":"58900","desc":"57940"},{"messageId":"57941","fix":"58901","desc":"57943"},{"messageId":"57938","fix":"58902","desc":"57940"},{"messageId":"57941","fix":"58903","desc":"57943"},{"messageId":"57938","fix":"58904","desc":"57940"},{"messageId":"57941","fix":"58905","desc":"57943"},{"messageId":"57938","fix":"58906","desc":"57940"},{"messageId":"57941","fix":"58907","desc":"57943"},{"messageId":"57938","fix":"58908","desc":"57940"},{"messageId":"57941","fix":"58909","desc":"57943"},{"messageId":"57938","fix":"58910","desc":"57940"},{"messageId":"57941","fix":"58911","desc":"57943"},{"messageId":"57938","fix":"58912","desc":"57940"},{"messageId":"57941","fix":"58913","desc":"57943"},{"messageId":"57938","fix":"58914","desc":"57940"},{"messageId":"57941","fix":"58915","desc":"57943"},{"messageId":"57938","fix":"58916","desc":"57940"},{"messageId":"57941","fix":"58917","desc":"57943"},{"messageId":"57938","fix":"58918","desc":"57940"},{"messageId":"57941","fix":"58919","desc":"57943"},{"messageId":"57938","fix":"58920","desc":"57940"},{"messageId":"57941","fix":"58921","desc":"57943"},{"messageId":"57938","fix":"58922","desc":"57940"},{"messageId":"57941","fix":"58923","desc":"57943"},{"messageId":"57938","fix":"58924","desc":"57940"},{"messageId":"57941","fix":"58925","desc":"57943"},{"messageId":"57938","fix":"58926","desc":"57940"},{"messageId":"57941","fix":"58927","desc":"57943"},{"messageId":"57938","fix":"58928","desc":"57940"},{"messageId":"57941","fix":"58929","desc":"57943"},{"messageId":"57938","fix":"58930","desc":"57940"},{"messageId":"57941","fix":"58931","desc":"57943"},{"messageId":"57938","fix":"58932","desc":"57940"},{"messageId":"57941","fix":"58933","desc":"57943"},{"messageId":"57938","fix":"58934","desc":"57940"},{"messageId":"57941","fix":"58935","desc":"57943"},{"messageId":"57938","fix":"58936","desc":"57940"},{"messageId":"57941","fix":"58937","desc":"57943"},{"messageId":"57938","fix":"58938","desc":"57940"},{"messageId":"57941","fix":"58939","desc":"57943"},{"messageId":"57938","fix":"58940","desc":"57940"},{"messageId":"57941","fix":"58941","desc":"57943"},{"messageId":"57938","fix":"58942","desc":"57940"},{"messageId":"57941","fix":"58943","desc":"57943"},{"messageId":"57938","fix":"58944","desc":"57940"},{"messageId":"57941","fix":"58945","desc":"57943"},{"messageId":"57938","fix":"58946","desc":"57940"},{"messageId":"57941","fix":"58947","desc":"57943"},{"messageId":"57938","fix":"58948","desc":"57940"},{"messageId":"57941","fix":"58949","desc":"57943"},{"messageId":"57938","fix":"58950","desc":"57940"},{"messageId":"57941","fix":"58951","desc":"57943"},{"messageId":"57938","fix":"58952","desc":"57940"},{"messageId":"57941","fix":"58953","desc":"57943"},{"messageId":"57938","fix":"58954","desc":"57940"},{"messageId":"57941","fix":"58955","desc":"57943"},{"messageId":"57938","fix":"58956","desc":"57940"},{"messageId":"57941","fix":"58957","desc":"57943"},{"messageId":"57938","fix":"58958","desc":"57940"},{"messageId":"57941","fix":"58959","desc":"57943"},{"messageId":"57938","fix":"58960","desc":"57940"},{"messageId":"57941","fix":"58961","desc":"57943"},{"messageId":"57938","fix":"58962","desc":"57940"},{"messageId":"57941","fix":"58963","desc":"57943"},{"messageId":"57938","fix":"58964","desc":"57940"},{"messageId":"57941","fix":"58965","desc":"57943"},{"messageId":"57938","fix":"58966","desc":"57940"},{"messageId":"57941","fix":"58967","desc":"57943"},{"messageId":"57938","fix":"58968","desc":"57940"},{"messageId":"57941","fix":"58969","desc":"57943"},{"messageId":"57938","fix":"58970","desc":"57940"},{"messageId":"57941","fix":"58971","desc":"57943"},{"messageId":"57938","fix":"58972","desc":"57940"},{"messageId":"57941","fix":"58973","desc":"57943"},{"messageId":"57938","fix":"58974","desc":"57940"},{"messageId":"57941","fix":"58975","desc":"57943"},{"messageId":"57938","fix":"58976","desc":"57940"},{"messageId":"57941","fix":"58977","desc":"57943"},{"messageId":"57938","fix":"58978","desc":"57940"},{"messageId":"57941","fix":"58979","desc":"57943"},{"messageId":"57938","fix":"58980","desc":"57940"},{"messageId":"57941","fix":"58981","desc":"57943"},{"messageId":"57938","fix":"58982","desc":"57940"},{"messageId":"57941","fix":"58983","desc":"57943"},{"messageId":"57938","fix":"58984","desc":"57940"},{"messageId":"57941","fix":"58985","desc":"57943"},{"messageId":"57938","fix":"58986","desc":"57940"},{"messageId":"57941","fix":"58987","desc":"57943"},{"messageId":"57938","fix":"58988","desc":"57940"},{"messageId":"57941","fix":"58989","desc":"57943"},{"messageId":"57938","fix":"58990","desc":"57940"},{"messageId":"57941","fix":"58991","desc":"57943"},{"messageId":"57938","fix":"58992","desc":"57940"},{"messageId":"57941","fix":"58993","desc":"57943"},{"messageId":"57938","fix":"58994","desc":"57940"},{"messageId":"57941","fix":"58995","desc":"57943"},{"messageId":"57938","fix":"58996","desc":"57940"},{"messageId":"57941","fix":"58997","desc":"57943"},{"messageId":"57938","fix":"58998","desc":"57940"},{"messageId":"57941","fix":"58999","desc":"57943"},{"messageId":"57938","fix":"59000","desc":"57940"},{"messageId":"57941","fix":"59001","desc":"57943"},{"messageId":"57938","fix":"59002","desc":"57940"},{"messageId":"57941","fix":"59003","desc":"57943"},{"messageId":"57938","fix":"59004","desc":"57940"},{"messageId":"57941","fix":"59005","desc":"57943"},{"messageId":"57938","fix":"59006","desc":"57940"},{"messageId":"57941","fix":"59007","desc":"57943"},{"messageId":"57938","fix":"59008","desc":"57940"},{"messageId":"57941","fix":"59009","desc":"57943"},{"messageId":"57938","fix":"59010","desc":"57940"},{"messageId":"57941","fix":"59011","desc":"57943"},{"messageId":"57938","fix":"59012","desc":"57940"},{"messageId":"57941","fix":"59013","desc":"57943"},{"messageId":"57938","fix":"59014","desc":"57940"},{"messageId":"57941","fix":"59015","desc":"57943"},{"messageId":"57938","fix":"59016","desc":"57940"},{"messageId":"57941","fix":"59017","desc":"57943"},{"messageId":"57938","fix":"59018","desc":"57940"},{"messageId":"57941","fix":"59019","desc":"57943"},{"messageId":"57938","fix":"59020","desc":"57940"},{"messageId":"57941","fix":"59021","desc":"57943"},{"messageId":"57938","fix":"59022","desc":"57940"},{"messageId":"57941","fix":"59023","desc":"57943"},{"messageId":"57938","fix":"59024","desc":"57940"},{"messageId":"57941","fix":"59025","desc":"57943"},{"messageId":"57938","fix":"59026","desc":"57940"},{"messageId":"57941","fix":"59027","desc":"57943"},{"messageId":"57938","fix":"59028","desc":"57940"},{"messageId":"57941","fix":"59029","desc":"57943"},{"messageId":"57938","fix":"59030","desc":"57940"},{"messageId":"57941","fix":"59031","desc":"57943"},{"messageId":"57938","fix":"59032","desc":"57940"},{"messageId":"57941","fix":"59033","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"59034","desc":"57940"},{"messageId":"57941","fix":"59035","desc":"57943"},{"messageId":"57938","fix":"59036","desc":"57940"},{"messageId":"57941","fix":"59037","desc":"57943"},{"messageId":"57938","fix":"59038","desc":"57940"},{"messageId":"57941","fix":"59039","desc":"57943"},{"messageId":"57938","fix":"59040","desc":"57940"},{"messageId":"57941","fix":"59041","desc":"57943"},{"messageId":"57938","fix":"59042","desc":"57940"},{"messageId":"57941","fix":"59043","desc":"57943"},{"messageId":"57938","fix":"59044","desc":"57940"},{"messageId":"57941","fix":"59045","desc":"57943"},{"messageId":"57938","fix":"59046","desc":"57940"},{"messageId":"57941","fix":"59047","desc":"57943"},{"messageId":"57938","fix":"59048","desc":"57940"},{"messageId":"57941","fix":"59049","desc":"57943"},{"messageId":"57938","fix":"59050","desc":"57940"},{"messageId":"57941","fix":"59051","desc":"57943"},{"messageId":"57938","fix":"59052","desc":"57940"},{"messageId":"57941","fix":"59053","desc":"57943"},{"messageId":"57938","fix":"59054","desc":"57940"},{"messageId":"57941","fix":"59055","desc":"57943"},{"messageId":"57938","fix":"59056","desc":"57940"},{"messageId":"57941","fix":"59057","desc":"57943"},{"messageId":"57938","fix":"59058","desc":"57940"},{"messageId":"57941","fix":"59059","desc":"57943"},{"messageId":"57938","fix":"59060","desc":"57940"},{"messageId":"57941","fix":"59061","desc":"57943"},{"messageId":"57938","fix":"59062","desc":"57940"},{"messageId":"57941","fix":"59063","desc":"57943"},{"messageId":"57938","fix":"59064","desc":"57940"},{"messageId":"57941","fix":"59065","desc":"57943"},{"messageId":"57938","fix":"59066","desc":"57940"},{"messageId":"57941","fix":"59067","desc":"57943"},{"messageId":"57938","fix":"59068","desc":"57940"},{"messageId":"57941","fix":"59069","desc":"57943"},{"messageId":"57938","fix":"59070","desc":"57940"},{"messageId":"57941","fix":"59071","desc":"57943"},{"messageId":"57938","fix":"59072","desc":"57940"},{"messageId":"57941","fix":"59073","desc":"57943"},{"messageId":"57938","fix":"59074","desc":"57940"},{"messageId":"57941","fix":"59075","desc":"57943"},{"messageId":"57938","fix":"59076","desc":"57940"},{"messageId":"57941","fix":"59077","desc":"57943"},{"messageId":"57938","fix":"59078","desc":"57940"},{"messageId":"57941","fix":"59079","desc":"57943"},{"messageId":"57938","fix":"59080","desc":"57940"},{"messageId":"57941","fix":"59081","desc":"57943"},{"messageId":"57938","fix":"59082","desc":"57940"},{"messageId":"57941","fix":"59083","desc":"57943"},{"messageId":"57938","fix":"59084","desc":"57940"},{"messageId":"57941","fix":"59085","desc":"57943"},{"messageId":"57938","fix":"59086","desc":"57940"},{"messageId":"57941","fix":"59087","desc":"57943"},{"messageId":"57938","fix":"59088","desc":"57940"},{"messageId":"57941","fix":"59089","desc":"57943"},{"messageId":"57938","fix":"59090","desc":"57940"},{"messageId":"57941","fix":"59091","desc":"57943"},{"messageId":"57938","fix":"59092","desc":"57940"},{"messageId":"57941","fix":"59093","desc":"57943"},{"messageId":"57938","fix":"59094","desc":"57940"},{"messageId":"57941","fix":"59095","desc":"57943"},{"messageId":"57938","fix":"59096","desc":"57940"},{"messageId":"57941","fix":"59097","desc":"57943"},{"messageId":"57938","fix":"59098","desc":"57940"},{"messageId":"57941","fix":"59099","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"59100","desc":"57940"},{"messageId":"57941","fix":"59101","desc":"57943"},{"messageId":"57938","fix":"59102","desc":"57940"},{"messageId":"57941","fix":"59103","desc":"57943"},{"messageId":"57938","fix":"59104","desc":"57940"},{"messageId":"57941","fix":"59105","desc":"57943"},{"messageId":"57938","fix":"59106","desc":"57940"},{"messageId":"57941","fix":"59107","desc":"57943"},{"messageId":"57938","fix":"59108","desc":"57940"},{"messageId":"57941","fix":"59109","desc":"57943"},{"messageId":"57938","fix":"59110","desc":"57940"},{"messageId":"57941","fix":"59111","desc":"57943"},{"messageId":"57938","fix":"59112","desc":"57940"},{"messageId":"57941","fix":"59113","desc":"57943"},{"messageId":"57938","fix":"59114","desc":"57940"},{"messageId":"57941","fix":"59115","desc":"57943"},{"messageId":"57938","fix":"59116","desc":"57940"},{"messageId":"57941","fix":"59117","desc":"57943"},{"messageId":"57938","fix":"59118","desc":"57940"},{"messageId":"57941","fix":"59119","desc":"57943"},{"messageId":"57938","fix":"59120","desc":"57940"},{"messageId":"57941","fix":"59121","desc":"57943"},{"messageId":"57938","fix":"59122","desc":"57940"},{"messageId":"57941","fix":"59123","desc":"57943"},{"messageId":"57938","fix":"59124","desc":"57940"},{"messageId":"57941","fix":"59125","desc":"57943"},{"messageId":"57938","fix":"59126","desc":"57940"},{"messageId":"57941","fix":"59127","desc":"57943"},{"messageId":"57938","fix":"59128","desc":"57940"},{"messageId":"57941","fix":"59129","desc":"57943"},{"messageId":"57938","fix":"59130","desc":"57940"},{"messageId":"57941","fix":"59131","desc":"57943"},{"messageId":"57938","fix":"59132","desc":"57940"},{"messageId":"57941","fix":"59133","desc":"57943"},{"messageId":"57938","fix":"59134","desc":"57940"},{"messageId":"57941","fix":"59135","desc":"57943"},{"messageId":"57938","fix":"59136","desc":"57940"},{"messageId":"57941","fix":"59137","desc":"57943"},{"messageId":"57938","fix":"59138","desc":"57940"},{"messageId":"57941","fix":"59139","desc":"57943"},{"messageId":"57938","fix":"59140","desc":"57940"},{"messageId":"57941","fix":"59141","desc":"57943"},{"messageId":"57938","fix":"59142","desc":"57940"},{"messageId":"57941","fix":"59143","desc":"57943"},{"messageId":"57938","fix":"59144","desc":"57940"},{"messageId":"57941","fix":"59145","desc":"57943"},{"messageId":"57938","fix":"59146","desc":"57940"},{"messageId":"57941","fix":"59147","desc":"57943"},{"messageId":"57938","fix":"59148","desc":"57940"},{"messageId":"57941","fix":"59149","desc":"57943"},{"messageId":"57938","fix":"59150","desc":"57940"},{"messageId":"57941","fix":"59151","desc":"57943"},{"messageId":"57938","fix":"59152","desc":"57940"},{"messageId":"57941","fix":"59153","desc":"57943"},{"messageId":"57938","fix":"59154","desc":"57940"},{"messageId":"57941","fix":"59155","desc":"57943"},{"messageId":"57938","fix":"59156","desc":"57940"},{"messageId":"57941","fix":"59157","desc":"57943"},{"messageId":"57938","fix":"59158","desc":"57940"},{"messageId":"57941","fix":"59159","desc":"57943"},{"messageId":"57938","fix":"59160","desc":"57940"},{"messageId":"57941","fix":"59161","desc":"57943"},{"messageId":"57938","fix":"59162","desc":"57940"},{"messageId":"57941","fix":"59163","desc":"57943"},{"messageId":"57938","fix":"59164","desc":"57940"},{"messageId":"57941","fix":"59165","desc":"57943"},{"messageId":"57938","fix":"59166","desc":"57940"},{"messageId":"57941","fix":"59167","desc":"57943"},{"messageId":"57938","fix":"59168","desc":"57940"},{"messageId":"57941","fix":"59169","desc":"57943"},{"messageId":"57938","fix":"59170","desc":"57940"},{"messageId":"57941","fix":"59171","desc":"57943"},{"messageId":"57938","fix":"59172","desc":"57940"},{"messageId":"57941","fix":"59173","desc":"57943"},{"messageId":"57938","fix":"59174","desc":"57940"},{"messageId":"57941","fix":"59175","desc":"57943"},{"messageId":"57938","fix":"59176","desc":"57940"},{"messageId":"57941","fix":"59177","desc":"57943"},{"messageId":"57938","fix":"59178","desc":"57940"},{"messageId":"57941","fix":"59179","desc":"57943"},{"messageId":"57938","fix":"59180","desc":"57940"},{"messageId":"57941","fix":"59181","desc":"57943"},{"messageId":"57938","fix":"59182","desc":"57940"},{"messageId":"57941","fix":"59183","desc":"57943"},{"messageId":"57938","fix":"59184","desc":"57940"},{"messageId":"57941","fix":"59185","desc":"57943"},{"messageId":"57938","fix":"59186","desc":"57940"},{"messageId":"57941","fix":"59187","desc":"57943"},{"messageId":"57938","fix":"59188","desc":"57940"},{"messageId":"57941","fix":"59189","desc":"57943"},{"messageId":"57938","fix":"59190","desc":"57940"},{"messageId":"57941","fix":"59191","desc":"57943"},{"messageId":"57938","fix":"59192","desc":"57940"},{"messageId":"57941","fix":"59193","desc":"57943"},{"messageId":"57938","fix":"59194","desc":"57940"},{"messageId":"57941","fix":"59195","desc":"57943"},{"messageId":"57938","fix":"59196","desc":"57940"},{"messageId":"57941","fix":"59197","desc":"57943"},{"messageId":"57938","fix":"59198","desc":"57940"},{"messageId":"57941","fix":"59199","desc":"57943"},{"messageId":"57938","fix":"59200","desc":"57940"},{"messageId":"57941","fix":"59201","desc":"57943"},{"messageId":"57938","fix":"59202","desc":"57940"},{"messageId":"57941","fix":"59203","desc":"57943"},{"messageId":"57938","fix":"59204","desc":"57940"},{"messageId":"57941","fix":"59205","desc":"57943"},{"messageId":"57938","fix":"59206","desc":"57940"},{"messageId":"57941","fix":"59207","desc":"57943"},{"messageId":"57938","fix":"59208","desc":"57940"},{"messageId":"57941","fix":"59209","desc":"57943"},{"messageId":"57938","fix":"59210","desc":"57940"},{"messageId":"57941","fix":"59211","desc":"57943"},{"messageId":"57938","fix":"59212","desc":"57940"},{"messageId":"57941","fix":"59213","desc":"57943"},{"messageId":"57938","fix":"59214","desc":"57940"},{"messageId":"57941","fix":"59215","desc":"57943"},{"messageId":"57938","fix":"59216","desc":"57940"},{"messageId":"57941","fix":"59217","desc":"57943"},{"messageId":"57938","fix":"59218","desc":"57940"},{"messageId":"57941","fix":"59219","desc":"57943"},{"messageId":"57938","fix":"59220","desc":"57940"},{"messageId":"57941","fix":"59221","desc":"57943"},{"messageId":"57938","fix":"59222","desc":"57940"},{"messageId":"57941","fix":"59223","desc":"57943"},{"messageId":"57938","fix":"59224","desc":"57940"},{"messageId":"57941","fix":"59225","desc":"57943"},{"messageId":"57938","fix":"59226","desc":"57940"},{"messageId":"57941","fix":"59227","desc":"57943"},{"messageId":"57938","fix":"59228","desc":"57940"},{"messageId":"57941","fix":"59229","desc":"57943"},{"messageId":"57938","fix":"59230","desc":"57940"},{"messageId":"57941","fix":"59231","desc":"57943"},{"messageId":"57938","fix":"59232","desc":"57940"},{"messageId":"57941","fix":"59233","desc":"57943"},{"messageId":"57938","fix":"59234","desc":"57940"},{"messageId":"57941","fix":"59235","desc":"57943"},{"messageId":"57938","fix":"59236","desc":"57940"},{"messageId":"57941","fix":"59237","desc":"57943"},{"messageId":"57938","fix":"59238","desc":"57940"},{"messageId":"57941","fix":"59239","desc":"57943"},{"messageId":"57938","fix":"59240","desc":"57940"},{"messageId":"57941","fix":"59241","desc":"57943"},{"messageId":"57938","fix":"59242","desc":"57940"},{"messageId":"57941","fix":"59243","desc":"57943"},{"messageId":"57938","fix":"59244","desc":"57940"},{"messageId":"57941","fix":"59245","desc":"57943"},{"messageId":"57938","fix":"59246","desc":"57940"},{"messageId":"57941","fix":"59247","desc":"57943"},{"messageId":"57938","fix":"59248","desc":"57940"},{"messageId":"57941","fix":"59249","desc":"57943"},{"messageId":"57938","fix":"59250","desc":"57940"},{"messageId":"57941","fix":"59251","desc":"57943"},{"messageId":"57938","fix":"59252","desc":"57940"},{"messageId":"57941","fix":"59253","desc":"57943"},{"messageId":"57938","fix":"59254","desc":"57940"},{"messageId":"57941","fix":"59255","desc":"57943"},{"messageId":"57938","fix":"59256","desc":"57940"},{"messageId":"57941","fix":"59257","desc":"57943"},{"messageId":"57938","fix":"59258","desc":"57940"},{"messageId":"57941","fix":"59259","desc":"57943"},{"messageId":"57938","fix":"59260","desc":"57940"},{"messageId":"57941","fix":"59261","desc":"57943"},{"messageId":"57938","fix":"59262","desc":"57940"},{"messageId":"57941","fix":"59263","desc":"57943"},{"messageId":"57938","fix":"59264","desc":"57940"},{"messageId":"57941","fix":"59265","desc":"57943"},{"messageId":"57938","fix":"59266","desc":"57940"},{"messageId":"57941","fix":"59267","desc":"57943"},{"messageId":"57938","fix":"59268","desc":"57940"},{"messageId":"57941","fix":"59269","desc":"57943"},{"messageId":"57938","fix":"59270","desc":"57940"},{"messageId":"57941","fix":"59271","desc":"57943"},{"messageId":"57938","fix":"59272","desc":"57940"},{"messageId":"57941","fix":"59273","desc":"57943"},{"messageId":"57938","fix":"59274","desc":"57940"},{"messageId":"57941","fix":"59275","desc":"57943"},{"messageId":"57938","fix":"59276","desc":"57940"},{"messageId":"57941","fix":"59277","desc":"57943"},{"messageId":"57938","fix":"59278","desc":"57940"},{"messageId":"57941","fix":"59279","desc":"57943"},{"messageId":"57938","fix":"59280","desc":"57940"},{"messageId":"57941","fix":"59281","desc":"57943"},{"messageId":"57938","fix":"59282","desc":"57940"},{"messageId":"57941","fix":"59283","desc":"57943"},{"messageId":"57938","fix":"59284","desc":"57940"},{"messageId":"57941","fix":"59285","desc":"57943"},{"messageId":"57938","fix":"59286","desc":"57940"},{"messageId":"57941","fix":"59287","desc":"57943"},{"messageId":"57938","fix":"59288","desc":"57940"},{"messageId":"57941","fix":"59289","desc":"57943"},{"messageId":"57938","fix":"59290","desc":"57940"},{"messageId":"57941","fix":"59291","desc":"57943"},{"messageId":"57938","fix":"59292","desc":"57940"},{"messageId":"57941","fix":"59293","desc":"57943"},{"messageId":"57938","fix":"59294","desc":"57940"},{"messageId":"57941","fix":"59295","desc":"57943"},{"messageId":"57938","fix":"59296","desc":"57940"},{"messageId":"57941","fix":"59297","desc":"57943"},{"messageId":"57938","fix":"59298","desc":"57940"},{"messageId":"57941","fix":"59299","desc":"57943"},{"messageId":"57938","fix":"59300","desc":"57940"},{"messageId":"57941","fix":"59301","desc":"57943"},{"messageId":"57938","fix":"59302","desc":"57940"},{"messageId":"57941","fix":"59303","desc":"57943"},{"messageId":"57938","fix":"59304","desc":"57940"},{"messageId":"57941","fix":"59305","desc":"57943"},{"messageId":"57938","fix":"59306","desc":"57940"},{"messageId":"57941","fix":"59307","desc":"57943"},{"messageId":"57938","fix":"59308","desc":"57940"},{"messageId":"57941","fix":"59309","desc":"57943"},{"messageId":"57938","fix":"59310","desc":"57940"},{"messageId":"57941","fix":"59311","desc":"57943"},{"messageId":"57938","fix":"59312","desc":"57940"},{"messageId":"57941","fix":"59313","desc":"57943"},{"messageId":"57938","fix":"59314","desc":"57940"},{"messageId":"57941","fix":"59315","desc":"57943"},{"messageId":"57938","fix":"59316","desc":"57940"},{"messageId":"57941","fix":"59317","desc":"57943"},{"messageId":"57938","fix":"59318","desc":"57940"},{"messageId":"57941","fix":"59319","desc":"57943"},{"messageId":"57938","fix":"59320","desc":"57940"},{"messageId":"57941","fix":"59321","desc":"57943"},{"messageId":"57938","fix":"59322","desc":"57940"},{"messageId":"57941","fix":"59323","desc":"57943"},{"messageId":"57938","fix":"59324","desc":"57940"},{"messageId":"57941","fix":"59325","desc":"57943"},{"messageId":"57938","fix":"59326","desc":"57940"},{"messageId":"57941","fix":"59327","desc":"57943"},{"messageId":"57938","fix":"59328","desc":"57940"},{"messageId":"57941","fix":"59329","desc":"57943"},{"messageId":"57938","fix":"59330","desc":"57940"},{"messageId":"57941","fix":"59331","desc":"57943"},{"messageId":"57938","fix":"59332","desc":"57940"},{"messageId":"57941","fix":"59333","desc":"57943"},{"messageId":"57938","fix":"59334","desc":"57940"},{"messageId":"57941","fix":"59335","desc":"57943"},{"messageId":"57938","fix":"59336","desc":"57940"},{"messageId":"57941","fix":"59337","desc":"57943"},{"messageId":"57938","fix":"59338","desc":"57940"},{"messageId":"57941","fix":"59339","desc":"57943"},{"messageId":"57938","fix":"59340","desc":"57940"},{"messageId":"57941","fix":"59341","desc":"57943"},{"messageId":"57938","fix":"59342","desc":"57940"},{"messageId":"57941","fix":"59343","desc":"57943"},{"messageId":"57938","fix":"59344","desc":"57940"},{"messageId":"57941","fix":"59345","desc":"57943"},{"messageId":"57938","fix":"59346","desc":"57940"},{"messageId":"57941","fix":"59347","desc":"57943"},{"messageId":"57938","fix":"59348","desc":"57940"},{"messageId":"57941","fix":"59349","desc":"57943"},{"messageId":"57938","fix":"59350","desc":"57940"},{"messageId":"57941","fix":"59351","desc":"57943"},{"messageId":"57938","fix":"59352","desc":"57940"},{"messageId":"57941","fix":"59353","desc":"57943"},{"messageId":"57938","fix":"59354","desc":"57940"},{"messageId":"57941","fix":"59355","desc":"57943"},{"messageId":"57938","fix":"59356","desc":"57940"},{"messageId":"57941","fix":"59357","desc":"57943"},{"messageId":"57938","fix":"59358","desc":"57940"},{"messageId":"57941","fix":"59359","desc":"57943"},{"messageId":"57938","fix":"59360","desc":"57940"},{"messageId":"57941","fix":"59361","desc":"57943"},{"messageId":"57938","fix":"59362","desc":"57940"},{"messageId":"57941","fix":"59363","desc":"57943"},{"messageId":"57938","fix":"59364","desc":"57940"},{"messageId":"57941","fix":"59365","desc":"57943"},{"messageId":"57938","fix":"59366","desc":"57940"},{"messageId":"57941","fix":"59367","desc":"57943"},{"messageId":"57938","fix":"59368","desc":"57940"},{"messageId":"57941","fix":"59369","desc":"57943"},{"messageId":"57938","fix":"59370","desc":"57940"},{"messageId":"57941","fix":"59371","desc":"57943"},{"messageId":"57938","fix":"59372","desc":"57940"},{"messageId":"57941","fix":"59373","desc":"57943"},{"messageId":"57938","fix":"59374","desc":"57940"},{"messageId":"57941","fix":"59375","desc":"57943"},{"messageId":"57938","fix":"59376","desc":"57940"},{"messageId":"57941","fix":"59377","desc":"57943"},{"messageId":"57938","fix":"59378","desc":"57940"},{"messageId":"57941","fix":"59379","desc":"57943"},{"messageId":"57938","fix":"59380","desc":"57940"},{"messageId":"57941","fix":"59381","desc":"57943"},{"messageId":"57938","fix":"59382","desc":"57940"},{"messageId":"57941","fix":"59383","desc":"57943"},{"messageId":"57938","fix":"59384","desc":"57940"},{"messageId":"57941","fix":"59385","desc":"57943"},{"messageId":"57938","fix":"59386","desc":"57940"},{"messageId":"57941","fix":"59387","desc":"57943"},{"messageId":"57938","fix":"59388","desc":"57940"},{"messageId":"57941","fix":"59389","desc":"57943"},{"messageId":"57938","fix":"59390","desc":"57940"},{"messageId":"57941","fix":"59391","desc":"57943"},{"messageId":"57938","fix":"59392","desc":"57940"},{"messageId":"57941","fix":"59393","desc":"57943"},{"messageId":"57938","fix":"59394","desc":"57940"},{"messageId":"57941","fix":"59395","desc":"57943"},{"messageId":"57938","fix":"59396","desc":"57940"},{"messageId":"57941","fix":"59397","desc":"57943"},{"messageId":"57938","fix":"59398","desc":"57940"},{"messageId":"57941","fix":"59399","desc":"57943"},{"messageId":"57938","fix":"59400","desc":"57940"},{"messageId":"57941","fix":"59401","desc":"57943"},{"messageId":"57938","fix":"59402","desc":"57940"},{"messageId":"57941","fix":"59403","desc":"57943"},{"messageId":"57938","fix":"59404","desc":"57940"},{"messageId":"57941","fix":"59405","desc":"57943"},{"messageId":"57938","fix":"59406","desc":"57940"},{"messageId":"57941","fix":"59407","desc":"57943"},{"messageId":"57938","fix":"59408","desc":"57940"},{"messageId":"57941","fix":"59409","desc":"57943"},{"messageId":"57938","fix":"59410","desc":"57940"},{"messageId":"57941","fix":"59411","desc":"57943"},{"messageId":"57938","fix":"59412","desc":"57940"},{"messageId":"57941","fix":"59413","desc":"57943"},{"messageId":"57938","fix":"59414","desc":"57940"},{"messageId":"57941","fix":"59415","desc":"57943"},{"messageId":"57938","fix":"59416","desc":"57940"},{"messageId":"57941","fix":"59417","desc":"57943"},{"messageId":"57938","fix":"59418","desc":"57940"},{"messageId":"57941","fix":"59419","desc":"57943"},{"messageId":"57938","fix":"59420","desc":"57940"},{"messageId":"57941","fix":"59421","desc":"57943"},{"messageId":"57938","fix":"59422","desc":"57940"},{"messageId":"57941","fix":"59423","desc":"57943"},{"messageId":"57938","fix":"59424","desc":"57940"},{"messageId":"57941","fix":"59425","desc":"57943"},{"messageId":"57938","fix":"59426","desc":"57940"},{"messageId":"57941","fix":"59427","desc":"57943"},{"messageId":"57938","fix":"59428","desc":"57940"},{"messageId":"57941","fix":"59429","desc":"57943"},{"messageId":"57938","fix":"59430","desc":"57940"},{"messageId":"57941","fix":"59431","desc":"57943"},{"messageId":"57938","fix":"59432","desc":"57940"},{"messageId":"57941","fix":"59433","desc":"57943"},{"messageId":"57938","fix":"59434","desc":"57940"},{"messageId":"57941","fix":"59435","desc":"57943"},{"messageId":"57938","fix":"59436","desc":"57940"},{"messageId":"57941","fix":"59437","desc":"57943"},{"messageId":"57938","fix":"59438","desc":"57940"},{"messageId":"57941","fix":"59439","desc":"57943"},{"messageId":"57938","fix":"59440","desc":"57940"},{"messageId":"57941","fix":"59441","desc":"57943"},{"messageId":"57938","fix":"59442","desc":"57940"},{"messageId":"57941","fix":"59443","desc":"57943"},{"messageId":"57938","fix":"59444","desc":"57940"},{"messageId":"57941","fix":"59445","desc":"57943"},{"messageId":"57938","fix":"59446","desc":"57940"},{"messageId":"57941","fix":"59447","desc":"57943"},{"messageId":"57938","fix":"59448","desc":"57940"},{"messageId":"57941","fix":"59449","desc":"57943"},{"messageId":"57938","fix":"59450","desc":"57940"},{"messageId":"57941","fix":"59451","desc":"57943"},{"messageId":"57938","fix":"59452","desc":"57940"},{"messageId":"57941","fix":"59453","desc":"57943"},{"messageId":"57938","fix":"59454","desc":"57940"},{"messageId":"57941","fix":"59455","desc":"57943"},{"messageId":"57938","fix":"59456","desc":"57940"},{"messageId":"57941","fix":"59457","desc":"57943"},{"messageId":"57938","fix":"59458","desc":"57940"},{"messageId":"57941","fix":"59459","desc":"57943"},{"messageId":"57938","fix":"59460","desc":"57940"},{"messageId":"57941","fix":"59461","desc":"57943"},{"messageId":"57938","fix":"59462","desc":"57940"},{"messageId":"57941","fix":"59463","desc":"57943"},{"messageId":"57938","fix":"59464","desc":"57940"},{"messageId":"57941","fix":"59465","desc":"57943"},{"messageId":"57938","fix":"59466","desc":"57940"},{"messageId":"57941","fix":"59467","desc":"57943"},{"messageId":"57938","fix":"59468","desc":"57940"},{"messageId":"57941","fix":"59469","desc":"57943"},{"messageId":"57938","fix":"59470","desc":"57940"},{"messageId":"57941","fix":"59471","desc":"57943"},{"messageId":"57938","fix":"59472","desc":"57940"},{"messageId":"57941","fix":"59473","desc":"57943"},{"messageId":"57938","fix":"59474","desc":"57940"},{"messageId":"57941","fix":"59475","desc":"57943"},{"messageId":"57938","fix":"59476","desc":"57940"},{"messageId":"57941","fix":"59477","desc":"57943"},{"messageId":"57938","fix":"59478","desc":"57940"},{"messageId":"57941","fix":"59479","desc":"57943"},{"messageId":"57938","fix":"59480","desc":"57940"},{"messageId":"57941","fix":"59481","desc":"57943"},{"messageId":"57938","fix":"59482","desc":"57940"},{"messageId":"57941","fix":"59483","desc":"57943"},{"messageId":"57938","fix":"59484","desc":"57940"},{"messageId":"57941","fix":"59485","desc":"57943"},{"messageId":"57938","fix":"59486","desc":"57940"},{"messageId":"57941","fix":"59487","desc":"57943"},{"messageId":"57938","fix":"59488","desc":"57940"},{"messageId":"57941","fix":"59489","desc":"57943"},{"messageId":"57938","fix":"59490","desc":"57940"},{"messageId":"57941","fix":"59491","desc":"57943"},{"messageId":"57938","fix":"59492","desc":"57940"},{"messageId":"57941","fix":"59493","desc":"57943"},{"messageId":"57938","fix":"59494","desc":"57940"},{"messageId":"57941","fix":"59495","desc":"57943"},{"messageId":"57938","fix":"59496","desc":"57940"},{"messageId":"57941","fix":"59497","desc":"57943"},{"messageId":"57938","fix":"59498","desc":"57940"},{"messageId":"57941","fix":"59499","desc":"57943"},{"messageId":"57938","fix":"59500","desc":"57940"},{"messageId":"57941","fix":"59501","desc":"57943"},{"messageId":"57938","fix":"59502","desc":"57940"},{"messageId":"57941","fix":"59503","desc":"57943"},{"messageId":"57938","fix":"59504","desc":"57940"},{"messageId":"57941","fix":"59505","desc":"57943"},{"messageId":"57938","fix":"59506","desc":"57940"},{"messageId":"57941","fix":"59507","desc":"57943"},{"messageId":"57938","fix":"59508","desc":"57940"},{"messageId":"57941","fix":"59509","desc":"57943"},{"messageId":"57938","fix":"59510","desc":"57940"},{"messageId":"57941","fix":"59511","desc":"57943"},{"messageId":"57938","fix":"59512","desc":"57940"},{"messageId":"57941","fix":"59513","desc":"57943"},{"messageId":"57938","fix":"59514","desc":"57940"},{"messageId":"57941","fix":"59515","desc":"57943"},{"messageId":"57938","fix":"59516","desc":"57940"},{"messageId":"57941","fix":"59517","desc":"57943"},{"messageId":"57938","fix":"59518","desc":"57940"},{"messageId":"57941","fix":"59519","desc":"57943"},{"messageId":"57938","fix":"59520","desc":"57940"},{"messageId":"57941","fix":"59521","desc":"57943"},{"messageId":"57938","fix":"59522","desc":"57940"},{"messageId":"57941","fix":"59523","desc":"57943"},{"messageId":"57938","fix":"59524","desc":"57940"},{"messageId":"57941","fix":"59525","desc":"57943"},{"messageId":"57938","fix":"59526","desc":"57940"},{"messageId":"57941","fix":"59527","desc":"57943"},{"messageId":"57938","fix":"59528","desc":"57940"},{"messageId":"57941","fix":"59529","desc":"57943"},{"messageId":"57938","fix":"59530","desc":"57940"},{"messageId":"57941","fix":"59531","desc":"57943"},{"messageId":"57938","fix":"59532","desc":"57940"},{"messageId":"57941","fix":"59533","desc":"57943"},{"messageId":"57938","fix":"59534","desc":"57940"},{"messageId":"57941","fix":"59535","desc":"57943"},{"messageId":"57938","fix":"59536","desc":"57940"},{"messageId":"57941","fix":"59537","desc":"57943"},{"messageId":"57938","fix":"59538","desc":"57940"},{"messageId":"57941","fix":"59539","desc":"57943"},{"messageId":"57938","fix":"59540","desc":"57940"},{"messageId":"57941","fix":"59541","desc":"57943"},{"messageId":"57938","fix":"59542","desc":"57940"},{"messageId":"57941","fix":"59543","desc":"57943"},{"messageId":"57938","fix":"59544","desc":"57940"},{"messageId":"57941","fix":"59545","desc":"57943"},{"messageId":"57938","fix":"59546","desc":"57940"},{"messageId":"57941","fix":"59547","desc":"57943"},{"messageId":"57938","fix":"59548","desc":"57940"},{"messageId":"57941","fix":"59549","desc":"57943"},{"messageId":"57938","fix":"59550","desc":"57940"},{"messageId":"57941","fix":"59551","desc":"57943"},{"messageId":"57938","fix":"59552","desc":"57940"},{"messageId":"57941","fix":"59553","desc":"57943"},{"messageId":"57938","fix":"59554","desc":"57940"},{"messageId":"57941","fix":"59555","desc":"57943"},{"messageId":"57938","fix":"59556","desc":"57940"},{"messageId":"57941","fix":"59557","desc":"57943"},{"messageId":"57938","fix":"59558","desc":"57940"},{"messageId":"57941","fix":"59559","desc":"57943"},{"messageId":"57938","fix":"59560","desc":"57940"},{"messageId":"57941","fix":"59561","desc":"57943"},{"messageId":"57938","fix":"59562","desc":"57940"},{"messageId":"57941","fix":"59563","desc":"57943"},{"messageId":"57938","fix":"59564","desc":"57940"},{"messageId":"57941","fix":"59565","desc":"57943"},{"messageId":"57938","fix":"59566","desc":"57940"},{"messageId":"57941","fix":"59567","desc":"57943"},{"messageId":"57938","fix":"59568","desc":"57940"},{"messageId":"57941","fix":"59569","desc":"57943"},{"messageId":"57938","fix":"59570","desc":"57940"},{"messageId":"57941","fix":"59571","desc":"57943"},{"messageId":"57938","fix":"59572","desc":"57940"},{"messageId":"57941","fix":"59573","desc":"57943"},{"messageId":"57938","fix":"59574","desc":"57940"},{"messageId":"57941","fix":"59575","desc":"57943"},{"messageId":"57938","fix":"59576","desc":"57940"},{"messageId":"57941","fix":"59577","desc":"57943"},{"messageId":"57938","fix":"59578","desc":"57940"},{"messageId":"57941","fix":"59579","desc":"57943"},{"messageId":"57938","fix":"59580","desc":"57940"},{"messageId":"57941","fix":"59581","desc":"57943"},{"messageId":"57938","fix":"59582","desc":"57940"},{"messageId":"57941","fix":"59583","desc":"57943"},{"messageId":"57938","fix":"59584","desc":"57940"},{"messageId":"57941","fix":"59585","desc":"57943"},{"messageId":"57938","fix":"59586","desc":"57940"},{"messageId":"57941","fix":"59587","desc":"57943"},{"messageId":"57938","fix":"59588","desc":"57940"},{"messageId":"57941","fix":"59589","desc":"57943"},{"messageId":"57938","fix":"59590","desc":"57940"},{"messageId":"57941","fix":"59591","desc":"57943"},{"messageId":"57938","fix":"59592","desc":"57940"},{"messageId":"57941","fix":"59593","desc":"57943"},{"messageId":"57938","fix":"59594","desc":"57940"},{"messageId":"57941","fix":"59595","desc":"57943"},{"messageId":"57938","fix":"59596","desc":"57940"},{"messageId":"57941","fix":"59597","desc":"57943"},{"messageId":"57938","fix":"59598","desc":"57940"},{"messageId":"57941","fix":"59599","desc":"57943"},{"messageId":"57938","fix":"59600","desc":"57940"},{"messageId":"57941","fix":"59601","desc":"57943"},{"messageId":"57938","fix":"59602","desc":"57940"},{"messageId":"57941","fix":"59603","desc":"57943"},{"messageId":"57938","fix":"59604","desc":"57940"},{"messageId":"57941","fix":"59605","desc":"57943"},{"messageId":"57938","fix":"59606","desc":"57940"},{"messageId":"57941","fix":"59607","desc":"57943"},{"messageId":"57938","fix":"59608","desc":"57940"},{"messageId":"57941","fix":"59609","desc":"57943"},{"messageId":"57938","fix":"59610","desc":"57940"},{"messageId":"57941","fix":"59611","desc":"57943"},{"messageId":"57938","fix":"59612","desc":"57940"},{"messageId":"57941","fix":"59613","desc":"57943"},{"messageId":"57938","fix":"59614","desc":"57940"},{"messageId":"57941","fix":"59615","desc":"57943"},{"messageId":"57938","fix":"59616","desc":"57940"},{"messageId":"57941","fix":"59617","desc":"57943"},{"messageId":"57938","fix":"59618","desc":"57940"},{"messageId":"57941","fix":"59619","desc":"57943"},{"messageId":"57938","fix":"59620","desc":"57940"},{"messageId":"57941","fix":"59621","desc":"57943"},{"messageId":"57938","fix":"59622","desc":"57940"},{"messageId":"57941","fix":"59623","desc":"57943"},{"messageId":"57938","fix":"59624","desc":"57940"},{"messageId":"57941","fix":"59625","desc":"57943"},{"messageId":"57938","fix":"59626","desc":"57940"},{"messageId":"57941","fix":"59627","desc":"57943"},{"messageId":"57938","fix":"59628","desc":"57940"},{"messageId":"57941","fix":"59629","desc":"57943"},{"messageId":"57938","fix":"59630","desc":"57940"},{"messageId":"57941","fix":"59631","desc":"57943"},{"messageId":"57938","fix":"59632","desc":"57940"},{"messageId":"57941","fix":"59633","desc":"57943"},{"messageId":"57938","fix":"59634","desc":"57940"},{"messageId":"57941","fix":"59635","desc":"57943"},{"messageId":"57938","fix":"59636","desc":"57940"},{"messageId":"57941","fix":"59637","desc":"57943"},{"messageId":"57938","fix":"59638","desc":"57940"},{"messageId":"57941","fix":"59639","desc":"57943"},{"messageId":"57938","fix":"59640","desc":"57940"},{"messageId":"57941","fix":"59641","desc":"57943"},{"messageId":"57938","fix":"59642","desc":"57940"},{"messageId":"57941","fix":"59643","desc":"57943"},{"messageId":"57938","fix":"59644","desc":"57940"},{"messageId":"57941","fix":"59645","desc":"57943"},{"messageId":"57938","fix":"59646","desc":"57940"},{"messageId":"57941","fix":"59647","desc":"57943"},{"messageId":"57938","fix":"59648","desc":"57940"},{"messageId":"57941","fix":"59649","desc":"57943"},{"messageId":"57938","fix":"59650","desc":"57940"},{"messageId":"57941","fix":"59651","desc":"57943"},{"messageId":"57938","fix":"59652","desc":"57940"},{"messageId":"57941","fix":"59653","desc":"57943"},{"messageId":"57938","fix":"59654","desc":"57940"},{"messageId":"57941","fix":"59655","desc":"57943"},{"messageId":"57938","fix":"59656","desc":"57940"},{"messageId":"57941","fix":"59657","desc":"57943"},{"messageId":"57938","fix":"59658","desc":"57940"},{"messageId":"57941","fix":"59659","desc":"57943"},{"messageId":"57938","fix":"59660","desc":"57940"},{"messageId":"57941","fix":"59661","desc":"57943"},{"messageId":"57938","fix":"59662","desc":"57940"},{"messageId":"57941","fix":"59663","desc":"57943"},{"messageId":"57938","fix":"59664","desc":"57940"},{"messageId":"57941","fix":"59665","desc":"57943"},{"messageId":"57938","fix":"59666","desc":"57940"},{"messageId":"57941","fix":"59667","desc":"57943"},{"messageId":"57938","fix":"59668","desc":"57940"},{"messageId":"57941","fix":"59669","desc":"57943"},{"messageId":"57938","fix":"59670","desc":"57940"},{"messageId":"57941","fix":"59671","desc":"57943"},{"messageId":"57938","fix":"59672","desc":"57940"},{"messageId":"57941","fix":"59673","desc":"57943"},{"messageId":"57938","fix":"59674","desc":"57940"},{"messageId":"57941","fix":"59675","desc":"57943"},{"messageId":"57938","fix":"59676","desc":"57940"},{"messageId":"57941","fix":"59677","desc":"57943"},{"messageId":"57938","fix":"59678","desc":"57940"},{"messageId":"57941","fix":"59679","desc":"57943"},{"messageId":"57938","fix":"59680","desc":"57940"},{"messageId":"57941","fix":"59681","desc":"57943"},{"messageId":"57938","fix":"59682","desc":"57940"},{"messageId":"57941","fix":"59683","desc":"57943"},{"messageId":"57938","fix":"59684","desc":"57940"},{"messageId":"57941","fix":"59685","desc":"57943"},{"messageId":"57938","fix":"59686","desc":"57940"},{"messageId":"57941","fix":"59687","desc":"57943"},{"messageId":"57938","fix":"59688","desc":"57940"},{"messageId":"57941","fix":"59689","desc":"57943"},{"messageId":"57938","fix":"59690","desc":"57940"},{"messageId":"57941","fix":"59691","desc":"57943"},{"messageId":"57938","fix":"59692","desc":"57940"},{"messageId":"57941","fix":"59693","desc":"57943"},{"messageId":"57938","fix":"59694","desc":"57940"},{"messageId":"57941","fix":"59695","desc":"57943"},{"messageId":"57938","fix":"59696","desc":"57940"},{"messageId":"57941","fix":"59697","desc":"57943"},{"messageId":"57938","fix":"59698","desc":"57940"},{"messageId":"57941","fix":"59699","desc":"57943"},{"messageId":"57938","fix":"59700","desc":"57940"},{"messageId":"57941","fix":"59701","desc":"57943"},{"messageId":"57938","fix":"59702","desc":"57940"},{"messageId":"57941","fix":"59703","desc":"57943"},{"messageId":"57938","fix":"59704","desc":"57940"},{"messageId":"57941","fix":"59705","desc":"57943"},{"messageId":"57938","fix":"59706","desc":"57940"},{"messageId":"57941","fix":"59707","desc":"57943"},{"messageId":"57938","fix":"59708","desc":"57940"},{"messageId":"57941","fix":"59709","desc":"57943"},{"messageId":"57938","fix":"59710","desc":"57940"},{"messageId":"57941","fix":"59711","desc":"57943"},{"messageId":"57938","fix":"59712","desc":"57940"},{"messageId":"57941","fix":"59713","desc":"57943"},{"messageId":"57938","fix":"59714","desc":"57940"},{"messageId":"57941","fix":"59715","desc":"57943"},{"messageId":"57938","fix":"59716","desc":"57940"},{"messageId":"57941","fix":"59717","desc":"57943"},{"messageId":"57938","fix":"59718","desc":"57940"},{"messageId":"57941","fix":"59719","desc":"57943"},{"messageId":"57938","fix":"59720","desc":"57940"},{"messageId":"57941","fix":"59721","desc":"57943"},{"messageId":"57938","fix":"59722","desc":"57940"},{"messageId":"57941","fix":"59723","desc":"57943"},{"messageId":"57938","fix":"59724","desc":"57940"},{"messageId":"57941","fix":"59725","desc":"57943"},{"messageId":"57938","fix":"59726","desc":"57940"},{"messageId":"57941","fix":"59727","desc":"57943"},{"messageId":"57938","fix":"59728","desc":"57940"},{"messageId":"57941","fix":"59729","desc":"57943"},{"messageId":"57938","fix":"59730","desc":"57940"},{"messageId":"57941","fix":"59731","desc":"57943"},{"messageId":"57938","fix":"59732","desc":"57940"},{"messageId":"57941","fix":"59733","desc":"57943"},{"messageId":"57938","fix":"59734","desc":"57940"},{"messageId":"57941","fix":"59735","desc":"57943"},{"messageId":"57938","fix":"59736","desc":"57940"},{"messageId":"57941","fix":"59737","desc":"57943"},{"messageId":"57938","fix":"59738","desc":"57940"},{"messageId":"57941","fix":"59739","desc":"57943"},{"messageId":"57938","fix":"59740","desc":"57940"},{"messageId":"57941","fix":"59741","desc":"57943"},{"messageId":"57938","fix":"59742","desc":"57940"},{"messageId":"57941","fix":"59743","desc":"57943"},{"messageId":"57938","fix":"59744","desc":"57940"},{"messageId":"57941","fix":"59745","desc":"57943"},{"messageId":"57938","fix":"59746","desc":"57940"},{"messageId":"57941","fix":"59747","desc":"57943"},{"messageId":"57938","fix":"59748","desc":"57940"},{"messageId":"57941","fix":"59749","desc":"57943"},{"messageId":"57938","fix":"59750","desc":"57940"},{"messageId":"57941","fix":"59751","desc":"57943"},{"messageId":"57938","fix":"59752","desc":"57940"},{"messageId":"57941","fix":"59753","desc":"57943"},{"messageId":"57938","fix":"59754","desc":"57940"},{"messageId":"57941","fix":"59755","desc":"57943"},{"messageId":"57938","fix":"59756","desc":"57940"},{"messageId":"57941","fix":"59757","desc":"57943"},{"messageId":"57938","fix":"59758","desc":"57940"},{"messageId":"57941","fix":"59759","desc":"57943"},{"messageId":"57938","fix":"59760","desc":"57940"},{"messageId":"57941","fix":"59761","desc":"57943"},{"messageId":"57938","fix":"59762","desc":"57940"},{"messageId":"57941","fix":"59763","desc":"57943"},{"messageId":"57938","fix":"59764","desc":"57940"},{"messageId":"57941","fix":"59765","desc":"57943"},{"messageId":"57938","fix":"59766","desc":"57940"},{"messageId":"57941","fix":"59767","desc":"57943"},{"messageId":"57938","fix":"59768","desc":"57940"},{"messageId":"57941","fix":"59769","desc":"57943"},{"messageId":"57938","fix":"59770","desc":"57940"},{"messageId":"57941","fix":"59771","desc":"57943"},{"messageId":"57938","fix":"59772","desc":"57940"},{"messageId":"57941","fix":"59773","desc":"57943"},{"messageId":"57938","fix":"59774","desc":"57940"},{"messageId":"57941","fix":"59775","desc":"57943"},{"messageId":"57938","fix":"59776","desc":"57940"},{"messageId":"57941","fix":"59777","desc":"57943"},{"messageId":"57938","fix":"59778","desc":"57940"},{"messageId":"57941","fix":"59779","desc":"57943"},{"messageId":"57938","fix":"59780","desc":"57940"},{"messageId":"57941","fix":"59781","desc":"57943"},{"messageId":"57938","fix":"59782","desc":"57940"},{"messageId":"57941","fix":"59783","desc":"57943"},{"messageId":"57938","fix":"59784","desc":"57940"},{"messageId":"57941","fix":"59785","desc":"57943"},{"messageId":"57938","fix":"59786","desc":"57940"},{"messageId":"57941","fix":"59787","desc":"57943"},{"messageId":"57938","fix":"59788","desc":"57940"},{"messageId":"57941","fix":"59789","desc":"57943"},{"messageId":"57938","fix":"59790","desc":"57940"},{"messageId":"57941","fix":"59791","desc":"57943"},{"messageId":"57938","fix":"59792","desc":"57940"},{"messageId":"57941","fix":"59793","desc":"57943"},{"messageId":"57938","fix":"59794","desc":"57940"},{"messageId":"57941","fix":"59795","desc":"57943"},{"messageId":"57938","fix":"59796","desc":"57940"},{"messageId":"57941","fix":"59797","desc":"57943"},{"messageId":"57938","fix":"59798","desc":"57940"},{"messageId":"57941","fix":"59799","desc":"57943"},{"messageId":"57938","fix":"59800","desc":"57940"},{"messageId":"57941","fix":"59801","desc":"57943"},{"messageId":"57938","fix":"59802","desc":"57940"},{"messageId":"57941","fix":"59803","desc":"57943"},{"messageId":"57938","fix":"59804","desc":"57940"},{"messageId":"57941","fix":"59805","desc":"57943"},{"messageId":"57938","fix":"59806","desc":"57940"},{"messageId":"57941","fix":"59807","desc":"57943"},{"messageId":"57938","fix":"59808","desc":"57940"},{"messageId":"57941","fix":"59809","desc":"57943"},{"messageId":"57938","fix":"59810","desc":"57940"},{"messageId":"57941","fix":"59811","desc":"57943"},{"messageId":"57938","fix":"59812","desc":"57940"},{"messageId":"57941","fix":"59813","desc":"57943"},{"messageId":"57938","fix":"59814","desc":"57940"},{"messageId":"57941","fix":"59815","desc":"57943"},{"messageId":"57938","fix":"59816","desc":"57940"},{"messageId":"57941","fix":"59817","desc":"57943"},{"messageId":"57938","fix":"59818","desc":"57940"},{"messageId":"57941","fix":"59819","desc":"57943"},{"messageId":"57938","fix":"59820","desc":"57940"},{"messageId":"57941","fix":"59821","desc":"57943"},{"messageId":"57938","fix":"59822","desc":"57940"},{"messageId":"57941","fix":"59823","desc":"57943"},{"messageId":"57938","fix":"59824","desc":"57940"},{"messageId":"57941","fix":"59825","desc":"57943"},{"messageId":"57938","fix":"59826","desc":"57940"},{"messageId":"57941","fix":"59827","desc":"57943"},{"messageId":"57938","fix":"59828","desc":"57940"},{"messageId":"57941","fix":"59829","desc":"57943"},{"messageId":"57938","fix":"59830","desc":"57940"},{"messageId":"57941","fix":"59831","desc":"57943"},{"messageId":"57938","fix":"59832","desc":"57940"},{"messageId":"57941","fix":"59833","desc":"57943"},{"messageId":"57938","fix":"59834","desc":"57940"},{"messageId":"57941","fix":"59835","desc":"57943"},{"messageId":"57938","fix":"59836","desc":"57940"},{"messageId":"57941","fix":"59837","desc":"57943"},{"messageId":"57938","fix":"59838","desc":"57940"},{"messageId":"57941","fix":"59839","desc":"57943"},{"messageId":"57938","fix":"59840","desc":"57940"},{"messageId":"57941","fix":"59841","desc":"57943"},{"messageId":"57938","fix":"59842","desc":"57940"},{"messageId":"57941","fix":"59843","desc":"57943"},{"messageId":"57938","fix":"59844","desc":"57940"},{"messageId":"57941","fix":"59845","desc":"57943"},{"messageId":"57938","fix":"59846","desc":"57940"},{"messageId":"57941","fix":"59847","desc":"57943"},{"messageId":"57938","fix":"59848","desc":"57940"},{"messageId":"57941","fix":"59849","desc":"57943"},{"messageId":"57938","fix":"59850","desc":"57940"},{"messageId":"57941","fix":"59851","desc":"57943"},{"messageId":"57938","fix":"59852","desc":"57940"},{"messageId":"57941","fix":"59853","desc":"57943"},{"messageId":"57938","fix":"59854","desc":"57940"},{"messageId":"57941","fix":"59855","desc":"57943"},{"messageId":"57938","fix":"59856","desc":"57940"},{"messageId":"57941","fix":"59857","desc":"57943"},{"messageId":"57938","fix":"59858","desc":"57940"},{"messageId":"57941","fix":"59859","desc":"57943"},{"messageId":"57938","fix":"59860","desc":"57940"},{"messageId":"57941","fix":"59861","desc":"57943"},{"messageId":"57938","fix":"59862","desc":"57940"},{"messageId":"57941","fix":"59863","desc":"57943"},{"messageId":"57938","fix":"59864","desc":"57940"},{"messageId":"57941","fix":"59865","desc":"57943"},{"messageId":"57938","fix":"59866","desc":"57940"},{"messageId":"57941","fix":"59867","desc":"57943"},{"messageId":"57938","fix":"59868","desc":"57940"},{"messageId":"57941","fix":"59869","desc":"57943"},{"messageId":"57938","fix":"59870","desc":"57940"},{"messageId":"57941","fix":"59871","desc":"57943"},{"messageId":"57938","fix":"59872","desc":"57940"},{"messageId":"57941","fix":"59873","desc":"57943"},{"messageId":"57938","fix":"59874","desc":"57940"},{"messageId":"57941","fix":"59875","desc":"57943"},{"messageId":"57938","fix":"59876","desc":"57940"},{"messageId":"57941","fix":"59877","desc":"57943"},{"messageId":"57938","fix":"59878","desc":"57940"},{"messageId":"57941","fix":"59879","desc":"57943"},{"messageId":"57938","fix":"59880","desc":"57940"},{"messageId":"57941","fix":"59881","desc":"57943"},{"messageId":"57938","fix":"59882","desc":"57940"},{"messageId":"57941","fix":"59883","desc":"57943"},{"messageId":"57938","fix":"59884","desc":"57940"},{"messageId":"57941","fix":"59885","desc":"57943"},{"messageId":"57938","fix":"59886","desc":"57940"},{"messageId":"57941","fix":"59887","desc":"57943"},{"messageId":"57938","fix":"59888","desc":"57940"},{"messageId":"57941","fix":"59889","desc":"57943"},{"messageId":"57938","fix":"59890","desc":"57940"},{"messageId":"57941","fix":"59891","desc":"57943"},{"messageId":"57938","fix":"59892","desc":"57940"},{"messageId":"57941","fix":"59893","desc":"57943"},{"messageId":"57938","fix":"59894","desc":"57940"},{"messageId":"57941","fix":"59895","desc":"57943"},{"messageId":"57938","fix":"59896","desc":"57940"},{"messageId":"57941","fix":"59897","desc":"57943"},{"messageId":"57938","fix":"59898","desc":"57940"},{"messageId":"57941","fix":"59899","desc":"57943"},{"messageId":"57938","fix":"59900","desc":"57940"},{"messageId":"57941","fix":"59901","desc":"57943"},{"messageId":"57938","fix":"59902","desc":"57940"},{"messageId":"57941","fix":"59903","desc":"57943"},{"messageId":"57938","fix":"59904","desc":"57940"},{"messageId":"57941","fix":"59905","desc":"57943"},{"messageId":"57938","fix":"59906","desc":"57940"},{"messageId":"57941","fix":"59907","desc":"57943"},{"messageId":"57938","fix":"59908","desc":"57940"},{"messageId":"57941","fix":"59909","desc":"57943"},{"messageId":"57938","fix":"59910","desc":"57940"},{"messageId":"57941","fix":"59911","desc":"57943"},{"messageId":"57938","fix":"59912","desc":"57940"},{"messageId":"57941","fix":"59913","desc":"57943"},{"messageId":"57938","fix":"59914","desc":"57940"},{"messageId":"57941","fix":"59915","desc":"57943"},{"messageId":"57938","fix":"59916","desc":"57940"},{"messageId":"57941","fix":"59917","desc":"57943"},{"messageId":"57938","fix":"59918","desc":"57940"},{"messageId":"57941","fix":"59919","desc":"57943"},{"messageId":"57938","fix":"59920","desc":"57940"},{"messageId":"57941","fix":"59921","desc":"57943"},{"messageId":"57938","fix":"59922","desc":"57940"},{"messageId":"57941","fix":"59923","desc":"57943"},{"messageId":"57938","fix":"59924","desc":"57940"},{"messageId":"57941","fix":"59925","desc":"57943"},{"messageId":"57938","fix":"59926","desc":"57940"},{"messageId":"57941","fix":"59927","desc":"57943"},{"messageId":"57938","fix":"59928","desc":"57940"},{"messageId":"57941","fix":"59929","desc":"57943"},{"messageId":"57938","fix":"59930","desc":"57940"},{"messageId":"57941","fix":"59931","desc":"57943"},{"messageId":"57938","fix":"59932","desc":"57940"},{"messageId":"57941","fix":"59933","desc":"57943"},{"messageId":"57938","fix":"59934","desc":"57940"},{"messageId":"57941","fix":"59935","desc":"57943"},{"messageId":"57938","fix":"59936","desc":"57940"},{"messageId":"57941","fix":"59937","desc":"57943"},{"messageId":"57938","fix":"59938","desc":"57940"},{"messageId":"57941","fix":"59939","desc":"57943"},{"messageId":"57938","fix":"59940","desc":"57940"},{"messageId":"57941","fix":"59941","desc":"57943"},{"messageId":"57938","fix":"59942","desc":"57940"},{"messageId":"57941","fix":"59943","desc":"57943"},{"messageId":"57938","fix":"59944","desc":"57940"},{"messageId":"57941","fix":"59945","desc":"57943"},{"messageId":"57938","fix":"59946","desc":"57940"},{"messageId":"57941","fix":"59947","desc":"57943"},{"messageId":"57938","fix":"59948","desc":"57940"},{"messageId":"57941","fix":"59949","desc":"57943"},{"messageId":"57938","fix":"59950","desc":"57940"},{"messageId":"57941","fix":"59951","desc":"57943"},{"messageId":"57938","fix":"59952","desc":"57940"},{"messageId":"57941","fix":"59953","desc":"57943"},{"messageId":"57938","fix":"59954","desc":"57940"},{"messageId":"57941","fix":"59955","desc":"57943"},{"messageId":"57938","fix":"59956","desc":"57940"},{"messageId":"57941","fix":"59957","desc":"57943"},{"messageId":"57938","fix":"59958","desc":"57940"},{"messageId":"57941","fix":"59959","desc":"57943"},{"messageId":"57938","fix":"59960","desc":"57940"},{"messageId":"57941","fix":"59961","desc":"57943"},{"messageId":"57938","fix":"59962","desc":"57940"},{"messageId":"57941","fix":"59963","desc":"57943"},{"messageId":"57938","fix":"59964","desc":"57940"},{"messageId":"57941","fix":"59965","desc":"57943"},{"messageId":"57938","fix":"59966","desc":"57940"},{"messageId":"57941","fix":"59967","desc":"57943"},{"messageId":"57938","fix":"59968","desc":"57940"},{"messageId":"57941","fix":"59969","desc":"57943"},{"messageId":"57938","fix":"59970","desc":"57940"},{"messageId":"57941","fix":"59971","desc":"57943"},{"messageId":"57938","fix":"59972","desc":"57940"},{"messageId":"57941","fix":"59973","desc":"57943"},{"messageId":"57938","fix":"59974","desc":"57940"},{"messageId":"57941","fix":"59975","desc":"57943"},{"messageId":"57938","fix":"59976","desc":"57940"},{"messageId":"57941","fix":"59977","desc":"57943"},{"messageId":"57938","fix":"59978","desc":"57940"},{"messageId":"57941","fix":"59979","desc":"57943"},{"messageId":"57938","fix":"59980","desc":"57940"},{"messageId":"57941","fix":"59981","desc":"57943"},{"messageId":"57938","fix":"59982","desc":"57940"},{"messageId":"57941","fix":"59983","desc":"57943"},{"messageId":"57938","fix":"59984","desc":"57940"},{"messageId":"57941","fix":"59985","desc":"57943"},{"messageId":"57938","fix":"59986","desc":"57940"},{"messageId":"57941","fix":"59987","desc":"57943"},{"messageId":"57938","fix":"59988","desc":"57940"},{"messageId":"57941","fix":"59989","desc":"57943"},{"messageId":"57938","fix":"59990","desc":"57940"},{"messageId":"57941","fix":"59991","desc":"57943"},{"messageId":"57938","fix":"59992","desc":"57940"},{"messageId":"57941","fix":"59993","desc":"57943"},{"messageId":"57938","fix":"59994","desc":"57940"},{"messageId":"57941","fix":"59995","desc":"57943"},{"messageId":"57938","fix":"59996","desc":"57940"},{"messageId":"57941","fix":"59997","desc":"57943"},{"messageId":"57938","fix":"59998","desc":"57940"},{"messageId":"57941","fix":"59999","desc":"57943"},{"messageId":"57938","fix":"60000","desc":"57940"},{"messageId":"57941","fix":"60001","desc":"57943"},{"messageId":"57938","fix":"60002","desc":"57940"},{"messageId":"57941","fix":"60003","desc":"57943"},{"messageId":"57938","fix":"60004","desc":"57940"},{"messageId":"57941","fix":"60005","desc":"57943"},{"messageId":"57938","fix":"60006","desc":"57940"},{"messageId":"57941","fix":"60007","desc":"57943"},{"messageId":"57938","fix":"60008","desc":"57940"},{"messageId":"57941","fix":"60009","desc":"57943"},{"messageId":"57938","fix":"60010","desc":"57940"},{"messageId":"57941","fix":"60011","desc":"57943"},{"messageId":"57938","fix":"60012","desc":"57940"},{"messageId":"57941","fix":"60013","desc":"57943"},{"messageId":"57938","fix":"60014","desc":"57940"},{"messageId":"57941","fix":"60015","desc":"57943"},{"messageId":"57938","fix":"60016","desc":"57940"},{"messageId":"57941","fix":"60017","desc":"57943"},{"messageId":"57938","fix":"60018","desc":"57940"},{"messageId":"57941","fix":"60019","desc":"57943"},{"messageId":"57938","fix":"60020","desc":"57940"},{"messageId":"57941","fix":"60021","desc":"57943"},{"messageId":"57938","fix":"60022","desc":"57940"},{"messageId":"57941","fix":"60023","desc":"57943"},{"messageId":"57938","fix":"60024","desc":"57940"},{"messageId":"57941","fix":"60025","desc":"57943"},{"messageId":"57938","fix":"60026","desc":"57940"},{"messageId":"57941","fix":"60027","desc":"57943"},{"messageId":"57938","fix":"60028","desc":"57940"},{"messageId":"57941","fix":"60029","desc":"57943"},{"messageId":"57938","fix":"60030","desc":"57940"},{"messageId":"57941","fix":"60031","desc":"57943"},{"messageId":"57938","fix":"60032","desc":"57940"},{"messageId":"57941","fix":"60033","desc":"57943"},{"messageId":"57938","fix":"60034","desc":"57940"},{"messageId":"57941","fix":"60035","desc":"57943"},{"messageId":"57938","fix":"60036","desc":"57940"},{"messageId":"57941","fix":"60037","desc":"57943"},{"messageId":"57938","fix":"60038","desc":"57940"},{"messageId":"57941","fix":"60039","desc":"57943"},{"messageId":"57938","fix":"60040","desc":"57940"},{"messageId":"57941","fix":"60041","desc":"57943"},{"messageId":"57938","fix":"60042","desc":"57940"},{"messageId":"57941","fix":"60043","desc":"57943"},{"messageId":"57938","fix":"60044","desc":"57940"},{"messageId":"57941","fix":"60045","desc":"57943"},{"messageId":"57938","fix":"60046","desc":"57940"},{"messageId":"57941","fix":"60047","desc":"57943"},{"messageId":"57938","fix":"60048","desc":"57940"},{"messageId":"57941","fix":"60049","desc":"57943"},{"messageId":"57938","fix":"60050","desc":"57940"},{"messageId":"57941","fix":"60051","desc":"57943"},{"messageId":"57938","fix":"60052","desc":"57940"},{"messageId":"57941","fix":"60053","desc":"57943"},{"messageId":"57938","fix":"60054","desc":"57940"},{"messageId":"57941","fix":"60055","desc":"57943"},{"messageId":"57938","fix":"60056","desc":"57940"},{"messageId":"57941","fix":"60057","desc":"57943"},{"messageId":"57938","fix":"60058","desc":"57940"},{"messageId":"57941","fix":"60059","desc":"57943"},{"messageId":"57938","fix":"60060","desc":"57940"},{"messageId":"57941","fix":"60061","desc":"57943"},{"messageId":"57938","fix":"60062","desc":"57940"},{"messageId":"57941","fix":"60063","desc":"57943"},{"messageId":"57938","fix":"60064","desc":"57940"},{"messageId":"57941","fix":"60065","desc":"57943"},{"messageId":"57938","fix":"60066","desc":"57940"},{"messageId":"57941","fix":"60067","desc":"57943"},{"messageId":"57938","fix":"60068","desc":"57940"},{"messageId":"57941","fix":"60069","desc":"57943"},{"messageId":"57938","fix":"60070","desc":"57940"},{"messageId":"57941","fix":"60071","desc":"57943"},{"messageId":"57938","fix":"60072","desc":"57940"},{"messageId":"57941","fix":"60073","desc":"57943"},{"messageId":"57938","fix":"60074","desc":"57940"},{"messageId":"57941","fix":"60075","desc":"57943"},{"messageId":"57938","fix":"60076","desc":"57940"},{"messageId":"57941","fix":"60077","desc":"57943"},{"messageId":"57938","fix":"60078","desc":"57940"},{"messageId":"57941","fix":"60079","desc":"57943"},{"messageId":"57938","fix":"60080","desc":"57940"},{"messageId":"57941","fix":"60081","desc":"57943"},{"messageId":"57938","fix":"60082","desc":"57940"},{"messageId":"57941","fix":"60083","desc":"57943"},{"messageId":"57938","fix":"60084","desc":"57940"},{"messageId":"57941","fix":"60085","desc":"57943"},{"messageId":"57938","fix":"60086","desc":"57940"},{"messageId":"57941","fix":"60087","desc":"57943"},{"messageId":"57938","fix":"60088","desc":"57940"},{"messageId":"57941","fix":"60089","desc":"57943"},{"messageId":"57938","fix":"60090","desc":"57940"},{"messageId":"57941","fix":"60091","desc":"57943"},{"messageId":"57938","fix":"60092","desc":"57940"},{"messageId":"57941","fix":"60093","desc":"57943"},{"messageId":"57938","fix":"60094","desc":"57940"},{"messageId":"57941","fix":"60095","desc":"57943"},{"messageId":"57938","fix":"60096","desc":"57940"},{"messageId":"57941","fix":"60097","desc":"57943"},{"messageId":"57938","fix":"60098","desc":"57940"},{"messageId":"57941","fix":"60099","desc":"57943"},{"messageId":"57938","fix":"60100","desc":"57940"},{"messageId":"57941","fix":"60101","desc":"57943"},{"messageId":"57938","fix":"60102","desc":"57940"},{"messageId":"57941","fix":"60103","desc":"57943"},{"messageId":"57938","fix":"60104","desc":"57940"},{"messageId":"57941","fix":"60105","desc":"57943"},{"messageId":"57938","fix":"60106","desc":"57940"},{"messageId":"57941","fix":"60107","desc":"57943"},{"messageId":"57938","fix":"60108","desc":"57940"},{"messageId":"57941","fix":"60109","desc":"57943"},{"messageId":"57938","fix":"60110","desc":"57940"},{"messageId":"57941","fix":"60111","desc":"57943"},{"messageId":"57938","fix":"60112","desc":"57940"},{"messageId":"57941","fix":"60113","desc":"57943"},{"messageId":"57938","fix":"60114","desc":"57940"},{"messageId":"57941","fix":"60115","desc":"57943"},{"messageId":"57938","fix":"60116","desc":"57940"},{"messageId":"57941","fix":"60117","desc":"57943"},{"messageId":"57938","fix":"60118","desc":"57940"},{"messageId":"57941","fix":"60119","desc":"57943"},{"messageId":"57938","fix":"60120","desc":"57940"},{"messageId":"57941","fix":"60121","desc":"57943"},{"messageId":"57938","fix":"60122","desc":"57940"},{"messageId":"57941","fix":"60123","desc":"57943"},{"messageId":"57938","fix":"60124","desc":"57940"},{"messageId":"57941","fix":"60125","desc":"57943"},{"messageId":"57938","fix":"60126","desc":"57940"},{"messageId":"57941","fix":"60127","desc":"57943"},{"messageId":"57938","fix":"60128","desc":"57940"},{"messageId":"57941","fix":"60129","desc":"57943"},{"messageId":"57938","fix":"60130","desc":"57940"},{"messageId":"57941","fix":"60131","desc":"57943"},{"messageId":"57938","fix":"60132","desc":"57940"},{"messageId":"57941","fix":"60133","desc":"57943"},{"messageId":"57938","fix":"60134","desc":"57940"},{"messageId":"57941","fix":"60135","desc":"57943"},{"messageId":"57938","fix":"60136","desc":"57940"},{"messageId":"57941","fix":"60137","desc":"57943"},{"messageId":"57938","fix":"60138","desc":"57940"},{"messageId":"57941","fix":"60139","desc":"57943"},{"messageId":"57938","fix":"60140","desc":"57940"},{"messageId":"57941","fix":"60141","desc":"57943"},{"messageId":"57938","fix":"60142","desc":"57940"},{"messageId":"57941","fix":"60143","desc":"57943"},{"messageId":"57938","fix":"60144","desc":"57940"},{"messageId":"57941","fix":"60145","desc":"57943"},{"messageId":"57938","fix":"60146","desc":"57940"},{"messageId":"57941","fix":"60147","desc":"57943"},{"messageId":"57938","fix":"60148","desc":"57940"},{"messageId":"57941","fix":"60149","desc":"57943"},{"messageId":"57938","fix":"60150","desc":"57940"},{"messageId":"57941","fix":"60151","desc":"57943"},{"messageId":"57938","fix":"60152","desc":"57940"},{"messageId":"57941","fix":"60153","desc":"57943"},{"messageId":"57938","fix":"60154","desc":"57940"},{"messageId":"57941","fix":"60155","desc":"57943"},{"messageId":"57938","fix":"60156","desc":"57940"},{"messageId":"57941","fix":"60157","desc":"57943"},{"messageId":"57938","fix":"60158","desc":"57940"},{"messageId":"57941","fix":"60159","desc":"57943"},{"messageId":"57938","fix":"60160","desc":"57940"},{"messageId":"57941","fix":"60161","desc":"57943"},{"messageId":"57938","fix":"60162","desc":"57940"},{"messageId":"57941","fix":"60163","desc":"57943"},{"messageId":"57938","fix":"60164","desc":"57940"},{"messageId":"57941","fix":"60165","desc":"57943"},{"messageId":"57938","fix":"60166","desc":"57940"},{"messageId":"57941","fix":"60167","desc":"57943"},{"messageId":"57938","fix":"60168","desc":"57940"},{"messageId":"57941","fix":"60169","desc":"57943"},{"messageId":"57938","fix":"60170","desc":"57940"},{"messageId":"57941","fix":"60171","desc":"57943"},{"messageId":"57938","fix":"60172","desc":"57940"},{"messageId":"57941","fix":"60173","desc":"57943"},{"messageId":"57938","fix":"60174","desc":"57940"},{"messageId":"57941","fix":"60175","desc":"57943"},{"messageId":"57938","fix":"60176","desc":"57940"},{"messageId":"57941","fix":"60177","desc":"57943"},{"messageId":"57938","fix":"60178","desc":"57940"},{"messageId":"57941","fix":"60179","desc":"57943"},{"messageId":"57938","fix":"60180","desc":"57940"},{"messageId":"57941","fix":"60181","desc":"57943"},{"messageId":"57938","fix":"60182","desc":"57940"},{"messageId":"57941","fix":"60183","desc":"57943"},{"messageId":"57938","fix":"60184","desc":"57940"},{"messageId":"57941","fix":"60185","desc":"57943"},{"messageId":"57938","fix":"60186","desc":"57940"},{"messageId":"57941","fix":"60187","desc":"57943"},{"messageId":"57938","fix":"60188","desc":"57940"},{"messageId":"57941","fix":"60189","desc":"57943"},{"messageId":"57938","fix":"60190","desc":"57940"},{"messageId":"57941","fix":"60191","desc":"57943"},{"messageId":"57938","fix":"60192","desc":"57940"},{"messageId":"57941","fix":"60193","desc":"57943"},{"messageId":"57938","fix":"60194","desc":"57940"},{"messageId":"57941","fix":"60195","desc":"57943"},{"messageId":"57938","fix":"60196","desc":"57940"},{"messageId":"57941","fix":"60197","desc":"57943"},{"messageId":"57938","fix":"60198","desc":"57940"},{"messageId":"57941","fix":"60199","desc":"57943"},{"messageId":"57938","fix":"60200","desc":"57940"},{"messageId":"57941","fix":"60201","desc":"57943"},{"messageId":"57938","fix":"60202","desc":"57940"},{"messageId":"57941","fix":"60203","desc":"57943"},{"messageId":"57938","fix":"60204","desc":"57940"},{"messageId":"57941","fix":"60205","desc":"57943"},{"messageId":"57938","fix":"60206","desc":"57940"},{"messageId":"57941","fix":"60207","desc":"57943"},{"messageId":"57938","fix":"60208","desc":"57940"},{"messageId":"57941","fix":"60209","desc":"57943"},{"messageId":"57938","fix":"60210","desc":"57940"},{"messageId":"57941","fix":"60211","desc":"57943"},{"messageId":"57938","fix":"60212","desc":"57940"},{"messageId":"57941","fix":"60213","desc":"57943"},{"messageId":"57938","fix":"60214","desc":"57940"},{"messageId":"57941","fix":"60215","desc":"57943"},{"messageId":"57938","fix":"60216","desc":"57940"},{"messageId":"57941","fix":"60217","desc":"57943"},{"messageId":"57938","fix":"60218","desc":"57940"},{"messageId":"57941","fix":"60219","desc":"57943"},{"messageId":"57938","fix":"60220","desc":"57940"},{"messageId":"57941","fix":"60221","desc":"57943"},{"messageId":"57938","fix":"60222","desc":"57940"},{"messageId":"57941","fix":"60223","desc":"57943"},{"messageId":"57938","fix":"60224","desc":"57940"},{"messageId":"57941","fix":"60225","desc":"57943"},{"messageId":"57938","fix":"60226","desc":"57940"},{"messageId":"57941","fix":"60227","desc":"57943"},{"messageId":"57938","fix":"60228","desc":"57940"},{"messageId":"57941","fix":"60229","desc":"57943"},{"messageId":"57938","fix":"60230","desc":"57940"},{"messageId":"57941","fix":"60231","desc":"57943"},{"messageId":"57938","fix":"60232","desc":"57940"},{"messageId":"57941","fix":"60233","desc":"57943"},{"messageId":"57938","fix":"60234","desc":"57940"},{"messageId":"57941","fix":"60235","desc":"57943"},{"messageId":"57938","fix":"60236","desc":"57940"},{"messageId":"57941","fix":"60237","desc":"57943"},{"messageId":"57938","fix":"60238","desc":"57940"},{"messageId":"57941","fix":"60239","desc":"57943"},{"messageId":"57938","fix":"60240","desc":"57940"},{"messageId":"57941","fix":"60241","desc":"57943"},{"messageId":"57938","fix":"60242","desc":"57940"},{"messageId":"57941","fix":"60243","desc":"57943"},{"messageId":"57938","fix":"60244","desc":"57940"},{"messageId":"57941","fix":"60245","desc":"57943"},{"messageId":"57938","fix":"60246","desc":"57940"},{"messageId":"57941","fix":"60247","desc":"57943"},{"messageId":"57938","fix":"60248","desc":"57940"},{"messageId":"57941","fix":"60249","desc":"57943"},{"messageId":"57938","fix":"60250","desc":"57940"},{"messageId":"57941","fix":"60251","desc":"57943"},{"messageId":"57938","fix":"60252","desc":"57940"},{"messageId":"57941","fix":"60253","desc":"57943"},{"messageId":"57938","fix":"60254","desc":"57940"},{"messageId":"57941","fix":"60255","desc":"57943"},{"messageId":"57938","fix":"60256","desc":"57940"},{"messageId":"57941","fix":"60257","desc":"57943"},{"messageId":"57938","fix":"60258","desc":"57940"},{"messageId":"57941","fix":"60259","desc":"57943"},{"messageId":"57938","fix":"60260","desc":"57940"},{"messageId":"57941","fix":"60261","desc":"57943"},{"messageId":"57938","fix":"60262","desc":"57940"},{"messageId":"57941","fix":"60263","desc":"57943"},{"messageId":"57938","fix":"60264","desc":"57940"},{"messageId":"57941","fix":"60265","desc":"57943"},{"messageId":"57938","fix":"60266","desc":"57940"},{"messageId":"57941","fix":"60267","desc":"57943"},{"messageId":"57938","fix":"60268","desc":"57940"},{"messageId":"57941","fix":"60269","desc":"57943"},{"messageId":"57938","fix":"60270","desc":"57940"},{"messageId":"57941","fix":"60271","desc":"57943"},{"messageId":"57938","fix":"60272","desc":"57940"},{"messageId":"57941","fix":"60273","desc":"57943"},{"messageId":"57938","fix":"60274","desc":"57940"},{"messageId":"57941","fix":"60275","desc":"57943"},{"messageId":"57938","fix":"60276","desc":"57940"},{"messageId":"57941","fix":"60277","desc":"57943"},{"messageId":"57938","fix":"60278","desc":"57940"},{"messageId":"57941","fix":"60279","desc":"57943"},{"messageId":"57938","fix":"60280","desc":"57940"},{"messageId":"57941","fix":"60281","desc":"57943"},{"messageId":"57938","fix":"60282","desc":"57940"},{"messageId":"57941","fix":"60283","desc":"57943"},{"messageId":"57938","fix":"60284","desc":"57940"},{"messageId":"57941","fix":"60285","desc":"57943"},{"messageId":"57938","fix":"60286","desc":"57940"},{"messageId":"57941","fix":"60287","desc":"57943"},{"messageId":"57938","fix":"60288","desc":"57940"},{"messageId":"57941","fix":"60289","desc":"57943"},{"messageId":"57938","fix":"60290","desc":"57940"},{"messageId":"57941","fix":"60291","desc":"57943"},{"messageId":"57938","fix":"60292","desc":"57940"},{"messageId":"57941","fix":"60293","desc":"57943"},{"messageId":"57938","fix":"60294","desc":"57940"},{"messageId":"57941","fix":"60295","desc":"57943"},{"messageId":"57938","fix":"60296","desc":"57940"},{"messageId":"57941","fix":"60297","desc":"57943"},{"messageId":"57938","fix":"60298","desc":"57940"},{"messageId":"57941","fix":"60299","desc":"57943"},{"messageId":"57938","fix":"60300","desc":"57940"},{"messageId":"57941","fix":"60301","desc":"57943"},{"messageId":"57938","fix":"60302","desc":"57940"},{"messageId":"57941","fix":"60303","desc":"57943"},{"messageId":"57938","fix":"60304","desc":"57940"},{"messageId":"57941","fix":"60305","desc":"57943"},{"messageId":"57938","fix":"60306","desc":"57940"},{"messageId":"57941","fix":"60307","desc":"57943"},{"messageId":"57938","fix":"60308","desc":"57940"},{"messageId":"57941","fix":"60309","desc":"57943"},{"messageId":"57938","fix":"60310","desc":"57940"},{"messageId":"57941","fix":"60311","desc":"57943"},{"messageId":"57938","fix":"60312","desc":"57940"},{"messageId":"57941","fix":"60313","desc":"57943"},{"messageId":"57938","fix":"60314","desc":"57940"},{"messageId":"57941","fix":"60315","desc":"57943"},{"messageId":"57938","fix":"60316","desc":"57940"},{"messageId":"57941","fix":"60317","desc":"57943"},{"messageId":"57938","fix":"60318","desc":"57940"},{"messageId":"57941","fix":"60319","desc":"57943"},{"messageId":"57938","fix":"60320","desc":"57940"},{"messageId":"57941","fix":"60321","desc":"57943"},{"messageId":"57938","fix":"60322","desc":"57940"},{"messageId":"57941","fix":"60323","desc":"57943"},{"messageId":"57938","fix":"60324","desc":"57940"},{"messageId":"57941","fix":"60325","desc":"57943"},{"messageId":"57938","fix":"60326","desc":"57940"},{"messageId":"57941","fix":"60327","desc":"57943"},{"messageId":"57938","fix":"60328","desc":"57940"},{"messageId":"57941","fix":"60329","desc":"57943"},{"messageId":"57938","fix":"60330","desc":"57940"},{"messageId":"57941","fix":"60331","desc":"57943"},{"messageId":"57938","fix":"60332","desc":"57940"},{"messageId":"57941","fix":"60333","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"60334","desc":"57940"},{"messageId":"57941","fix":"60335","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"60336","desc":"57940"},{"messageId":"57941","fix":"60337","desc":"57943"},{"messageId":"57938","fix":"60338","desc":"57940"},{"messageId":"57941","fix":"60339","desc":"57943"},{"messageId":"57938","fix":"60340","desc":"57940"},{"messageId":"57941","fix":"60341","desc":"57943"},{"messageId":"57938","fix":"60342","desc":"57940"},{"messageId":"57941","fix":"60343","desc":"57943"},{"messageId":"57938","fix":"60344","desc":"57940"},{"messageId":"57941","fix":"60345","desc":"57943"},{"messageId":"57938","fix":"60346","desc":"57940"},{"messageId":"57941","fix":"60347","desc":"57943"},{"messageId":"57938","fix":"60348","desc":"57940"},{"messageId":"57941","fix":"60349","desc":"57943"},{"messageId":"57938","fix":"60350","desc":"57940"},{"messageId":"57941","fix":"60351","desc":"57943"},{"messageId":"57938","fix":"60352","desc":"57940"},{"messageId":"57941","fix":"60353","desc":"57943"},{"messageId":"57938","fix":"60354","desc":"57940"},{"messageId":"57941","fix":"60355","desc":"57943"},{"messageId":"57938","fix":"60356","desc":"57940"},{"messageId":"57941","fix":"60357","desc":"57943"},{"messageId":"57938","fix":"60358","desc":"57940"},{"messageId":"57941","fix":"60359","desc":"57943"},{"messageId":"57938","fix":"60360","desc":"57940"},{"messageId":"57941","fix":"60361","desc":"57943"},{"messageId":"57938","fix":"60362","desc":"57940"},{"messageId":"57941","fix":"60363","desc":"57943"},{"messageId":"57938","fix":"60364","desc":"57940"},{"messageId":"57941","fix":"60365","desc":"57943"},{"messageId":"57938","fix":"60366","desc":"57940"},{"messageId":"57941","fix":"60367","desc":"57943"},{"messageId":"57938","fix":"60368","desc":"57940"},{"messageId":"57941","fix":"60369","desc":"57943"},{"messageId":"57938","fix":"60370","desc":"57940"},{"messageId":"57941","fix":"60371","desc":"57943"},{"messageId":"57938","fix":"60372","desc":"57940"},{"messageId":"57941","fix":"60373","desc":"57943"},{"messageId":"57938","fix":"60374","desc":"57940"},{"messageId":"57941","fix":"60375","desc":"57943"},{"messageId":"57938","fix":"60376","desc":"57940"},{"messageId":"57941","fix":"60377","desc":"57943"},{"messageId":"57938","fix":"60378","desc":"57940"},{"messageId":"57941","fix":"60379","desc":"57943"},{"messageId":"57938","fix":"60380","desc":"57940"},{"messageId":"57941","fix":"60381","desc":"57943"},{"messageId":"57938","fix":"60382","desc":"57940"},{"messageId":"57941","fix":"60383","desc":"57943"},{"messageId":"57938","fix":"60384","desc":"57940"},{"messageId":"57941","fix":"60385","desc":"57943"},{"messageId":"57938","fix":"60386","desc":"57940"},{"messageId":"57941","fix":"60387","desc":"57943"},{"messageId":"57938","fix":"60388","desc":"57940"},{"messageId":"57941","fix":"60389","desc":"57943"},{"messageId":"57938","fix":"60390","desc":"57940"},{"messageId":"57941","fix":"60391","desc":"57943"},{"messageId":"57938","fix":"60392","desc":"57940"},{"messageId":"57941","fix":"60393","desc":"57943"},{"messageId":"57938","fix":"60394","desc":"57940"},{"messageId":"57941","fix":"60395","desc":"57943"},{"messageId":"57938","fix":"60396","desc":"57940"},{"messageId":"57941","fix":"60397","desc":"57943"},{"messageId":"57938","fix":"60398","desc":"57940"},{"messageId":"57941","fix":"60399","desc":"57943"},{"messageId":"57938","fix":"60400","desc":"57940"},{"messageId":"57941","fix":"60401","desc":"57943"},{"messageId":"57938","fix":"60402","desc":"57940"},{"messageId":"57941","fix":"60403","desc":"57943"},{"messageId":"57938","fix":"60404","desc":"57940"},{"messageId":"57941","fix":"60405","desc":"57943"},{"messageId":"57938","fix":"60406","desc":"57940"},{"messageId":"57941","fix":"60407","desc":"57943"},{"messageId":"57938","fix":"60408","desc":"57940"},{"messageId":"57941","fix":"60409","desc":"57943"},{"messageId":"57938","fix":"60410","desc":"57940"},{"messageId":"57941","fix":"60411","desc":"57943"},{"messageId":"57938","fix":"60412","desc":"57940"},{"messageId":"57941","fix":"60413","desc":"57943"},{"messageId":"57938","fix":"60414","desc":"57940"},{"messageId":"57941","fix":"60415","desc":"57943"},{"messageId":"57938","fix":"60416","desc":"57940"},{"messageId":"57941","fix":"60417","desc":"57943"},{"messageId":"57938","fix":"60418","desc":"57940"},{"messageId":"57941","fix":"60419","desc":"57943"},{"messageId":"57938","fix":"60420","desc":"57940"},{"messageId":"57941","fix":"60421","desc":"57943"},{"messageId":"57938","fix":"60422","desc":"57940"},{"messageId":"57941","fix":"60423","desc":"57943"},{"messageId":"57938","fix":"60424","desc":"57940"},{"messageId":"57941","fix":"60425","desc":"57943"},{"messageId":"57938","fix":"60426","desc":"57940"},{"messageId":"57941","fix":"60427","desc":"57943"},{"messageId":"57938","fix":"60428","desc":"57940"},{"messageId":"57941","fix":"60429","desc":"57943"},{"messageId":"57938","fix":"60430","desc":"57940"},{"messageId":"57941","fix":"60431","desc":"57943"},{"messageId":"57938","fix":"60432","desc":"57940"},{"messageId":"57941","fix":"60433","desc":"57943"},{"messageId":"57938","fix":"60434","desc":"57940"},{"messageId":"57941","fix":"60435","desc":"57943"},{"messageId":"57938","fix":"60436","desc":"57940"},{"messageId":"57941","fix":"60437","desc":"57943"},{"messageId":"57938","fix":"60438","desc":"57940"},{"messageId":"57941","fix":"60439","desc":"57943"},{"messageId":"57938","fix":"60440","desc":"57940"},{"messageId":"57941","fix":"60441","desc":"57943"},{"messageId":"57938","fix":"60442","desc":"57940"},{"messageId":"57941","fix":"60443","desc":"57943"},{"messageId":"57938","fix":"60444","desc":"57940"},{"messageId":"57941","fix":"60445","desc":"57943"},{"messageId":"57938","fix":"60446","desc":"57940"},{"messageId":"57941","fix":"60447","desc":"57943"},{"messageId":"57938","fix":"60448","desc":"57940"},{"messageId":"57941","fix":"60449","desc":"57943"},{"messageId":"57938","fix":"60450","desc":"57940"},{"messageId":"57941","fix":"60451","desc":"57943"},{"messageId":"57938","fix":"60452","desc":"57940"},{"messageId":"57941","fix":"60453","desc":"57943"},{"messageId":"57938","fix":"60454","desc":"57940"},{"messageId":"57941","fix":"60455","desc":"57943"},{"messageId":"57938","fix":"60456","desc":"57940"},{"messageId":"57941","fix":"60457","desc":"57943"},{"messageId":"57938","fix":"60458","desc":"57940"},{"messageId":"57941","fix":"60459","desc":"57943"},{"messageId":"57938","fix":"60460","desc":"57940"},{"messageId":"57941","fix":"60461","desc":"57943"},{"messageId":"57938","fix":"60462","desc":"57940"},{"messageId":"57941","fix":"60463","desc":"57943"},{"messageId":"57938","fix":"60464","desc":"57940"},{"messageId":"57941","fix":"60465","desc":"57943"},{"messageId":"57938","fix":"60466","desc":"57940"},{"messageId":"57941","fix":"60467","desc":"57943"},{"messageId":"57938","fix":"60468","desc":"57940"},{"messageId":"57941","fix":"60469","desc":"57943"},{"messageId":"57938","fix":"60470","desc":"57940"},{"messageId":"57941","fix":"60471","desc":"57943"},{"messageId":"57938","fix":"60472","desc":"57940"},{"messageId":"57941","fix":"60473","desc":"57943"},{"messageId":"57938","fix":"60474","desc":"57940"},{"messageId":"57941","fix":"60475","desc":"57943"},{"messageId":"57938","fix":"60476","desc":"57940"},{"messageId":"57941","fix":"60477","desc":"57943"},{"messageId":"57938","fix":"60478","desc":"57940"},{"messageId":"57941","fix":"60479","desc":"57943"},{"messageId":"57938","fix":"60480","desc":"57940"},{"messageId":"57941","fix":"60481","desc":"57943"},{"messageId":"57938","fix":"60482","desc":"57940"},{"messageId":"57941","fix":"60483","desc":"57943"},{"messageId":"57938","fix":"60484","desc":"57940"},{"messageId":"57941","fix":"60485","desc":"57943"},{"messageId":"57938","fix":"60486","desc":"57940"},{"messageId":"57941","fix":"60487","desc":"57943"},{"messageId":"57938","fix":"60488","desc":"57940"},{"messageId":"57941","fix":"60489","desc":"57943"},{"messageId":"57938","fix":"60490","desc":"57940"},{"messageId":"57941","fix":"60491","desc":"57943"},{"messageId":"57938","fix":"60492","desc":"57940"},{"messageId":"57941","fix":"60493","desc":"57943"},{"messageId":"57938","fix":"60494","desc":"57940"},{"messageId":"57941","fix":"60495","desc":"57943"},{"messageId":"57938","fix":"60496","desc":"57940"},{"messageId":"57941","fix":"60497","desc":"57943"},{"messageId":"57938","fix":"60498","desc":"57940"},{"messageId":"57941","fix":"60499","desc":"57943"},{"messageId":"57938","fix":"60500","desc":"57940"},{"messageId":"57941","fix":"60501","desc":"57943"},{"messageId":"57938","fix":"60502","desc":"57940"},{"messageId":"57941","fix":"60503","desc":"57943"},{"messageId":"57938","fix":"60504","desc":"57940"},{"messageId":"57941","fix":"60505","desc":"57943"},{"messageId":"57938","fix":"60506","desc":"57940"},{"messageId":"57941","fix":"60507","desc":"57943"},{"messageId":"57938","fix":"60508","desc":"57940"},{"messageId":"57941","fix":"60509","desc":"57943"},{"messageId":"57938","fix":"60510","desc":"57940"},{"messageId":"57941","fix":"60511","desc":"57943"},{"messageId":"57938","fix":"60512","desc":"57940"},{"messageId":"57941","fix":"60513","desc":"57943"},{"messageId":"57938","fix":"60514","desc":"57940"},{"messageId":"57941","fix":"60515","desc":"57943"},{"messageId":"57938","fix":"60516","desc":"57940"},{"messageId":"57941","fix":"60517","desc":"57943"},{"messageId":"57938","fix":"60518","desc":"57940"},{"messageId":"57941","fix":"60519","desc":"57943"},{"messageId":"57938","fix":"60520","desc":"57940"},{"messageId":"57941","fix":"60521","desc":"57943"},{"messageId":"57938","fix":"60522","desc":"57940"},{"messageId":"57941","fix":"60523","desc":"57943"},{"messageId":"57938","fix":"60524","desc":"57940"},{"messageId":"57941","fix":"60525","desc":"57943"},{"messageId":"57938","fix":"60526","desc":"57940"},{"messageId":"57941","fix":"60527","desc":"57943"},{"messageId":"57938","fix":"60528","desc":"57940"},{"messageId":"57941","fix":"60529","desc":"57943"},{"messageId":"57938","fix":"60530","desc":"57940"},{"messageId":"57941","fix":"60531","desc":"57943"},{"messageId":"57938","fix":"60532","desc":"57940"},{"messageId":"57941","fix":"60533","desc":"57943"},{"messageId":"57938","fix":"60534","desc":"57940"},{"messageId":"57941","fix":"60535","desc":"57943"},{"messageId":"57938","fix":"60536","desc":"57940"},{"messageId":"57941","fix":"60537","desc":"57943"},{"messageId":"57938","fix":"60538","desc":"57940"},{"messageId":"57941","fix":"60539","desc":"57943"},{"messageId":"57938","fix":"60540","desc":"57940"},{"messageId":"57941","fix":"60541","desc":"57943"},{"messageId":"57938","fix":"60542","desc":"57940"},{"messageId":"57941","fix":"60543","desc":"57943"},{"messageId":"57938","fix":"60544","desc":"57940"},{"messageId":"57941","fix":"60545","desc":"57943"},{"messageId":"57938","fix":"60546","desc":"57940"},{"messageId":"57941","fix":"60547","desc":"57943"},{"messageId":"57938","fix":"60548","desc":"57940"},{"messageId":"57941","fix":"60549","desc":"57943"},{"messageId":"57938","fix":"60550","desc":"57940"},{"messageId":"57941","fix":"60551","desc":"57943"},{"messageId":"57938","fix":"60552","desc":"57940"},{"messageId":"57941","fix":"60553","desc":"57943"},{"messageId":"57938","fix":"60554","desc":"57940"},{"messageId":"57941","fix":"60555","desc":"57943"},{"messageId":"57938","fix":"60556","desc":"57940"},{"messageId":"57941","fix":"60557","desc":"57943"},{"messageId":"57938","fix":"60558","desc":"57940"},{"messageId":"57941","fix":"60559","desc":"57943"},{"messageId":"57938","fix":"60560","desc":"57940"},{"messageId":"57941","fix":"60561","desc":"57943"},{"messageId":"57938","fix":"60562","desc":"57940"},{"messageId":"57941","fix":"60563","desc":"57943"},{"messageId":"57938","fix":"60564","desc":"57940"},{"messageId":"57941","fix":"60565","desc":"57943"},{"messageId":"57938","fix":"60566","desc":"57940"},{"messageId":"57941","fix":"60567","desc":"57943"},{"messageId":"57938","fix":"60568","desc":"57940"},{"messageId":"57941","fix":"60569","desc":"57943"},{"messageId":"57938","fix":"60570","desc":"57940"},{"messageId":"57941","fix":"60571","desc":"57943"},{"messageId":"57938","fix":"60572","desc":"57940"},{"messageId":"57941","fix":"60573","desc":"57943"},{"messageId":"57938","fix":"60574","desc":"57940"},{"messageId":"57941","fix":"60575","desc":"57943"},{"messageId":"57938","fix":"60576","desc":"57940"},{"messageId":"57941","fix":"60577","desc":"57943"},{"messageId":"57938","fix":"60578","desc":"57940"},{"messageId":"57941","fix":"60579","desc":"57943"},{"messageId":"57938","fix":"60580","desc":"57940"},{"messageId":"57941","fix":"60581","desc":"57943"},{"messageId":"57938","fix":"60582","desc":"57940"},{"messageId":"57941","fix":"60583","desc":"57943"},{"messageId":"57938","fix":"60584","desc":"57940"},{"messageId":"57941","fix":"60585","desc":"57943"},{"messageId":"57938","fix":"60586","desc":"57940"},{"messageId":"57941","fix":"60587","desc":"57943"},{"messageId":"57938","fix":"60588","desc":"57940"},{"messageId":"57941","fix":"60589","desc":"57943"},{"messageId":"57938","fix":"60590","desc":"57940"},{"messageId":"57941","fix":"60591","desc":"57943"},{"messageId":"57938","fix":"60592","desc":"57940"},{"messageId":"57941","fix":"60593","desc":"57943"},{"messageId":"57938","fix":"60594","desc":"57940"},{"messageId":"57941","fix":"60595","desc":"57943"},{"messageId":"57938","fix":"60596","desc":"57940"},{"messageId":"57941","fix":"60597","desc":"57943"},{"messageId":"57938","fix":"60598","desc":"57940"},{"messageId":"57941","fix":"60599","desc":"57943"},{"messageId":"57938","fix":"60600","desc":"57940"},{"messageId":"57941","fix":"60601","desc":"57943"},{"messageId":"57938","fix":"60602","desc":"57940"},{"messageId":"57941","fix":"60603","desc":"57943"},{"messageId":"57938","fix":"60604","desc":"57940"},{"messageId":"57941","fix":"60605","desc":"57943"},{"messageId":"57938","fix":"60606","desc":"57940"},{"messageId":"57941","fix":"60607","desc":"57943"},{"messageId":"57938","fix":"60608","desc":"57940"},{"messageId":"57941","fix":"60609","desc":"57943"},{"messageId":"57938","fix":"60610","desc":"57940"},{"messageId":"57941","fix":"60611","desc":"57943"},{"messageId":"57938","fix":"60612","desc":"57940"},{"messageId":"57941","fix":"60613","desc":"57943"},{"messageId":"57938","fix":"60614","desc":"57940"},{"messageId":"57941","fix":"60615","desc":"57943"},{"messageId":"57938","fix":"60616","desc":"57940"},{"messageId":"57941","fix":"60617","desc":"57943"},{"messageId":"57938","fix":"60618","desc":"57940"},{"messageId":"57941","fix":"60619","desc":"57943"},{"messageId":"57938","fix":"60620","desc":"57940"},{"messageId":"57941","fix":"60621","desc":"57943"},{"messageId":"57938","fix":"60622","desc":"57940"},{"messageId":"57941","fix":"60623","desc":"57943"},{"messageId":"57938","fix":"60624","desc":"57940"},{"messageId":"57941","fix":"60625","desc":"57943"},{"messageId":"57938","fix":"60626","desc":"57940"},{"messageId":"57941","fix":"60627","desc":"57943"},{"messageId":"57938","fix":"60628","desc":"57940"},{"messageId":"57941","fix":"60629","desc":"57943"},{"messageId":"57938","fix":"60630","desc":"57940"},{"messageId":"57941","fix":"60631","desc":"57943"},{"messageId":"57938","fix":"60632","desc":"57940"},{"messageId":"57941","fix":"60633","desc":"57943"},{"messageId":"57938","fix":"60634","desc":"57940"},{"messageId":"57941","fix":"60635","desc":"57943"},{"messageId":"57938","fix":"60636","desc":"57940"},{"messageId":"57941","fix":"60637","desc":"57943"},{"messageId":"57938","fix":"60638","desc":"57940"},{"messageId":"57941","fix":"60639","desc":"57943"},{"messageId":"57938","fix":"60640","desc":"57940"},{"messageId":"57941","fix":"60641","desc":"57943"},{"messageId":"57938","fix":"60642","desc":"57940"},{"messageId":"57941","fix":"60643","desc":"57943"},{"messageId":"57938","fix":"60644","desc":"57940"},{"messageId":"57941","fix":"60645","desc":"57943"},{"messageId":"57938","fix":"60646","desc":"57940"},{"messageId":"57941","fix":"60647","desc":"57943"},{"messageId":"57938","fix":"60648","desc":"57940"},{"messageId":"57941","fix":"60649","desc":"57943"},{"messageId":"57938","fix":"60650","desc":"57940"},{"messageId":"57941","fix":"60651","desc":"57943"},{"messageId":"57938","fix":"60652","desc":"57940"},{"messageId":"57941","fix":"60653","desc":"57943"},{"messageId":"57938","fix":"60654","desc":"57940"},{"messageId":"57941","fix":"60655","desc":"57943"},{"messageId":"57938","fix":"60656","desc":"57940"},{"messageId":"57941","fix":"60657","desc":"57943"},{"messageId":"57938","fix":"60658","desc":"57940"},{"messageId":"57941","fix":"60659","desc":"57943"},{"messageId":"57938","fix":"60660","desc":"57940"},{"messageId":"57941","fix":"60661","desc":"57943"},{"messageId":"57938","fix":"60662","desc":"57940"},{"messageId":"57941","fix":"60663","desc":"57943"},{"messageId":"57938","fix":"60664","desc":"57940"},{"messageId":"57941","fix":"60665","desc":"57943"},{"messageId":"57938","fix":"60666","desc":"57940"},{"messageId":"57941","fix":"60667","desc":"57943"},{"messageId":"57938","fix":"60668","desc":"57940"},{"messageId":"57941","fix":"60669","desc":"57943"},{"messageId":"57938","fix":"60670","desc":"57940"},{"messageId":"57941","fix":"60671","desc":"57943"},{"messageId":"57938","fix":"60672","desc":"57940"},{"messageId":"57941","fix":"60673","desc":"57943"},{"messageId":"57938","fix":"60674","desc":"57940"},{"messageId":"57941","fix":"60675","desc":"57943"},{"messageId":"57938","fix":"60676","desc":"57940"},{"messageId":"57941","fix":"60677","desc":"57943"},{"messageId":"57938","fix":"60678","desc":"57940"},{"messageId":"57941","fix":"60679","desc":"57943"},{"messageId":"57938","fix":"60680","desc":"57940"},{"messageId":"57941","fix":"60681","desc":"57943"},{"messageId":"57938","fix":"60682","desc":"57940"},{"messageId":"57941","fix":"60683","desc":"57943"},{"messageId":"57938","fix":"60684","desc":"57940"},{"messageId":"57941","fix":"60685","desc":"57943"},{"messageId":"57938","fix":"60686","desc":"57940"},{"messageId":"57941","fix":"60687","desc":"57943"},{"messageId":"57938","fix":"60688","desc":"57940"},{"messageId":"57941","fix":"60689","desc":"57943"},{"messageId":"57938","fix":"60690","desc":"57940"},{"messageId":"57941","fix":"60691","desc":"57943"},{"messageId":"57938","fix":"60692","desc":"57940"},{"messageId":"57941","fix":"60693","desc":"57943"},{"messageId":"57938","fix":"60694","desc":"57940"},{"messageId":"57941","fix":"60695","desc":"57943"},{"messageId":"57938","fix":"60696","desc":"57940"},{"messageId":"57941","fix":"60697","desc":"57943"},{"messageId":"57938","fix":"60698","desc":"57940"},{"messageId":"57941","fix":"60699","desc":"57943"},{"messageId":"57938","fix":"60700","desc":"57940"},{"messageId":"57941","fix":"60701","desc":"57943"},{"messageId":"57938","fix":"60702","desc":"57940"},{"messageId":"57941","fix":"60703","desc":"57943"},{"messageId":"57938","fix":"60704","desc":"57940"},{"messageId":"57941","fix":"60705","desc":"57943"},{"messageId":"57938","fix":"60706","desc":"57940"},{"messageId":"57941","fix":"60707","desc":"57943"},{"messageId":"57938","fix":"60708","desc":"57940"},{"messageId":"57941","fix":"60709","desc":"57943"},{"messageId":"57938","fix":"60710","desc":"57940"},{"messageId":"57941","fix":"60711","desc":"57943"},{"messageId":"57938","fix":"60712","desc":"57940"},{"messageId":"57941","fix":"60713","desc":"57943"},{"messageId":"57938","fix":"60714","desc":"57940"},{"messageId":"57941","fix":"60715","desc":"57943"},{"messageId":"57938","fix":"60716","desc":"57940"},{"messageId":"57941","fix":"60717","desc":"57943"},{"messageId":"57938","fix":"60718","desc":"57940"},{"messageId":"57941","fix":"60719","desc":"57943"},{"messageId":"57938","fix":"60720","desc":"57940"},{"messageId":"57941","fix":"60721","desc":"57943"},{"messageId":"57938","fix":"60722","desc":"57940"},{"messageId":"57941","fix":"60723","desc":"57943"},{"messageId":"57938","fix":"60724","desc":"57940"},{"messageId":"57941","fix":"60725","desc":"57943"},{"messageId":"57938","fix":"60726","desc":"57940"},{"messageId":"57941","fix":"60727","desc":"57943"},{"messageId":"57938","fix":"60728","desc":"57940"},{"messageId":"57941","fix":"60729","desc":"57943"},{"messageId":"57938","fix":"60730","desc":"57940"},{"messageId":"57941","fix":"60731","desc":"57943"},{"messageId":"57938","fix":"60732","desc":"57940"},{"messageId":"57941","fix":"60733","desc":"57943"},{"messageId":"57938","fix":"60734","desc":"57940"},{"messageId":"57941","fix":"60735","desc":"57943"},{"messageId":"57938","fix":"60736","desc":"57940"},{"messageId":"57941","fix":"60737","desc":"57943"},{"messageId":"57938","fix":"60738","desc":"57940"},{"messageId":"57941","fix":"60739","desc":"57943"},{"messageId":"57938","fix":"60740","desc":"57940"},{"messageId":"57941","fix":"60741","desc":"57943"},{"messageId":"57938","fix":"60742","desc":"57940"},{"messageId":"57941","fix":"60743","desc":"57943"},{"messageId":"57938","fix":"60744","desc":"57940"},{"messageId":"57941","fix":"60745","desc":"57943"},{"messageId":"57938","fix":"60746","desc":"57940"},{"messageId":"57941","fix":"60747","desc":"57943"},{"messageId":"57938","fix":"60748","desc":"57940"},{"messageId":"57941","fix":"60749","desc":"57943"},{"messageId":"57938","fix":"60750","desc":"57940"},{"messageId":"57941","fix":"60751","desc":"57943"},{"messageId":"57938","fix":"60752","desc":"57940"},{"messageId":"57941","fix":"60753","desc":"57943"},{"messageId":"57938","fix":"60754","desc":"57940"},{"messageId":"57941","fix":"60755","desc":"57943"},{"messageId":"57938","fix":"60756","desc":"57940"},{"messageId":"57941","fix":"60757","desc":"57943"},{"messageId":"57938","fix":"60758","desc":"57940"},{"messageId":"57941","fix":"60759","desc":"57943"},{"messageId":"57938","fix":"60760","desc":"57940"},{"messageId":"57941","fix":"60761","desc":"57943"},{"messageId":"57938","fix":"60762","desc":"57940"},{"messageId":"57941","fix":"60763","desc":"57943"},{"messageId":"57938","fix":"60764","desc":"57940"},{"messageId":"57941","fix":"60765","desc":"57943"},{"messageId":"57938","fix":"60766","desc":"57940"},{"messageId":"57941","fix":"60767","desc":"57943"},{"messageId":"57938","fix":"60768","desc":"57940"},{"messageId":"57941","fix":"60769","desc":"57943"},{"messageId":"57938","fix":"60770","desc":"57940"},{"messageId":"57941","fix":"60771","desc":"57943"},{"messageId":"57938","fix":"60772","desc":"57940"},{"messageId":"57941","fix":"60773","desc":"57943"},{"messageId":"57938","fix":"60774","desc":"57940"},{"messageId":"57941","fix":"60775","desc":"57943"},{"messageId":"57938","fix":"60776","desc":"57940"},{"messageId":"57941","fix":"60777","desc":"57943"},{"messageId":"57938","fix":"60778","desc":"57940"},{"messageId":"57941","fix":"60779","desc":"57943"},{"messageId":"57938","fix":"60780","desc":"57940"},{"messageId":"57941","fix":"60781","desc":"57943"},{"messageId":"57938","fix":"60782","desc":"57940"},{"messageId":"57941","fix":"60783","desc":"57943"},{"messageId":"57938","fix":"60784","desc":"57940"},{"messageId":"57941","fix":"60785","desc":"57943"},{"messageId":"57938","fix":"60786","desc":"57940"},{"messageId":"57941","fix":"60787","desc":"57943"},{"messageId":"57938","fix":"60788","desc":"57940"},{"messageId":"57941","fix":"60789","desc":"57943"},{"messageId":"57938","fix":"60790","desc":"57940"},{"messageId":"57941","fix":"60791","desc":"57943"},{"messageId":"57938","fix":"60792","desc":"57940"},{"messageId":"57941","fix":"60793","desc":"57943"},{"messageId":"57938","fix":"60794","desc":"57940"},{"messageId":"57941","fix":"60795","desc":"57943"},{"messageId":"57938","fix":"60796","desc":"57940"},{"messageId":"57941","fix":"60797","desc":"57943"},{"messageId":"57938","fix":"60798","desc":"57940"},{"messageId":"57941","fix":"60799","desc":"57943"},{"messageId":"57938","fix":"60800","desc":"57940"},{"messageId":"57941","fix":"60801","desc":"57943"},{"messageId":"57938","fix":"60802","desc":"57940"},{"messageId":"57941","fix":"60803","desc":"57943"},{"messageId":"57938","fix":"60804","desc":"57940"},{"messageId":"57941","fix":"60805","desc":"57943"},{"messageId":"57938","fix":"60806","desc":"57940"},{"messageId":"57941","fix":"60807","desc":"57943"},{"messageId":"57938","fix":"60808","desc":"57940"},{"messageId":"57941","fix":"60809","desc":"57943"},{"messageId":"57938","fix":"60810","desc":"57940"},{"messageId":"57941","fix":"60811","desc":"57943"},{"messageId":"57938","fix":"60812","desc":"57940"},{"messageId":"57941","fix":"60813","desc":"57943"},{"messageId":"57938","fix":"60814","desc":"57940"},{"messageId":"57941","fix":"60815","desc":"57943"},{"messageId":"57938","fix":"60816","desc":"57940"},{"messageId":"57941","fix":"60817","desc":"57943"},{"messageId":"57938","fix":"60818","desc":"57940"},{"messageId":"57941","fix":"60819","desc":"57943"},{"messageId":"57938","fix":"60820","desc":"57940"},{"messageId":"57941","fix":"60821","desc":"57943"},{"messageId":"57938","fix":"60822","desc":"57940"},{"messageId":"57941","fix":"60823","desc":"57943"},{"messageId":"57938","fix":"60824","desc":"57940"},{"messageId":"57941","fix":"60825","desc":"57943"},{"messageId":"57938","fix":"60826","desc":"57940"},{"messageId":"57941","fix":"60827","desc":"57943"},{"messageId":"57938","fix":"60828","desc":"57940"},{"messageId":"57941","fix":"60829","desc":"57943"},{"messageId":"57938","fix":"60830","desc":"57940"},{"messageId":"57941","fix":"60831","desc":"57943"},{"messageId":"57938","fix":"60832","desc":"57940"},{"messageId":"57941","fix":"60833","desc":"57943"},{"messageId":"57938","fix":"60834","desc":"57940"},{"messageId":"57941","fix":"60835","desc":"57943"},{"messageId":"57938","fix":"60836","desc":"57940"},{"messageId":"57941","fix":"60837","desc":"57943"},{"messageId":"57938","fix":"60838","desc":"57940"},{"messageId":"57941","fix":"60839","desc":"57943"},{"messageId":"57938","fix":"60840","desc":"57940"},{"messageId":"57941","fix":"60841","desc":"57943"},{"messageId":"57938","fix":"60842","desc":"57940"},{"messageId":"57941","fix":"60843","desc":"57943"},{"messageId":"57938","fix":"60844","desc":"57940"},{"messageId":"57941","fix":"60845","desc":"57943"},{"messageId":"57938","fix":"60846","desc":"57940"},{"messageId":"57941","fix":"60847","desc":"57943"},{"messageId":"57938","fix":"60848","desc":"57940"},{"messageId":"57941","fix":"60849","desc":"57943"},{"messageId":"57938","fix":"60850","desc":"57940"},{"messageId":"57941","fix":"60851","desc":"57943"},{"messageId":"57938","fix":"60852","desc":"57940"},{"messageId":"57941","fix":"60853","desc":"57943"},{"messageId":"57938","fix":"60854","desc":"57940"},{"messageId":"57941","fix":"60855","desc":"57943"},{"messageId":"57938","fix":"60856","desc":"57940"},{"messageId":"57941","fix":"60857","desc":"57943"},{"messageId":"57938","fix":"60858","desc":"57940"},{"messageId":"57941","fix":"60859","desc":"57943"},{"messageId":"57938","fix":"60860","desc":"57940"},{"messageId":"57941","fix":"60861","desc":"57943"},{"messageId":"57938","fix":"60862","desc":"57940"},{"messageId":"57941","fix":"60863","desc":"57943"},{"messageId":"57938","fix":"60864","desc":"57940"},{"messageId":"57941","fix":"60865","desc":"57943"},{"messageId":"57938","fix":"60866","desc":"57940"},{"messageId":"57941","fix":"60867","desc":"57943"},{"messageId":"57938","fix":"60868","desc":"57940"},{"messageId":"57941","fix":"60869","desc":"57943"},{"messageId":"57938","fix":"60870","desc":"57940"},{"messageId":"57941","fix":"60871","desc":"57943"},{"messageId":"57938","fix":"60872","desc":"57940"},{"messageId":"57941","fix":"60873","desc":"57943"},{"messageId":"57938","fix":"60874","desc":"57940"},{"messageId":"57941","fix":"60875","desc":"57943"},{"messageId":"57938","fix":"60876","desc":"57940"},{"messageId":"57941","fix":"60877","desc":"57943"},{"messageId":"57938","fix":"60878","desc":"57940"},{"messageId":"57941","fix":"60879","desc":"57943"},{"messageId":"57938","fix":"60880","desc":"57940"},{"messageId":"57941","fix":"60881","desc":"57943"},{"messageId":"57938","fix":"60882","desc":"57940"},{"messageId":"57941","fix":"60883","desc":"57943"},{"messageId":"57938","fix":"60884","desc":"57940"},{"messageId":"57941","fix":"60885","desc":"57943"},{"messageId":"57938","fix":"60886","desc":"57940"},{"messageId":"57941","fix":"60887","desc":"57943"},{"messageId":"57938","fix":"60888","desc":"57940"},{"messageId":"57941","fix":"60889","desc":"57943"},{"messageId":"57938","fix":"60890","desc":"57940"},{"messageId":"57941","fix":"60891","desc":"57943"},{"messageId":"57938","fix":"60892","desc":"57940"},{"messageId":"57941","fix":"60893","desc":"57943"},{"messageId":"57938","fix":"60894","desc":"57940"},{"messageId":"57941","fix":"60895","desc":"57943"},{"messageId":"57938","fix":"60896","desc":"57940"},{"messageId":"57941","fix":"60897","desc":"57943"},{"messageId":"57938","fix":"60898","desc":"57940"},{"messageId":"57941","fix":"60899","desc":"57943"},{"messageId":"57938","fix":"60900","desc":"57940"},{"messageId":"57941","fix":"60901","desc":"57943"},{"messageId":"57938","fix":"60902","desc":"57940"},{"messageId":"57941","fix":"60903","desc":"57943"},{"messageId":"57938","fix":"60904","desc":"57940"},{"messageId":"57941","fix":"60905","desc":"57943"},{"messageId":"57938","fix":"60906","desc":"57940"},{"messageId":"57941","fix":"60907","desc":"57943"},{"messageId":"57938","fix":"60908","desc":"57940"},{"messageId":"57941","fix":"60909","desc":"57943"},{"messageId":"57938","fix":"60910","desc":"57940"},{"messageId":"57941","fix":"60911","desc":"57943"},{"messageId":"57938","fix":"60912","desc":"57940"},{"messageId":"57941","fix":"60913","desc":"57943"},{"messageId":"57938","fix":"60914","desc":"57940"},{"messageId":"57941","fix":"60915","desc":"57943"},{"messageId":"57938","fix":"60916","desc":"57940"},{"messageId":"57941","fix":"60917","desc":"57943"},{"messageId":"57938","fix":"60918","desc":"57940"},{"messageId":"57941","fix":"60919","desc":"57943"},{"messageId":"57938","fix":"60920","desc":"57940"},{"messageId":"57941","fix":"60921","desc":"57943"},{"messageId":"57938","fix":"60922","desc":"57940"},{"messageId":"57941","fix":"60923","desc":"57943"},{"messageId":"57938","fix":"60924","desc":"57940"},{"messageId":"57941","fix":"60925","desc":"57943"},{"messageId":"57938","fix":"60926","desc":"57940"},{"messageId":"57941","fix":"60927","desc":"57943"},{"messageId":"57938","fix":"60928","desc":"57940"},{"messageId":"57941","fix":"60929","desc":"57943"},{"messageId":"57938","fix":"60930","desc":"57940"},{"messageId":"57941","fix":"60931","desc":"57943"},{"messageId":"57938","fix":"60932","desc":"57940"},{"messageId":"57941","fix":"60933","desc":"57943"},{"messageId":"57938","fix":"60934","desc":"57940"},{"messageId":"57941","fix":"60935","desc":"57943"},{"messageId":"57938","fix":"60936","desc":"57940"},{"messageId":"57941","fix":"60937","desc":"57943"},{"messageId":"57938","fix":"60938","desc":"57940"},{"messageId":"57941","fix":"60939","desc":"57943"},{"messageId":"57938","fix":"60940","desc":"57940"},{"messageId":"57941","fix":"60941","desc":"57943"},{"messageId":"57938","fix":"60942","desc":"57940"},{"messageId":"57941","fix":"60943","desc":"57943"},{"messageId":"57938","fix":"60944","desc":"57940"},{"messageId":"57941","fix":"60945","desc":"57943"},{"messageId":"57938","fix":"60946","desc":"57940"},{"messageId":"57941","fix":"60947","desc":"57943"},{"messageId":"57938","fix":"60948","desc":"57940"},{"messageId":"57941","fix":"60949","desc":"57943"},{"messageId":"57938","fix":"60950","desc":"57940"},{"messageId":"57941","fix":"60951","desc":"57943"},{"messageId":"57938","fix":"60952","desc":"57940"},{"messageId":"57941","fix":"60953","desc":"57943"},{"messageId":"57938","fix":"60954","desc":"57940"},{"messageId":"57941","fix":"60955","desc":"57943"},{"messageId":"57938","fix":"60956","desc":"57940"},{"messageId":"57941","fix":"60957","desc":"57943"},{"messageId":"57938","fix":"60958","desc":"57940"},{"messageId":"57941","fix":"60959","desc":"57943"},{"messageId":"57938","fix":"60960","desc":"57940"},{"messageId":"57941","fix":"60961","desc":"57943"},{"messageId":"57938","fix":"60962","desc":"57940"},{"messageId":"57941","fix":"60963","desc":"57943"},{"messageId":"57938","fix":"60964","desc":"57940"},{"messageId":"57941","fix":"60965","desc":"57943"},{"messageId":"57938","fix":"60966","desc":"57940"},{"messageId":"57941","fix":"60967","desc":"57943"},{"messageId":"57938","fix":"60968","desc":"57940"},{"messageId":"57941","fix":"60969","desc":"57943"},{"messageId":"57938","fix":"60970","desc":"57940"},{"messageId":"57941","fix":"60971","desc":"57943"},{"messageId":"57938","fix":"60972","desc":"57940"},{"messageId":"57941","fix":"60973","desc":"57943"},{"messageId":"57938","fix":"60974","desc":"57940"},{"messageId":"57941","fix":"60975","desc":"57943"},{"messageId":"57938","fix":"60976","desc":"57940"},{"messageId":"57941","fix":"60977","desc":"57943"},{"messageId":"57938","fix":"60978","desc":"57940"},{"messageId":"57941","fix":"60979","desc":"57943"},{"messageId":"57938","fix":"60980","desc":"57940"},{"messageId":"57941","fix":"60981","desc":"57943"},{"messageId":"57938","fix":"60982","desc":"57940"},{"messageId":"57941","fix":"60983","desc":"57943"},{"messageId":"57938","fix":"60984","desc":"57940"},{"messageId":"57941","fix":"60985","desc":"57943"},{"messageId":"57938","fix":"60986","desc":"57940"},{"messageId":"57941","fix":"60987","desc":"57943"},{"messageId":"57938","fix":"60988","desc":"57940"},{"messageId":"57941","fix":"60989","desc":"57943"},{"messageId":"57938","fix":"60990","desc":"57940"},{"messageId":"57941","fix":"60991","desc":"57943"},{"messageId":"57938","fix":"60992","desc":"57940"},{"messageId":"57941","fix":"60993","desc":"57943"},{"messageId":"57938","fix":"60994","desc":"57940"},{"messageId":"57941","fix":"60995","desc":"57943"},{"messageId":"57938","fix":"60996","desc":"57940"},{"messageId":"57941","fix":"60997","desc":"57943"},{"messageId":"57938","fix":"60998","desc":"57940"},{"messageId":"57941","fix":"60999","desc":"57943"},{"messageId":"57938","fix":"61000","desc":"57940"},{"messageId":"57941","fix":"61001","desc":"57943"},{"messageId":"57938","fix":"61002","desc":"57940"},{"messageId":"57941","fix":"61003","desc":"57943"},{"messageId":"57938","fix":"61004","desc":"57940"},{"messageId":"57941","fix":"61005","desc":"57943"},{"messageId":"57938","fix":"61006","desc":"57940"},{"messageId":"57941","fix":"61007","desc":"57943"},{"messageId":"57938","fix":"61008","desc":"57940"},{"messageId":"57941","fix":"61009","desc":"57943"},{"messageId":"57938","fix":"61010","desc":"57940"},{"messageId":"57941","fix":"61011","desc":"57943"},{"messageId":"57938","fix":"61012","desc":"57940"},{"messageId":"57941","fix":"61013","desc":"57943"},{"messageId":"57938","fix":"61014","desc":"57940"},{"messageId":"57941","fix":"61015","desc":"57943"},{"messageId":"57938","fix":"61016","desc":"57940"},{"messageId":"57941","fix":"61017","desc":"57943"},{"messageId":"57938","fix":"61018","desc":"57940"},{"messageId":"57941","fix":"61019","desc":"57943"},{"messageId":"57938","fix":"61020","desc":"57940"},{"messageId":"57941","fix":"61021","desc":"57943"},{"messageId":"57938","fix":"61022","desc":"57940"},{"messageId":"57941","fix":"61023","desc":"57943"},{"messageId":"57938","fix":"61024","desc":"57940"},{"messageId":"57941","fix":"61025","desc":"57943"},{"messageId":"57938","fix":"61026","desc":"57940"},{"messageId":"57941","fix":"61027","desc":"57943"},{"messageId":"57938","fix":"61028","desc":"57940"},{"messageId":"57941","fix":"61029","desc":"57943"},{"messageId":"57938","fix":"61030","desc":"57940"},{"messageId":"57941","fix":"61031","desc":"57943"},{"messageId":"57938","fix":"61032","desc":"57940"},{"messageId":"57941","fix":"61033","desc":"57943"},{"messageId":"57938","fix":"61034","desc":"57940"},{"messageId":"57941","fix":"61035","desc":"57943"},{"messageId":"57938","fix":"61036","desc":"57940"},{"messageId":"57941","fix":"61037","desc":"57943"},{"messageId":"57938","fix":"61038","desc":"57940"},{"messageId":"57941","fix":"61039","desc":"57943"},{"messageId":"57938","fix":"61040","desc":"57940"},{"messageId":"57941","fix":"61041","desc":"57943"},{"messageId":"57938","fix":"61042","desc":"57940"},{"messageId":"57941","fix":"61043","desc":"57943"},{"messageId":"57938","fix":"61044","desc":"57940"},{"messageId":"57941","fix":"61045","desc":"57943"},{"messageId":"57938","fix":"61046","desc":"57940"},{"messageId":"57941","fix":"61047","desc":"57943"},{"messageId":"57938","fix":"61048","desc":"57940"},{"messageId":"57941","fix":"61049","desc":"57943"},{"messageId":"57938","fix":"61050","desc":"57940"},{"messageId":"57941","fix":"61051","desc":"57943"},{"messageId":"57938","fix":"61052","desc":"57940"},{"messageId":"57941","fix":"61053","desc":"57943"},{"messageId":"57938","fix":"61054","desc":"57940"},{"messageId":"57941","fix":"61055","desc":"57943"},{"messageId":"57938","fix":"61056","desc":"57940"},{"messageId":"57941","fix":"61057","desc":"57943"},{"messageId":"57938","fix":"61058","desc":"57940"},{"messageId":"57941","fix":"61059","desc":"57943"},{"messageId":"57938","fix":"61060","desc":"57940"},{"messageId":"57941","fix":"61061","desc":"57943"},{"messageId":"57938","fix":"61062","desc":"57940"},{"messageId":"57941","fix":"61063","desc":"57943"},{"messageId":"57938","fix":"61064","desc":"57940"},{"messageId":"57941","fix":"61065","desc":"57943"},{"messageId":"57938","fix":"61066","desc":"57940"},{"messageId":"57941","fix":"61067","desc":"57943"},{"messageId":"57938","fix":"61068","desc":"57940"},{"messageId":"57941","fix":"61069","desc":"57943"},{"messageId":"57938","fix":"61070","desc":"57940"},{"messageId":"57941","fix":"61071","desc":"57943"},{"messageId":"57938","fix":"61072","desc":"57940"},{"messageId":"57941","fix":"61073","desc":"57943"},{"messageId":"57938","fix":"61074","desc":"57940"},{"messageId":"57941","fix":"61075","desc":"57943"},{"messageId":"57938","fix":"61076","desc":"57940"},{"messageId":"57941","fix":"61077","desc":"57943"},{"messageId":"57938","fix":"61078","desc":"57940"},{"messageId":"57941","fix":"61079","desc":"57943"},{"messageId":"57938","fix":"61080","desc":"57940"},{"messageId":"57941","fix":"61081","desc":"57943"},{"messageId":"57938","fix":"61082","desc":"57940"},{"messageId":"57941","fix":"61083","desc":"57943"},{"messageId":"57938","fix":"61084","desc":"57940"},{"messageId":"57941","fix":"61085","desc":"57943"},{"messageId":"57938","fix":"61086","desc":"57940"},{"messageId":"57941","fix":"61087","desc":"57943"},{"messageId":"57938","fix":"61088","desc":"57940"},{"messageId":"57941","fix":"61089","desc":"57943"},{"messageId":"57938","fix":"61090","desc":"57940"},{"messageId":"57941","fix":"61091","desc":"57943"},{"messageId":"57938","fix":"61092","desc":"57940"},{"messageId":"57941","fix":"61093","desc":"57943"},{"messageId":"57938","fix":"61094","desc":"57940"},{"messageId":"57941","fix":"61095","desc":"57943"},{"messageId":"57938","fix":"61096","desc":"57940"},{"messageId":"57941","fix":"61097","desc":"57943"},{"messageId":"57938","fix":"61098","desc":"57940"},{"messageId":"57941","fix":"61099","desc":"57943"},{"messageId":"57938","fix":"61100","desc":"57940"},{"messageId":"57941","fix":"61101","desc":"57943"},{"messageId":"57938","fix":"61102","desc":"57940"},{"messageId":"57941","fix":"61103","desc":"57943"},{"messageId":"57938","fix":"61104","desc":"57940"},{"messageId":"57941","fix":"61105","desc":"57943"},{"messageId":"57938","fix":"61106","desc":"57940"},{"messageId":"57941","fix":"61107","desc":"57943"},{"messageId":"57938","fix":"61108","desc":"57940"},{"messageId":"57941","fix":"61109","desc":"57943"},{"messageId":"57938","fix":"61110","desc":"57940"},{"messageId":"57941","fix":"61111","desc":"57943"},{"messageId":"57938","fix":"61112","desc":"57940"},{"messageId":"57941","fix":"61113","desc":"57943"},{"messageId":"57938","fix":"61114","desc":"57940"},{"messageId":"57941","fix":"61115","desc":"57943"},{"messageId":"57938","fix":"61116","desc":"57940"},{"messageId":"57941","fix":"61117","desc":"57943"},{"messageId":"57938","fix":"61118","desc":"57940"},{"messageId":"57941","fix":"61119","desc":"57943"},{"messageId":"57938","fix":"61120","desc":"57940"},{"messageId":"57941","fix":"61121","desc":"57943"},{"messageId":"57938","fix":"61122","desc":"57940"},{"messageId":"57941","fix":"61123","desc":"57943"},{"messageId":"57938","fix":"61124","desc":"57940"},{"messageId":"57941","fix":"61125","desc":"57943"},{"messageId":"57938","fix":"61126","desc":"57940"},{"messageId":"57941","fix":"61127","desc":"57943"},{"messageId":"57938","fix":"61128","desc":"57940"},{"messageId":"57941","fix":"61129","desc":"57943"},{"messageId":"57938","fix":"61130","desc":"57940"},{"messageId":"57941","fix":"61131","desc":"57943"},{"messageId":"57938","fix":"61132","desc":"57940"},{"messageId":"57941","fix":"61133","desc":"57943"},{"messageId":"57938","fix":"61134","desc":"57940"},{"messageId":"57941","fix":"61135","desc":"57943"},{"messageId":"57938","fix":"61136","desc":"57940"},{"messageId":"57941","fix":"61137","desc":"57943"},{"messageId":"57938","fix":"61138","desc":"57940"},{"messageId":"57941","fix":"61139","desc":"57943"},{"messageId":"57938","fix":"61140","desc":"57940"},{"messageId":"57941","fix":"61141","desc":"57943"},{"messageId":"57938","fix":"61142","desc":"57940"},{"messageId":"57941","fix":"61143","desc":"57943"},{"messageId":"57938","fix":"61144","desc":"57940"},{"messageId":"57941","fix":"61145","desc":"57943"},{"messageId":"57938","fix":"61146","desc":"57940"},{"messageId":"57941","fix":"61147","desc":"57943"},{"messageId":"57938","fix":"61148","desc":"57940"},{"messageId":"57941","fix":"61149","desc":"57943"},{"messageId":"57938","fix":"61150","desc":"57940"},{"messageId":"57941","fix":"61151","desc":"57943"},{"messageId":"57938","fix":"61152","desc":"57940"},{"messageId":"57941","fix":"61153","desc":"57943"},{"messageId":"57938","fix":"61154","desc":"57940"},{"messageId":"57941","fix":"61155","desc":"57943"},{"messageId":"57938","fix":"61156","desc":"57940"},{"messageId":"57941","fix":"61157","desc":"57943"},{"messageId":"57938","fix":"61158","desc":"57940"},{"messageId":"57941","fix":"61159","desc":"57943"},{"messageId":"57938","fix":"61160","desc":"57940"},{"messageId":"57941","fix":"61161","desc":"57943"},{"messageId":"57938","fix":"61162","desc":"57940"},{"messageId":"57941","fix":"61163","desc":"57943"},{"messageId":"57938","fix":"61164","desc":"57940"},{"messageId":"57941","fix":"61165","desc":"57943"},{"messageId":"57938","fix":"61166","desc":"57940"},{"messageId":"57941","fix":"61167","desc":"57943"},{"messageId":"57938","fix":"61168","desc":"57940"},{"messageId":"57941","fix":"61169","desc":"57943"},{"messageId":"57938","fix":"61170","desc":"57940"},{"messageId":"57941","fix":"61171","desc":"57943"},{"messageId":"57938","fix":"61172","desc":"57940"},{"messageId":"57941","fix":"61173","desc":"57943"},{"messageId":"57938","fix":"61174","desc":"57940"},{"messageId":"57941","fix":"61175","desc":"57943"},{"messageId":"57938","fix":"61176","desc":"57940"},{"messageId":"57941","fix":"61177","desc":"57943"},{"messageId":"57938","fix":"61178","desc":"57940"},{"messageId":"57941","fix":"61179","desc":"57943"},{"messageId":"57938","fix":"61180","desc":"57940"},{"messageId":"57941","fix":"61181","desc":"57943"},{"messageId":"57938","fix":"61182","desc":"57940"},{"messageId":"57941","fix":"61183","desc":"57943"},{"messageId":"57938","fix":"61184","desc":"57940"},{"messageId":"57941","fix":"61185","desc":"57943"},{"messageId":"57938","fix":"61186","desc":"57940"},{"messageId":"57941","fix":"61187","desc":"57943"},{"messageId":"57938","fix":"61188","desc":"57940"},{"messageId":"57941","fix":"61189","desc":"57943"},{"messageId":"57938","fix":"61190","desc":"57940"},{"messageId":"57941","fix":"61191","desc":"57943"},{"messageId":"57938","fix":"61192","desc":"57940"},{"messageId":"57941","fix":"61193","desc":"57943"},{"messageId":"57938","fix":"61194","desc":"57940"},{"messageId":"57941","fix":"61195","desc":"57943"},{"messageId":"57938","fix":"61196","desc":"57940"},{"messageId":"57941","fix":"61197","desc":"57943"},{"messageId":"57938","fix":"61198","desc":"57940"},{"messageId":"57941","fix":"61199","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"61200","desc":"57940"},{"messageId":"57941","fix":"61201","desc":"57943"},{"messageId":"57938","fix":"61202","desc":"57940"},{"messageId":"57941","fix":"61203","desc":"57943"},{"messageId":"57938","fix":"61204","desc":"57940"},{"messageId":"57941","fix":"61205","desc":"57943"},{"messageId":"57938","fix":"61206","desc":"57940"},{"messageId":"57941","fix":"61207","desc":"57943"},{"messageId":"57938","fix":"61208","desc":"57940"},{"messageId":"57941","fix":"61209","desc":"57943"},{"messageId":"57938","fix":"61210","desc":"57940"},{"messageId":"57941","fix":"61211","desc":"57943"},{"messageId":"57938","fix":"61212","desc":"57940"},{"messageId":"57941","fix":"61213","desc":"57943"},{"messageId":"57938","fix":"61214","desc":"57940"},{"messageId":"57941","fix":"61215","desc":"57943"},{"messageId":"57938","fix":"61216","desc":"57940"},{"messageId":"57941","fix":"61217","desc":"57943"},{"messageId":"57938","fix":"61218","desc":"57940"},{"messageId":"57941","fix":"61219","desc":"57943"},{"messageId":"57938","fix":"61220","desc":"57940"},{"messageId":"57941","fix":"61221","desc":"57943"},{"messageId":"57938","fix":"61222","desc":"57940"},{"messageId":"57941","fix":"61223","desc":"57943"},{"messageId":"57938","fix":"61224","desc":"57940"},{"messageId":"57941","fix":"61225","desc":"57943"},{"messageId":"57938","fix":"61226","desc":"57940"},{"messageId":"57941","fix":"61227","desc":"57943"},{"messageId":"57938","fix":"61228","desc":"57940"},{"messageId":"57941","fix":"61229","desc":"57943"},{"messageId":"57938","fix":"61230","desc":"57940"},{"messageId":"57941","fix":"61231","desc":"57943"},{"messageId":"57938","fix":"61232","desc":"57940"},{"messageId":"57941","fix":"61233","desc":"57943"},{"messageId":"57938","fix":"61234","desc":"57940"},{"messageId":"57941","fix":"61235","desc":"57943"},{"messageId":"57938","fix":"61236","desc":"57940"},{"messageId":"57941","fix":"61237","desc":"57943"},{"messageId":"57938","fix":"61238","desc":"57940"},{"messageId":"57941","fix":"61239","desc":"57943"},{"messageId":"57938","fix":"61240","desc":"57940"},{"messageId":"57941","fix":"61241","desc":"57943"},{"messageId":"57938","fix":"61242","desc":"57940"},{"messageId":"57941","fix":"61243","desc":"57943"},{"messageId":"57938","fix":"61244","desc":"57940"},{"messageId":"57941","fix":"61245","desc":"57943"},{"messageId":"57938","fix":"61246","desc":"57940"},{"messageId":"57941","fix":"61247","desc":"57943"},{"messageId":"57938","fix":"61248","desc":"57940"},{"messageId":"57941","fix":"61249","desc":"57943"},{"messageId":"57938","fix":"61250","desc":"57940"},{"messageId":"57941","fix":"61251","desc":"57943"},{"messageId":"57938","fix":"61252","desc":"57940"},{"messageId":"57941","fix":"61253","desc":"57943"},{"messageId":"57938","fix":"61254","desc":"57940"},{"messageId":"57941","fix":"61255","desc":"57943"},{"messageId":"57938","fix":"61256","desc":"57940"},{"messageId":"57941","fix":"61257","desc":"57943"},{"messageId":"57938","fix":"61258","desc":"57940"},{"messageId":"57941","fix":"61259","desc":"57943"},{"messageId":"57938","fix":"61260","desc":"57940"},{"messageId":"57941","fix":"61261","desc":"57943"},{"messageId":"57938","fix":"61262","desc":"57940"},{"messageId":"57941","fix":"61263","desc":"57943"},{"messageId":"57938","fix":"61264","desc":"57940"},{"messageId":"57941","fix":"61265","desc":"57943"},{"messageId":"57938","fix":"61266","desc":"57940"},{"messageId":"57941","fix":"61267","desc":"57943"},{"messageId":"57938","fix":"61268","desc":"57940"},{"messageId":"57941","fix":"61269","desc":"57943"},{"messageId":"57938","fix":"61270","desc":"57940"},{"messageId":"57941","fix":"61271","desc":"57943"},{"messageId":"57938","fix":"61272","desc":"57940"},{"messageId":"57941","fix":"61273","desc":"57943"},{"messageId":"57938","fix":"61274","desc":"57940"},{"messageId":"57941","fix":"61275","desc":"57943"},{"messageId":"57938","fix":"61276","desc":"57940"},{"messageId":"57941","fix":"61277","desc":"57943"},{"messageId":"57938","fix":"61278","desc":"57940"},{"messageId":"57941","fix":"61279","desc":"57943"},{"messageId":"57938","fix":"61280","desc":"57940"},{"messageId":"57941","fix":"61281","desc":"57943"},{"messageId":"57938","fix":"61282","desc":"57940"},{"messageId":"57941","fix":"61283","desc":"57943"},{"messageId":"57938","fix":"61284","desc":"57940"},{"messageId":"57941","fix":"61285","desc":"57943"},{"messageId":"57938","fix":"61286","desc":"57940"},{"messageId":"57941","fix":"61287","desc":"57943"},{"messageId":"57938","fix":"61288","desc":"57940"},{"messageId":"57941","fix":"61289","desc":"57943"},{"messageId":"57938","fix":"61290","desc":"57940"},{"messageId":"57941","fix":"61291","desc":"57943"},{"messageId":"57938","fix":"61292","desc":"57940"},{"messageId":"57941","fix":"61293","desc":"57943"},{"messageId":"57938","fix":"61294","desc":"57940"},{"messageId":"57941","fix":"61295","desc":"57943"},{"messageId":"57938","fix":"61296","desc":"57940"},{"messageId":"57941","fix":"61297","desc":"57943"},{"messageId":"57938","fix":"61298","desc":"57940"},{"messageId":"57941","fix":"61299","desc":"57943"},{"messageId":"57938","fix":"61300","desc":"57940"},{"messageId":"57941","fix":"61301","desc":"57943"},{"messageId":"57938","fix":"61302","desc":"57940"},{"messageId":"57941","fix":"61303","desc":"57943"},{"messageId":"57938","fix":"61304","desc":"57940"},{"messageId":"57941","fix":"61305","desc":"57943"},{"messageId":"57938","fix":"61306","desc":"57940"},{"messageId":"57941","fix":"61307","desc":"57943"},{"messageId":"57938","fix":"61308","desc":"57940"},{"messageId":"57941","fix":"61309","desc":"57943"},{"messageId":"57938","fix":"61310","desc":"57940"},{"messageId":"57941","fix":"61311","desc":"57943"},{"messageId":"57938","fix":"61312","desc":"57940"},{"messageId":"57941","fix":"61313","desc":"57943"},{"messageId":"57938","fix":"61314","desc":"57940"},{"messageId":"57941","fix":"61315","desc":"57943"},{"messageId":"57938","fix":"61316","desc":"57940"},{"messageId":"57941","fix":"61317","desc":"57943"},{"messageId":"57938","fix":"61318","desc":"57940"},{"messageId":"57941","fix":"61319","desc":"57943"},{"messageId":"57938","fix":"61320","desc":"57940"},{"messageId":"57941","fix":"61321","desc":"57943"},{"messageId":"57938","fix":"61322","desc":"57940"},{"messageId":"57941","fix":"61323","desc":"57943"},{"messageId":"57938","fix":"61324","desc":"57940"},{"messageId":"57941","fix":"61325","desc":"57943"},{"messageId":"57938","fix":"61326","desc":"57940"},{"messageId":"57941","fix":"61327","desc":"57943"},{"messageId":"57938","fix":"61328","desc":"57940"},{"messageId":"57941","fix":"61329","desc":"57943"},{"messageId":"57938","fix":"61330","desc":"57940"},{"messageId":"57941","fix":"61331","desc":"57943"},{"messageId":"57938","fix":"61332","desc":"57940"},{"messageId":"57941","fix":"61333","desc":"57943"},{"messageId":"57938","fix":"61334","desc":"57940"},{"messageId":"57941","fix":"61335","desc":"57943"},{"messageId":"57938","fix":"61336","desc":"57940"},{"messageId":"57941","fix":"61337","desc":"57943"},{"messageId":"57938","fix":"61338","desc":"57940"},{"messageId":"57941","fix":"61339","desc":"57943"},{"messageId":"57938","fix":"61340","desc":"57940"},{"messageId":"57941","fix":"61341","desc":"57943"},{"messageId":"57938","fix":"61342","desc":"57940"},{"messageId":"57941","fix":"61343","desc":"57943"},{"messageId":"57938","fix":"61344","desc":"57940"},{"messageId":"57941","fix":"61345","desc":"57943"},{"messageId":"57938","fix":"61346","desc":"57940"},{"messageId":"57941","fix":"61347","desc":"57943"},{"messageId":"57938","fix":"61348","desc":"57940"},{"messageId":"57941","fix":"61349","desc":"57943"},{"messageId":"57938","fix":"61350","desc":"57940"},{"messageId":"57941","fix":"61351","desc":"57943"},{"messageId":"57938","fix":"61352","desc":"57940"},{"messageId":"57941","fix":"61353","desc":"57943"},{"messageId":"57938","fix":"61354","desc":"57940"},{"messageId":"57941","fix":"61355","desc":"57943"},{"messageId":"57938","fix":"61356","desc":"57940"},{"messageId":"57941","fix":"61357","desc":"57943"},{"messageId":"57938","fix":"61358","desc":"57940"},{"messageId":"57941","fix":"61359","desc":"57943"},{"messageId":"57938","fix":"61360","desc":"57940"},{"messageId":"57941","fix":"61361","desc":"57943"},{"messageId":"57938","fix":"61362","desc":"57940"},{"messageId":"57941","fix":"61363","desc":"57943"},{"messageId":"57938","fix":"61364","desc":"57940"},{"messageId":"57941","fix":"61365","desc":"57943"},{"messageId":"57938","fix":"61366","desc":"57940"},{"messageId":"57941","fix":"61367","desc":"57943"},{"messageId":"57938","fix":"61368","desc":"57940"},{"messageId":"57941","fix":"61369","desc":"57943"},{"messageId":"57938","fix":"61370","desc":"57940"},{"messageId":"57941","fix":"61371","desc":"57943"},{"messageId":"57938","fix":"61372","desc":"57940"},{"messageId":"57941","fix":"61373","desc":"57943"},{"messageId":"57938","fix":"61374","desc":"57940"},{"messageId":"57941","fix":"61375","desc":"57943"},{"messageId":"57938","fix":"61376","desc":"57940"},{"messageId":"57941","fix":"61377","desc":"57943"},{"messageId":"57938","fix":"61378","desc":"57940"},{"messageId":"57941","fix":"61379","desc":"57943"},{"messageId":"57938","fix":"61380","desc":"57940"},{"messageId":"57941","fix":"61381","desc":"57943"},{"messageId":"57938","fix":"61382","desc":"57940"},{"messageId":"57941","fix":"61383","desc":"57943"},{"messageId":"57938","fix":"61384","desc":"57940"},{"messageId":"57941","fix":"61385","desc":"57943"},{"messageId":"57938","fix":"61386","desc":"57940"},{"messageId":"57941","fix":"61387","desc":"57943"},{"messageId":"57938","fix":"61388","desc":"57940"},{"messageId":"57941","fix":"61389","desc":"57943"},{"messageId":"57938","fix":"61390","desc":"57940"},{"messageId":"57941","fix":"61391","desc":"57943"},{"messageId":"57938","fix":"61392","desc":"57940"},{"messageId":"57941","fix":"61393","desc":"57943"},{"messageId":"57938","fix":"61394","desc":"57940"},{"messageId":"57941","fix":"61395","desc":"57943"},{"messageId":"57938","fix":"61396","desc":"57940"},{"messageId":"57941","fix":"61397","desc":"57943"},{"messageId":"57938","fix":"61398","desc":"57940"},{"messageId":"57941","fix":"61399","desc":"57943"},{"messageId":"57938","fix":"61400","desc":"57940"},{"messageId":"57941","fix":"61401","desc":"57943"},{"messageId":"57938","fix":"61402","desc":"57940"},{"messageId":"57941","fix":"61403","desc":"57943"},{"messageId":"57938","fix":"61404","desc":"57940"},{"messageId":"57941","fix":"61405","desc":"57943"},{"messageId":"57938","fix":"61406","desc":"57940"},{"messageId":"57941","fix":"61407","desc":"57943"},{"messageId":"57938","fix":"61408","desc":"57940"},{"messageId":"57941","fix":"61409","desc":"57943"},{"messageId":"57938","fix":"61410","desc":"57940"},{"messageId":"57941","fix":"61411","desc":"57943"},{"messageId":"57938","fix":"61412","desc":"57940"},{"messageId":"57941","fix":"61413","desc":"57943"},{"messageId":"57938","fix":"61414","desc":"57940"},{"messageId":"57941","fix":"61415","desc":"57943"},{"messageId":"57938","fix":"61416","desc":"57940"},{"messageId":"57941","fix":"61417","desc":"57943"},{"messageId":"57938","fix":"61418","desc":"57940"},{"messageId":"57941","fix":"61419","desc":"57943"},{"messageId":"57938","fix":"61420","desc":"57940"},{"messageId":"57941","fix":"61421","desc":"57943"},{"messageId":"57938","fix":"61422","desc":"57940"},{"messageId":"57941","fix":"61423","desc":"57943"},{"messageId":"57938","fix":"61424","desc":"57940"},{"messageId":"57941","fix":"61425","desc":"57943"},{"messageId":"57938","fix":"61426","desc":"57940"},{"messageId":"57941","fix":"61427","desc":"57943"},{"messageId":"57938","fix":"61428","desc":"57940"},{"messageId":"57941","fix":"61429","desc":"57943"},{"messageId":"57938","fix":"61430","desc":"57940"},{"messageId":"57941","fix":"61431","desc":"57943"},{"messageId":"57938","fix":"61432","desc":"57940"},{"messageId":"57941","fix":"61433","desc":"57943"},{"messageId":"57938","fix":"61434","desc":"57940"},{"messageId":"57941","fix":"61435","desc":"57943"},{"messageId":"57938","fix":"61436","desc":"57940"},{"messageId":"57941","fix":"61437","desc":"57943"},{"messageId":"57938","fix":"61438","desc":"57940"},{"messageId":"57941","fix":"61439","desc":"57943"},{"messageId":"57938","fix":"61440","desc":"57940"},{"messageId":"57941","fix":"61441","desc":"57943"},{"messageId":"57938","fix":"61442","desc":"57940"},{"messageId":"57941","fix":"61443","desc":"57943"},{"messageId":"57938","fix":"61444","desc":"57940"},{"messageId":"57941","fix":"61445","desc":"57943"},{"messageId":"57938","fix":"61446","desc":"57940"},{"messageId":"57941","fix":"61447","desc":"57943"},{"messageId":"57938","fix":"61448","desc":"57940"},{"messageId":"57941","fix":"61449","desc":"57943"},{"messageId":"57938","fix":"61450","desc":"57940"},{"messageId":"57941","fix":"61451","desc":"57943"},{"messageId":"57938","fix":"61452","desc":"57940"},{"messageId":"57941","fix":"61453","desc":"57943"},{"messageId":"57938","fix":"61454","desc":"57940"},{"messageId":"57941","fix":"61455","desc":"57943"},{"messageId":"57938","fix":"61456","desc":"57940"},{"messageId":"57941","fix":"61457","desc":"57943"},{"messageId":"57938","fix":"61458","desc":"57940"},{"messageId":"57941","fix":"61459","desc":"57943"},{"messageId":"57938","fix":"61460","desc":"57940"},{"messageId":"57941","fix":"61461","desc":"57943"},{"messageId":"57938","fix":"61462","desc":"57940"},{"messageId":"57941","fix":"61463","desc":"57943"},{"messageId":"57938","fix":"61464","desc":"57940"},{"messageId":"57941","fix":"61465","desc":"57943"},{"messageId":"57938","fix":"61466","desc":"57940"},{"messageId":"57941","fix":"61467","desc":"57943"},{"messageId":"57938","fix":"61468","desc":"57940"},{"messageId":"57941","fix":"61469","desc":"57943"},{"messageId":"57938","fix":"61470","desc":"57940"},{"messageId":"57941","fix":"61471","desc":"57943"},{"messageId":"57938","fix":"61472","desc":"57940"},{"messageId":"57941","fix":"61473","desc":"57943"},{"messageId":"57938","fix":"61474","desc":"57940"},{"messageId":"57941","fix":"61475","desc":"57943"},{"messageId":"57938","fix":"61476","desc":"57940"},{"messageId":"57941","fix":"61477","desc":"57943"},{"messageId":"57938","fix":"61478","desc":"57940"},{"messageId":"57941","fix":"61479","desc":"57943"},{"messageId":"57938","fix":"61480","desc":"57940"},{"messageId":"57941","fix":"61481","desc":"57943"},{"messageId":"57938","fix":"61482","desc":"57940"},{"messageId":"57941","fix":"61483","desc":"57943"},{"messageId":"57938","fix":"61484","desc":"57940"},{"messageId":"57941","fix":"61485","desc":"57943"},{"messageId":"57938","fix":"61486","desc":"57940"},{"messageId":"57941","fix":"61487","desc":"57943"},{"messageId":"57938","fix":"61488","desc":"57940"},{"messageId":"57941","fix":"61489","desc":"57943"},{"messageId":"57938","fix":"61490","desc":"57940"},{"messageId":"57941","fix":"61491","desc":"57943"},{"messageId":"57938","fix":"61492","desc":"57940"},{"messageId":"57941","fix":"61493","desc":"57943"},{"messageId":"57938","fix":"61494","desc":"57940"},{"messageId":"57941","fix":"61495","desc":"57943"},{"messageId":"57938","fix":"61496","desc":"57940"},{"messageId":"57941","fix":"61497","desc":"57943"},{"messageId":"57938","fix":"61498","desc":"57940"},{"messageId":"57941","fix":"61499","desc":"57943"},{"messageId":"57938","fix":"61500","desc":"57940"},{"messageId":"57941","fix":"61501","desc":"57943"},{"messageId":"57938","fix":"61502","desc":"57940"},{"messageId":"57941","fix":"61503","desc":"57943"},{"messageId":"57938","fix":"61504","desc":"57940"},{"messageId":"57941","fix":"61505","desc":"57943"},{"messageId":"57938","fix":"61506","desc":"57940"},{"messageId":"57941","fix":"61507","desc":"57943"},{"messageId":"57938","fix":"61508","desc":"57940"},{"messageId":"57941","fix":"61509","desc":"57943"},{"messageId":"57938","fix":"61510","desc":"57940"},{"messageId":"57941","fix":"61511","desc":"57943"},{"messageId":"57938","fix":"61512","desc":"57940"},{"messageId":"57941","fix":"61513","desc":"57943"},{"messageId":"57938","fix":"61514","desc":"57940"},{"messageId":"57941","fix":"61515","desc":"57943"},{"messageId":"57938","fix":"61516","desc":"57940"},{"messageId":"57941","fix":"61517","desc":"57943"},{"messageId":"57938","fix":"61518","desc":"57940"},{"messageId":"57941","fix":"61519","desc":"57943"},{"messageId":"57938","fix":"61520","desc":"57940"},{"messageId":"57941","fix":"61521","desc":"57943"},{"messageId":"57938","fix":"61522","desc":"57940"},{"messageId":"57941","fix":"61523","desc":"57943"},{"messageId":"57938","fix":"61524","desc":"57940"},{"messageId":"57941","fix":"61525","desc":"57943"},{"messageId":"57938","fix":"61526","desc":"57940"},{"messageId":"57941","fix":"61527","desc":"57943"},{"messageId":"57938","fix":"61528","desc":"57940"},{"messageId":"57941","fix":"61529","desc":"57943"},{"messageId":"57938","fix":"61530","desc":"57940"},{"messageId":"57941","fix":"61531","desc":"57943"},{"messageId":"57938","fix":"61532","desc":"57940"},{"messageId":"57941","fix":"61533","desc":"57943"},{"messageId":"57938","fix":"61534","desc":"57940"},{"messageId":"57941","fix":"61535","desc":"57943"},{"messageId":"57938","fix":"61536","desc":"57940"},{"messageId":"57941","fix":"61537","desc":"57943"},{"messageId":"57938","fix":"61538","desc":"57940"},{"messageId":"57941","fix":"61539","desc":"57943"},{"messageId":"57938","fix":"61540","desc":"57940"},{"messageId":"57941","fix":"61541","desc":"57943"},{"messageId":"57938","fix":"61542","desc":"57940"},{"messageId":"57941","fix":"61543","desc":"57943"},{"messageId":"57938","fix":"61544","desc":"57940"},{"messageId":"57941","fix":"61545","desc":"57943"},{"messageId":"57938","fix":"61546","desc":"57940"},{"messageId":"57941","fix":"61547","desc":"57943"},{"messageId":"57938","fix":"61548","desc":"57940"},{"messageId":"57941","fix":"61549","desc":"57943"},{"messageId":"57938","fix":"61550","desc":"57940"},{"messageId":"57941","fix":"61551","desc":"57943"},{"messageId":"57938","fix":"61552","desc":"57940"},{"messageId":"57941","fix":"61553","desc":"57943"},{"messageId":"57938","fix":"61554","desc":"57940"},{"messageId":"57941","fix":"61555","desc":"57943"},{"messageId":"57938","fix":"61556","desc":"57940"},{"messageId":"57941","fix":"61557","desc":"57943"},{"messageId":"57938","fix":"61558","desc":"57940"},{"messageId":"57941","fix":"61559","desc":"57943"},{"messageId":"57938","fix":"61560","desc":"57940"},{"messageId":"57941","fix":"61561","desc":"57943"},{"messageId":"57938","fix":"61562","desc":"57940"},{"messageId":"57941","fix":"61563","desc":"57943"},{"messageId":"57938","fix":"61564","desc":"57940"},{"messageId":"57941","fix":"61565","desc":"57943"},{"messageId":"57938","fix":"61566","desc":"57940"},{"messageId":"57941","fix":"61567","desc":"57943"},{"messageId":"57938","fix":"61568","desc":"57940"},{"messageId":"57941","fix":"61569","desc":"57943"},{"messageId":"57938","fix":"61570","desc":"57940"},{"messageId":"57941","fix":"61571","desc":"57943"},{"messageId":"57938","fix":"61572","desc":"57940"},{"messageId":"57941","fix":"61573","desc":"57943"},{"messageId":"57938","fix":"61574","desc":"57940"},{"messageId":"57941","fix":"61575","desc":"57943"},{"messageId":"57938","fix":"61576","desc":"57940"},{"messageId":"57941","fix":"61577","desc":"57943"},{"messageId":"57938","fix":"61578","desc":"57940"},{"messageId":"57941","fix":"61579","desc":"57943"},{"messageId":"57938","fix":"61580","desc":"57940"},{"messageId":"57941","fix":"61581","desc":"57943"},{"messageId":"57938","fix":"61582","desc":"57940"},{"messageId":"57941","fix":"61583","desc":"57943"},{"messageId":"57938","fix":"61584","desc":"57940"},{"messageId":"57941","fix":"61585","desc":"57943"},{"messageId":"57938","fix":"61586","desc":"57940"},{"messageId":"57941","fix":"61587","desc":"57943"},{"messageId":"57938","fix":"61588","desc":"57940"},{"messageId":"57941","fix":"61589","desc":"57943"},{"messageId":"57938","fix":"61590","desc":"57940"},{"messageId":"57941","fix":"61591","desc":"57943"},{"messageId":"57938","fix":"61592","desc":"57940"},{"messageId":"57941","fix":"61593","desc":"57943"},{"messageId":"57938","fix":"61594","desc":"57940"},{"messageId":"57941","fix":"61595","desc":"57943"},{"messageId":"57938","fix":"61596","desc":"57940"},{"messageId":"57941","fix":"61597","desc":"57943"},{"messageId":"57938","fix":"61598","desc":"57940"},{"messageId":"57941","fix":"61599","desc":"57943"},{"messageId":"57938","fix":"61600","desc":"57940"},{"messageId":"57941","fix":"61601","desc":"57943"},{"messageId":"57938","fix":"61602","desc":"57940"},{"messageId":"57941","fix":"61603","desc":"57943"},{"messageId":"57938","fix":"61604","desc":"57940"},{"messageId":"57941","fix":"61605","desc":"57943"},{"messageId":"57938","fix":"61606","desc":"57940"},{"messageId":"57941","fix":"61607","desc":"57943"},{"messageId":"57938","fix":"61608","desc":"57940"},{"messageId":"57941","fix":"61609","desc":"57943"},{"messageId":"57938","fix":"61610","desc":"57940"},{"messageId":"57941","fix":"61611","desc":"57943"},{"messageId":"57938","fix":"61612","desc":"57940"},{"messageId":"57941","fix":"61613","desc":"57943"},{"messageId":"57938","fix":"61614","desc":"57940"},{"messageId":"57941","fix":"61615","desc":"57943"},{"messageId":"57938","fix":"61616","desc":"57940"},{"messageId":"57941","fix":"61617","desc":"57943"},{"messageId":"57938","fix":"61618","desc":"57940"},{"messageId":"57941","fix":"61619","desc":"57943"},{"messageId":"57938","fix":"61620","desc":"57940"},{"messageId":"57941","fix":"61621","desc":"57943"},{"messageId":"57938","fix":"61622","desc":"57940"},{"messageId":"57941","fix":"61623","desc":"57943"},{"messageId":"57938","fix":"61624","desc":"57940"},{"messageId":"57941","fix":"61625","desc":"57943"},{"messageId":"57938","fix":"61626","desc":"57940"},{"messageId":"57941","fix":"61627","desc":"57943"},{"messageId":"57938","fix":"61628","desc":"57940"},{"messageId":"57941","fix":"61629","desc":"57943"},{"messageId":"57938","fix":"61630","desc":"57940"},{"messageId":"57941","fix":"61631","desc":"57943"},{"messageId":"57938","fix":"61632","desc":"57940"},{"messageId":"57941","fix":"61633","desc":"57943"},{"messageId":"57938","fix":"61634","desc":"57940"},{"messageId":"57941","fix":"61635","desc":"57943"},{"messageId":"57938","fix":"61636","desc":"57940"},{"messageId":"57941","fix":"61637","desc":"57943"},{"messageId":"57938","fix":"61638","desc":"57940"},{"messageId":"57941","fix":"61639","desc":"57943"},{"messageId":"57938","fix":"61640","desc":"57940"},{"messageId":"57941","fix":"61641","desc":"57943"},{"messageId":"57938","fix":"61642","desc":"57940"},{"messageId":"57941","fix":"61643","desc":"57943"},{"messageId":"57938","fix":"61644","desc":"57940"},{"messageId":"57941","fix":"61645","desc":"57943"},{"messageId":"57938","fix":"61646","desc":"57940"},{"messageId":"57941","fix":"61647","desc":"57943"},{"messageId":"57938","fix":"61648","desc":"57940"},{"messageId":"57941","fix":"61649","desc":"57943"},{"messageId":"57938","fix":"61650","desc":"57940"},{"messageId":"57941","fix":"61651","desc":"57943"},{"messageId":"57938","fix":"61652","desc":"57940"},{"messageId":"57941","fix":"61653","desc":"57943"},{"messageId":"57938","fix":"61654","desc":"57940"},{"messageId":"57941","fix":"61655","desc":"57943"},{"messageId":"57938","fix":"61656","desc":"57940"},{"messageId":"57941","fix":"61657","desc":"57943"},{"messageId":"57938","fix":"61658","desc":"57940"},{"messageId":"57941","fix":"61659","desc":"57943"},{"messageId":"57938","fix":"61660","desc":"57940"},{"messageId":"57941","fix":"61661","desc":"57943"},{"messageId":"57938","fix":"61662","desc":"57940"},{"messageId":"57941","fix":"61663","desc":"57943"},{"messageId":"57938","fix":"61664","desc":"57940"},{"messageId":"57941","fix":"61665","desc":"57943"},{"messageId":"57938","fix":"61666","desc":"57940"},{"messageId":"57941","fix":"61667","desc":"57943"},{"messageId":"57938","fix":"61668","desc":"57940"},{"messageId":"57941","fix":"61669","desc":"57943"},{"messageId":"57938","fix":"61670","desc":"57940"},{"messageId":"57941","fix":"61671","desc":"57943"},{"messageId":"57938","fix":"61672","desc":"57940"},{"messageId":"57941","fix":"61673","desc":"57943"},{"messageId":"57938","fix":"61674","desc":"57940"},{"messageId":"57941","fix":"61675","desc":"57943"},{"messageId":"57938","fix":"61676","desc":"57940"},{"messageId":"57941","fix":"61677","desc":"57943"},{"messageId":"57938","fix":"61678","desc":"57940"},{"messageId":"57941","fix":"61679","desc":"57943"},{"messageId":"57938","fix":"61680","desc":"57940"},{"messageId":"57941","fix":"61681","desc":"57943"},{"messageId":"57938","fix":"61682","desc":"57940"},{"messageId":"57941","fix":"61683","desc":"57943"},{"messageId":"57938","fix":"61684","desc":"57940"},{"messageId":"57941","fix":"61685","desc":"57943"},{"messageId":"57938","fix":"61686","desc":"57940"},{"messageId":"57941","fix":"61687","desc":"57943"},{"messageId":"57938","fix":"61688","desc":"57940"},{"messageId":"57941","fix":"61689","desc":"57943"},{"messageId":"57938","fix":"61690","desc":"57940"},{"messageId":"57941","fix":"61691","desc":"57943"},{"messageId":"57938","fix":"61692","desc":"57940"},{"messageId":"57941","fix":"61693","desc":"57943"},{"messageId":"57938","fix":"61694","desc":"57940"},{"messageId":"57941","fix":"61695","desc":"57943"},{"messageId":"57938","fix":"61696","desc":"57940"},{"messageId":"57941","fix":"61697","desc":"57943"},{"messageId":"57938","fix":"61698","desc":"57940"},{"messageId":"57941","fix":"61699","desc":"57943"},{"messageId":"57938","fix":"61700","desc":"57940"},{"messageId":"57941","fix":"61701","desc":"57943"},{"messageId":"57938","fix":"61702","desc":"57940"},{"messageId":"57941","fix":"61703","desc":"57943"},{"messageId":"57938","fix":"61704","desc":"57940"},{"messageId":"57941","fix":"61705","desc":"57943"},{"messageId":"57938","fix":"61706","desc":"57940"},{"messageId":"57941","fix":"61707","desc":"57943"},{"messageId":"57938","fix":"61708","desc":"57940"},{"messageId":"57941","fix":"61709","desc":"57943"},{"messageId":"57938","fix":"61710","desc":"57940"},{"messageId":"57941","fix":"61711","desc":"57943"},{"messageId":"57938","fix":"61712","desc":"57940"},{"messageId":"57941","fix":"61713","desc":"57943"},{"messageId":"57938","fix":"61714","desc":"57940"},{"messageId":"57941","fix":"61715","desc":"57943"},{"messageId":"57938","fix":"61716","desc":"57940"},{"messageId":"57941","fix":"61717","desc":"57943"},{"messageId":"57938","fix":"61718","desc":"57940"},{"messageId":"57941","fix":"61719","desc":"57943"},{"messageId":"57938","fix":"61720","desc":"57940"},{"messageId":"57941","fix":"61721","desc":"57943"},{"messageId":"57938","fix":"61722","desc":"57940"},{"messageId":"57941","fix":"61723","desc":"57943"},{"messageId":"57938","fix":"61724","desc":"57940"},{"messageId":"57941","fix":"61725","desc":"57943"},{"messageId":"57938","fix":"61726","desc":"57940"},{"messageId":"57941","fix":"61727","desc":"57943"},{"messageId":"57938","fix":"61728","desc":"57940"},{"messageId":"57941","fix":"61729","desc":"57943"},{"messageId":"57938","fix":"61730","desc":"57940"},{"messageId":"57941","fix":"61731","desc":"57943"},{"messageId":"57938","fix":"61732","desc":"57940"},{"messageId":"57941","fix":"61733","desc":"57943"},{"messageId":"57938","fix":"61734","desc":"57940"},{"messageId":"57941","fix":"61735","desc":"57943"},{"messageId":"57938","fix":"61736","desc":"57940"},{"messageId":"57941","fix":"61737","desc":"57943"},{"messageId":"57938","fix":"61738","desc":"57940"},{"messageId":"57941","fix":"61739","desc":"57943"},{"messageId":"57938","fix":"61740","desc":"57940"},{"messageId":"57941","fix":"61741","desc":"57943"},{"messageId":"57938","fix":"61742","desc":"57940"},{"messageId":"57941","fix":"61743","desc":"57943"},{"messageId":"57938","fix":"61744","desc":"57940"},{"messageId":"57941","fix":"61745","desc":"57943"},{"messageId":"57938","fix":"61746","desc":"57940"},{"messageId":"57941","fix":"61747","desc":"57943"},{"messageId":"57938","fix":"61748","desc":"57940"},{"messageId":"57941","fix":"61749","desc":"57943"},{"messageId":"57938","fix":"61750","desc":"57940"},{"messageId":"57941","fix":"61751","desc":"57943"},{"messageId":"57938","fix":"61752","desc":"57940"},{"messageId":"57941","fix":"61753","desc":"57943"},{"messageId":"57938","fix":"61754","desc":"57940"},{"messageId":"57941","fix":"61755","desc":"57943"},{"messageId":"57938","fix":"61756","desc":"57940"},{"messageId":"57941","fix":"61757","desc":"57943"},{"messageId":"57938","fix":"61758","desc":"57940"},{"messageId":"57941","fix":"61759","desc":"57943"},{"messageId":"57938","fix":"61760","desc":"57940"},{"messageId":"57941","fix":"61761","desc":"57943"},{"messageId":"57938","fix":"61762","desc":"57940"},{"messageId":"57941","fix":"61763","desc":"57943"},{"messageId":"57938","fix":"61764","desc":"57940"},{"messageId":"57941","fix":"61765","desc":"57943"},{"messageId":"57938","fix":"61766","desc":"57940"},{"messageId":"57941","fix":"61767","desc":"57943"},{"messageId":"57938","fix":"61768","desc":"57940"},{"messageId":"57941","fix":"61769","desc":"57943"},{"messageId":"57938","fix":"61770","desc":"57940"},{"messageId":"57941","fix":"61771","desc":"57943"},{"messageId":"57938","fix":"61772","desc":"57940"},{"messageId":"57941","fix":"61773","desc":"57943"},{"messageId":"57938","fix":"61774","desc":"57940"},{"messageId":"57941","fix":"61775","desc":"57943"},{"messageId":"57938","fix":"61776","desc":"57940"},{"messageId":"57941","fix":"61777","desc":"57943"},{"messageId":"57938","fix":"61778","desc":"57940"},{"messageId":"57941","fix":"61779","desc":"57943"},{"messageId":"57938","fix":"61780","desc":"57940"},{"messageId":"57941","fix":"61781","desc":"57943"},{"messageId":"57938","fix":"61782","desc":"57940"},{"messageId":"57941","fix":"61783","desc":"57943"},{"messageId":"57938","fix":"61784","desc":"57940"},{"messageId":"57941","fix":"61785","desc":"57943"},{"messageId":"57938","fix":"61786","desc":"57940"},{"messageId":"57941","fix":"61787","desc":"57943"},{"messageId":"57938","fix":"61788","desc":"57940"},{"messageId":"57941","fix":"61789","desc":"57943"},{"messageId":"57938","fix":"61790","desc":"57940"},{"messageId":"57941","fix":"61791","desc":"57943"},{"messageId":"57938","fix":"61792","desc":"57940"},{"messageId":"57941","fix":"61793","desc":"57943"},{"messageId":"57938","fix":"61794","desc":"57940"},{"messageId":"57941","fix":"61795","desc":"57943"},{"messageId":"57938","fix":"61796","desc":"57940"},{"messageId":"57941","fix":"61797","desc":"57943"},{"messageId":"57938","fix":"61798","desc":"57940"},{"messageId":"57941","fix":"61799","desc":"57943"},{"messageId":"57938","fix":"61800","desc":"57940"},{"messageId":"57941","fix":"61801","desc":"57943"},{"messageId":"57938","fix":"61802","desc":"57940"},{"messageId":"57941","fix":"61803","desc":"57943"},{"messageId":"57938","fix":"61804","desc":"57940"},{"messageId":"57941","fix":"61805","desc":"57943"},{"messageId":"57938","fix":"61806","desc":"57940"},{"messageId":"57941","fix":"61807","desc":"57943"},{"messageId":"57938","fix":"61808","desc":"57940"},{"messageId":"57941","fix":"61809","desc":"57943"},{"messageId":"57938","fix":"61810","desc":"57940"},{"messageId":"57941","fix":"61811","desc":"57943"},{"messageId":"57938","fix":"61812","desc":"57940"},{"messageId":"57941","fix":"61813","desc":"57943"},{"messageId":"57938","fix":"61814","desc":"57940"},{"messageId":"57941","fix":"61815","desc":"57943"},{"messageId":"57938","fix":"61816","desc":"57940"},{"messageId":"57941","fix":"61817","desc":"57943"},{"messageId":"57938","fix":"61818","desc":"57940"},{"messageId":"57941","fix":"61819","desc":"57943"},{"messageId":"57938","fix":"61820","desc":"57940"},{"messageId":"57941","fix":"61821","desc":"57943"},{"messageId":"57938","fix":"61822","desc":"57940"},{"messageId":"57941","fix":"61823","desc":"57943"},{"messageId":"57938","fix":"61824","desc":"57940"},{"messageId":"57941","fix":"61825","desc":"57943"},{"messageId":"57938","fix":"61826","desc":"57940"},{"messageId":"57941","fix":"61827","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"61828","desc":"57940"},{"messageId":"57941","fix":"61829","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"61830","desc":"57940"},{"messageId":"57941","fix":"61831","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"61832","desc":"57940"},{"messageId":"57941","fix":"61833","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"61834","desc":"57940"},{"messageId":"57941","fix":"61835","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"61836","desc":"57940"},{"messageId":"57941","fix":"61837","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"61838","desc":"57940"},{"messageId":"57941","fix":"61839","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"61840","desc":"57940"},{"messageId":"57941","fix":"61841","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"61842","desc":"57940"},{"messageId":"57941","fix":"61843","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"61844","desc":"57940"},{"messageId":"57941","fix":"61845","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"61846","desc":"57940"},{"messageId":"57941","fix":"61847","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"61848","desc":"57940"},{"messageId":"57941","fix":"61849","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"61850","desc":"57940"},{"messageId":"57941","fix":"61851","desc":"57943"},{"messageId":"57938","fix":"61852","desc":"57940"},{"messageId":"57941","fix":"61853","desc":"57943"},{"messageId":"57938","fix":"61854","desc":"57940"},{"messageId":"57941","fix":"61855","desc":"57943"},{"messageId":"57938","fix":"61856","desc":"57940"},{"messageId":"57941","fix":"61857","desc":"57943"},{"messageId":"57938","fix":"61858","desc":"57940"},{"messageId":"57941","fix":"61859","desc":"57943"},{"messageId":"57938","fix":"61860","desc":"57940"},{"messageId":"57941","fix":"61861","desc":"57943"},{"messageId":"57938","fix":"61862","desc":"57940"},{"messageId":"57941","fix":"61863","desc":"57943"},{"messageId":"57938","fix":"61864","desc":"57940"},{"messageId":"57941","fix":"61865","desc":"57943"},{"messageId":"57938","fix":"61866","desc":"57940"},{"messageId":"57941","fix":"61867","desc":"57943"},{"messageId":"57938","fix":"61868","desc":"57940"},{"messageId":"57941","fix":"61869","desc":"57943"},{"messageId":"57938","fix":"61870","desc":"57940"},{"messageId":"57941","fix":"61871","desc":"57943"},{"messageId":"57938","fix":"61872","desc":"57940"},{"messageId":"57941","fix":"61873","desc":"57943"},{"messageId":"57938","fix":"61874","desc":"57940"},{"messageId":"57941","fix":"61875","desc":"57943"},{"messageId":"57938","fix":"61876","desc":"57940"},{"messageId":"57941","fix":"61877","desc":"57943"},{"messageId":"57938","fix":"61878","desc":"57940"},{"messageId":"57941","fix":"61879","desc":"57943"},{"messageId":"57938","fix":"61880","desc":"57940"},{"messageId":"57941","fix":"61881","desc":"57943"},{"messageId":"57938","fix":"61882","desc":"57940"},{"messageId":"57941","fix":"61883","desc":"57943"},{"messageId":"57938","fix":"61884","desc":"57940"},{"messageId":"57941","fix":"61885","desc":"57943"},{"messageId":"57938","fix":"61886","desc":"57940"},{"messageId":"57941","fix":"61887","desc":"57943"},{"messageId":"57938","fix":"61888","desc":"57940"},{"messageId":"57941","fix":"61889","desc":"57943"},{"messageId":"57938","fix":"61890","desc":"57940"},{"messageId":"57941","fix":"61891","desc":"57943"},{"messageId":"57938","fix":"61892","desc":"57940"},{"messageId":"57941","fix":"61893","desc":"57943"},{"messageId":"57938","fix":"61894","desc":"57940"},{"messageId":"57941","fix":"61895","desc":"57943"},{"messageId":"57938","fix":"61896","desc":"57940"},{"messageId":"57941","fix":"61897","desc":"57943"},{"messageId":"57938","fix":"61898","desc":"57940"},{"messageId":"57941","fix":"61899","desc":"57943"},{"messageId":"57938","fix":"61900","desc":"57940"},{"messageId":"57941","fix":"61901","desc":"57943"},{"messageId":"57938","fix":"61902","desc":"57940"},{"messageId":"57941","fix":"61903","desc":"57943"},{"messageId":"57938","fix":"61904","desc":"57940"},{"messageId":"57941","fix":"61905","desc":"57943"},{"messageId":"57938","fix":"61906","desc":"57940"},{"messageId":"57941","fix":"61907","desc":"57943"},{"messageId":"57938","fix":"61908","desc":"57940"},{"messageId":"57941","fix":"61909","desc":"57943"},{"messageId":"57938","fix":"61910","desc":"57940"},{"messageId":"57941","fix":"61911","desc":"57943"},{"messageId":"57938","fix":"61912","desc":"57940"},{"messageId":"57941","fix":"61913","desc":"57943"},{"messageId":"57938","fix":"61914","desc":"57940"},{"messageId":"57941","fix":"61915","desc":"57943"},{"messageId":"57938","fix":"61916","desc":"57940"},{"messageId":"57941","fix":"61917","desc":"57943"},{"messageId":"57938","fix":"61918","desc":"57940"},{"messageId":"57941","fix":"61919","desc":"57943"},{"messageId":"57938","fix":"61920","desc":"57940"},{"messageId":"57941","fix":"61921","desc":"57943"},{"messageId":"57938","fix":"61922","desc":"57940"},{"messageId":"57941","fix":"61923","desc":"57943"},{"messageId":"57938","fix":"61924","desc":"57940"},{"messageId":"57941","fix":"61925","desc":"57943"},{"messageId":"57938","fix":"61926","desc":"57940"},{"messageId":"57941","fix":"61927","desc":"57943"},{"messageId":"57938","fix":"61928","desc":"57940"},{"messageId":"57941","fix":"61929","desc":"57943"},{"messageId":"57938","fix":"61930","desc":"57940"},{"messageId":"57941","fix":"61931","desc":"57943"},{"messageId":"57938","fix":"61932","desc":"57940"},{"messageId":"57941","fix":"61933","desc":"57943"},{"messageId":"57938","fix":"61934","desc":"57940"},{"messageId":"57941","fix":"61935","desc":"57943"},{"messageId":"57938","fix":"61936","desc":"57940"},{"messageId":"57941","fix":"61937","desc":"57943"},{"messageId":"57938","fix":"61938","desc":"57940"},{"messageId":"57941","fix":"61939","desc":"57943"},{"messageId":"57938","fix":"61940","desc":"57940"},{"messageId":"57941","fix":"61941","desc":"57943"},{"messageId":"57938","fix":"61942","desc":"57940"},{"messageId":"57941","fix":"61943","desc":"57943"},{"messageId":"57938","fix":"61944","desc":"57940"},{"messageId":"57941","fix":"61945","desc":"57943"},{"messageId":"57938","fix":"61946","desc":"57940"},{"messageId":"57941","fix":"61947","desc":"57943"},{"messageId":"57938","fix":"61948","desc":"57940"},{"messageId":"57941","fix":"61949","desc":"57943"},{"messageId":"57938","fix":"61950","desc":"57940"},{"messageId":"57941","fix":"61951","desc":"57943"},{"messageId":"57938","fix":"61952","desc":"57940"},{"messageId":"57941","fix":"61953","desc":"57943"},{"messageId":"57938","fix":"61954","desc":"57940"},{"messageId":"57941","fix":"61955","desc":"57943"},{"messageId":"57938","fix":"61956","desc":"57940"},{"messageId":"57941","fix":"61957","desc":"57943"},{"messageId":"57938","fix":"61958","desc":"57940"},{"messageId":"57941","fix":"61959","desc":"57943"},{"messageId":"57938","fix":"61960","desc":"57940"},{"messageId":"57941","fix":"61961","desc":"57943"},{"messageId":"57938","fix":"61962","desc":"57940"},{"messageId":"57941","fix":"61963","desc":"57943"},{"messageId":"57938","fix":"61964","desc":"57940"},{"messageId":"57941","fix":"61965","desc":"57943"},{"messageId":"57938","fix":"61966","desc":"57940"},{"messageId":"57941","fix":"61967","desc":"57943"},{"messageId":"57938","fix":"61968","desc":"57940"},{"messageId":"57941","fix":"61969","desc":"57943"},{"messageId":"57938","fix":"61970","desc":"57940"},{"messageId":"57941","fix":"61971","desc":"57943"},{"messageId":"57938","fix":"61972","desc":"57940"},{"messageId":"57941","fix":"61973","desc":"57943"},{"messageId":"57938","fix":"61974","desc":"57940"},{"messageId":"57941","fix":"61975","desc":"57943"},{"messageId":"57938","fix":"61976","desc":"57940"},{"messageId":"57941","fix":"61977","desc":"57943"},{"messageId":"57938","fix":"61978","desc":"57940"},{"messageId":"57941","fix":"61979","desc":"57943"},{"messageId":"57938","fix":"61980","desc":"57940"},{"messageId":"57941","fix":"61981","desc":"57943"},{"messageId":"57938","fix":"61982","desc":"57940"},{"messageId":"57941","fix":"61983","desc":"57943"},{"messageId":"57938","fix":"61984","desc":"57940"},{"messageId":"57941","fix":"61985","desc":"57943"},{"messageId":"57938","fix":"61986","desc":"57940"},{"messageId":"57941","fix":"61987","desc":"57943"},{"messageId":"57938","fix":"61988","desc":"57940"},{"messageId":"57941","fix":"61989","desc":"57943"},{"messageId":"57938","fix":"61990","desc":"57940"},{"messageId":"57941","fix":"61991","desc":"57943"},{"messageId":"57938","fix":"61992","desc":"57940"},{"messageId":"57941","fix":"61993","desc":"57943"},{"messageId":"57938","fix":"61994","desc":"57940"},{"messageId":"57941","fix":"61995","desc":"57943"},{"messageId":"57938","fix":"61996","desc":"57940"},{"messageId":"57941","fix":"61997","desc":"57943"},{"messageId":"57938","fix":"61998","desc":"57940"},{"messageId":"57941","fix":"61999","desc":"57943"},{"messageId":"57938","fix":"62000","desc":"57940"},{"messageId":"57941","fix":"62001","desc":"57943"},{"messageId":"57938","fix":"62002","desc":"57940"},{"messageId":"57941","fix":"62003","desc":"57943"},{"messageId":"57938","fix":"62004","desc":"57940"},{"messageId":"57941","fix":"62005","desc":"57943"},{"messageId":"57938","fix":"62006","desc":"57940"},{"messageId":"57941","fix":"62007","desc":"57943"},{"messageId":"57938","fix":"62008","desc":"57940"},{"messageId":"57941","fix":"62009","desc":"57943"},{"messageId":"57938","fix":"62010","desc":"57940"},{"messageId":"57941","fix":"62011","desc":"57943"},{"messageId":"57938","fix":"62012","desc":"57940"},{"messageId":"57941","fix":"62013","desc":"57943"},{"messageId":"57938","fix":"62014","desc":"57940"},{"messageId":"57941","fix":"62015","desc":"57943"},{"messageId":"57938","fix":"62016","desc":"57940"},{"messageId":"57941","fix":"62017","desc":"57943"},{"messageId":"57938","fix":"62018","desc":"57940"},{"messageId":"57941","fix":"62019","desc":"57943"},{"messageId":"57938","fix":"62020","desc":"57940"},{"messageId":"57941","fix":"62021","desc":"57943"},{"messageId":"57938","fix":"62022","desc":"57940"},{"messageId":"57941","fix":"62023","desc":"57943"},{"messageId":"57938","fix":"62024","desc":"57940"},{"messageId":"57941","fix":"62025","desc":"57943"},{"messageId":"57938","fix":"62026","desc":"57940"},{"messageId":"57941","fix":"62027","desc":"57943"},{"messageId":"57938","fix":"62028","desc":"57940"},{"messageId":"57941","fix":"62029","desc":"57943"},{"messageId":"57938","fix":"62030","desc":"57940"},{"messageId":"57941","fix":"62031","desc":"57943"},{"messageId":"57938","fix":"62032","desc":"57940"},{"messageId":"57941","fix":"62033","desc":"57943"},{"messageId":"57938","fix":"62034","desc":"57940"},{"messageId":"57941","fix":"62035","desc":"57943"},{"messageId":"57938","fix":"62036","desc":"57940"},{"messageId":"57941","fix":"62037","desc":"57943"},{"messageId":"57938","fix":"62038","desc":"57940"},{"messageId":"57941","fix":"62039","desc":"57943"},{"messageId":"57938","fix":"62040","desc":"57940"},{"messageId":"57941","fix":"62041","desc":"57943"},{"messageId":"57938","fix":"62042","desc":"57940"},{"messageId":"57941","fix":"62043","desc":"57943"},{"messageId":"57938","fix":"62044","desc":"57940"},{"messageId":"57941","fix":"62045","desc":"57943"},{"messageId":"57938","fix":"62046","desc":"57940"},{"messageId":"57941","fix":"62047","desc":"57943"},{"messageId":"57938","fix":"62048","desc":"57940"},{"messageId":"57941","fix":"62049","desc":"57943"},{"messageId":"57938","fix":"62050","desc":"57940"},{"messageId":"57941","fix":"62051","desc":"57943"},{"messageId":"57938","fix":"62052","desc":"57940"},{"messageId":"57941","fix":"62053","desc":"57943"},{"messageId":"57938","fix":"62054","desc":"57940"},{"messageId":"57941","fix":"62055","desc":"57943"},{"messageId":"57938","fix":"62056","desc":"57940"},{"messageId":"57941","fix":"62057","desc":"57943"},{"messageId":"57938","fix":"62058","desc":"57940"},{"messageId":"57941","fix":"62059","desc":"57943"},{"messageId":"57938","fix":"62060","desc":"57940"},{"messageId":"57941","fix":"62061","desc":"57943"},{"messageId":"57938","fix":"62062","desc":"57940"},{"messageId":"57941","fix":"62063","desc":"57943"},{"messageId":"57938","fix":"62064","desc":"57940"},{"messageId":"57941","fix":"62065","desc":"57943"},{"messageId":"57938","fix":"62066","desc":"57940"},{"messageId":"57941","fix":"62067","desc":"57943"},{"messageId":"57938","fix":"62068","desc":"57940"},{"messageId":"57941","fix":"62069","desc":"57943"},{"messageId":"57938","fix":"62070","desc":"57940"},{"messageId":"57941","fix":"62071","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"62072","desc":"57940"},{"messageId":"57941","fix":"62073","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"62074","desc":"57940"},{"messageId":"57941","fix":"62075","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"62076","desc":"57940"},{"messageId":"57941","fix":"62077","desc":"57943"},{"messageId":"57938","fix":"62078","desc":"57940"},{"messageId":"57941","fix":"62079","desc":"57943"},{"messageId":"57938","fix":"62080","desc":"57940"},{"messageId":"57941","fix":"62081","desc":"57943"},{"messageId":"57938","fix":"62082","desc":"57940"},{"messageId":"57941","fix":"62083","desc":"57943"},{"messageId":"57938","fix":"62084","desc":"57940"},{"messageId":"57941","fix":"62085","desc":"57943"},{"messageId":"57938","fix":"62086","desc":"57940"},{"messageId":"57941","fix":"62087","desc":"57943"},{"messageId":"57938","fix":"62088","desc":"57940"},{"messageId":"57941","fix":"62089","desc":"57943"},{"messageId":"57938","fix":"62090","desc":"57940"},{"messageId":"57941","fix":"62091","desc":"57943"},{"messageId":"57938","fix":"62092","desc":"57940"},{"messageId":"57941","fix":"62093","desc":"57943"},{"messageId":"57938","fix":"62094","desc":"57940"},{"messageId":"57941","fix":"62095","desc":"57943"},{"messageId":"57938","fix":"62096","desc":"57940"},{"messageId":"57941","fix":"62097","desc":"57943"},{"messageId":"57938","fix":"62098","desc":"57940"},{"messageId":"57941","fix":"62099","desc":"57943"},{"messageId":"57938","fix":"62100","desc":"57940"},{"messageId":"57941","fix":"62101","desc":"57943"},{"messageId":"57938","fix":"62102","desc":"57940"},{"messageId":"57941","fix":"62103","desc":"57943"},{"messageId":"57938","fix":"62104","desc":"57940"},{"messageId":"57941","fix":"62105","desc":"57943"},{"messageId":"57938","fix":"62106","desc":"57940"},{"messageId":"57941","fix":"62107","desc":"57943"},{"messageId":"57938","fix":"62108","desc":"57940"},{"messageId":"57941","fix":"62109","desc":"57943"},{"messageId":"57938","fix":"62110","desc":"57940"},{"messageId":"57941","fix":"62111","desc":"57943"},{"messageId":"57938","fix":"62112","desc":"57940"},{"messageId":"57941","fix":"62113","desc":"57943"},{"messageId":"57938","fix":"62114","desc":"57940"},{"messageId":"57941","fix":"62115","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"62116","desc":"57940"},{"messageId":"57941","fix":"62117","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"62118","desc":"57940"},{"messageId":"57941","fix":"62119","desc":"57943"},{"messageId":"57938","fix":"62120","desc":"57940"},{"messageId":"57941","fix":"62121","desc":"57943"},{"messageId":"57938","fix":"62122","desc":"57940"},{"messageId":"57941","fix":"62123","desc":"57943"},{"messageId":"57938","fix":"62124","desc":"57940"},{"messageId":"57941","fix":"62125","desc":"57943"},{"messageId":"57938","fix":"62126","desc":"57940"},{"messageId":"57941","fix":"62127","desc":"57943"},{"messageId":"57938","fix":"62128","desc":"57940"},{"messageId":"57941","fix":"62129","desc":"57943"},{"messageId":"57938","fix":"62130","desc":"57940"},{"messageId":"57941","fix":"62131","desc":"57943"},{"messageId":"57938","fix":"62132","desc":"57940"},{"messageId":"57941","fix":"62133","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"62134","desc":"57940"},{"messageId":"57941","fix":"62135","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"62136","desc":"57940"},{"messageId":"57941","fix":"62137","desc":"57943"},{"messageId":"57938","fix":"62138","desc":"57940"},{"messageId":"57941","fix":"62139","desc":"57943"},{"messageId":"57938","fix":"62140","desc":"57940"},{"messageId":"57941","fix":"62141","desc":"57943"},{"messageId":"57938","fix":"62142","desc":"57940"},{"messageId":"57941","fix":"62143","desc":"57943"},{"messageId":"57938","fix":"62144","desc":"57940"},{"messageId":"57941","fix":"62145","desc":"57943"},{"messageId":"57938","fix":"62146","desc":"57940"},{"messageId":"57941","fix":"62147","desc":"57943"},{"messageId":"57938","fix":"62148","desc":"57940"},{"messageId":"57941","fix":"62149","desc":"57943"},{"messageId":"57938","fix":"62150","desc":"57940"},{"messageId":"57941","fix":"62151","desc":"57943"},{"messageId":"57938","fix":"62152","desc":"57940"},{"messageId":"57941","fix":"62153","desc":"57943"},{"messageId":"57938","fix":"62154","desc":"57940"},{"messageId":"57941","fix":"62155","desc":"57943"},{"messageId":"57938","fix":"62156","desc":"57940"},{"messageId":"57941","fix":"62157","desc":"57943"},{"messageId":"57938","fix":"62158","desc":"57940"},{"messageId":"57941","fix":"62159","desc":"57943"},{"messageId":"57938","fix":"62160","desc":"57940"},{"messageId":"57941","fix":"62161","desc":"57943"},{"messageId":"57938","fix":"62162","desc":"57940"},{"messageId":"57941","fix":"62163","desc":"57943"},{"messageId":"57938","fix":"62164","desc":"57940"},{"messageId":"57941","fix":"62165","desc":"57943"},{"messageId":"57938","fix":"62166","desc":"57940"},{"messageId":"57941","fix":"62167","desc":"57943"},{"messageId":"57938","fix":"62168","desc":"57940"},{"messageId":"57941","fix":"62169","desc":"57943"},{"messageId":"57938","fix":"62170","desc":"57940"},{"messageId":"57941","fix":"62171","desc":"57943"},{"messageId":"57938","fix":"62172","desc":"57940"},{"messageId":"57941","fix":"62173","desc":"57943"},{"messageId":"57938","fix":"62174","desc":"57940"},{"messageId":"57941","fix":"62175","desc":"57943"},{"messageId":"57938","fix":"62176","desc":"57940"},{"messageId":"57941","fix":"62177","desc":"57943"},{"messageId":"57938","fix":"62178","desc":"57940"},{"messageId":"57941","fix":"62179","desc":"57943"},{"messageId":"57938","fix":"62180","desc":"57940"},{"messageId":"57941","fix":"62181","desc":"57943"},{"messageId":"57938","fix":"62182","desc":"57940"},{"messageId":"57941","fix":"62183","desc":"57943"},{"messageId":"57938","fix":"62184","desc":"57940"},{"messageId":"57941","fix":"62185","desc":"57943"},{"messageId":"57938","fix":"62186","desc":"57940"},{"messageId":"57941","fix":"62187","desc":"57943"},{"messageId":"57938","fix":"62188","desc":"57940"},{"messageId":"57941","fix":"62189","desc":"57943"},{"messageId":"57938","fix":"62190","desc":"57940"},{"messageId":"57941","fix":"62191","desc":"57943"},{"messageId":"57938","fix":"62192","desc":"57940"},{"messageId":"57941","fix":"62193","desc":"57943"},{"messageId":"57938","fix":"62194","desc":"57940"},{"messageId":"57941","fix":"62195","desc":"57943"},{"messageId":"57938","fix":"62196","desc":"57940"},{"messageId":"57941","fix":"62197","desc":"57943"},{"messageId":"57938","fix":"62198","desc":"57940"},{"messageId":"57941","fix":"62199","desc":"57943"},{"messageId":"57938","fix":"62200","desc":"57940"},{"messageId":"57941","fix":"62201","desc":"57943"},{"messageId":"57938","fix":"62202","desc":"57940"},{"messageId":"57941","fix":"62203","desc":"57943"},{"messageId":"57938","fix":"62204","desc":"57940"},{"messageId":"57941","fix":"62205","desc":"57943"},{"messageId":"57938","fix":"62206","desc":"57940"},{"messageId":"57941","fix":"62207","desc":"57943"},{"messageId":"57938","fix":"62208","desc":"57940"},{"messageId":"57941","fix":"62209","desc":"57943"},{"messageId":"57938","fix":"62210","desc":"57940"},{"messageId":"57941","fix":"62211","desc":"57943"},{"messageId":"57938","fix":"62212","desc":"57940"},{"messageId":"57941","fix":"62213","desc":"57943"},{"messageId":"57938","fix":"62214","desc":"57940"},{"messageId":"57941","fix":"62215","desc":"57943"},{"messageId":"57938","fix":"62216","desc":"57940"},{"messageId":"57941","fix":"62217","desc":"57943"},{"messageId":"57938","fix":"62218","desc":"57940"},{"messageId":"57941","fix":"62219","desc":"57943"},{"messageId":"57938","fix":"62220","desc":"57940"},{"messageId":"57941","fix":"62221","desc":"57943"},{"messageId":"57938","fix":"62222","desc":"57940"},{"messageId":"57941","fix":"62223","desc":"57943"},{"messageId":"57938","fix":"62224","desc":"57940"},{"messageId":"57941","fix":"62225","desc":"57943"},{"messageId":"57938","fix":"62226","desc":"57940"},{"messageId":"57941","fix":"62227","desc":"57943"},{"messageId":"57938","fix":"62228","desc":"57940"},{"messageId":"57941","fix":"62229","desc":"57943"},{"messageId":"57938","fix":"62230","desc":"57940"},{"messageId":"57941","fix":"62231","desc":"57943"},{"messageId":"57938","fix":"62232","desc":"57940"},{"messageId":"57941","fix":"62233","desc":"57943"},{"messageId":"57938","fix":"62234","desc":"57940"},{"messageId":"57941","fix":"62235","desc":"57943"},{"messageId":"57938","fix":"62236","desc":"57940"},{"messageId":"57941","fix":"62237","desc":"57943"},{"messageId":"57938","fix":"62238","desc":"57940"},{"messageId":"57941","fix":"62239","desc":"57943"},{"messageId":"57938","fix":"62240","desc":"57940"},{"messageId":"57941","fix":"62241","desc":"57943"},{"messageId":"57938","fix":"62242","desc":"57940"},{"messageId":"57941","fix":"62243","desc":"57943"},{"messageId":"57938","fix":"62244","desc":"57940"},{"messageId":"57941","fix":"62245","desc":"57943"},{"messageId":"57938","fix":"62246","desc":"57940"},{"messageId":"57941","fix":"62247","desc":"57943"},{"messageId":"57938","fix":"62248","desc":"57940"},{"messageId":"57941","fix":"62249","desc":"57943"},{"messageId":"57938","fix":"62250","desc":"57940"},{"messageId":"57941","fix":"62251","desc":"57943"},{"messageId":"57938","fix":"62252","desc":"57940"},{"messageId":"57941","fix":"62253","desc":"57943"},{"messageId":"57938","fix":"62254","desc":"57940"},{"messageId":"57941","fix":"62255","desc":"57943"},{"messageId":"57938","fix":"62256","desc":"57940"},{"messageId":"57941","fix":"62257","desc":"57943"},{"messageId":"57938","fix":"62258","desc":"57940"},{"messageId":"57941","fix":"62259","desc":"57943"},{"messageId":"57938","fix":"62260","desc":"57940"},{"messageId":"57941","fix":"62261","desc":"57943"},{"messageId":"57938","fix":"62262","desc":"57940"},{"messageId":"57941","fix":"62263","desc":"57943"},{"messageId":"57938","fix":"62264","desc":"57940"},{"messageId":"57941","fix":"62265","desc":"57943"},{"messageId":"57938","fix":"62266","desc":"57940"},{"messageId":"57941","fix":"62267","desc":"57943"},{"messageId":"57938","fix":"62268","desc":"57940"},{"messageId":"57941","fix":"62269","desc":"57943"},{"messageId":"57938","fix":"62270","desc":"57940"},{"messageId":"57941","fix":"62271","desc":"57943"},{"messageId":"57938","fix":"62272","desc":"57940"},{"messageId":"57941","fix":"62273","desc":"57943"},{"messageId":"57938","fix":"62274","desc":"57940"},{"messageId":"57941","fix":"62275","desc":"57943"},{"messageId":"57938","fix":"62276","desc":"57940"},{"messageId":"57941","fix":"62277","desc":"57943"},{"messageId":"57938","fix":"62278","desc":"57940"},{"messageId":"57941","fix":"62279","desc":"57943"},{"messageId":"57938","fix":"62280","desc":"57940"},{"messageId":"57941","fix":"62281","desc":"57943"},{"messageId":"57938","fix":"62282","desc":"57940"},{"messageId":"57941","fix":"62283","desc":"57943"},{"messageId":"57938","fix":"62284","desc":"57940"},{"messageId":"57941","fix":"62285","desc":"57943"},{"messageId":"57938","fix":"62286","desc":"57940"},{"messageId":"57941","fix":"62287","desc":"57943"},{"messageId":"57938","fix":"62288","desc":"57940"},{"messageId":"57941","fix":"62289","desc":"57943"},{"messageId":"57938","fix":"62290","desc":"57940"},{"messageId":"57941","fix":"62291","desc":"57943"},{"messageId":"57938","fix":"62292","desc":"57940"},{"messageId":"57941","fix":"62293","desc":"57943"},{"messageId":"57938","fix":"62294","desc":"57940"},{"messageId":"57941","fix":"62295","desc":"57943"},{"messageId":"57938","fix":"62296","desc":"57940"},{"messageId":"57941","fix":"62297","desc":"57943"},{"messageId":"57938","fix":"62298","desc":"57940"},{"messageId":"57941","fix":"62299","desc":"57943"},{"messageId":"57938","fix":"62300","desc":"57940"},{"messageId":"57941","fix":"62301","desc":"57943"},{"messageId":"57938","fix":"62302","desc":"57940"},{"messageId":"57941","fix":"62303","desc":"57943"},{"messageId":"57938","fix":"62304","desc":"57940"},{"messageId":"57941","fix":"62305","desc":"57943"},{"messageId":"57938","fix":"62306","desc":"57940"},{"messageId":"57941","fix":"62307","desc":"57943"},{"messageId":"57938","fix":"62308","desc":"57940"},{"messageId":"57941","fix":"62309","desc":"57943"},{"messageId":"57938","fix":"62310","desc":"57940"},{"messageId":"57941","fix":"62311","desc":"57943"},{"messageId":"57938","fix":"62312","desc":"57940"},{"messageId":"57941","fix":"62313","desc":"57943"},{"messageId":"57938","fix":"62314","desc":"57940"},{"messageId":"57941","fix":"62315","desc":"57943"},{"messageId":"57938","fix":"62316","desc":"57940"},{"messageId":"57941","fix":"62317","desc":"57943"},{"messageId":"57938","fix":"62318","desc":"57940"},{"messageId":"57941","fix":"62319","desc":"57943"},{"messageId":"57938","fix":"62320","desc":"57940"},{"messageId":"57941","fix":"62321","desc":"57943"},{"messageId":"57938","fix":"62322","desc":"57940"},{"messageId":"57941","fix":"62323","desc":"57943"},{"messageId":"57938","fix":"62324","desc":"57940"},{"messageId":"57941","fix":"62325","desc":"57943"},{"messageId":"57938","fix":"62326","desc":"57940"},{"messageId":"57941","fix":"62327","desc":"57943"},{"messageId":"57938","fix":"62328","desc":"57940"},{"messageId":"57941","fix":"62329","desc":"57943"},{"messageId":"57938","fix":"62330","desc":"57940"},{"messageId":"57941","fix":"62331","desc":"57943"},{"messageId":"57938","fix":"62332","desc":"57940"},{"messageId":"57941","fix":"62333","desc":"57943"},{"messageId":"57938","fix":"62334","desc":"57940"},{"messageId":"57941","fix":"62335","desc":"57943"},{"messageId":"57938","fix":"62336","desc":"57940"},{"messageId":"57941","fix":"62337","desc":"57943"},{"messageId":"57938","fix":"62338","desc":"57940"},{"messageId":"57941","fix":"62339","desc":"57943"},{"messageId":"57938","fix":"62340","desc":"57940"},{"messageId":"57941","fix":"62341","desc":"57943"},{"messageId":"57938","fix":"62342","desc":"57940"},{"messageId":"57941","fix":"62343","desc":"57943"},{"messageId":"57938","fix":"62344","desc":"57940"},{"messageId":"57941","fix":"62345","desc":"57943"},{"messageId":"57938","fix":"62346","desc":"57940"},{"messageId":"57941","fix":"62347","desc":"57943"},{"messageId":"57938","fix":"62348","desc":"57940"},{"messageId":"57941","fix":"62349","desc":"57943"},{"messageId":"57938","fix":"62350","desc":"57940"},{"messageId":"57941","fix":"62351","desc":"57943"},{"messageId":"57938","fix":"62352","desc":"57940"},{"messageId":"57941","fix":"62353","desc":"57943"},{"messageId":"57938","fix":"62354","desc":"57940"},{"messageId":"57941","fix":"62355","desc":"57943"},{"messageId":"57938","fix":"62356","desc":"57940"},{"messageId":"57941","fix":"62357","desc":"57943"},{"messageId":"57938","fix":"62358","desc":"57940"},{"messageId":"57941","fix":"62359","desc":"57943"},{"messageId":"57938","fix":"62360","desc":"57940"},{"messageId":"57941","fix":"62361","desc":"57943"},{"messageId":"57938","fix":"62362","desc":"57940"},{"messageId":"57941","fix":"62363","desc":"57943"},{"messageId":"57938","fix":"62364","desc":"57940"},{"messageId":"57941","fix":"62365","desc":"57943"},{"messageId":"57938","fix":"62366","desc":"57940"},{"messageId":"57941","fix":"62367","desc":"57943"},{"messageId":"57938","fix":"62368","desc":"57940"},{"messageId":"57941","fix":"62369","desc":"57943"},{"messageId":"57938","fix":"62370","desc":"57940"},{"messageId":"57941","fix":"62371","desc":"57943"},{"messageId":"57938","fix":"62372","desc":"57940"},{"messageId":"57941","fix":"62373","desc":"57943"},{"messageId":"57938","fix":"62374","desc":"57940"},{"messageId":"57941","fix":"62375","desc":"57943"},{"messageId":"57938","fix":"62376","desc":"57940"},{"messageId":"57941","fix":"62377","desc":"57943"},{"messageId":"57938","fix":"62378","desc":"57940"},{"messageId":"57941","fix":"62379","desc":"57943"},{"messageId":"57938","fix":"62380","desc":"57940"},{"messageId":"57941","fix":"62381","desc":"57943"},{"messageId":"57938","fix":"62382","desc":"57940"},{"messageId":"57941","fix":"62383","desc":"57943"},{"messageId":"57938","fix":"62384","desc":"57940"},{"messageId":"57941","fix":"62385","desc":"57943"},{"messageId":"57938","fix":"62386","desc":"57940"},{"messageId":"57941","fix":"62387","desc":"57943"},{"messageId":"57938","fix":"62388","desc":"57940"},{"messageId":"57941","fix":"62389","desc":"57943"},{"messageId":"57938","fix":"62390","desc":"57940"},{"messageId":"57941","fix":"62391","desc":"57943"},{"messageId":"57938","fix":"62392","desc":"57940"},{"messageId":"57941","fix":"62393","desc":"57943"},{"messageId":"57938","fix":"62394","desc":"57940"},{"messageId":"57941","fix":"62395","desc":"57943"},{"messageId":"57938","fix":"62396","desc":"57940"},{"messageId":"57941","fix":"62397","desc":"57943"},{"messageId":"57938","fix":"62398","desc":"57940"},{"messageId":"57941","fix":"62399","desc":"57943"},{"messageId":"57938","fix":"62400","desc":"57940"},{"messageId":"57941","fix":"62401","desc":"57943"},{"messageId":"57938","fix":"62402","desc":"57940"},{"messageId":"57941","fix":"62403","desc":"57943"},{"messageId":"57938","fix":"62404","desc":"57940"},{"messageId":"57941","fix":"62405","desc":"57943"},{"messageId":"57938","fix":"62406","desc":"57940"},{"messageId":"57941","fix":"62407","desc":"57943"},{"messageId":"57938","fix":"62408","desc":"57940"},{"messageId":"57941","fix":"62409","desc":"57943"},{"messageId":"57938","fix":"62410","desc":"57940"},{"messageId":"57941","fix":"62411","desc":"57943"},{"messageId":"57938","fix":"62412","desc":"57940"},{"messageId":"57941","fix":"62413","desc":"57943"},{"messageId":"57938","fix":"62414","desc":"57940"},{"messageId":"57941","fix":"62415","desc":"57943"},{"messageId":"57938","fix":"62416","desc":"57940"},{"messageId":"57941","fix":"62417","desc":"57943"},{"messageId":"57938","fix":"62418","desc":"57940"},{"messageId":"57941","fix":"62419","desc":"57943"},{"messageId":"57938","fix":"62420","desc":"57940"},{"messageId":"57941","fix":"62421","desc":"57943"},{"messageId":"57938","fix":"62422","desc":"57940"},{"messageId":"57941","fix":"62423","desc":"57943"},{"messageId":"57938","fix":"62424","desc":"57940"},{"messageId":"57941","fix":"62425","desc":"57943"},{"messageId":"57938","fix":"62426","desc":"57940"},{"messageId":"57941","fix":"62427","desc":"57943"},{"messageId":"57938","fix":"62428","desc":"57940"},{"messageId":"57941","fix":"62429","desc":"57943"},{"messageId":"57938","fix":"62430","desc":"57940"},{"messageId":"57941","fix":"62431","desc":"57943"},{"messageId":"57938","fix":"62432","desc":"57940"},{"messageId":"57941","fix":"62433","desc":"57943"},{"messageId":"57938","fix":"62434","desc":"57940"},{"messageId":"57941","fix":"62435","desc":"57943"},{"messageId":"57938","fix":"62436","desc":"57940"},{"messageId":"57941","fix":"62437","desc":"57943"},{"messageId":"57938","fix":"62438","desc":"57940"},{"messageId":"57941","fix":"62439","desc":"57943"},{"messageId":"57938","fix":"62440","desc":"57940"},{"messageId":"57941","fix":"62441","desc":"57943"},{"messageId":"57938","fix":"62442","desc":"57940"},{"messageId":"57941","fix":"62443","desc":"57943"},{"messageId":"57938","fix":"62444","desc":"57940"},{"messageId":"57941","fix":"62445","desc":"57943"},{"messageId":"57938","fix":"62446","desc":"57940"},{"messageId":"57941","fix":"62447","desc":"57943"},{"messageId":"57938","fix":"62448","desc":"57940"},{"messageId":"57941","fix":"62449","desc":"57943"},{"messageId":"57938","fix":"62450","desc":"57940"},{"messageId":"57941","fix":"62451","desc":"57943"},{"messageId":"57938","fix":"62452","desc":"57940"},{"messageId":"57941","fix":"62453","desc":"57943"},{"messageId":"57938","fix":"62454","desc":"57940"},{"messageId":"57941","fix":"62455","desc":"57943"},{"messageId":"57938","fix":"62456","desc":"57940"},{"messageId":"57941","fix":"62457","desc":"57943"},{"messageId":"57938","fix":"62458","desc":"57940"},{"messageId":"57941","fix":"62459","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"62460","desc":"57940"},{"messageId":"57941","fix":"62461","desc":"57943"},{"messageId":"57938","fix":"62462","desc":"57940"},{"messageId":"57941","fix":"62463","desc":"57943"},{"messageId":"57938","fix":"62464","desc":"57940"},{"messageId":"57941","fix":"62465","desc":"57943"},{"messageId":"57938","fix":"62466","desc":"57940"},{"messageId":"57941","fix":"62467","desc":"57943"},{"messageId":"57938","fix":"62468","desc":"57940"},{"messageId":"57941","fix":"62469","desc":"57943"},{"messageId":"57938","fix":"62470","desc":"57940"},{"messageId":"57941","fix":"62471","desc":"57943"},{"messageId":"57938","fix":"62472","desc":"57940"},{"messageId":"57941","fix":"62473","desc":"57943"},{"messageId":"57938","fix":"62474","desc":"57940"},{"messageId":"57941","fix":"62475","desc":"57943"},{"messageId":"57938","fix":"62476","desc":"57940"},{"messageId":"57941","fix":"62477","desc":"57943"},{"messageId":"57938","fix":"62478","desc":"57940"},{"messageId":"57941","fix":"62479","desc":"57943"},{"messageId":"57938","fix":"62480","desc":"57940"},{"messageId":"57941","fix":"62481","desc":"57943"},{"messageId":"57938","fix":"62482","desc":"57940"},{"messageId":"57941","fix":"62483","desc":"57943"},{"messageId":"57938","fix":"62484","desc":"57940"},{"messageId":"57941","fix":"62485","desc":"57943"},{"messageId":"57938","fix":"62486","desc":"57940"},{"messageId":"57941","fix":"62487","desc":"57943"},{"messageId":"57938","fix":"62488","desc":"57940"},{"messageId":"57941","fix":"62489","desc":"57943"},{"messageId":"57938","fix":"62490","desc":"57940"},{"messageId":"57941","fix":"62491","desc":"57943"},{"messageId":"57938","fix":"62492","desc":"57940"},{"messageId":"57941","fix":"62493","desc":"57943"},{"messageId":"57938","fix":"62494","desc":"57940"},{"messageId":"57941","fix":"62495","desc":"57943"},{"messageId":"57938","fix":"62496","desc":"57940"},{"messageId":"57941","fix":"62497","desc":"57943"},{"messageId":"57938","fix":"62498","desc":"57940"},{"messageId":"57941","fix":"62499","desc":"57943"},{"messageId":"57938","fix":"62500","desc":"57940"},{"messageId":"57941","fix":"62501","desc":"57943"},{"messageId":"57938","fix":"62502","desc":"57940"},{"messageId":"57941","fix":"62503","desc":"57943"},{"messageId":"57938","fix":"62504","desc":"57940"},{"messageId":"57941","fix":"62505","desc":"57943"},{"messageId":"57938","fix":"62506","desc":"57940"},{"messageId":"57941","fix":"62507","desc":"57943"},{"messageId":"57938","fix":"62508","desc":"57940"},{"messageId":"57941","fix":"62509","desc":"57943"},{"messageId":"57938","fix":"62510","desc":"57940"},{"messageId":"57941","fix":"62511","desc":"57943"},{"messageId":"57938","fix":"62512","desc":"57940"},{"messageId":"57941","fix":"62513","desc":"57943"},{"messageId":"57938","fix":"62514","desc":"57940"},{"messageId":"57941","fix":"62515","desc":"57943"},{"messageId":"57938","fix":"62516","desc":"57940"},{"messageId":"57941","fix":"62517","desc":"57943"},{"messageId":"57938","fix":"62518","desc":"57940"},{"messageId":"57941","fix":"62519","desc":"57943"},{"messageId":"57938","fix":"62520","desc":"57940"},{"messageId":"57941","fix":"62521","desc":"57943"},{"messageId":"57938","fix":"62522","desc":"57940"},{"messageId":"57941","fix":"62523","desc":"57943"},{"messageId":"57938","fix":"62524","desc":"57940"},{"messageId":"57941","fix":"62525","desc":"57943"},{"messageId":"57938","fix":"62526","desc":"57940"},{"messageId":"57941","fix":"62527","desc":"57943"},{"messageId":"57938","fix":"62528","desc":"57940"},{"messageId":"57941","fix":"62529","desc":"57943"},{"messageId":"57938","fix":"62530","desc":"57940"},{"messageId":"57941","fix":"62531","desc":"57943"},{"messageId":"57938","fix":"62532","desc":"57940"},{"messageId":"57941","fix":"62533","desc":"57943"},{"messageId":"57938","fix":"62534","desc":"57940"},{"messageId":"57941","fix":"62535","desc":"57943"},{"messageId":"57938","fix":"62536","desc":"57940"},{"messageId":"57941","fix":"62537","desc":"57943"},{"messageId":"57938","fix":"62538","desc":"57940"},{"messageId":"57941","fix":"62539","desc":"57943"},{"messageId":"57938","fix":"62540","desc":"57940"},{"messageId":"57941","fix":"62541","desc":"57943"},{"messageId":"57938","fix":"62542","desc":"57940"},{"messageId":"57941","fix":"62543","desc":"57943"},{"messageId":"57938","fix":"62544","desc":"57940"},{"messageId":"57941","fix":"62545","desc":"57943"},{"messageId":"57938","fix":"62546","desc":"57940"},{"messageId":"57941","fix":"62547","desc":"57943"},{"messageId":"57938","fix":"62548","desc":"57940"},{"messageId":"57941","fix":"62549","desc":"57943"},{"messageId":"57938","fix":"62550","desc":"57940"},{"messageId":"57941","fix":"62551","desc":"57943"},{"messageId":"57938","fix":"62552","desc":"57940"},{"messageId":"57941","fix":"62553","desc":"57943"},{"messageId":"57938","fix":"62554","desc":"57940"},{"messageId":"57941","fix":"62555","desc":"57943"},{"messageId":"57938","fix":"62556","desc":"57940"},{"messageId":"57941","fix":"62557","desc":"57943"},{"messageId":"57938","fix":"62558","desc":"57940"},{"messageId":"57941","fix":"62559","desc":"57943"},{"messageId":"57938","fix":"62560","desc":"57940"},{"messageId":"57941","fix":"62561","desc":"57943"},{"messageId":"57938","fix":"62562","desc":"57940"},{"messageId":"57941","fix":"62563","desc":"57943"},{"messageId":"57938","fix":"62564","desc":"57940"},{"messageId":"57941","fix":"62565","desc":"57943"},{"messageId":"57938","fix":"62566","desc":"57940"},{"messageId":"57941","fix":"62567","desc":"57943"},{"messageId":"57938","fix":"62568","desc":"57940"},{"messageId":"57941","fix":"62569","desc":"57943"},{"messageId":"57938","fix":"62570","desc":"57940"},{"messageId":"57941","fix":"62571","desc":"57943"},{"messageId":"57938","fix":"62572","desc":"57940"},{"messageId":"57941","fix":"62573","desc":"57943"},{"messageId":"57938","fix":"62574","desc":"57940"},{"messageId":"57941","fix":"62575","desc":"57943"},{"messageId":"57938","fix":"62576","desc":"57940"},{"messageId":"57941","fix":"62577","desc":"57943"},{"messageId":"57938","fix":"62578","desc":"57940"},{"messageId":"57941","fix":"62579","desc":"57943"},{"messageId":"57938","fix":"62580","desc":"57940"},{"messageId":"57941","fix":"62581","desc":"57943"},{"messageId":"57938","fix":"62582","desc":"57940"},{"messageId":"57941","fix":"62583","desc":"57943"},{"messageId":"57938","fix":"62584","desc":"57940"},{"messageId":"57941","fix":"62585","desc":"57943"},{"messageId":"57938","fix":"62586","desc":"57940"},{"messageId":"57941","fix":"62587","desc":"57943"},{"messageId":"57938","fix":"62588","desc":"57940"},{"messageId":"57941","fix":"62589","desc":"57943"},{"messageId":"57938","fix":"62590","desc":"57940"},{"messageId":"57941","fix":"62591","desc":"57943"},{"messageId":"57938","fix":"62592","desc":"57940"},{"messageId":"57941","fix":"62593","desc":"57943"},{"messageId":"57938","fix":"62594","desc":"57940"},{"messageId":"57941","fix":"62595","desc":"57943"},{"messageId":"57938","fix":"62596","desc":"57940"},{"messageId":"57941","fix":"62597","desc":"57943"},{"messageId":"57938","fix":"62598","desc":"57940"},{"messageId":"57941","fix":"62599","desc":"57943"},{"messageId":"57938","fix":"62600","desc":"57940"},{"messageId":"57941","fix":"62601","desc":"57943"},{"messageId":"57938","fix":"62602","desc":"57940"},{"messageId":"57941","fix":"62603","desc":"57943"},{"messageId":"57938","fix":"62604","desc":"57940"},{"messageId":"57941","fix":"62605","desc":"57943"},{"messageId":"57938","fix":"62606","desc":"57940"},{"messageId":"57941","fix":"62607","desc":"57943"},{"messageId":"57938","fix":"62608","desc":"57940"},{"messageId":"57941","fix":"62609","desc":"57943"},{"messageId":"57938","fix":"62610","desc":"57940"},{"messageId":"57941","fix":"62611","desc":"57943"},{"messageId":"57938","fix":"62612","desc":"57940"},{"messageId":"57941","fix":"62613","desc":"57943"},{"messageId":"57938","fix":"62614","desc":"57940"},{"messageId":"57941","fix":"62615","desc":"57943"},{"messageId":"57938","fix":"62616","desc":"57940"},{"messageId":"57941","fix":"62617","desc":"57943"},{"messageId":"57938","fix":"62618","desc":"57940"},{"messageId":"57941","fix":"62619","desc":"57943"},{"messageId":"57938","fix":"62620","desc":"57940"},{"messageId":"57941","fix":"62621","desc":"57943"},{"messageId":"57938","fix":"62622","desc":"57940"},{"messageId":"57941","fix":"62623","desc":"57943"},{"messageId":"57938","fix":"62624","desc":"57940"},{"messageId":"57941","fix":"62625","desc":"57943"},{"messageId":"57938","fix":"62626","desc":"57940"},{"messageId":"57941","fix":"62627","desc":"57943"},{"messageId":"57938","fix":"62628","desc":"57940"},{"messageId":"57941","fix":"62629","desc":"57943"},{"messageId":"57938","fix":"62630","desc":"57940"},{"messageId":"57941","fix":"62631","desc":"57943"},{"messageId":"57938","fix":"62632","desc":"57940"},{"messageId":"57941","fix":"62633","desc":"57943"},{"messageId":"57938","fix":"62634","desc":"57940"},{"messageId":"57941","fix":"62635","desc":"57943"},{"messageId":"57938","fix":"62636","desc":"57940"},{"messageId":"57941","fix":"62637","desc":"57943"},{"messageId":"57938","fix":"62638","desc":"57940"},{"messageId":"57941","fix":"62639","desc":"57943"},{"messageId":"57938","fix":"62640","desc":"57940"},{"messageId":"57941","fix":"62641","desc":"57943"},{"messageId":"57938","fix":"62642","desc":"57940"},{"messageId":"57941","fix":"62643","desc":"57943"},{"messageId":"57938","fix":"62644","desc":"57940"},{"messageId":"57941","fix":"62645","desc":"57943"},{"messageId":"57938","fix":"62646","desc":"57940"},{"messageId":"57941","fix":"62647","desc":"57943"},{"messageId":"57938","fix":"62648","desc":"57940"},{"messageId":"57941","fix":"62649","desc":"57943"},{"messageId":"57938","fix":"62650","desc":"57940"},{"messageId":"57941","fix":"62651","desc":"57943"},{"messageId":"57938","fix":"62652","desc":"57940"},{"messageId":"57941","fix":"62653","desc":"57943"},{"messageId":"57938","fix":"62654","desc":"57940"},{"messageId":"57941","fix":"62655","desc":"57943"},{"messageId":"57938","fix":"62656","desc":"57940"},{"messageId":"57941","fix":"62657","desc":"57943"},{"messageId":"57938","fix":"62658","desc":"57940"},{"messageId":"57941","fix":"62659","desc":"57943"},{"messageId":"57938","fix":"62660","desc":"57940"},{"messageId":"57941","fix":"62661","desc":"57943"},{"messageId":"57938","fix":"62662","desc":"57940"},{"messageId":"57941","fix":"62663","desc":"57943"},{"messageId":"57938","fix":"62664","desc":"57940"},{"messageId":"57941","fix":"62665","desc":"57943"},{"messageId":"57938","fix":"62666","desc":"57940"},{"messageId":"57941","fix":"62667","desc":"57943"},{"messageId":"57938","fix":"62668","desc":"57940"},{"messageId":"57941","fix":"62669","desc":"57943"},{"messageId":"57938","fix":"62670","desc":"57940"},{"messageId":"57941","fix":"62671","desc":"57943"},{"messageId":"57938","fix":"62672","desc":"57940"},{"messageId":"57941","fix":"62673","desc":"57943"},{"messageId":"57938","fix":"62674","desc":"57940"},{"messageId":"57941","fix":"62675","desc":"57943"},{"messageId":"57938","fix":"62676","desc":"57940"},{"messageId":"57941","fix":"62677","desc":"57943"},{"messageId":"57938","fix":"62678","desc":"57940"},{"messageId":"57941","fix":"62679","desc":"57943"},{"messageId":"57938","fix":"62680","desc":"57940"},{"messageId":"57941","fix":"62681","desc":"57943"},{"messageId":"57938","fix":"62682","desc":"57940"},{"messageId":"57941","fix":"62683","desc":"57943"},{"messageId":"57938","fix":"62684","desc":"57940"},{"messageId":"57941","fix":"62685","desc":"57943"},{"messageId":"57938","fix":"62686","desc":"57940"},{"messageId":"57941","fix":"62687","desc":"57943"},{"messageId":"57938","fix":"62688","desc":"57940"},{"messageId":"57941","fix":"62689","desc":"57943"},{"messageId":"57938","fix":"62690","desc":"57940"},{"messageId":"57941","fix":"62691","desc":"57943"},{"messageId":"57938","fix":"62692","desc":"57940"},{"messageId":"57941","fix":"62693","desc":"57943"},{"messageId":"57938","fix":"62694","desc":"57940"},{"messageId":"57941","fix":"62695","desc":"57943"},{"messageId":"57938","fix":"62696","desc":"57940"},{"messageId":"57941","fix":"62697","desc":"57943"},{"messageId":"57938","fix":"62698","desc":"57940"},{"messageId":"57941","fix":"62699","desc":"57943"},{"messageId":"57938","fix":"62700","desc":"57940"},{"messageId":"57941","fix":"62701","desc":"57943"},{"messageId":"57938","fix":"62702","desc":"57940"},{"messageId":"57941","fix":"62703","desc":"57943"},{"messageId":"57938","fix":"62704","desc":"57940"},{"messageId":"57941","fix":"62705","desc":"57943"},{"messageId":"57938","fix":"62706","desc":"57940"},{"messageId":"57941","fix":"62707","desc":"57943"},{"messageId":"57938","fix":"62708","desc":"57940"},{"messageId":"57941","fix":"62709","desc":"57943"},{"messageId":"57938","fix":"62710","desc":"57940"},{"messageId":"57941","fix":"62711","desc":"57943"},{"messageId":"57938","fix":"62712","desc":"57940"},{"messageId":"57941","fix":"62713","desc":"57943"},{"messageId":"57938","fix":"62714","desc":"57940"},{"messageId":"57941","fix":"62715","desc":"57943"},{"messageId":"57938","fix":"62716","desc":"57940"},{"messageId":"57941","fix":"62717","desc":"57943"},{"messageId":"57938","fix":"62718","desc":"57940"},{"messageId":"57941","fix":"62719","desc":"57943"},{"messageId":"57938","fix":"62720","desc":"57940"},{"messageId":"57941","fix":"62721","desc":"57943"},{"messageId":"57938","fix":"62722","desc":"57940"},{"messageId":"57941","fix":"62723","desc":"57943"},{"messageId":"57938","fix":"62724","desc":"57940"},{"messageId":"57941","fix":"62725","desc":"57943"},{"messageId":"57938","fix":"62726","desc":"57940"},{"messageId":"57941","fix":"62727","desc":"57943"},{"messageId":"57938","fix":"62728","desc":"57940"},{"messageId":"57941","fix":"62729","desc":"57943"},{"messageId":"57938","fix":"62730","desc":"57940"},{"messageId":"57941","fix":"62731","desc":"57943"},{"messageId":"57938","fix":"62732","desc":"57940"},{"messageId":"57941","fix":"62733","desc":"57943"},{"messageId":"57938","fix":"62734","desc":"57940"},{"messageId":"57941","fix":"62735","desc":"57943"},{"messageId":"57938","fix":"62736","desc":"57940"},{"messageId":"57941","fix":"62737","desc":"57943"},{"messageId":"57938","fix":"62738","desc":"57940"},{"messageId":"57941","fix":"62739","desc":"57943"},{"messageId":"57938","fix":"62740","desc":"57940"},{"messageId":"57941","fix":"62741","desc":"57943"},{"messageId":"57938","fix":"62742","desc":"57940"},{"messageId":"57941","fix":"62743","desc":"57943"},{"messageId":"57938","fix":"62744","desc":"57940"},{"messageId":"57941","fix":"62745","desc":"57943"},{"messageId":"57938","fix":"62746","desc":"57940"},{"messageId":"57941","fix":"62747","desc":"57943"},{"messageId":"57938","fix":"62748","desc":"57940"},{"messageId":"57941","fix":"62749","desc":"57943"},{"messageId":"57938","fix":"62750","desc":"57940"},{"messageId":"57941","fix":"62751","desc":"57943"},{"messageId":"57938","fix":"62752","desc":"57940"},{"messageId":"57941","fix":"62753","desc":"57943"},{"messageId":"57938","fix":"62754","desc":"57940"},{"messageId":"57941","fix":"62755","desc":"57943"},{"messageId":"57938","fix":"62756","desc":"57940"},{"messageId":"57941","fix":"62757","desc":"57943"},{"messageId":"57938","fix":"62758","desc":"57940"},{"messageId":"57941","fix":"62759","desc":"57943"},{"messageId":"57938","fix":"62760","desc":"57940"},{"messageId":"57941","fix":"62761","desc":"57943"},{"messageId":"57938","fix":"62762","desc":"57940"},{"messageId":"57941","fix":"62763","desc":"57943"},{"messageId":"57938","fix":"62764","desc":"57940"},{"messageId":"57941","fix":"62765","desc":"57943"},{"messageId":"57938","fix":"62766","desc":"57940"},{"messageId":"57941","fix":"62767","desc":"57943"},{"messageId":"57938","fix":"62768","desc":"57940"},{"messageId":"57941","fix":"62769","desc":"57943"},{"messageId":"57938","fix":"62770","desc":"57940"},{"messageId":"57941","fix":"62771","desc":"57943"},{"messageId":"57938","fix":"62772","desc":"57940"},{"messageId":"57941","fix":"62773","desc":"57943"},{"messageId":"57938","fix":"62774","desc":"57940"},{"messageId":"57941","fix":"62775","desc":"57943"},{"messageId":"57938","fix":"62776","desc":"57940"},{"messageId":"57941","fix":"62777","desc":"57943"},{"messageId":"57938","fix":"62778","desc":"57940"},{"messageId":"57941","fix":"62779","desc":"57943"},{"messageId":"57938","fix":"62780","desc":"57940"},{"messageId":"57941","fix":"62781","desc":"57943"},{"messageId":"57938","fix":"62782","desc":"57940"},{"messageId":"57941","fix":"62783","desc":"57943"},{"messageId":"57938","fix":"62784","desc":"57940"},{"messageId":"57941","fix":"62785","desc":"57943"},{"messageId":"57938","fix":"62786","desc":"57940"},{"messageId":"57941","fix":"62787","desc":"57943"},{"messageId":"57938","fix":"62788","desc":"57940"},{"messageId":"57941","fix":"62789","desc":"57943"},{"messageId":"57938","fix":"62790","desc":"57940"},{"messageId":"57941","fix":"62791","desc":"57943"},{"messageId":"57938","fix":"62792","desc":"57940"},{"messageId":"57941","fix":"62793","desc":"57943"},{"messageId":"57938","fix":"62794","desc":"57940"},{"messageId":"57941","fix":"62795","desc":"57943"},{"messageId":"57938","fix":"62796","desc":"57940"},{"messageId":"57941","fix":"62797","desc":"57943"},{"messageId":"57938","fix":"62798","desc":"57940"},{"messageId":"57941","fix":"62799","desc":"57943"},{"messageId":"57938","fix":"62800","desc":"57940"},{"messageId":"57941","fix":"62801","desc":"57943"},{"messageId":"57938","fix":"62802","desc":"57940"},{"messageId":"57941","fix":"62803","desc":"57943"},{"messageId":"57938","fix":"62804","desc":"57940"},{"messageId":"57941","fix":"62805","desc":"57943"},{"messageId":"57938","fix":"62806","desc":"57940"},{"messageId":"57941","fix":"62807","desc":"57943"},{"messageId":"57938","fix":"62808","desc":"57940"},{"messageId":"57941","fix":"62809","desc":"57943"},{"messageId":"57938","fix":"62810","desc":"57940"},{"messageId":"57941","fix":"62811","desc":"57943"},{"messageId":"57938","fix":"62812","desc":"57940"},{"messageId":"57941","fix":"62813","desc":"57943"},{"messageId":"57938","fix":"62814","desc":"57940"},{"messageId":"57941","fix":"62815","desc":"57943"},{"messageId":"57938","fix":"62816","desc":"57940"},{"messageId":"57941","fix":"62817","desc":"57943"},{"messageId":"57938","fix":"62818","desc":"57940"},{"messageId":"57941","fix":"62819","desc":"57943"},{"messageId":"57938","fix":"62820","desc":"57940"},{"messageId":"57941","fix":"62821","desc":"57943"},{"messageId":"57938","fix":"62822","desc":"57940"},{"messageId":"57941","fix":"62823","desc":"57943"},{"messageId":"57938","fix":"62824","desc":"57940"},{"messageId":"57941","fix":"62825","desc":"57943"},{"messageId":"57938","fix":"62826","desc":"57940"},{"messageId":"57941","fix":"62827","desc":"57943"},{"messageId":"57938","fix":"62828","desc":"57940"},{"messageId":"57941","fix":"62829","desc":"57943"},{"messageId":"57938","fix":"62830","desc":"57940"},{"messageId":"57941","fix":"62831","desc":"57943"},{"messageId":"57938","fix":"62832","desc":"57940"},{"messageId":"57941","fix":"62833","desc":"57943"},{"messageId":"57938","fix":"62834","desc":"57940"},{"messageId":"57941","fix":"62835","desc":"57943"},{"messageId":"57938","fix":"62836","desc":"57940"},{"messageId":"57941","fix":"62837","desc":"57943"},{"messageId":"57938","fix":"62838","desc":"57940"},{"messageId":"57941","fix":"62839","desc":"57943"},{"messageId":"57938","fix":"62840","desc":"57940"},{"messageId":"57941","fix":"62841","desc":"57943"},{"messageId":"57938","fix":"62842","desc":"57940"},{"messageId":"57941","fix":"62843","desc":"57943"},{"messageId":"57938","fix":"62844","desc":"57940"},{"messageId":"57941","fix":"62845","desc":"57943"},{"messageId":"57938","fix":"62846","desc":"57940"},{"messageId":"57941","fix":"62847","desc":"57943"},{"messageId":"57938","fix":"62848","desc":"57940"},{"messageId":"57941","fix":"62849","desc":"57943"},{"messageId":"57938","fix":"62850","desc":"57940"},{"messageId":"57941","fix":"62851","desc":"57943"},{"messageId":"57938","fix":"62852","desc":"57940"},{"messageId":"57941","fix":"62853","desc":"57943"},{"messageId":"57938","fix":"62854","desc":"57940"},{"messageId":"57941","fix":"62855","desc":"57943"},{"messageId":"57938","fix":"62856","desc":"57940"},{"messageId":"57941","fix":"62857","desc":"57943"},{"messageId":"57938","fix":"62858","desc":"57940"},{"messageId":"57941","fix":"62859","desc":"57943"},{"messageId":"57938","fix":"62860","desc":"57940"},{"messageId":"57941","fix":"62861","desc":"57943"},{"messageId":"57938","fix":"62862","desc":"57940"},{"messageId":"57941","fix":"62863","desc":"57943"},{"messageId":"57938","fix":"62864","desc":"57940"},{"messageId":"57941","fix":"62865","desc":"57943"},{"messageId":"57938","fix":"62866","desc":"57940"},{"messageId":"57941","fix":"62867","desc":"57943"},{"messageId":"57938","fix":"62868","desc":"57940"},{"messageId":"57941","fix":"62869","desc":"57943"},{"messageId":"57938","fix":"62870","desc":"57940"},{"messageId":"57941","fix":"62871","desc":"57943"},{"messageId":"57938","fix":"62872","desc":"57940"},{"messageId":"57941","fix":"62873","desc":"57943"},{"messageId":"57938","fix":"62874","desc":"57940"},{"messageId":"57941","fix":"62875","desc":"57943"},{"messageId":"57938","fix":"62876","desc":"57940"},{"messageId":"57941","fix":"62877","desc":"57943"},{"messageId":"57938","fix":"62878","desc":"57940"},{"messageId":"57941","fix":"62879","desc":"57943"},{"messageId":"57938","fix":"62880","desc":"57940"},{"messageId":"57941","fix":"62881","desc":"57943"},{"messageId":"57938","fix":"62882","desc":"57940"},{"messageId":"57941","fix":"62883","desc":"57943"},{"messageId":"57938","fix":"62884","desc":"57940"},{"messageId":"57941","fix":"62885","desc":"57943"},{"messageId":"57938","fix":"62886","desc":"57940"},{"messageId":"57941","fix":"62887","desc":"57943"},{"messageId":"57938","fix":"62888","desc":"57940"},{"messageId":"57941","fix":"62889","desc":"57943"},{"messageId":"57938","fix":"62890","desc":"57940"},{"messageId":"57941","fix":"62891","desc":"57943"},{"messageId":"57938","fix":"62892","desc":"57940"},{"messageId":"57941","fix":"62893","desc":"57943"},{"messageId":"57938","fix":"62894","desc":"57940"},{"messageId":"57941","fix":"62895","desc":"57943"},{"messageId":"57938","fix":"62896","desc":"57940"},{"messageId":"57941","fix":"62897","desc":"57943"},{"messageId":"57938","fix":"62898","desc":"57940"},{"messageId":"57941","fix":"62899","desc":"57943"},{"messageId":"57938","fix":"62900","desc":"57940"},{"messageId":"57941","fix":"62901","desc":"57943"},{"messageId":"57938","fix":"62902","desc":"57940"},{"messageId":"57941","fix":"62903","desc":"57943"},{"messageId":"57938","fix":"62904","desc":"57940"},{"messageId":"57941","fix":"62905","desc":"57943"},{"messageId":"57938","fix":"62906","desc":"57940"},{"messageId":"57941","fix":"62907","desc":"57943"},{"messageId":"57938","fix":"62908","desc":"57940"},{"messageId":"57941","fix":"62909","desc":"57943"},{"messageId":"57938","fix":"62910","desc":"57940"},{"messageId":"57941","fix":"62911","desc":"57943"},{"messageId":"57938","fix":"62912","desc":"57940"},{"messageId":"57941","fix":"62913","desc":"57943"},{"messageId":"57938","fix":"62914","desc":"57940"},{"messageId":"57941","fix":"62915","desc":"57943"},{"messageId":"57938","fix":"62916","desc":"57940"},{"messageId":"57941","fix":"62917","desc":"57943"},{"messageId":"57938","fix":"62918","desc":"57940"},{"messageId":"57941","fix":"62919","desc":"57943"},{"messageId":"57938","fix":"62920","desc":"57940"},{"messageId":"57941","fix":"62921","desc":"57943"},{"messageId":"57938","fix":"62922","desc":"57940"},{"messageId":"57941","fix":"62923","desc":"57943"},{"messageId":"57938","fix":"62924","desc":"57940"},{"messageId":"57941","fix":"62925","desc":"57943"},{"messageId":"57938","fix":"62926","desc":"57940"},{"messageId":"57941","fix":"62927","desc":"57943"},{"messageId":"57938","fix":"62928","desc":"57940"},{"messageId":"57941","fix":"62929","desc":"57943"},{"messageId":"57938","fix":"62930","desc":"57940"},{"messageId":"57941","fix":"62931","desc":"57943"},{"messageId":"57938","fix":"62932","desc":"57940"},{"messageId":"57941","fix":"62933","desc":"57943"},{"messageId":"57938","fix":"62934","desc":"57940"},{"messageId":"57941","fix":"62935","desc":"57943"},{"messageId":"57938","fix":"62936","desc":"57940"},{"messageId":"57941","fix":"62937","desc":"57943"},{"messageId":"57938","fix":"62938","desc":"57940"},{"messageId":"57941","fix":"62939","desc":"57943"},{"messageId":"57938","fix":"62940","desc":"57940"},{"messageId":"57941","fix":"62941","desc":"57943"},{"messageId":"57938","fix":"62942","desc":"57940"},{"messageId":"57941","fix":"62943","desc":"57943"},{"messageId":"57938","fix":"62944","desc":"57940"},{"messageId":"57941","fix":"62945","desc":"57943"},{"messageId":"57938","fix":"62946","desc":"57940"},{"messageId":"57941","fix":"62947","desc":"57943"},{"messageId":"57938","fix":"62948","desc":"57940"},{"messageId":"57941","fix":"62949","desc":"57943"},{"messageId":"57938","fix":"62950","desc":"57940"},{"messageId":"57941","fix":"62951","desc":"57943"},{"messageId":"57938","fix":"62952","desc":"57940"},{"messageId":"57941","fix":"62953","desc":"57943"},{"messageId":"57938","fix":"62954","desc":"57940"},{"messageId":"57941","fix":"62955","desc":"57943"},{"messageId":"57938","fix":"62956","desc":"57940"},{"messageId":"57941","fix":"62957","desc":"57943"},{"messageId":"57938","fix":"62958","desc":"57940"},{"messageId":"57941","fix":"62959","desc":"57943"},{"messageId":"57938","fix":"62960","desc":"57940"},{"messageId":"57941","fix":"62961","desc":"57943"},{"messageId":"57938","fix":"62962","desc":"57940"},{"messageId":"57941","fix":"62963","desc":"57943"},{"messageId":"57938","fix":"62964","desc":"57940"},{"messageId":"57941","fix":"62965","desc":"57943"},{"messageId":"57938","fix":"62966","desc":"57940"},{"messageId":"57941","fix":"62967","desc":"57943"},{"messageId":"57938","fix":"62968","desc":"57940"},{"messageId":"57941","fix":"62969","desc":"57943"},{"messageId":"57938","fix":"62970","desc":"57940"},{"messageId":"57941","fix":"62971","desc":"57943"},{"messageId":"57938","fix":"62972","desc":"57940"},{"messageId":"57941","fix":"62973","desc":"57943"},{"messageId":"57938","fix":"62974","desc":"57940"},{"messageId":"57941","fix":"62975","desc":"57943"},{"messageId":"57938","fix":"62976","desc":"57940"},{"messageId":"57941","fix":"62977","desc":"57943"},{"messageId":"57938","fix":"62978","desc":"57940"},{"messageId":"57941","fix":"62979","desc":"57943"},{"messageId":"57938","fix":"62980","desc":"57940"},{"messageId":"57941","fix":"62981","desc":"57943"},{"messageId":"57938","fix":"62982","desc":"57940"},{"messageId":"57941","fix":"62983","desc":"57943"},{"messageId":"57938","fix":"62984","desc":"57940"},{"messageId":"57941","fix":"62985","desc":"57943"},{"messageId":"57938","fix":"62986","desc":"57940"},{"messageId":"57941","fix":"62987","desc":"57943"},{"messageId":"57938","fix":"62988","desc":"57940"},{"messageId":"57941","fix":"62989","desc":"57943"},{"messageId":"57938","fix":"62990","desc":"57940"},{"messageId":"57941","fix":"62991","desc":"57943"},{"messageId":"57938","fix":"62992","desc":"57940"},{"messageId":"57941","fix":"62993","desc":"57943"},{"messageId":"57938","fix":"62994","desc":"57940"},{"messageId":"57941","fix":"62995","desc":"57943"},{"messageId":"57938","fix":"62996","desc":"57940"},{"messageId":"57941","fix":"62997","desc":"57943"},{"messageId":"57938","fix":"62998","desc":"57940"},{"messageId":"57941","fix":"62999","desc":"57943"},{"messageId":"57938","fix":"63000","desc":"57940"},{"messageId":"57941","fix":"63001","desc":"57943"},{"messageId":"57938","fix":"63002","desc":"57940"},{"messageId":"57941","fix":"63003","desc":"57943"},{"messageId":"57938","fix":"63004","desc":"57940"},{"messageId":"57941","fix":"63005","desc":"57943"},{"messageId":"57938","fix":"63006","desc":"57940"},{"messageId":"57941","fix":"63007","desc":"57943"},{"messageId":"57938","fix":"63008","desc":"57940"},{"messageId":"57941","fix":"63009","desc":"57943"},{"messageId":"57938","fix":"63010","desc":"57940"},{"messageId":"57941","fix":"63011","desc":"57943"},{"messageId":"57938","fix":"63012","desc":"57940"},{"messageId":"57941","fix":"63013","desc":"57943"},{"messageId":"57938","fix":"63014","desc":"57940"},{"messageId":"57941","fix":"63015","desc":"57943"},{"messageId":"57938","fix":"63016","desc":"57940"},{"messageId":"57941","fix":"63017","desc":"57943"},{"messageId":"57938","fix":"63018","desc":"57940"},{"messageId":"57941","fix":"63019","desc":"57943"},{"messageId":"57938","fix":"63020","desc":"57940"},{"messageId":"57941","fix":"63021","desc":"57943"},{"messageId":"57938","fix":"63022","desc":"57940"},{"messageId":"57941","fix":"63023","desc":"57943"},{"messageId":"57938","fix":"63024","desc":"57940"},{"messageId":"57941","fix":"63025","desc":"57943"},{"messageId":"57938","fix":"63026","desc":"57940"},{"messageId":"57941","fix":"63027","desc":"57943"},{"messageId":"57938","fix":"63028","desc":"57940"},{"messageId":"57941","fix":"63029","desc":"57943"},{"messageId":"57938","fix":"63030","desc":"57940"},{"messageId":"57941","fix":"63031","desc":"57943"},{"messageId":"57938","fix":"63032","desc":"57940"},{"messageId":"57941","fix":"63033","desc":"57943"},{"messageId":"57938","fix":"63034","desc":"57940"},{"messageId":"57941","fix":"63035","desc":"57943"},{"messageId":"57938","fix":"63036","desc":"57940"},{"messageId":"57941","fix":"63037","desc":"57943"},{"messageId":"57938","fix":"63038","desc":"57940"},{"messageId":"57941","fix":"63039","desc":"57943"},{"messageId":"57938","fix":"63040","desc":"57940"},{"messageId":"57941","fix":"63041","desc":"57943"},{"messageId":"57938","fix":"63042","desc":"57940"},{"messageId":"57941","fix":"63043","desc":"57943"},{"messageId":"57938","fix":"63044","desc":"57940"},{"messageId":"57941","fix":"63045","desc":"57943"},{"messageId":"57938","fix":"63046","desc":"57940"},{"messageId":"57941","fix":"63047","desc":"57943"},{"messageId":"57938","fix":"63048","desc":"57940"},{"messageId":"57941","fix":"63049","desc":"57943"},{"messageId":"57938","fix":"63050","desc":"57940"},{"messageId":"57941","fix":"63051","desc":"57943"},{"messageId":"57938","fix":"63052","desc":"57940"},{"messageId":"57941","fix":"63053","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"63054","desc":"57940"},{"messageId":"57941","fix":"63055","desc":"57943"},{"messageId":"57938","fix":"63056","desc":"57940"},{"messageId":"57941","fix":"63057","desc":"57943"},{"messageId":"57938","fix":"63058","desc":"57940"},{"messageId":"57941","fix":"63059","desc":"57943"},{"messageId":"57938","fix":"63060","desc":"57940"},{"messageId":"57941","fix":"63061","desc":"57943"},{"messageId":"57938","fix":"63062","desc":"57940"},{"messageId":"57941","fix":"63063","desc":"57943"},{"messageId":"57938","fix":"63064","desc":"57940"},{"messageId":"57941","fix":"63065","desc":"57943"},{"messageId":"57938","fix":"63066","desc":"57940"},{"messageId":"57941","fix":"63067","desc":"57943"},{"messageId":"57938","fix":"63068","desc":"57940"},{"messageId":"57941","fix":"63069","desc":"57943"},{"messageId":"57938","fix":"63070","desc":"57940"},{"messageId":"57941","fix":"63071","desc":"57943"},{"messageId":"57938","fix":"63072","desc":"57940"},{"messageId":"57941","fix":"63073","desc":"57943"},{"messageId":"57938","fix":"63074","desc":"57940"},{"messageId":"57941","fix":"63075","desc":"57943"},{"messageId":"57938","fix":"63076","desc":"57940"},{"messageId":"57941","fix":"63077","desc":"57943"},{"messageId":"57938","fix":"63078","desc":"57940"},{"messageId":"57941","fix":"63079","desc":"57943"},{"messageId":"57938","fix":"63080","desc":"57940"},{"messageId":"57941","fix":"63081","desc":"57943"},{"messageId":"57938","fix":"63082","desc":"57940"},{"messageId":"57941","fix":"63083","desc":"57943"},{"messageId":"57938","fix":"63084","desc":"57940"},{"messageId":"57941","fix":"63085","desc":"57943"},{"messageId":"57938","fix":"63086","desc":"57940"},{"messageId":"57941","fix":"63087","desc":"57943"},{"messageId":"57938","fix":"63088","desc":"57940"},{"messageId":"57941","fix":"63089","desc":"57943"},{"messageId":"57938","fix":"63090","desc":"57940"},{"messageId":"57941","fix":"63091","desc":"57943"},{"messageId":"57938","fix":"63092","desc":"57940"},{"messageId":"57941","fix":"63093","desc":"57943"},{"messageId":"57938","fix":"63094","desc":"57940"},{"messageId":"57941","fix":"63095","desc":"57943"},{"messageId":"57938","fix":"63096","desc":"57940"},{"messageId":"57941","fix":"63097","desc":"57943"},{"messageId":"57938","fix":"63098","desc":"57940"},{"messageId":"57941","fix":"63099","desc":"57943"},{"messageId":"57938","fix":"63100","desc":"57940"},{"messageId":"57941","fix":"63101","desc":"57943"},{"messageId":"57938","fix":"63102","desc":"57940"},{"messageId":"57941","fix":"63103","desc":"57943"},{"messageId":"57938","fix":"63104","desc":"57940"},{"messageId":"57941","fix":"63105","desc":"57943"},{"messageId":"57938","fix":"63106","desc":"57940"},{"messageId":"57941","fix":"63107","desc":"57943"},{"messageId":"57938","fix":"63108","desc":"57940"},{"messageId":"57941","fix":"63109","desc":"57943"},{"messageId":"57938","fix":"63110","desc":"57940"},{"messageId":"57941","fix":"63111","desc":"57943"},{"messageId":"57938","fix":"63112","desc":"57940"},{"messageId":"57941","fix":"63113","desc":"57943"},{"messageId":"57938","fix":"63114","desc":"57940"},{"messageId":"57941","fix":"63115","desc":"57943"},{"messageId":"57938","fix":"63116","desc":"57940"},{"messageId":"57941","fix":"63117","desc":"57943"},{"messageId":"57938","fix":"63118","desc":"57940"},{"messageId":"57941","fix":"63119","desc":"57943"},{"messageId":"57938","fix":"63120","desc":"57940"},{"messageId":"57941","fix":"63121","desc":"57943"},{"messageId":"57938","fix":"63122","desc":"57940"},{"messageId":"57941","fix":"63123","desc":"57943"},{"messageId":"57938","fix":"63124","desc":"57940"},{"messageId":"57941","fix":"63125","desc":"57943"},{"messageId":"57938","fix":"63126","desc":"57940"},{"messageId":"57941","fix":"63127","desc":"57943"},{"messageId":"57938","fix":"63128","desc":"57940"},{"messageId":"57941","fix":"63129","desc":"57943"},{"messageId":"57938","fix":"63130","desc":"57940"},{"messageId":"57941","fix":"63131","desc":"57943"},{"messageId":"57938","fix":"63132","desc":"57940"},{"messageId":"57941","fix":"63133","desc":"57943"},{"messageId":"57938","fix":"63134","desc":"57940"},{"messageId":"57941","fix":"63135","desc":"57943"},{"messageId":"57938","fix":"63136","desc":"57940"},{"messageId":"57941","fix":"63137","desc":"57943"},{"messageId":"57938","fix":"63138","desc":"57940"},{"messageId":"57941","fix":"63139","desc":"57943"},{"messageId":"57938","fix":"63140","desc":"57940"},{"messageId":"57941","fix":"63141","desc":"57943"},{"messageId":"57938","fix":"63142","desc":"57940"},{"messageId":"57941","fix":"63143","desc":"57943"},{"messageId":"57938","fix":"63144","desc":"57940"},{"messageId":"57941","fix":"63145","desc":"57943"},{"messageId":"57938","fix":"63146","desc":"57940"},{"messageId":"57941","fix":"63147","desc":"57943"},{"messageId":"57938","fix":"63148","desc":"57940"},{"messageId":"57941","fix":"63149","desc":"57943"},{"messageId":"57938","fix":"63150","desc":"57940"},{"messageId":"57941","fix":"63151","desc":"57943"},{"messageId":"57938","fix":"63152","desc":"57940"},{"messageId":"57941","fix":"63153","desc":"57943"},{"messageId":"57938","fix":"63154","desc":"57940"},{"messageId":"57941","fix":"63155","desc":"57943"},{"messageId":"57938","fix":"63156","desc":"57940"},{"messageId":"57941","fix":"63157","desc":"57943"},{"messageId":"57938","fix":"63158","desc":"57940"},{"messageId":"57941","fix":"63159","desc":"57943"},{"messageId":"57938","fix":"63160","desc":"57940"},{"messageId":"57941","fix":"63161","desc":"57943"},{"messageId":"57938","fix":"63162","desc":"57940"},{"messageId":"57941","fix":"63163","desc":"57943"},{"messageId":"57938","fix":"63164","desc":"57940"},{"messageId":"57941","fix":"63165","desc":"57943"},{"messageId":"57938","fix":"63166","desc":"57940"},{"messageId":"57941","fix":"63167","desc":"57943"},{"messageId":"57938","fix":"63168","desc":"57940"},{"messageId":"57941","fix":"63169","desc":"57943"},{"messageId":"57938","fix":"63170","desc":"57940"},{"messageId":"57941","fix":"63171","desc":"57943"},{"messageId":"57938","fix":"63172","desc":"57940"},{"messageId":"57941","fix":"63173","desc":"57943"},{"messageId":"57938","fix":"63174","desc":"57940"},{"messageId":"57941","fix":"63175","desc":"57943"},{"messageId":"57938","fix":"63176","desc":"57940"},{"messageId":"57941","fix":"63177","desc":"57943"},{"messageId":"57938","fix":"63178","desc":"57940"},{"messageId":"57941","fix":"63179","desc":"57943"},{"messageId":"57938","fix":"63180","desc":"57940"},{"messageId":"57941","fix":"63181","desc":"57943"},{"messageId":"57938","fix":"63182","desc":"57940"},{"messageId":"57941","fix":"63183","desc":"57943"},{"messageId":"57938","fix":"63184","desc":"57940"},{"messageId":"57941","fix":"63185","desc":"57943"},{"messageId":"57938","fix":"63186","desc":"57940"},{"messageId":"57941","fix":"63187","desc":"57943"},{"messageId":"57938","fix":"63188","desc":"57940"},{"messageId":"57941","fix":"63189","desc":"57943"},{"messageId":"57938","fix":"63190","desc":"57940"},{"messageId":"57941","fix":"63191","desc":"57943"},{"messageId":"57938","fix":"63192","desc":"57940"},{"messageId":"57941","fix":"63193","desc":"57943"},{"messageId":"57938","fix":"63194","desc":"57940"},{"messageId":"57941","fix":"63195","desc":"57943"},{"messageId":"57938","fix":"63196","desc":"57940"},{"messageId":"57941","fix":"63197","desc":"57943"},{"messageId":"57938","fix":"63198","desc":"57940"},{"messageId":"57941","fix":"63199","desc":"57943"},{"messageId":"57938","fix":"63200","desc":"57940"},{"messageId":"57941","fix":"63201","desc":"57943"},{"messageId":"57938","fix":"63202","desc":"57940"},{"messageId":"57941","fix":"63203","desc":"57943"},{"messageId":"57938","fix":"63204","desc":"57940"},{"messageId":"57941","fix":"63205","desc":"57943"},{"messageId":"57938","fix":"63206","desc":"57940"},{"messageId":"57941","fix":"63207","desc":"57943"},{"messageId":"57938","fix":"63208","desc":"57940"},{"messageId":"57941","fix":"63209","desc":"57943"},{"messageId":"57938","fix":"63210","desc":"57940"},{"messageId":"57941","fix":"63211","desc":"57943"},{"messageId":"57938","fix":"63212","desc":"57940"},{"messageId":"57941","fix":"63213","desc":"57943"},{"messageId":"57938","fix":"63214","desc":"57940"},{"messageId":"57941","fix":"63215","desc":"57943"},{"messageId":"57938","fix":"63216","desc":"57940"},{"messageId":"57941","fix":"63217","desc":"57943"},{"messageId":"57938","fix":"63218","desc":"57940"},{"messageId":"57941","fix":"63219","desc":"57943"},{"messageId":"57938","fix":"63220","desc":"57940"},{"messageId":"57941","fix":"63221","desc":"57943"},{"messageId":"57938","fix":"63222","desc":"57940"},{"messageId":"57941","fix":"63223","desc":"57943"},{"messageId":"57938","fix":"63224","desc":"57940"},{"messageId":"57941","fix":"63225","desc":"57943"},{"messageId":"57938","fix":"63226","desc":"57940"},{"messageId":"57941","fix":"63227","desc":"57943"},{"messageId":"57938","fix":"63228","desc":"57940"},{"messageId":"57941","fix":"63229","desc":"57943"},{"messageId":"57938","fix":"63230","desc":"57940"},{"messageId":"57941","fix":"63231","desc":"57943"},{"messageId":"57938","fix":"63232","desc":"57940"},{"messageId":"57941","fix":"63233","desc":"57943"},{"messageId":"57938","fix":"63234","desc":"57940"},{"messageId":"57941","fix":"63235","desc":"57943"},{"messageId":"57938","fix":"63236","desc":"57940"},{"messageId":"57941","fix":"63237","desc":"57943"},{"messageId":"57938","fix":"63238","desc":"57940"},{"messageId":"57941","fix":"63239","desc":"57943"},{"messageId":"57938","fix":"63240","desc":"57940"},{"messageId":"57941","fix":"63241","desc":"57943"},{"messageId":"57938","fix":"63242","desc":"57940"},{"messageId":"57941","fix":"63243","desc":"57943"},{"messageId":"57938","fix":"63244","desc":"57940"},{"messageId":"57941","fix":"63245","desc":"57943"},{"messageId":"57938","fix":"63246","desc":"57940"},{"messageId":"57941","fix":"63247","desc":"57943"},{"messageId":"57938","fix":"63248","desc":"57940"},{"messageId":"57941","fix":"63249","desc":"57943"},{"messageId":"57938","fix":"63250","desc":"57940"},{"messageId":"57941","fix":"63251","desc":"57943"},{"messageId":"57938","fix":"63252","desc":"57940"},{"messageId":"57941","fix":"63253","desc":"57943"},{"messageId":"57938","fix":"63254","desc":"57940"},{"messageId":"57941","fix":"63255","desc":"57943"},{"messageId":"57938","fix":"63256","desc":"57940"},{"messageId":"57941","fix":"63257","desc":"57943"},{"messageId":"57938","fix":"63258","desc":"57940"},{"messageId":"57941","fix":"63259","desc":"57943"},{"messageId":"57938","fix":"63260","desc":"57940"},{"messageId":"57941","fix":"63261","desc":"57943"},{"messageId":"57938","fix":"63262","desc":"57940"},{"messageId":"57941","fix":"63263","desc":"57943"},{"messageId":"57938","fix":"63264","desc":"57940"},{"messageId":"57941","fix":"63265","desc":"57943"},{"messageId":"57938","fix":"63266","desc":"57940"},{"messageId":"57941","fix":"63267","desc":"57943"},{"messageId":"57938","fix":"63268","desc":"57940"},{"messageId":"57941","fix":"63269","desc":"57943"},{"messageId":"57938","fix":"63270","desc":"57940"},{"messageId":"57941","fix":"63271","desc":"57943"},{"messageId":"57938","fix":"63272","desc":"57940"},{"messageId":"57941","fix":"63273","desc":"57943"},{"messageId":"57938","fix":"63274","desc":"57940"},{"messageId":"57941","fix":"63275","desc":"57943"},{"messageId":"57938","fix":"63276","desc":"57940"},{"messageId":"57941","fix":"63277","desc":"57943"},{"messageId":"57938","fix":"63278","desc":"57940"},{"messageId":"57941","fix":"63279","desc":"57943"},{"messageId":"57938","fix":"63280","desc":"57940"},{"messageId":"57941","fix":"63281","desc":"57943"},{"messageId":"57938","fix":"63282","desc":"57940"},{"messageId":"57941","fix":"63283","desc":"57943"},{"messageId":"57938","fix":"63284","desc":"57940"},{"messageId":"57941","fix":"63285","desc":"57943"},{"messageId":"57938","fix":"63286","desc":"57940"},{"messageId":"57941","fix":"63287","desc":"57943"},{"messageId":"57938","fix":"63288","desc":"57940"},{"messageId":"57941","fix":"63289","desc":"57943"},{"messageId":"57938","fix":"63290","desc":"57940"},{"messageId":"57941","fix":"63291","desc":"57943"},{"messageId":"57938","fix":"63292","desc":"57940"},{"messageId":"57941","fix":"63293","desc":"57943"},{"messageId":"57938","fix":"63294","desc":"57940"},{"messageId":"57941","fix":"63295","desc":"57943"},{"messageId":"57938","fix":"63296","desc":"57940"},{"messageId":"57941","fix":"63297","desc":"57943"},{"messageId":"57938","fix":"63298","desc":"57940"},{"messageId":"57941","fix":"63299","desc":"57943"},{"messageId":"57938","fix":"63300","desc":"57940"},{"messageId":"57941","fix":"63301","desc":"57943"},{"messageId":"57938","fix":"63302","desc":"57940"},{"messageId":"57941","fix":"63303","desc":"57943"},{"messageId":"57938","fix":"63304","desc":"57940"},{"messageId":"57941","fix":"63305","desc":"57943"},{"messageId":"57938","fix":"63306","desc":"57940"},{"messageId":"57941","fix":"63307","desc":"57943"},{"messageId":"57938","fix":"63308","desc":"57940"},{"messageId":"57941","fix":"63309","desc":"57943"},{"messageId":"57938","fix":"63310","desc":"57940"},{"messageId":"57941","fix":"63311","desc":"57943"},{"messageId":"57938","fix":"63312","desc":"57940"},{"messageId":"57941","fix":"63313","desc":"57943"},{"messageId":"57938","fix":"63314","desc":"57940"},{"messageId":"57941","fix":"63315","desc":"57943"},{"messageId":"57938","fix":"63316","desc":"57940"},{"messageId":"57941","fix":"63317","desc":"57943"},{"messageId":"57938","fix":"63318","desc":"57940"},{"messageId":"57941","fix":"63319","desc":"57943"},{"messageId":"57938","fix":"63320","desc":"57940"},{"messageId":"57941","fix":"63321","desc":"57943"},{"messageId":"57938","fix":"63322","desc":"57940"},{"messageId":"57941","fix":"63323","desc":"57943"},{"messageId":"57938","fix":"63324","desc":"57940"},{"messageId":"57941","fix":"63325","desc":"57943"},{"messageId":"57938","fix":"63326","desc":"57940"},{"messageId":"57941","fix":"63327","desc":"57943"},{"messageId":"57938","fix":"63328","desc":"57940"},{"messageId":"57941","fix":"63329","desc":"57943"},{"messageId":"57938","fix":"63330","desc":"57940"},{"messageId":"57941","fix":"63331","desc":"57943"},{"messageId":"57938","fix":"63332","desc":"57940"},{"messageId":"57941","fix":"63333","desc":"57943"},{"messageId":"57938","fix":"63334","desc":"57940"},{"messageId":"57941","fix":"63335","desc":"57943"},{"messageId":"57938","fix":"63336","desc":"57940"},{"messageId":"57941","fix":"63337","desc":"57943"},{"messageId":"57938","fix":"63338","desc":"57940"},{"messageId":"57941","fix":"63339","desc":"57943"},{"messageId":"57938","fix":"63340","desc":"57940"},{"messageId":"57941","fix":"63341","desc":"57943"},{"messageId":"57938","fix":"63342","desc":"57940"},{"messageId":"57941","fix":"63343","desc":"57943"},{"messageId":"57938","fix":"63344","desc":"57940"},{"messageId":"57941","fix":"63345","desc":"57943"},{"messageId":"57938","fix":"63346","desc":"57940"},{"messageId":"57941","fix":"63347","desc":"57943"},{"messageId":"57938","fix":"63348","desc":"57940"},{"messageId":"57941","fix":"63349","desc":"57943"},{"messageId":"57938","fix":"63350","desc":"57940"},{"messageId":"57941","fix":"63351","desc":"57943"},{"messageId":"57938","fix":"63352","desc":"57940"},{"messageId":"57941","fix":"63353","desc":"57943"},{"messageId":"57938","fix":"63354","desc":"57940"},{"messageId":"57941","fix":"63355","desc":"57943"},{"messageId":"57938","fix":"63356","desc":"57940"},{"messageId":"57941","fix":"63357","desc":"57943"},{"messageId":"57938","fix":"63358","desc":"57940"},{"messageId":"57941","fix":"63359","desc":"57943"},{"messageId":"57938","fix":"63360","desc":"57940"},{"messageId":"57941","fix":"63361","desc":"57943"},{"messageId":"57938","fix":"63362","desc":"57940"},{"messageId":"57941","fix":"63363","desc":"57943"},{"messageId":"57938","fix":"63364","desc":"57940"},{"messageId":"57941","fix":"63365","desc":"57943"},{"messageId":"57938","fix":"63366","desc":"57940"},{"messageId":"57941","fix":"63367","desc":"57943"},{"messageId":"57938","fix":"63368","desc":"57940"},{"messageId":"57941","fix":"63369","desc":"57943"},{"messageId":"57938","fix":"63370","desc":"57940"},{"messageId":"57941","fix":"63371","desc":"57943"},{"messageId":"57938","fix":"63372","desc":"57940"},{"messageId":"57941","fix":"63373","desc":"57943"},{"messageId":"57938","fix":"63374","desc":"57940"},{"messageId":"57941","fix":"63375","desc":"57943"},{"messageId":"57938","fix":"63376","desc":"57940"},{"messageId":"57941","fix":"63377","desc":"57943"},{"messageId":"57938","fix":"63378","desc":"57940"},{"messageId":"57941","fix":"63379","desc":"57943"},{"messageId":"57938","fix":"63380","desc":"57940"},{"messageId":"57941","fix":"63381","desc":"57943"},{"messageId":"57938","fix":"63382","desc":"57940"},{"messageId":"57941","fix":"63383","desc":"57943"},{"messageId":"57938","fix":"63384","desc":"57940"},{"messageId":"57941","fix":"63385","desc":"57943"},{"messageId":"57938","fix":"63386","desc":"57940"},{"messageId":"57941","fix":"63387","desc":"57943"},{"messageId":"57938","fix":"63388","desc":"57940"},{"messageId":"57941","fix":"63389","desc":"57943"},{"messageId":"57938","fix":"63390","desc":"57940"},{"messageId":"57941","fix":"63391","desc":"57943"},{"messageId":"57938","fix":"63392","desc":"57940"},{"messageId":"57941","fix":"63393","desc":"57943"},{"messageId":"57938","fix":"63394","desc":"57940"},{"messageId":"57941","fix":"63395","desc":"57943"},{"messageId":"57938","fix":"63396","desc":"57940"},{"messageId":"57941","fix":"63397","desc":"57943"},{"messageId":"57938","fix":"63398","desc":"57940"},{"messageId":"57941","fix":"63399","desc":"57943"},{"messageId":"57938","fix":"63400","desc":"57940"},{"messageId":"57941","fix":"63401","desc":"57943"},{"messageId":"57938","fix":"63402","desc":"57940"},{"messageId":"57941","fix":"63403","desc":"57943"},{"messageId":"57938","fix":"63404","desc":"57940"},{"messageId":"57941","fix":"63405","desc":"57943"},{"messageId":"57938","fix":"63406","desc":"57940"},{"messageId":"57941","fix":"63407","desc":"57943"},{"messageId":"57938","fix":"63408","desc":"57940"},{"messageId":"57941","fix":"63409","desc":"57943"},{"messageId":"57938","fix":"63410","desc":"57940"},{"messageId":"57941","fix":"63411","desc":"57943"},{"messageId":"57938","fix":"63412","desc":"57940"},{"messageId":"57941","fix":"63413","desc":"57943"},{"messageId":"57938","fix":"63414","desc":"57940"},{"messageId":"57941","fix":"63415","desc":"57943"},{"messageId":"57938","fix":"63416","desc":"57940"},{"messageId":"57941","fix":"63417","desc":"57943"},{"messageId":"57938","fix":"63418","desc":"57940"},{"messageId":"57941","fix":"63419","desc":"57943"},{"messageId":"57938","fix":"63420","desc":"57940"},{"messageId":"57941","fix":"63421","desc":"57943"},{"messageId":"57938","fix":"63422","desc":"57940"},{"messageId":"57941","fix":"63423","desc":"57943"},{"messageId":"57938","fix":"63424","desc":"57940"},{"messageId":"57941","fix":"63425","desc":"57943"},{"messageId":"57938","fix":"63426","desc":"57940"},{"messageId":"57941","fix":"63427","desc":"57943"},{"messageId":"57938","fix":"63428","desc":"57940"},{"messageId":"57941","fix":"63429","desc":"57943"},{"messageId":"57938","fix":"63430","desc":"57940"},{"messageId":"57941","fix":"63431","desc":"57943"},{"messageId":"57938","fix":"63432","desc":"57940"},{"messageId":"57941","fix":"63433","desc":"57943"},{"messageId":"57938","fix":"63434","desc":"57940"},{"messageId":"57941","fix":"63435","desc":"57943"},{"messageId":"57938","fix":"63436","desc":"57940"},{"messageId":"57941","fix":"63437","desc":"57943"},{"messageId":"57938","fix":"63438","desc":"57940"},{"messageId":"57941","fix":"63439","desc":"57943"},{"messageId":"57938","fix":"63440","desc":"57940"},{"messageId":"57941","fix":"63441","desc":"57943"},{"messageId":"57938","fix":"63442","desc":"57940"},{"messageId":"57941","fix":"63443","desc":"57943"},{"messageId":"57938","fix":"63444","desc":"57940"},{"messageId":"57941","fix":"63445","desc":"57943"},{"messageId":"57938","fix":"63446","desc":"57940"},{"messageId":"57941","fix":"63447","desc":"57943"},{"messageId":"57938","fix":"63448","desc":"57940"},{"messageId":"57941","fix":"63449","desc":"57943"},{"messageId":"57938","fix":"63450","desc":"57940"},{"messageId":"57941","fix":"63451","desc":"57943"},{"messageId":"57938","fix":"63452","desc":"57940"},{"messageId":"57941","fix":"63453","desc":"57943"},{"messageId":"57938","fix":"63454","desc":"57940"},{"messageId":"57941","fix":"63455","desc":"57943"},{"messageId":"57938","fix":"63456","desc":"57940"},{"messageId":"57941","fix":"63457","desc":"57943"},{"messageId":"57938","fix":"63458","desc":"57940"},{"messageId":"57941","fix":"63459","desc":"57943"},{"messageId":"57938","fix":"63460","desc":"57940"},{"messageId":"57941","fix":"63461","desc":"57943"},{"messageId":"57938","fix":"63462","desc":"57940"},{"messageId":"57941","fix":"63463","desc":"57943"},{"messageId":"57938","fix":"63464","desc":"57940"},{"messageId":"57941","fix":"63465","desc":"57943"},{"messageId":"57938","fix":"63466","desc":"57940"},{"messageId":"57941","fix":"63467","desc":"57943"},{"messageId":"57938","fix":"63468","desc":"57940"},{"messageId":"57941","fix":"63469","desc":"57943"},{"messageId":"57938","fix":"63470","desc":"57940"},{"messageId":"57941","fix":"63471","desc":"57943"},{"messageId":"57938","fix":"63472","desc":"57940"},{"messageId":"57941","fix":"63473","desc":"57943"},{"messageId":"57938","fix":"63474","desc":"57940"},{"messageId":"57941","fix":"63475","desc":"57943"},{"messageId":"57938","fix":"63476","desc":"57940"},{"messageId":"57941","fix":"63477","desc":"57943"},{"messageId":"57938","fix":"63478","desc":"57940"},{"messageId":"57941","fix":"63479","desc":"57943"},{"messageId":"57938","fix":"63480","desc":"57940"},{"messageId":"57941","fix":"63481","desc":"57943"},{"messageId":"57938","fix":"63482","desc":"57940"},{"messageId":"57941","fix":"63483","desc":"57943"},{"messageId":"57938","fix":"63484","desc":"57940"},{"messageId":"57941","fix":"63485","desc":"57943"},{"messageId":"57938","fix":"63486","desc":"57940"},{"messageId":"57941","fix":"63487","desc":"57943"},{"messageId":"57938","fix":"63488","desc":"57940"},{"messageId":"57941","fix":"63489","desc":"57943"},{"messageId":"57938","fix":"63490","desc":"57940"},{"messageId":"57941","fix":"63491","desc":"57943"},{"messageId":"57938","fix":"63492","desc":"57940"},{"messageId":"57941","fix":"63493","desc":"57943"},{"messageId":"57938","fix":"63494","desc":"57940"},{"messageId":"57941","fix":"63495","desc":"57943"},{"messageId":"57938","fix":"63496","desc":"57940"},{"messageId":"57941","fix":"63497","desc":"57943"},{"messageId":"57938","fix":"63498","desc":"57940"},{"messageId":"57941","fix":"63499","desc":"57943"},{"messageId":"57938","fix":"63500","desc":"57940"},{"messageId":"57941","fix":"63501","desc":"57943"},{"messageId":"57938","fix":"63502","desc":"57940"},{"messageId":"57941","fix":"63503","desc":"57943"},{"messageId":"57938","fix":"63504","desc":"57940"},{"messageId":"57941","fix":"63505","desc":"57943"},{"messageId":"57938","fix":"63506","desc":"57940"},{"messageId":"57941","fix":"63507","desc":"57943"},{"messageId":"57938","fix":"63508","desc":"57940"},{"messageId":"57941","fix":"63509","desc":"57943"},{"messageId":"57938","fix":"63510","desc":"57940"},{"messageId":"57941","fix":"63511","desc":"57943"},{"messageId":"57938","fix":"63512","desc":"57940"},{"messageId":"57941","fix":"63513","desc":"57943"},{"messageId":"57938","fix":"63514","desc":"57940"},{"messageId":"57941","fix":"63515","desc":"57943"},{"messageId":"57938","fix":"63516","desc":"57940"},{"messageId":"57941","fix":"63517","desc":"57943"},{"messageId":"57938","fix":"63518","desc":"57940"},{"messageId":"57941","fix":"63519","desc":"57943"},{"messageId":"57938","fix":"63520","desc":"57940"},{"messageId":"57941","fix":"63521","desc":"57943"},{"messageId":"57938","fix":"63522","desc":"57940"},{"messageId":"57941","fix":"63523","desc":"57943"},{"messageId":"57938","fix":"63524","desc":"57940"},{"messageId":"57941","fix":"63525","desc":"57943"},{"messageId":"57938","fix":"63526","desc":"57940"},{"messageId":"57941","fix":"63527","desc":"57943"},{"messageId":"57938","fix":"63528","desc":"57940"},{"messageId":"57941","fix":"63529","desc":"57943"},{"messageId":"57938","fix":"63530","desc":"57940"},{"messageId":"57941","fix":"63531","desc":"57943"},{"messageId":"57938","fix":"63532","desc":"57940"},{"messageId":"57941","fix":"63533","desc":"57943"},{"messageId":"57938","fix":"63534","desc":"57940"},{"messageId":"57941","fix":"63535","desc":"57943"},{"messageId":"57938","fix":"63536","desc":"57940"},{"messageId":"57941","fix":"63537","desc":"57943"},{"messageId":"57938","fix":"63538","desc":"57940"},{"messageId":"57941","fix":"63539","desc":"57943"},{"messageId":"57938","fix":"63540","desc":"57940"},{"messageId":"57941","fix":"63541","desc":"57943"},{"messageId":"57938","fix":"63542","desc":"57940"},{"messageId":"57941","fix":"63543","desc":"57943"},{"messageId":"57938","fix":"63544","desc":"57940"},{"messageId":"57941","fix":"63545","desc":"57943"},{"messageId":"57938","fix":"63546","desc":"57940"},{"messageId":"57941","fix":"63547","desc":"57943"},{"messageId":"57938","fix":"63548","desc":"57940"},{"messageId":"57941","fix":"63549","desc":"57943"},{"messageId":"57938","fix":"63550","desc":"57940"},{"messageId":"57941","fix":"63551","desc":"57943"},{"messageId":"57938","fix":"63552","desc":"57940"},{"messageId":"57941","fix":"63553","desc":"57943"},{"messageId":"57938","fix":"63554","desc":"57940"},{"messageId":"57941","fix":"63555","desc":"57943"},{"messageId":"57938","fix":"63556","desc":"57940"},{"messageId":"57941","fix":"63557","desc":"57943"},{"messageId":"57938","fix":"63558","desc":"57940"},{"messageId":"57941","fix":"63559","desc":"57943"},{"messageId":"57938","fix":"63560","desc":"57940"},{"messageId":"57941","fix":"63561","desc":"57943"},{"messageId":"57938","fix":"63562","desc":"57940"},{"messageId":"57941","fix":"63563","desc":"57943"},{"messageId":"57938","fix":"63564","desc":"57940"},{"messageId":"57941","fix":"63565","desc":"57943"},{"messageId":"57938","fix":"63566","desc":"57940"},{"messageId":"57941","fix":"63567","desc":"57943"},{"messageId":"57938","fix":"63568","desc":"57940"},{"messageId":"57941","fix":"63569","desc":"57943"},{"messageId":"57938","fix":"63570","desc":"57940"},{"messageId":"57941","fix":"63571","desc":"57943"},{"messageId":"57938","fix":"63572","desc":"57940"},{"messageId":"57941","fix":"63573","desc":"57943"},{"messageId":"57938","fix":"63574","desc":"57940"},{"messageId":"57941","fix":"63575","desc":"57943"},{"messageId":"57938","fix":"63576","desc":"57940"},{"messageId":"57941","fix":"63577","desc":"57943"},{"messageId":"57938","fix":"63578","desc":"57940"},{"messageId":"57941","fix":"63579","desc":"57943"},{"messageId":"57938","fix":"63580","desc":"57940"},{"messageId":"57941","fix":"63581","desc":"57943"},{"messageId":"57938","fix":"63582","desc":"57940"},{"messageId":"57941","fix":"63583","desc":"57943"},{"messageId":"57938","fix":"63584","desc":"57940"},{"messageId":"57941","fix":"63585","desc":"57943"},{"messageId":"57938","fix":"63586","desc":"57940"},{"messageId":"57941","fix":"63587","desc":"57943"},{"messageId":"57938","fix":"63588","desc":"57940"},{"messageId":"57941","fix":"63589","desc":"57943"},{"messageId":"57938","fix":"63590","desc":"57940"},{"messageId":"57941","fix":"63591","desc":"57943"},{"messageId":"57938","fix":"63592","desc":"57940"},{"messageId":"57941","fix":"63593","desc":"57943"},{"messageId":"57938","fix":"63594","desc":"57940"},{"messageId":"57941","fix":"63595","desc":"57943"},{"messageId":"57938","fix":"63596","desc":"57940"},{"messageId":"57941","fix":"63597","desc":"57943"},{"messageId":"57938","fix":"63598","desc":"57940"},{"messageId":"57941","fix":"63599","desc":"57943"},{"messageId":"57938","fix":"63600","desc":"57940"},{"messageId":"57941","fix":"63601","desc":"57943"},{"messageId":"57938","fix":"63602","desc":"57940"},{"messageId":"57941","fix":"63603","desc":"57943"},{"messageId":"57938","fix":"63604","desc":"57940"},{"messageId":"57941","fix":"63605","desc":"57943"},{"messageId":"57938","fix":"63606","desc":"57940"},{"messageId":"57941","fix":"63607","desc":"57943"},{"messageId":"57938","fix":"63608","desc":"57940"},{"messageId":"57941","fix":"63609","desc":"57943"},{"messageId":"57938","fix":"63610","desc":"57940"},{"messageId":"57941","fix":"63611","desc":"57943"},{"messageId":"57938","fix":"63612","desc":"57940"},{"messageId":"57941","fix":"63613","desc":"57943"},{"messageId":"57938","fix":"63614","desc":"57940"},{"messageId":"57941","fix":"63615","desc":"57943"},{"messageId":"57938","fix":"63616","desc":"57940"},{"messageId":"57941","fix":"63617","desc":"57943"},{"messageId":"57938","fix":"63618","desc":"57940"},{"messageId":"57941","fix":"63619","desc":"57943"},{"messageId":"57938","fix":"63620","desc":"57940"},{"messageId":"57941","fix":"63621","desc":"57943"},{"messageId":"57938","fix":"63622","desc":"57940"},{"messageId":"57941","fix":"63623","desc":"57943"},{"messageId":"57938","fix":"63624","desc":"57940"},{"messageId":"57941","fix":"63625","desc":"57943"},{"messageId":"57938","fix":"63626","desc":"57940"},{"messageId":"57941","fix":"63627","desc":"57943"},{"messageId":"57938","fix":"63628","desc":"57940"},{"messageId":"57941","fix":"63629","desc":"57943"},{"messageId":"57938","fix":"63630","desc":"57940"},{"messageId":"57941","fix":"63631","desc":"57943"},{"messageId":"57938","fix":"63632","desc":"57940"},{"messageId":"57941","fix":"63633","desc":"57943"},{"messageId":"57938","fix":"63634","desc":"57940"},{"messageId":"57941","fix":"63635","desc":"57943"},{"messageId":"57938","fix":"63636","desc":"57940"},{"messageId":"57941","fix":"63637","desc":"57943"},{"messageId":"57938","fix":"63638","desc":"57940"},{"messageId":"57941","fix":"63639","desc":"57943"},{"messageId":"57938","fix":"63640","desc":"57940"},{"messageId":"57941","fix":"63641","desc":"57943"},{"messageId":"57938","fix":"63642","desc":"57940"},{"messageId":"57941","fix":"63643","desc":"57943"},{"messageId":"57938","fix":"63644","desc":"57940"},{"messageId":"57941","fix":"63645","desc":"57943"},{"messageId":"57938","fix":"63646","desc":"57940"},{"messageId":"57941","fix":"63647","desc":"57943"},{"messageId":"57938","fix":"63648","desc":"57940"},{"messageId":"57941","fix":"63649","desc":"57943"},{"messageId":"57938","fix":"63650","desc":"57940"},{"messageId":"57941","fix":"63651","desc":"57943"},{"messageId":"57938","fix":"63652","desc":"57940"},{"messageId":"57941","fix":"63653","desc":"57943"},{"messageId":"57938","fix":"63654","desc":"57940"},{"messageId":"57941","fix":"63655","desc":"57943"},{"messageId":"57938","fix":"63656","desc":"57940"},{"messageId":"57941","fix":"63657","desc":"57943"},{"messageId":"57938","fix":"63658","desc":"57940"},{"messageId":"57941","fix":"63659","desc":"57943"},{"messageId":"57938","fix":"63660","desc":"57940"},{"messageId":"57941","fix":"63661","desc":"57943"},{"messageId":"57938","fix":"63662","desc":"57940"},{"messageId":"57941","fix":"63663","desc":"57943"},{"messageId":"57938","fix":"63664","desc":"57940"},{"messageId":"57941","fix":"63665","desc":"57943"},{"messageId":"57938","fix":"63666","desc":"57940"},{"messageId":"57941","fix":"63667","desc":"57943"},{"messageId":"57938","fix":"63668","desc":"57940"},{"messageId":"57941","fix":"63669","desc":"57943"},{"messageId":"57938","fix":"63670","desc":"57940"},{"messageId":"57941","fix":"63671","desc":"57943"},{"messageId":"57938","fix":"63672","desc":"57940"},{"messageId":"57941","fix":"63673","desc":"57943"},{"messageId":"57938","fix":"63674","desc":"57940"},{"messageId":"57941","fix":"63675","desc":"57943"},{"messageId":"57938","fix":"63676","desc":"57940"},{"messageId":"57941","fix":"63677","desc":"57943"},{"messageId":"57938","fix":"63678","desc":"57940"},{"messageId":"57941","fix":"63679","desc":"57943"},{"messageId":"57938","fix":"63680","desc":"57940"},{"messageId":"57941","fix":"63681","desc":"57943"},{"messageId":"57938","fix":"63682","desc":"57940"},{"messageId":"57941","fix":"63683","desc":"57943"},{"messageId":"57938","fix":"63684","desc":"57940"},{"messageId":"57941","fix":"63685","desc":"57943"},{"messageId":"57938","fix":"63686","desc":"57940"},{"messageId":"57941","fix":"63687","desc":"57943"},{"messageId":"57938","fix":"63688","desc":"57940"},{"messageId":"57941","fix":"63689","desc":"57943"},{"messageId":"57938","fix":"63690","desc":"57940"},{"messageId":"57941","fix":"63691","desc":"57943"},{"messageId":"57938","fix":"63692","desc":"57940"},{"messageId":"57941","fix":"63693","desc":"57943"},{"messageId":"57938","fix":"63694","desc":"57940"},{"messageId":"57941","fix":"63695","desc":"57943"},{"messageId":"57938","fix":"63696","desc":"57940"},{"messageId":"57941","fix":"63697","desc":"57943"},{"messageId":"57938","fix":"63698","desc":"57940"},{"messageId":"57941","fix":"63699","desc":"57943"},{"messageId":"57938","fix":"63700","desc":"57940"},{"messageId":"57941","fix":"63701","desc":"57943"},{"messageId":"57938","fix":"63702","desc":"57940"},{"messageId":"57941","fix":"63703","desc":"57943"},{"messageId":"57938","fix":"63704","desc":"57940"},{"messageId":"57941","fix":"63705","desc":"57943"},{"messageId":"57938","fix":"63706","desc":"57940"},{"messageId":"57941","fix":"63707","desc":"57943"},{"messageId":"57938","fix":"63708","desc":"57940"},{"messageId":"57941","fix":"63709","desc":"57943"},{"messageId":"57938","fix":"63710","desc":"57940"},{"messageId":"57941","fix":"63711","desc":"57943"},{"messageId":"57938","fix":"63712","desc":"57940"},{"messageId":"57941","fix":"63713","desc":"57943"},{"messageId":"57938","fix":"63714","desc":"57940"},{"messageId":"57941","fix":"63715","desc":"57943"},{"messageId":"57938","fix":"63716","desc":"57940"},{"messageId":"57941","fix":"63717","desc":"57943"},{"messageId":"57938","fix":"63718","desc":"57940"},{"messageId":"57941","fix":"63719","desc":"57943"},{"messageId":"57938","fix":"63720","desc":"57940"},{"messageId":"57941","fix":"63721","desc":"57943"},{"messageId":"57938","fix":"63722","desc":"57940"},{"messageId":"57941","fix":"63723","desc":"57943"},{"messageId":"57938","fix":"63724","desc":"57940"},{"messageId":"57941","fix":"63725","desc":"57943"},{"messageId":"57938","fix":"63726","desc":"57940"},{"messageId":"57941","fix":"63727","desc":"57943"},{"messageId":"57938","fix":"63728","desc":"57940"},{"messageId":"57941","fix":"63729","desc":"57943"},{"messageId":"57938","fix":"63730","desc":"57940"},{"messageId":"57941","fix":"63731","desc":"57943"},{"messageId":"57938","fix":"63732","desc":"57940"},{"messageId":"57941","fix":"63733","desc":"57943"},{"messageId":"57938","fix":"63734","desc":"57940"},{"messageId":"57941","fix":"63735","desc":"57943"},{"messageId":"57938","fix":"63736","desc":"57940"},{"messageId":"57941","fix":"63737","desc":"57943"},{"messageId":"57938","fix":"63738","desc":"57940"},{"messageId":"57941","fix":"63739","desc":"57943"},{"messageId":"57938","fix":"63740","desc":"57940"},{"messageId":"57941","fix":"63741","desc":"57943"},{"messageId":"57938","fix":"63742","desc":"57940"},{"messageId":"57941","fix":"63743","desc":"57943"},{"messageId":"57938","fix":"63744","desc":"57940"},{"messageId":"57941","fix":"63745","desc":"57943"},{"messageId":"57938","fix":"63746","desc":"57940"},{"messageId":"57941","fix":"63747","desc":"57943"},{"messageId":"57938","fix":"63748","desc":"57940"},{"messageId":"57941","fix":"63749","desc":"57943"},{"messageId":"57938","fix":"63750","desc":"57940"},{"messageId":"57941","fix":"63751","desc":"57943"},{"messageId":"57938","fix":"63752","desc":"57940"},{"messageId":"57941","fix":"63753","desc":"57943"},{"messageId":"57938","fix":"63754","desc":"57940"},{"messageId":"57941","fix":"63755","desc":"57943"},{"messageId":"57938","fix":"63756","desc":"57940"},{"messageId":"57941","fix":"63757","desc":"57943"},{"messageId":"57938","fix":"63758","desc":"57940"},{"messageId":"57941","fix":"63759","desc":"57943"},{"messageId":"57938","fix":"63760","desc":"57940"},{"messageId":"57941","fix":"63761","desc":"57943"},{"messageId":"57938","fix":"63762","desc":"57940"},{"messageId":"57941","fix":"63763","desc":"57943"},{"messageId":"57938","fix":"63764","desc":"57940"},{"messageId":"57941","fix":"63765","desc":"57943"},{"messageId":"57938","fix":"63766","desc":"57940"},{"messageId":"57941","fix":"63767","desc":"57943"},{"messageId":"57938","fix":"63768","desc":"57940"},{"messageId":"57941","fix":"63769","desc":"57943"},{"messageId":"57938","fix":"63770","desc":"57940"},{"messageId":"57941","fix":"63771","desc":"57943"},{"messageId":"57938","fix":"63772","desc":"57940"},{"messageId":"57941","fix":"63773","desc":"57943"},{"messageId":"57938","fix":"63774","desc":"57940"},{"messageId":"57941","fix":"63775","desc":"57943"},{"messageId":"57938","fix":"63776","desc":"57940"},{"messageId":"57941","fix":"63777","desc":"57943"},{"messageId":"57938","fix":"63778","desc":"57940"},{"messageId":"57941","fix":"63779","desc":"57943"},{"messageId":"57938","fix":"63780","desc":"57940"},{"messageId":"57941","fix":"63781","desc":"57943"},{"messageId":"57938","fix":"63782","desc":"57940"},{"messageId":"57941","fix":"63783","desc":"57943"},{"messageId":"57938","fix":"63784","desc":"57940"},{"messageId":"57941","fix":"63785","desc":"57943"},{"messageId":"57938","fix":"63786","desc":"57940"},{"messageId":"57941","fix":"63787","desc":"57943"},{"messageId":"57938","fix":"63788","desc":"57940"},{"messageId":"57941","fix":"63789","desc":"57943"},{"messageId":"57938","fix":"63790","desc":"57940"},{"messageId":"57941","fix":"63791","desc":"57943"},{"messageId":"57938","fix":"63792","desc":"57940"},{"messageId":"57941","fix":"63793","desc":"57943"},{"messageId":"57938","fix":"63794","desc":"57940"},{"messageId":"57941","fix":"63795","desc":"57943"},{"messageId":"57938","fix":"63796","desc":"57940"},{"messageId":"57941","fix":"63797","desc":"57943"},{"messageId":"57938","fix":"63798","desc":"57940"},{"messageId":"57941","fix":"63799","desc":"57943"},{"messageId":"57938","fix":"63800","desc":"57940"},{"messageId":"57941","fix":"63801","desc":"57943"},{"messageId":"57938","fix":"63802","desc":"57940"},{"messageId":"57941","fix":"63803","desc":"57943"},{"messageId":"57938","fix":"63804","desc":"57940"},{"messageId":"57941","fix":"63805","desc":"57943"},{"messageId":"57938","fix":"63806","desc":"57940"},{"messageId":"57941","fix":"63807","desc":"57943"},{"messageId":"57938","fix":"63808","desc":"57940"},{"messageId":"57941","fix":"63809","desc":"57943"},{"messageId":"57938","fix":"63810","desc":"57940"},{"messageId":"57941","fix":"63811","desc":"57943"},{"messageId":"57938","fix":"63812","desc":"57940"},{"messageId":"57941","fix":"63813","desc":"57943"},{"messageId":"57938","fix":"63814","desc":"57940"},{"messageId":"57941","fix":"63815","desc":"57943"},{"messageId":"57938","fix":"63816","desc":"57940"},{"messageId":"57941","fix":"63817","desc":"57943"},{"messageId":"57938","fix":"63818","desc":"57940"},{"messageId":"57941","fix":"63819","desc":"57943"},{"messageId":"57938","fix":"63820","desc":"57940"},{"messageId":"57941","fix":"63821","desc":"57943"},{"messageId":"57938","fix":"63822","desc":"57940"},{"messageId":"57941","fix":"63823","desc":"57943"},{"messageId":"57938","fix":"63824","desc":"57940"},{"messageId":"57941","fix":"63825","desc":"57943"},{"messageId":"57938","fix":"63826","desc":"57940"},{"messageId":"57941","fix":"63827","desc":"57943"},{"messageId":"57938","fix":"63828","desc":"57940"},{"messageId":"57941","fix":"63829","desc":"57943"},{"messageId":"57938","fix":"63830","desc":"57940"},{"messageId":"57941","fix":"63831","desc":"57943"},{"messageId":"57938","fix":"63832","desc":"57940"},{"messageId":"57941","fix":"63833","desc":"57943"},{"messageId":"57938","fix":"63834","desc":"57940"},{"messageId":"57941","fix":"63835","desc":"57943"},{"messageId":"57938","fix":"63836","desc":"57940"},{"messageId":"57941","fix":"63837","desc":"57943"},{"messageId":"57938","fix":"63838","desc":"57940"},{"messageId":"57941","fix":"63839","desc":"57943"},{"messageId":"57938","fix":"63840","desc":"57940"},{"messageId":"57941","fix":"63841","desc":"57943"},{"messageId":"57938","fix":"63842","desc":"57940"},{"messageId":"57941","fix":"63843","desc":"57943"},{"messageId":"57938","fix":"63844","desc":"57940"},{"messageId":"57941","fix":"63845","desc":"57943"},{"messageId":"57938","fix":"63846","desc":"57940"},{"messageId":"57941","fix":"63847","desc":"57943"},{"messageId":"57938","fix":"63848","desc":"57940"},{"messageId":"57941","fix":"63849","desc":"57943"},{"messageId":"57938","fix":"63850","desc":"57940"},{"messageId":"57941","fix":"63851","desc":"57943"},{"messageId":"57938","fix":"63852","desc":"57940"},{"messageId":"57941","fix":"63853","desc":"57943"},{"messageId":"57938","fix":"63854","desc":"57940"},{"messageId":"57941","fix":"63855","desc":"57943"},{"messageId":"57938","fix":"63856","desc":"57940"},{"messageId":"57941","fix":"63857","desc":"57943"},{"messageId":"57938","fix":"63858","desc":"57940"},{"messageId":"57941","fix":"63859","desc":"57943"},{"messageId":"57938","fix":"63860","desc":"57940"},{"messageId":"57941","fix":"63861","desc":"57943"},{"messageId":"57938","fix":"63862","desc":"57940"},{"messageId":"57941","fix":"63863","desc":"57943"},{"messageId":"57938","fix":"63864","desc":"57940"},{"messageId":"57941","fix":"63865","desc":"57943"},{"messageId":"57938","fix":"63866","desc":"57940"},{"messageId":"57941","fix":"63867","desc":"57943"},{"messageId":"57938","fix":"63868","desc":"57940"},{"messageId":"57941","fix":"63869","desc":"57943"},{"messageId":"57938","fix":"63870","desc":"57940"},{"messageId":"57941","fix":"63871","desc":"57943"},{"messageId":"57938","fix":"63872","desc":"57940"},{"messageId":"57941","fix":"63873","desc":"57943"},{"messageId":"57938","fix":"63874","desc":"57940"},{"messageId":"57941","fix":"63875","desc":"57943"},{"messageId":"57938","fix":"63876","desc":"57940"},{"messageId":"57941","fix":"63877","desc":"57943"},{"messageId":"57938","fix":"63878","desc":"57940"},{"messageId":"57941","fix":"63879","desc":"57943"},{"messageId":"57938","fix":"63880","desc":"57940"},{"messageId":"57941","fix":"63881","desc":"57943"},{"messageId":"57938","fix":"63882","desc":"57940"},{"messageId":"57941","fix":"63883","desc":"57943"},{"messageId":"57938","fix":"63884","desc":"57940"},{"messageId":"57941","fix":"63885","desc":"57943"},{"messageId":"57938","fix":"63886","desc":"57940"},{"messageId":"57941","fix":"63887","desc":"57943"},{"messageId":"57938","fix":"63888","desc":"57940"},{"messageId":"57941","fix":"63889","desc":"57943"},{"messageId":"57938","fix":"63890","desc":"57940"},{"messageId":"57941","fix":"63891","desc":"57943"},{"messageId":"57938","fix":"63892","desc":"57940"},{"messageId":"57941","fix":"63893","desc":"57943"},{"messageId":"57938","fix":"63894","desc":"57940"},{"messageId":"57941","fix":"63895","desc":"57943"},{"messageId":"57938","fix":"63896","desc":"57940"},{"messageId":"57941","fix":"63897","desc":"57943"},{"messageId":"57938","fix":"63898","desc":"57940"},{"messageId":"57941","fix":"63899","desc":"57943"},{"messageId":"57938","fix":"63900","desc":"57940"},{"messageId":"57941","fix":"63901","desc":"57943"},{"messageId":"57938","fix":"63902","desc":"57940"},{"messageId":"57941","fix":"63903","desc":"57943"},{"messageId":"57938","fix":"63904","desc":"57940"},{"messageId":"57941","fix":"63905","desc":"57943"},{"messageId":"57938","fix":"63906","desc":"57940"},{"messageId":"57941","fix":"63907","desc":"57943"},{"messageId":"57938","fix":"63908","desc":"57940"},{"messageId":"57941","fix":"63909","desc":"57943"},{"messageId":"57938","fix":"63910","desc":"57940"},{"messageId":"57941","fix":"63911","desc":"57943"},{"messageId":"57938","fix":"63912","desc":"57940"},{"messageId":"57941","fix":"63913","desc":"57943"},{"messageId":"57938","fix":"63914","desc":"57940"},{"messageId":"57941","fix":"63915","desc":"57943"},{"messageId":"57938","fix":"63916","desc":"57940"},{"messageId":"57941","fix":"63917","desc":"57943"},{"messageId":"57938","fix":"63918","desc":"57940"},{"messageId":"57941","fix":"63919","desc":"57943"},{"messageId":"57938","fix":"63920","desc":"57940"},{"messageId":"57941","fix":"63921","desc":"57943"},{"messageId":"57938","fix":"63922","desc":"57940"},{"messageId":"57941","fix":"63923","desc":"57943"},{"messageId":"57938","fix":"63924","desc":"57940"},{"messageId":"57941","fix":"63925","desc":"57943"},{"messageId":"57938","fix":"63926","desc":"57940"},{"messageId":"57941","fix":"63927","desc":"57943"},{"messageId":"57938","fix":"63928","desc":"57940"},{"messageId":"57941","fix":"63929","desc":"57943"},{"messageId":"57938","fix":"63930","desc":"57940"},{"messageId":"57941","fix":"63931","desc":"57943"},{"messageId":"57938","fix":"63932","desc":"57940"},{"messageId":"57941","fix":"63933","desc":"57943"},{"messageId":"57938","fix":"63934","desc":"57940"},{"messageId":"57941","fix":"63935","desc":"57943"},{"messageId":"57938","fix":"63936","desc":"57940"},{"messageId":"57941","fix":"63937","desc":"57943"},{"messageId":"57938","fix":"63938","desc":"57940"},{"messageId":"57941","fix":"63939","desc":"57943"},{"messageId":"57938","fix":"63940","desc":"57940"},{"messageId":"57941","fix":"63941","desc":"57943"},{"messageId":"57938","fix":"63942","desc":"57940"},{"messageId":"57941","fix":"63943","desc":"57943"},{"messageId":"57938","fix":"63944","desc":"57940"},{"messageId":"57941","fix":"63945","desc":"57943"},{"messageId":"57938","fix":"63946","desc":"57940"},{"messageId":"57941","fix":"63947","desc":"57943"},{"messageId":"57938","fix":"63948","desc":"57940"},{"messageId":"57941","fix":"63949","desc":"57943"},{"messageId":"57938","fix":"63950","desc":"57940"},{"messageId":"57941","fix":"63951","desc":"57943"},{"messageId":"57938","fix":"63952","desc":"57940"},{"messageId":"57941","fix":"63953","desc":"57943"},{"messageId":"57938","fix":"63954","desc":"57940"},{"messageId":"57941","fix":"63955","desc":"57943"},{"messageId":"57938","fix":"63956","desc":"57940"},{"messageId":"57941","fix":"63957","desc":"57943"},{"messageId":"57938","fix":"63958","desc":"57940"},{"messageId":"57941","fix":"63959","desc":"57943"},{"messageId":"57938","fix":"63960","desc":"57940"},{"messageId":"57941","fix":"63961","desc":"57943"},{"messageId":"57938","fix":"63962","desc":"57940"},{"messageId":"57941","fix":"63963","desc":"57943"},{"messageId":"57938","fix":"63964","desc":"57940"},{"messageId":"57941","fix":"63965","desc":"57943"},{"messageId":"57938","fix":"63966","desc":"57940"},{"messageId":"57941","fix":"63967","desc":"57943"},{"messageId":"57938","fix":"63968","desc":"57940"},{"messageId":"57941","fix":"63969","desc":"57943"},{"messageId":"57938","fix":"63970","desc":"57940"},{"messageId":"57941","fix":"63971","desc":"57943"},{"messageId":"57938","fix":"63972","desc":"57940"},{"messageId":"57941","fix":"63973","desc":"57943"},{"messageId":"57938","fix":"63974","desc":"57940"},{"messageId":"57941","fix":"63975","desc":"57943"},{"messageId":"57938","fix":"63976","desc":"57940"},{"messageId":"57941","fix":"63977","desc":"57943"},{"messageId":"57938","fix":"63978","desc":"57940"},{"messageId":"57941","fix":"63979","desc":"57943"},{"messageId":"57938","fix":"63980","desc":"57940"},{"messageId":"57941","fix":"63981","desc":"57943"},{"messageId":"57938","fix":"63982","desc":"57940"},{"messageId":"57941","fix":"63983","desc":"57943"},{"messageId":"57938","fix":"63984","desc":"57940"},{"messageId":"57941","fix":"63985","desc":"57943"},{"messageId":"57938","fix":"63986","desc":"57940"},{"messageId":"57941","fix":"63987","desc":"57943"},{"messageId":"57938","fix":"63988","desc":"57940"},{"messageId":"57941","fix":"63989","desc":"57943"},{"messageId":"57938","fix":"63990","desc":"57940"},{"messageId":"57941","fix":"63991","desc":"57943"},{"messageId":"57938","fix":"63992","desc":"57940"},{"messageId":"57941","fix":"63993","desc":"57943"},{"messageId":"57938","fix":"63994","desc":"57940"},{"messageId":"57941","fix":"63995","desc":"57943"},{"messageId":"57938","fix":"63996","desc":"57940"},{"messageId":"57941","fix":"63997","desc":"57943"},{"messageId":"57938","fix":"63998","desc":"57940"},{"messageId":"57941","fix":"63999","desc":"57943"},{"messageId":"57938","fix":"64000","desc":"57940"},{"messageId":"57941","fix":"64001","desc":"57943"},{"messageId":"57938","fix":"64002","desc":"57940"},{"messageId":"57941","fix":"64003","desc":"57943"},{"messageId":"57938","fix":"64004","desc":"57940"},{"messageId":"57941","fix":"64005","desc":"57943"},{"messageId":"57938","fix":"64006","desc":"57940"},{"messageId":"57941","fix":"64007","desc":"57943"},{"messageId":"57938","fix":"64008","desc":"57940"},{"messageId":"57941","fix":"64009","desc":"57943"},{"messageId":"57938","fix":"64010","desc":"57940"},{"messageId":"57941","fix":"64011","desc":"57943"},{"messageId":"57938","fix":"64012","desc":"57940"},{"messageId":"57941","fix":"64013","desc":"57943"},{"messageId":"57938","fix":"64014","desc":"57940"},{"messageId":"57941","fix":"64015","desc":"57943"},{"messageId":"57938","fix":"64016","desc":"57940"},{"messageId":"57941","fix":"64017","desc":"57943"},{"messageId":"57938","fix":"64018","desc":"57940"},{"messageId":"57941","fix":"64019","desc":"57943"},{"messageId":"57938","fix":"64020","desc":"57940"},{"messageId":"57941","fix":"64021","desc":"57943"},{"messageId":"57938","fix":"64022","desc":"57940"},{"messageId":"57941","fix":"64023","desc":"57943"},{"messageId":"57938","fix":"64024","desc":"57940"},{"messageId":"57941","fix":"64025","desc":"57943"},{"messageId":"57938","fix":"64026","desc":"57940"},{"messageId":"57941","fix":"64027","desc":"57943"},{"messageId":"57938","fix":"64028","desc":"57940"},{"messageId":"57941","fix":"64029","desc":"57943"},{"messageId":"57938","fix":"64030","desc":"57940"},{"messageId":"57941","fix":"64031","desc":"57943"},{"messageId":"57938","fix":"64032","desc":"57940"},{"messageId":"57941","fix":"64033","desc":"57943"},{"messageId":"57938","fix":"64034","desc":"57940"},{"messageId":"57941","fix":"64035","desc":"57943"},{"messageId":"57938","fix":"64036","desc":"57940"},{"messageId":"57941","fix":"64037","desc":"57943"},{"messageId":"57938","fix":"64038","desc":"57940"},{"messageId":"57941","fix":"64039","desc":"57943"},{"messageId":"57938","fix":"64040","desc":"57940"},{"messageId":"57941","fix":"64041","desc":"57943"},{"messageId":"57938","fix":"64042","desc":"57940"},{"messageId":"57941","fix":"64043","desc":"57943"},{"messageId":"57938","fix":"64044","desc":"57940"},{"messageId":"57941","fix":"64045","desc":"57943"},{"messageId":"57938","fix":"64046","desc":"57940"},{"messageId":"57941","fix":"64047","desc":"57943"},{"messageId":"57938","fix":"64048","desc":"57940"},{"messageId":"57941","fix":"64049","desc":"57943"},{"messageId":"57938","fix":"64050","desc":"57940"},{"messageId":"57941","fix":"64051","desc":"57943"},{"messageId":"57938","fix":"64052","desc":"57940"},{"messageId":"57941","fix":"64053","desc":"57943"},{"messageId":"57938","fix":"64054","desc":"57940"},{"messageId":"57941","fix":"64055","desc":"57943"},{"messageId":"57938","fix":"64056","desc":"57940"},{"messageId":"57941","fix":"64057","desc":"57943"},{"messageId":"57938","fix":"64058","desc":"57940"},{"messageId":"57941","fix":"64059","desc":"57943"},{"messageId":"57938","fix":"64060","desc":"57940"},{"messageId":"57941","fix":"64061","desc":"57943"},{"messageId":"57938","fix":"64062","desc":"57940"},{"messageId":"57941","fix":"64063","desc":"57943"},{"messageId":"57938","fix":"64064","desc":"57940"},{"messageId":"57941","fix":"64065","desc":"57943"},{"messageId":"57938","fix":"64066","desc":"57940"},{"messageId":"57941","fix":"64067","desc":"57943"},{"messageId":"57938","fix":"64068","desc":"57940"},{"messageId":"57941","fix":"64069","desc":"57943"},{"messageId":"57938","fix":"64070","desc":"57940"},{"messageId":"57941","fix":"64071","desc":"57943"},{"messageId":"57938","fix":"64072","desc":"57940"},{"messageId":"57941","fix":"64073","desc":"57943"},{"messageId":"57938","fix":"64074","desc":"57940"},{"messageId":"57941","fix":"64075","desc":"57943"},{"messageId":"57938","fix":"64076","desc":"57940"},{"messageId":"57941","fix":"64077","desc":"57943"},{"messageId":"57938","fix":"64078","desc":"57940"},{"messageId":"57941","fix":"64079","desc":"57943"},{"messageId":"57938","fix":"64080","desc":"57940"},{"messageId":"57941","fix":"64081","desc":"57943"},{"messageId":"57938","fix":"64082","desc":"57940"},{"messageId":"57941","fix":"64083","desc":"57943"},{"messageId":"57938","fix":"64084","desc":"57940"},{"messageId":"57941","fix":"64085","desc":"57943"},{"messageId":"57938","fix":"64086","desc":"57940"},{"messageId":"57941","fix":"64087","desc":"57943"},{"messageId":"57938","fix":"64088","desc":"57940"},{"messageId":"57941","fix":"64089","desc":"57943"},{"messageId":"57938","fix":"64090","desc":"57940"},{"messageId":"57941","fix":"64091","desc":"57943"},{"messageId":"57938","fix":"64092","desc":"57940"},{"messageId":"57941","fix":"64093","desc":"57943"},{"messageId":"57938","fix":"64094","desc":"57940"},{"messageId":"57941","fix":"64095","desc":"57943"},{"messageId":"57938","fix":"64096","desc":"57940"},{"messageId":"57941","fix":"64097","desc":"57943"},{"messageId":"57938","fix":"64098","desc":"57940"},{"messageId":"57941","fix":"64099","desc":"57943"},{"messageId":"57938","fix":"64100","desc":"57940"},{"messageId":"57941","fix":"64101","desc":"57943"},{"messageId":"57938","fix":"64102","desc":"57940"},{"messageId":"57941","fix":"64103","desc":"57943"},{"messageId":"57938","fix":"64104","desc":"57940"},{"messageId":"57941","fix":"64105","desc":"57943"},{"messageId":"57938","fix":"64106","desc":"57940"},{"messageId":"57941","fix":"64107","desc":"57943"},{"messageId":"57938","fix":"64108","desc":"57940"},{"messageId":"57941","fix":"64109","desc":"57943"},{"messageId":"57938","fix":"64110","desc":"57940"},{"messageId":"57941","fix":"64111","desc":"57943"},{"messageId":"57938","fix":"64112","desc":"57940"},{"messageId":"57941","fix":"64113","desc":"57943"},{"messageId":"57938","fix":"64114","desc":"57940"},{"messageId":"57941","fix":"64115","desc":"57943"},{"messageId":"57938","fix":"64116","desc":"57940"},{"messageId":"57941","fix":"64117","desc":"57943"},{"messageId":"57938","fix":"64118","desc":"57940"},{"messageId":"57941","fix":"64119","desc":"57943"},{"messageId":"57938","fix":"64120","desc":"57940"},{"messageId":"57941","fix":"64121","desc":"57943"},{"messageId":"57938","fix":"64122","desc":"57940"},{"messageId":"57941","fix":"64123","desc":"57943"},{"messageId":"57938","fix":"64124","desc":"57940"},{"messageId":"57941","fix":"64125","desc":"57943"},{"messageId":"57938","fix":"64126","desc":"57940"},{"messageId":"57941","fix":"64127","desc":"57943"},{"messageId":"57938","fix":"64128","desc":"57940"},{"messageId":"57941","fix":"64129","desc":"57943"},{"messageId":"57938","fix":"64130","desc":"57940"},{"messageId":"57941","fix":"64131","desc":"57943"},{"messageId":"57938","fix":"64132","desc":"57940"},{"messageId":"57941","fix":"64133","desc":"57943"},{"messageId":"57938","fix":"64134","desc":"57940"},{"messageId":"57941","fix":"64135","desc":"57943"},{"messageId":"57938","fix":"64136","desc":"57940"},{"messageId":"57941","fix":"64137","desc":"57943"},{"messageId":"57938","fix":"64138","desc":"57940"},{"messageId":"57941","fix":"64139","desc":"57943"},{"messageId":"57938","fix":"64140","desc":"57940"},{"messageId":"57941","fix":"64141","desc":"57943"},{"messageId":"57938","fix":"64142","desc":"57940"},{"messageId":"57941","fix":"64143","desc":"57943"},{"messageId":"57938","fix":"64144","desc":"57940"},{"messageId":"57941","fix":"64145","desc":"57943"},{"messageId":"57938","fix":"64146","desc":"57940"},{"messageId":"57941","fix":"64147","desc":"57943"},{"messageId":"57938","fix":"64148","desc":"57940"},{"messageId":"57941","fix":"64149","desc":"57943"},{"messageId":"57938","fix":"64150","desc":"57940"},{"messageId":"57941","fix":"64151","desc":"57943"},{"messageId":"57938","fix":"64152","desc":"57940"},{"messageId":"57941","fix":"64153","desc":"57943"},{"messageId":"57938","fix":"64154","desc":"57940"},{"messageId":"57941","fix":"64155","desc":"57943"},{"messageId":"57938","fix":"64156","desc":"57940"},{"messageId":"57941","fix":"64157","desc":"57943"},{"messageId":"57938","fix":"64158","desc":"57940"},{"messageId":"57941","fix":"64159","desc":"57943"},{"messageId":"57938","fix":"64160","desc":"57940"},{"messageId":"57941","fix":"64161","desc":"57943"},{"messageId":"57938","fix":"64162","desc":"57940"},{"messageId":"57941","fix":"64163","desc":"57943"},{"messageId":"57938","fix":"64164","desc":"57940"},{"messageId":"57941","fix":"64165","desc":"57943"},{"messageId":"57938","fix":"64166","desc":"57940"},{"messageId":"57941","fix":"64167","desc":"57943"},{"messageId":"57938","fix":"64168","desc":"57940"},{"messageId":"57941","fix":"64169","desc":"57943"},{"messageId":"57938","fix":"64170","desc":"57940"},{"messageId":"57941","fix":"64171","desc":"57943"},{"messageId":"57938","fix":"64172","desc":"57940"},{"messageId":"57941","fix":"64173","desc":"57943"},{"messageId":"57938","fix":"64174","desc":"57940"},{"messageId":"57941","fix":"64175","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"64176","desc":"57940"},{"messageId":"57941","fix":"64177","desc":"57943"},{"kind":"58246","justification":"58247"},{"messageId":"57938","fix":"64178","desc":"57940"},{"messageId":"57941","fix":"64179","desc":"57943"},{"messageId":"57938","fix":"64180","desc":"57940"},{"messageId":"57941","fix":"64181","desc":"57943"},{"messageId":"57938","fix":"64182","desc":"57940"},{"messageId":"57941","fix":"64183","desc":"57943"},{"messageId":"57938","fix":"64184","desc":"57940"},{"messageId":"57941","fix":"64185","desc":"57943"},{"messageId":"57938","fix":"64186","desc":"57940"},{"messageId":"57941","fix":"64187","desc":"57943"},{"messageId":"57938","fix":"64188","desc":"57940"},{"messageId":"57941","fix":"64189","desc":"57943"},{"messageId":"57938","fix":"64190","desc":"57940"},{"messageId":"57941","fix":"64191","desc":"57943"},{"messageId":"57938","fix":"64192","desc":"57940"},{"messageId":"57941","fix":"64193","desc":"57943"},{"messageId":"57938","fix":"64194","desc":"57940"},{"messageId":"57941","fix":"64195","desc":"57943"},{"messageId":"57938","fix":"64196","desc":"57940"},{"messageId":"57941","fix":"64197","desc":"57943"},{"messageId":"57938","fix":"64198","desc":"57940"},{"messageId":"57941","fix":"64199","desc":"57943"},{"messageId":"57938","fix":"64200","desc":"57940"},{"messageId":"57941","fix":"64201","desc":"57943"},{"messageId":"57938","fix":"64202","desc":"57940"},{"messageId":"57941","fix":"64203","desc":"57943"},{"messageId":"57938","fix":"64204","desc":"57940"},{"messageId":"57941","fix":"64205","desc":"57943"},{"messageId":"57938","fix":"64206","desc":"57940"},{"messageId":"57941","fix":"64207","desc":"57943"},{"messageId":"57938","fix":"64208","desc":"57940"},{"messageId":"57941","fix":"64209","desc":"57943"},{"messageId":"57938","fix":"64210","desc":"57940"},{"messageId":"57941","fix":"64211","desc":"57943"},{"messageId":"57938","fix":"64212","desc":"57940"},{"messageId":"57941","fix":"64213","desc":"57943"},{"messageId":"57938","fix":"64214","desc":"57940"},{"messageId":"57941","fix":"64215","desc":"57943"},{"messageId":"57938","fix":"64216","desc":"57940"},{"messageId":"57941","fix":"64217","desc":"57943"},{"messageId":"57938","fix":"64218","desc":"57940"},{"messageId":"57941","fix":"64219","desc":"57943"},{"messageId":"57938","fix":"64220","desc":"57940"},{"messageId":"57941","fix":"64221","desc":"57943"},{"messageId":"57938","fix":"64222","desc":"57940"},{"messageId":"57941","fix":"64223","desc":"57943"},{"messageId":"57938","fix":"64224","desc":"57940"},{"messageId":"57941","fix":"64225","desc":"57943"},{"messageId":"57938","fix":"64226","desc":"57940"},{"messageId":"57941","fix":"64227","desc":"57943"},{"messageId":"57938","fix":"64228","desc":"57940"},{"messageId":"57941","fix":"64229","desc":"57943"},{"messageId":"57938","fix":"64230","desc":"57940"},{"messageId":"57941","fix":"64231","desc":"57943"},{"messageId":"57938","fix":"64232","desc":"57940"},{"messageId":"57941","fix":"64233","desc":"57943"},{"messageId":"57938","fix":"64234","desc":"57940"},{"messageId":"57941","fix":"64235","desc":"57943"},{"messageId":"57938","fix":"64236","desc":"57940"},{"messageId":"57941","fix":"64237","desc":"57943"},{"messageId":"57938","fix":"64238","desc":"57940"},{"messageId":"57941","fix":"64239","desc":"57943"},{"messageId":"57938","fix":"64240","desc":"57940"},{"messageId":"57941","fix":"64241","desc":"57943"},{"messageId":"57938","fix":"64242","desc":"57940"},{"messageId":"57941","fix":"64243","desc":"57943"},{"messageId":"57938","fix":"64244","desc":"57940"},{"messageId":"57941","fix":"64245","desc":"57943"},{"messageId":"57938","fix":"64246","desc":"57940"},{"messageId":"57941","fix":"64247","desc":"57943"},{"messageId":"57938","fix":"64248","desc":"57940"},{"messageId":"57941","fix":"64249","desc":"57943"},{"messageId":"57938","fix":"64250","desc":"57940"},{"messageId":"57941","fix":"64251","desc":"57943"},{"messageId":"57938","fix":"64252","desc":"57940"},{"messageId":"57941","fix":"64253","desc":"57943"},{"messageId":"57938","fix":"64254","desc":"57940"},{"messageId":"57941","fix":"64255","desc":"57943"},{"messageId":"57938","fix":"64256","desc":"57940"},{"messageId":"57941","fix":"64257","desc":"57943"},{"messageId":"57938","fix":"64258","desc":"57940"},{"messageId":"57941","fix":"64259","desc":"57943"},{"messageId":"57938","fix":"64260","desc":"57940"},{"messageId":"57941","fix":"64261","desc":"57943"},{"messageId":"57938","fix":"64262","desc":"57940"},{"messageId":"57941","fix":"64263","desc":"57943"},{"messageId":"57938","fix":"64264","desc":"57940"},{"messageId":"57941","fix":"64265","desc":"57943"},{"messageId":"57938","fix":"64266","desc":"57940"},{"messageId":"57941","fix":"64267","desc":"57943"},{"messageId":"57938","fix":"64268","desc":"57940"},{"messageId":"57941","fix":"64269","desc":"57943"},{"messageId":"57938","fix":"64270","desc":"57940"},{"messageId":"57941","fix":"64271","desc":"57943"},{"messageId":"57938","fix":"64272","desc":"57940"},{"messageId":"57941","fix":"64273","desc":"57943"},{"messageId":"57938","fix":"64274","desc":"57940"},{"messageId":"57941","fix":"64275","desc":"57943"},{"messageId":"57938","fix":"64276","desc":"57940"},{"messageId":"57941","fix":"64277","desc":"57943"},{"messageId":"57938","fix":"64278","desc":"57940"},{"messageId":"57941","fix":"64279","desc":"57943"},{"messageId":"57938","fix":"64280","desc":"57940"},{"messageId":"57941","fix":"64281","desc":"57943"},{"messageId":"57938","fix":"64282","desc":"57940"},{"messageId":"57941","fix":"64283","desc":"57943"},{"messageId":"57938","fix":"64284","desc":"57940"},{"messageId":"57941","fix":"64285","desc":"57943"},{"messageId":"57938","fix":"64286","desc":"57940"},{"messageId":"57941","fix":"64287","desc":"57943"},{"messageId":"57938","fix":"64288","desc":"57940"},{"messageId":"57941","fix":"64289","desc":"57943"},{"messageId":"57938","fix":"64290","desc":"57940"},{"messageId":"57941","fix":"64291","desc":"57943"},{"messageId":"57938","fix":"64292","desc":"57940"},{"messageId":"57941","fix":"64293","desc":"57943"},{"messageId":"57938","fix":"64294","desc":"57940"},{"messageId":"57941","fix":"64295","desc":"57943"},{"messageId":"57938","fix":"64296","desc":"57940"},{"messageId":"57941","fix":"64297","desc":"57943"},{"messageId":"57938","fix":"64298","desc":"57940"},{"messageId":"57941","fix":"64299","desc":"57943"},{"messageId":"57938","fix":"64300","desc":"57940"},{"messageId":"57941","fix":"64301","desc":"57943"},{"messageId":"57938","fix":"64302","desc":"57940"},{"messageId":"57941","fix":"64303","desc":"57943"},{"messageId":"57938","fix":"64304","desc":"57940"},{"messageId":"57941","fix":"64305","desc":"57943"},{"messageId":"57938","fix":"64306","desc":"57940"},{"messageId":"57941","fix":"64307","desc":"57943"},{"messageId":"57938","fix":"64308","desc":"57940"},{"messageId":"57941","fix":"64309","desc":"57943"},{"messageId":"57938","fix":"64310","desc":"57940"},{"messageId":"57941","fix":"64311","desc":"57943"},{"messageId":"57938","fix":"64312","desc":"57940"},{"messageId":"57941","fix":"64313","desc":"57943"},{"messageId":"57938","fix":"64314","desc":"57940"},{"messageId":"57941","fix":"64315","desc":"57943"},{"messageId":"57938","fix":"64316","desc":"57940"},{"messageId":"57941","fix":"64317","desc":"57943"},{"messageId":"57938","fix":"64318","desc":"57940"},{"messageId":"57941","fix":"64319","desc":"57943"},{"messageId":"57938","fix":"64320","desc":"57940"},{"messageId":"57941","fix":"64321","desc":"57943"},{"messageId":"57938","fix":"64322","desc":"57940"},{"messageId":"57941","fix":"64323","desc":"57943"},{"messageId":"57938","fix":"64324","desc":"57940"},{"messageId":"57941","fix":"64325","desc":"57943"},{"messageId":"57938","fix":"64326","desc":"57940"},{"messageId":"57941","fix":"64327","desc":"57943"},{"messageId":"57938","fix":"64328","desc":"57940"},{"messageId":"57941","fix":"64329","desc":"57943"},{"messageId":"57938","fix":"64330","desc":"57940"},{"messageId":"57941","fix":"64331","desc":"57943"},{"messageId":"57938","fix":"64332","desc":"57940"},{"messageId":"57941","fix":"64333","desc":"57943"},{"messageId":"57938","fix":"64334","desc":"57940"},{"messageId":"57941","fix":"64335","desc":"57943"},{"messageId":"57938","fix":"64336","desc":"57940"},{"messageId":"57941","fix":"64337","desc":"57943"},{"messageId":"57938","fix":"64338","desc":"57940"},{"messageId":"57941","fix":"64339","desc":"57943"},{"messageId":"57938","fix":"64340","desc":"57940"},{"messageId":"57941","fix":"64341","desc":"57943"},{"messageId":"57938","fix":"64342","desc":"57940"},{"messageId":"57941","fix":"64343","desc":"57943"},{"messageId":"57938","fix":"64344","desc":"57940"},{"messageId":"57941","fix":"64345","desc":"57943"},{"messageId":"57938","fix":"64346","desc":"57940"},{"messageId":"57941","fix":"64347","desc":"57943"},{"messageId":"57938","fix":"64348","desc":"57940"},{"messageId":"57941","fix":"64349","desc":"57943"},{"messageId":"57938","fix":"64350","desc":"57940"},{"messageId":"57941","fix":"64351","desc":"57943"},{"messageId":"57938","fix":"64352","desc":"57940"},{"messageId":"57941","fix":"64353","desc":"57943"},{"messageId":"57938","fix":"64354","desc":"57940"},{"messageId":"57941","fix":"64355","desc":"57943"},{"messageId":"57938","fix":"64356","desc":"57940"},{"messageId":"57941","fix":"64357","desc":"57943"},{"messageId":"57938","fix":"64358","desc":"57940"},{"messageId":"57941","fix":"64359","desc":"57943"},{"messageId":"57938","fix":"64360","desc":"57940"},{"messageId":"57941","fix":"64361","desc":"57943"},{"messageId":"57938","fix":"64362","desc":"57940"},{"messageId":"57941","fix":"64363","desc":"57943"},{"messageId":"57938","fix":"64364","desc":"57940"},{"messageId":"57941","fix":"64365","desc":"57943"},{"messageId":"57938","fix":"64366","desc":"57940"},{"messageId":"57941","fix":"64367","desc":"57943"},{"messageId":"57938","fix":"64368","desc":"57940"},{"messageId":"57941","fix":"64369","desc":"57943"},{"messageId":"57938","fix":"64370","desc":"57940"},{"messageId":"57941","fix":"64371","desc":"57943"},{"messageId":"57938","fix":"64372","desc":"57940"},{"messageId":"57941","fix":"64373","desc":"57943"},{"messageId":"57938","fix":"64374","desc":"57940"},{"messageId":"57941","fix":"64375","desc":"57943"},{"messageId":"57938","fix":"64376","desc":"57940"},{"messageId":"57941","fix":"64377","desc":"57943"},{"messageId":"57938","fix":"64378","desc":"57940"},{"messageId":"57941","fix":"64379","desc":"57943"},{"messageId":"57938","fix":"64380","desc":"57940"},{"messageId":"57941","fix":"64381","desc":"57943"},{"messageId":"57938","fix":"64382","desc":"57940"},{"messageId":"57941","fix":"64383","desc":"57943"},{"messageId":"57938","fix":"64384","desc":"57940"},{"messageId":"57941","fix":"64385","desc":"57943"},{"messageId":"57938","fix":"64386","desc":"57940"},{"messageId":"57941","fix":"64387","desc":"57943"},{"messageId":"57938","fix":"64388","desc":"57940"},{"messageId":"57941","fix":"64389","desc":"57943"},{"messageId":"57938","fix":"64390","desc":"57940"},{"messageId":"57941","fix":"64391","desc":"57943"},{"messageId":"57938","fix":"64392","desc":"57940"},{"messageId":"57941","fix":"64393","desc":"57943"},{"messageId":"57938","fix":"64394","desc":"57940"},{"messageId":"57941","fix":"64395","desc":"57943"},{"messageId":"57938","fix":"64396","desc":"57940"},{"messageId":"57941","fix":"64397","desc":"57943"},{"messageId":"57938","fix":"64398","desc":"57940"},{"messageId":"57941","fix":"64399","desc":"57943"},{"messageId":"57938","fix":"64400","desc":"57940"},{"messageId":"57941","fix":"64401","desc":"57943"},{"messageId":"57938","fix":"64402","desc":"57940"},{"messageId":"57941","fix":"64403","desc":"57943"},{"messageId":"57938","fix":"64404","desc":"57940"},{"messageId":"57941","fix":"64405","desc":"57943"},{"messageId":"57938","fix":"64406","desc":"57940"},{"messageId":"57941","fix":"64407","desc":"57943"},{"messageId":"57938","fix":"64408","desc":"57940"},{"messageId":"57941","fix":"64409","desc":"57943"},{"messageId":"57938","fix":"64410","desc":"57940"},{"messageId":"57941","fix":"64411","desc":"57943"},{"messageId":"57938","fix":"64412","desc":"57940"},{"messageId":"57941","fix":"64413","desc":"57943"},{"messageId":"57938","fix":"64414","desc":"57940"},{"messageId":"57941","fix":"64415","desc":"57943"},{"messageId":"57938","fix":"64416","desc":"57940"},{"messageId":"57941","fix":"64417","desc":"57943"},{"messageId":"57938","fix":"64418","desc":"57940"},{"messageId":"57941","fix":"64419","desc":"57943"},{"messageId":"57938","fix":"64420","desc":"57940"},{"messageId":"57941","fix":"64421","desc":"57943"},{"messageId":"57938","fix":"64422","desc":"57940"},{"messageId":"57941","fix":"64423","desc":"57943"},{"messageId":"57938","fix":"64424","desc":"57940"},{"messageId":"57941","fix":"64425","desc":"57943"},{"messageId":"57938","fix":"64426","desc":"57940"},{"messageId":"57941","fix":"64427","desc":"57943"},{"messageId":"57938","fix":"64428","desc":"57940"},{"messageId":"57941","fix":"64429","desc":"57943"},{"messageId":"57938","fix":"64430","desc":"57940"},{"messageId":"57941","fix":"64431","desc":"57943"},{"messageId":"57938","fix":"64432","desc":"57940"},{"messageId":"57941","fix":"64433","desc":"57943"},{"messageId":"57938","fix":"64434","desc":"57940"},{"messageId":"57941","fix":"64435","desc":"57943"},{"messageId":"57938","fix":"64436","desc":"57940"},{"messageId":"57941","fix":"64437","desc":"57943"},{"messageId":"57938","fix":"64438","desc":"57940"},{"messageId":"57941","fix":"64439","desc":"57943"},{"messageId":"57938","fix":"64440","desc":"57940"},{"messageId":"57941","fix":"64441","desc":"57943"},{"messageId":"57938","fix":"64442","desc":"57940"},{"messageId":"57941","fix":"64443","desc":"57943"},{"messageId":"57938","fix":"64444","desc":"57940"},{"messageId":"57941","fix":"64445","desc":"57943"},{"messageId":"57938","fix":"64446","desc":"57940"},{"messageId":"57941","fix":"64447","desc":"57943"},{"messageId":"57938","fix":"64448","desc":"57940"},{"messageId":"57941","fix":"64449","desc":"57943"},{"messageId":"57938","fix":"64450","desc":"57940"},{"messageId":"57941","fix":"64451","desc":"57943"},{"messageId":"57938","fix":"64452","desc":"57940"},{"messageId":"57941","fix":"64453","desc":"57943"},{"messageId":"57938","fix":"64454","desc":"57940"},{"messageId":"57941","fix":"64455","desc":"57943"},{"messageId":"57938","fix":"64456","desc":"57940"},{"messageId":"57941","fix":"64457","desc":"57943"},{"messageId":"57938","fix":"64458","desc":"57940"},{"messageId":"57941","fix":"64459","desc":"57943"},{"messageId":"57938","fix":"64460","desc":"57940"},{"messageId":"57941","fix":"64461","desc":"57943"},{"messageId":"57938","fix":"64462","desc":"57940"},{"messageId":"57941","fix":"64463","desc":"57943"},{"messageId":"57938","fix":"64464","desc":"57940"},{"messageId":"57941","fix":"64465","desc":"57943"},{"messageId":"57938","fix":"64466","desc":"57940"},{"messageId":"57941","fix":"64467","desc":"57943"},{"messageId":"57938","fix":"64468","desc":"57940"},{"messageId":"57941","fix":"64469","desc":"57943"},{"messageId":"57938","fix":"64470","desc":"57940"},{"messageId":"57941","fix":"64471","desc":"57943"},{"messageId":"57938","fix":"64472","desc":"57940"},{"messageId":"57941","fix":"64473","desc":"57943"},{"messageId":"57938","fix":"64474","desc":"57940"},{"messageId":"57941","fix":"64475","desc":"57943"},{"messageId":"57938","fix":"64476","desc":"57940"},{"messageId":"57941","fix":"64477","desc":"57943"},{"messageId":"57938","fix":"64478","desc":"57940"},{"messageId":"57941","fix":"64479","desc":"57943"},{"messageId":"57938","fix":"64480","desc":"57940"},{"messageId":"57941","fix":"64481","desc":"57943"},{"messageId":"57938","fix":"64482","desc":"57940"},{"messageId":"57941","fix":"64483","desc":"57943"},{"messageId":"57938","fix":"64484","desc":"57940"},{"messageId":"57941","fix":"64485","desc":"57943"},{"messageId":"57938","fix":"64486","desc":"57940"},{"messageId":"57941","fix":"64487","desc":"57943"},{"messageId":"57938","fix":"64488","desc":"57940"},{"messageId":"57941","fix":"64489","desc":"57943"},{"messageId":"57938","fix":"64490","desc":"57940"},{"messageId":"57941","fix":"64491","desc":"57943"},{"messageId":"57938","fix":"64492","desc":"57940"},{"messageId":"57941","fix":"64493","desc":"57943"},{"messageId":"57938","fix":"64494","desc":"57940"},{"messageId":"57941","fix":"64495","desc":"57943"},{"messageId":"57938","fix":"64496","desc":"57940"},{"messageId":"57941","fix":"64497","desc":"57943"},{"messageId":"57938","fix":"64498","desc":"57940"},{"messageId":"57941","fix":"64499","desc":"57943"},{"messageId":"57938","fix":"64500","desc":"57940"},{"messageId":"57941","fix":"64501","desc":"57943"},{"messageId":"57938","fix":"64502","desc":"57940"},{"messageId":"57941","fix":"64503","desc":"57943"},{"messageId":"57938","fix":"64504","desc":"57940"},{"messageId":"57941","fix":"64505","desc":"57943"},{"messageId":"57938","fix":"64506","desc":"57940"},{"messageId":"57941","fix":"64507","desc":"57943"},{"messageId":"57938","fix":"64508","desc":"57940"},{"messageId":"57941","fix":"64509","desc":"57943"},{"messageId":"57938","fix":"64510","desc":"57940"},{"messageId":"57941","fix":"64511","desc":"57943"},{"messageId":"57938","fix":"64512","desc":"57940"},{"messageId":"57941","fix":"64513","desc":"57943"},{"messageId":"57938","fix":"64514","desc":"57940"},{"messageId":"57941","fix":"64515","desc":"57943"},{"messageId":"57938","fix":"64516","desc":"57940"},{"messageId":"57941","fix":"64517","desc":"57943"},{"messageId":"57938","fix":"64518","desc":"57940"},{"messageId":"57941","fix":"64519","desc":"57943"},{"messageId":"57938","fix":"64520","desc":"57940"},{"messageId":"57941","fix":"64521","desc":"57943"},{"messageId":"57938","fix":"64522","desc":"57940"},{"messageId":"57941","fix":"64523","desc":"57943"},{"messageId":"57938","fix":"64524","desc":"57940"},{"messageId":"57941","fix":"64525","desc":"57943"},{"messageId":"57938","fix":"64526","desc":"57940"},{"messageId":"57941","fix":"64527","desc":"57943"},{"messageId":"57938","fix":"64528","desc":"57940"},{"messageId":"57941","fix":"64529","desc":"57943"},{"messageId":"57938","fix":"64530","desc":"57940"},{"messageId":"57941","fix":"64531","desc":"57943"},{"messageId":"57938","fix":"64532","desc":"57940"},{"messageId":"57941","fix":"64533","desc":"57943"},{"messageId":"57938","fix":"64534","desc":"57940"},{"messageId":"57941","fix":"64535","desc":"57943"},{"messageId":"57938","fix":"64536","desc":"57940"},{"messageId":"57941","fix":"64537","desc":"57943"},{"messageId":"57938","fix":"64538","desc":"57940"},{"messageId":"57941","fix":"64539","desc":"57943"},{"messageId":"57938","fix":"64540","desc":"57940"},{"messageId":"57941","fix":"64541","desc":"57943"},{"messageId":"57938","fix":"64542","desc":"57940"},{"messageId":"57941","fix":"64543","desc":"57943"},{"messageId":"57938","fix":"64544","desc":"57940"},{"messageId":"57941","fix":"64545","desc":"57943"},{"messageId":"57938","fix":"64546","desc":"57940"},{"messageId":"57941","fix":"64547","desc":"57943"},{"messageId":"57938","fix":"64548","desc":"57940"},{"messageId":"57941","fix":"64549","desc":"57943"},{"messageId":"57938","fix":"64550","desc":"57940"},{"messageId":"57941","fix":"64551","desc":"57943"},{"messageId":"57938","fix":"64552","desc":"57940"},{"messageId":"57941","fix":"64553","desc":"57943"},{"messageId":"57938","fix":"64554","desc":"57940"},{"messageId":"57941","fix":"64555","desc":"57943"},{"messageId":"57938","fix":"64556","desc":"57940"},{"messageId":"57941","fix":"64557","desc":"57943"},{"messageId":"57938","fix":"64558","desc":"57940"},{"messageId":"57941","fix":"64559","desc":"57943"},{"messageId":"57938","fix":"64560","desc":"57940"},{"messageId":"57941","fix":"64561","desc":"57943"},{"messageId":"57938","fix":"64562","desc":"57940"},{"messageId":"57941","fix":"64563","desc":"57943"},{"messageId":"57938","fix":"64564","desc":"57940"},{"messageId":"57941","fix":"64565","desc":"57943"},{"messageId":"57938","fix":"64566","desc":"57940"},{"messageId":"57941","fix":"64567","desc":"57943"},{"messageId":"57938","fix":"64568","desc":"57940"},{"messageId":"57941","fix":"64569","desc":"57943"},{"messageId":"57938","fix":"64570","desc":"57940"},{"messageId":"57941","fix":"64571","desc":"57943"},{"messageId":"57938","fix":"64572","desc":"57940"},{"messageId":"57941","fix":"64573","desc":"57943"},{"messageId":"57938","fix":"64574","desc":"57940"},{"messageId":"57941","fix":"64575","desc":"57943"},{"messageId":"57938","fix":"64576","desc":"57940"},{"messageId":"57941","fix":"64577","desc":"57943"},{"messageId":"57938","fix":"64578","desc":"57940"},{"messageId":"57941","fix":"64579","desc":"57943"},{"messageId":"57938","fix":"64580","desc":"57940"},{"messageId":"57941","fix":"64581","desc":"57943"},{"messageId":"57938","fix":"64582","desc":"57940"},{"messageId":"57941","fix":"64583","desc":"57943"},{"messageId":"57938","fix":"64584","desc":"57940"},{"messageId":"57941","fix":"64585","desc":"57943"},{"messageId":"57938","fix":"64586","desc":"57940"},{"messageId":"57941","fix":"64587","desc":"57943"},{"messageId":"57938","fix":"64588","desc":"57940"},{"messageId":"57941","fix":"64589","desc":"57943"},{"messageId":"57938","fix":"64590","desc":"57940"},{"messageId":"57941","fix":"64591","desc":"57943"},{"messageId":"57938","fix":"64592","desc":"57940"},{"messageId":"57941","fix":"64593","desc":"57943"},{"messageId":"57938","fix":"64594","desc":"57940"},{"messageId":"57941","fix":"64595","desc":"57943"},{"messageId":"57938","fix":"64596","desc":"57940"},{"messageId":"57941","fix":"64597","desc":"57943"},{"messageId":"57938","fix":"64598","desc":"57940"},{"messageId":"57941","fix":"64599","desc":"57943"},{"messageId":"57938","fix":"64600","desc":"57940"},{"messageId":"57941","fix":"64601","desc":"57943"},{"messageId":"57938","fix":"64602","desc":"57940"},{"messageId":"57941","fix":"64603","desc":"57943"},{"messageId":"57938","fix":"64604","desc":"57940"},{"messageId":"57941","fix":"64605","desc":"57943"},{"messageId":"57938","fix":"64606","desc":"57940"},{"messageId":"57941","fix":"64607","desc":"57943"},{"messageId":"57938","fix":"64608","desc":"57940"},{"messageId":"57941","fix":"64609","desc":"57943"},{"messageId":"57938","fix":"64610","desc":"57940"},{"messageId":"57941","fix":"64611","desc":"57943"},{"messageId":"57938","fix":"64612","desc":"57940"},{"messageId":"57941","fix":"64613","desc":"57943"},{"messageId":"57938","fix":"64614","desc":"57940"},{"messageId":"57941","fix":"64615","desc":"57943"},{"messageId":"57938","fix":"64616","desc":"57940"},{"messageId":"57941","fix":"64617","desc":"57943"},{"messageId":"57938","fix":"64618","desc":"57940"},{"messageId":"57941","fix":"64619","desc":"57943"},{"messageId":"57938","fix":"64620","desc":"57940"},{"messageId":"57941","fix":"64621","desc":"57943"},{"messageId":"57938","fix":"64622","desc":"57940"},{"messageId":"57941","fix":"64623","desc":"57943"},{"messageId":"57938","fix":"64624","desc":"57940"},{"messageId":"57941","fix":"64625","desc":"57943"},{"messageId":"57938","fix":"64626","desc":"57940"},{"messageId":"57941","fix":"64627","desc":"57943"},{"messageId":"57938","fix":"64628","desc":"57940"},{"messageId":"57941","fix":"64629","desc":"57943"},{"messageId":"57938","fix":"64630","desc":"57940"},{"messageId":"57941","fix":"64631","desc":"57943"},{"messageId":"57938","fix":"64632","desc":"57940"},{"messageId":"57941","fix":"64633","desc":"57943"},{"messageId":"57938","fix":"64634","desc":"57940"},{"messageId":"57941","fix":"64635","desc":"57943"},{"messageId":"57938","fix":"64636","desc":"57940"},{"messageId":"57941","fix":"64637","desc":"57943"},{"messageId":"57938","fix":"64638","desc":"57940"},{"messageId":"57941","fix":"64639","desc":"57943"},{"messageId":"57938","fix":"64640","desc":"57940"},{"messageId":"57941","fix":"64641","desc":"57943"},{"messageId":"57938","fix":"64642","desc":"57940"},{"messageId":"57941","fix":"64643","desc":"57943"},{"messageId":"57938","fix":"64644","desc":"57940"},{"messageId":"57941","fix":"64645","desc":"57943"},{"messageId":"57938","fix":"64646","desc":"57940"},{"messageId":"57941","fix":"64647","desc":"57943"},{"messageId":"57938","fix":"64648","desc":"57940"},{"messageId":"57941","fix":"64649","desc":"57943"},{"messageId":"57938","fix":"64650","desc":"57940"},{"messageId":"57941","fix":"64651","desc":"57943"},{"messageId":"57938","fix":"64652","desc":"57940"},{"messageId":"57941","fix":"64653","desc":"57943"},{"messageId":"57938","fix":"64654","desc":"57940"},{"messageId":"57941","fix":"64655","desc":"57943"},{"messageId":"57938","fix":"64656","desc":"57940"},{"messageId":"57941","fix":"64657","desc":"57943"},{"messageId":"57938","fix":"64658","desc":"57940"},{"messageId":"57941","fix":"64659","desc":"57943"},{"messageId":"57938","fix":"64660","desc":"57940"},{"messageId":"57941","fix":"64661","desc":"57943"},{"messageId":"57938","fix":"64662","desc":"57940"},{"messageId":"57941","fix":"64663","desc":"57943"},{"messageId":"57938","fix":"64664","desc":"57940"},{"messageId":"57941","fix":"64665","desc":"57943"},{"messageId":"57938","fix":"64666","desc":"57940"},{"messageId":"57941","fix":"64667","desc":"57943"},{"messageId":"57938","fix":"64668","desc":"57940"},{"messageId":"57941","fix":"64669","desc":"57943"},{"messageId":"57938","fix":"64670","desc":"57940"},{"messageId":"57941","fix":"64671","desc":"57943"},{"messageId":"57938","fix":"64672","desc":"57940"},{"messageId":"57941","fix":"64673","desc":"57943"},{"messageId":"57938","fix":"64674","desc":"57940"},{"messageId":"57941","fix":"64675","desc":"57943"},{"messageId":"57938","fix":"64676","desc":"57940"},{"messageId":"57941","fix":"64677","desc":"57943"},{"messageId":"57938","fix":"64678","desc":"57940"},{"messageId":"57941","fix":"64679","desc":"57943"},{"messageId":"57938","fix":"64680","desc":"57940"},{"messageId":"57941","fix":"64681","desc":"57943"},{"messageId":"57938","fix":"64682","desc":"57940"},{"messageId":"57941","fix":"64683","desc":"57943"},{"messageId":"57938","fix":"64684","desc":"57940"},{"messageId":"57941","fix":"64685","desc":"57943"},{"messageId":"57938","fix":"64686","desc":"57940"},{"messageId":"57941","fix":"64687","desc":"57943"},{"messageId":"57938","fix":"64688","desc":"57940"},{"messageId":"57941","fix":"64689","desc":"57943"},{"messageId":"57938","fix":"64690","desc":"57940"},{"messageId":"57941","fix":"64691","desc":"57943"},{"messageId":"57938","fix":"64692","desc":"57940"},{"messageId":"57941","fix":"64693","desc":"57943"},{"messageId":"57938","fix":"64694","desc":"57940"},{"messageId":"57941","fix":"64695","desc":"57943"},{"messageId":"57938","fix":"64696","desc":"57940"},{"messageId":"57941","fix":"64697","desc":"57943"},{"messageId":"57938","fix":"64698","desc":"57940"},{"messageId":"57941","fix":"64699","desc":"57943"},{"messageId":"57938","fix":"64700","desc":"57940"},{"messageId":"57941","fix":"64701","desc":"57943"},{"messageId":"57938","fix":"64702","desc":"57940"},{"messageId":"57941","fix":"64703","desc":"57943"},{"messageId":"57938","fix":"64704","desc":"57940"},{"messageId":"57941","fix":"64705","desc":"57943"},{"messageId":"57938","fix":"64706","desc":"57940"},{"messageId":"57941","fix":"64707","desc":"57943"},{"messageId":"57938","fix":"64708","desc":"57940"},{"messageId":"57941","fix":"64709","desc":"57943"},{"messageId":"57938","fix":"64710","desc":"57940"},{"messageId":"57941","fix":"64711","desc":"57943"},{"messageId":"57938","fix":"64712","desc":"57940"},{"messageId":"57941","fix":"64713","desc":"57943"},{"messageId":"57938","fix":"64714","desc":"57940"},{"messageId":"57941","fix":"64715","desc":"57943"},{"messageId":"57938","fix":"64716","desc":"57940"},{"messageId":"57941","fix":"64717","desc":"57943"},{"messageId":"57938","fix":"64718","desc":"57940"},{"messageId":"57941","fix":"64719","desc":"57943"},{"messageId":"57938","fix":"64720","desc":"57940"},{"messageId":"57941","fix":"64721","desc":"57943"},{"messageId":"57938","fix":"64722","desc":"57940"},{"messageId":"57941","fix":"64723","desc":"57943"},{"messageId":"57938","fix":"64724","desc":"57940"},{"messageId":"57941","fix":"64725","desc":"57943"},{"messageId":"57938","fix":"64726","desc":"57940"},{"messageId":"57941","fix":"64727","desc":"57943"},{"messageId":"57938","fix":"64728","desc":"57940"},{"messageId":"57941","fix":"64729","desc":"57943"},{"messageId":"57938","fix":"64730","desc":"57940"},{"messageId":"57941","fix":"64731","desc":"57943"},{"messageId":"57938","fix":"64732","desc":"57940"},{"messageId":"57941","fix":"64733","desc":"57943"},{"messageId":"57938","fix":"64734","desc":"57940"},{"messageId":"57941","fix":"64735","desc":"57943"},{"messageId":"57938","fix":"64736","desc":"57940"},{"messageId":"57941","fix":"64737","desc":"57943"},{"messageId":"57938","fix":"64738","desc":"57940"},{"messageId":"57941","fix":"64739","desc":"57943"},{"messageId":"57938","fix":"64740","desc":"57940"},{"messageId":"57941","fix":"64741","desc":"57943"},{"messageId":"57938","fix":"64742","desc":"57940"},{"messageId":"57941","fix":"64743","desc":"57943"},{"messageId":"57938","fix":"64744","desc":"57940"},{"messageId":"57941","fix":"64745","desc":"57943"},{"messageId":"57938","fix":"64746","desc":"57940"},{"messageId":"57941","fix":"64747","desc":"57943"},{"messageId":"57938","fix":"64748","desc":"57940"},{"messageId":"57941","fix":"64749","desc":"57943"},{"messageId":"57938","fix":"64750","desc":"57940"},{"messageId":"57941","fix":"64751","desc":"57943"},{"messageId":"57938","fix":"64752","desc":"57940"},{"messageId":"57941","fix":"64753","desc":"57943"},{"messageId":"57938","fix":"64754","desc":"57940"},{"messageId":"57941","fix":"64755","desc":"57943"},{"messageId":"57938","fix":"64756","desc":"57940"},{"messageId":"57941","fix":"64757","desc":"57943"},{"messageId":"57938","fix":"64758","desc":"57940"},{"messageId":"57941","fix":"64759","desc":"57943"},{"messageId":"57938","fix":"64760","desc":"57940"},{"messageId":"57941","fix":"64761","desc":"57943"},{"messageId":"57938","fix":"64762","desc":"57940"},{"messageId":"57941","fix":"64763","desc":"57943"},{"messageId":"57938","fix":"64764","desc":"57940"},{"messageId":"57941","fix":"64765","desc":"57943"},{"messageId":"57938","fix":"64766","desc":"57940"},{"messageId":"57941","fix":"64767","desc":"57943"},{"messageId":"57938","fix":"64768","desc":"57940"},{"messageId":"57941","fix":"64769","desc":"57943"},{"messageId":"57938","fix":"64770","desc":"57940"},{"messageId":"57941","fix":"64771","desc":"57943"},{"messageId":"57938","fix":"64772","desc":"57940"},{"messageId":"57941","fix":"64773","desc":"57943"},{"messageId":"57938","fix":"64774","desc":"57940"},{"messageId":"57941","fix":"64775","desc":"57943"},{"messageId":"57938","fix":"64776","desc":"57940"},{"messageId":"57941","fix":"64777","desc":"57943"},{"messageId":"57938","fix":"64778","desc":"57940"},{"messageId":"57941","fix":"64779","desc":"57943"},{"messageId":"57938","fix":"64780","desc":"57940"},{"messageId":"57941","fix":"64781","desc":"57943"},{"messageId":"57938","fix":"64782","desc":"57940"},{"messageId":"57941","fix":"64783","desc":"57943"},{"messageId":"57938","fix":"64784","desc":"57940"},{"messageId":"57941","fix":"64785","desc":"57943"},{"messageId":"57938","fix":"64786","desc":"57940"},{"messageId":"57941","fix":"64787","desc":"57943"},{"messageId":"57938","fix":"64788","desc":"57940"},{"messageId":"57941","fix":"64789","desc":"57943"},{"messageId":"57938","fix":"64790","desc":"57940"},{"messageId":"57941","fix":"64791","desc":"57943"},{"messageId":"57938","fix":"64792","desc":"57940"},{"messageId":"57941","fix":"64793","desc":"57943"},{"messageId":"57938","fix":"64794","desc":"57940"},{"messageId":"57941","fix":"64795","desc":"57943"},{"messageId":"57938","fix":"64796","desc":"57940"},{"messageId":"57941","fix":"64797","desc":"57943"},{"messageId":"57938","fix":"64798","desc":"57940"},{"messageId":"57941","fix":"64799","desc":"57943"},{"messageId":"57938","fix":"64800","desc":"57940"},{"messageId":"57941","fix":"64801","desc":"57943"},{"messageId":"57938","fix":"64802","desc":"57940"},{"messageId":"57941","fix":"64803","desc":"57943"},{"messageId":"57938","fix":"64804","desc":"57940"},{"messageId":"57941","fix":"64805","desc":"57943"},{"messageId":"57938","fix":"64806","desc":"57940"},{"messageId":"57941","fix":"64807","desc":"57943"},{"messageId":"57938","fix":"64808","desc":"57940"},{"messageId":"57941","fix":"64809","desc":"57943"},{"messageId":"57938","fix":"64810","desc":"57940"},{"messageId":"57941","fix":"64811","desc":"57943"},{"messageId":"57938","fix":"64812","desc":"57940"},{"messageId":"57941","fix":"64813","desc":"57943"},{"messageId":"57938","fix":"64814","desc":"57940"},{"messageId":"57941","fix":"64815","desc":"57943"},{"messageId":"57938","fix":"64816","desc":"57940"},{"messageId":"57941","fix":"64817","desc":"57943"},{"messageId":"57938","fix":"64818","desc":"57940"},{"messageId":"57941","fix":"64819","desc":"57943"},{"messageId":"57938","fix":"64820","desc":"57940"},{"messageId":"57941","fix":"64821","desc":"57943"},{"messageId":"57938","fix":"64822","desc":"57940"},{"messageId":"57941","fix":"64823","desc":"57943"},{"messageId":"57938","fix":"64824","desc":"57940"},{"messageId":"57941","fix":"64825","desc":"57943"},{"messageId":"57938","fix":"64826","desc":"57940"},{"messageId":"57941","fix":"64827","desc":"57943"},{"messageId":"57938","fix":"64828","desc":"57940"},{"messageId":"57941","fix":"64829","desc":"57943"},{"messageId":"57938","fix":"64830","desc":"57940"},{"messageId":"57941","fix":"64831","desc":"57943"},{"messageId":"57938","fix":"64832","desc":"57940"},{"messageId":"57941","fix":"64833","desc":"57943"},{"messageId":"57938","fix":"64834","desc":"57940"},{"messageId":"57941","fix":"64835","desc":"57943"},{"messageId":"57938","fix":"64836","desc":"57940"},{"messageId":"57941","fix":"64837","desc":"57943"},{"messageId":"57938","fix":"64838","desc":"57940"},{"messageId":"57941","fix":"64839","desc":"57943"},{"messageId":"57938","fix":"64840","desc":"57940"},{"messageId":"57941","fix":"64841","desc":"57943"},{"messageId":"57938","fix":"64842","desc":"57940"},{"messageId":"57941","fix":"64843","desc":"57943"},{"messageId":"57938","fix":"64844","desc":"57940"},{"messageId":"57941","fix":"64845","desc":"57943"},{"messageId":"57938","fix":"64846","desc":"57940"},{"messageId":"57941","fix":"64847","desc":"57943"},{"messageId":"57938","fix":"64848","desc":"57940"},{"messageId":"57941","fix":"64849","desc":"57943"},{"messageId":"57938","fix":"64850","desc":"57940"},{"messageId":"57941","fix":"64851","desc":"57943"},{"messageId":"57938","fix":"64852","desc":"57940"},{"messageId":"57941","fix":"64853","desc":"57943"},{"messageId":"57938","fix":"64854","desc":"57940"},{"messageId":"57941","fix":"64855","desc":"57943"},{"messageId":"57938","fix":"64856","desc":"57940"},{"messageId":"57941","fix":"64857","desc":"57943"},{"messageId":"57938","fix":"64858","desc":"57940"},{"messageId":"57941","fix":"64859","desc":"57943"},{"messageId":"57938","fix":"64860","desc":"57940"},{"messageId":"57941","fix":"64861","desc":"57943"},{"messageId":"57938","fix":"64862","desc":"57940"},{"messageId":"57941","fix":"64863","desc":"57943"},{"messageId":"57938","fix":"64864","desc":"57940"},{"messageId":"57941","fix":"64865","desc":"57943"},{"messageId":"57938","fix":"64866","desc":"57940"},{"messageId":"57941","fix":"64867","desc":"57943"},{"messageId":"57938","fix":"64868","desc":"57940"},{"messageId":"57941","fix":"64869","desc":"57943"},{"messageId":"57938","fix":"64870","desc":"57940"},{"messageId":"57941","fix":"64871","desc":"57943"},{"messageId":"57938","fix":"64872","desc":"57940"},{"messageId":"57941","fix":"64873","desc":"57943"},{"messageId":"57938","fix":"64874","desc":"57940"},{"messageId":"57941","fix":"64875","desc":"57943"},{"messageId":"57938","fix":"64876","desc":"57940"},{"messageId":"57941","fix":"64877","desc":"57943"},{"messageId":"57938","fix":"64878","desc":"57940"},{"messageId":"57941","fix":"64879","desc":"57943"},{"messageId":"57938","fix":"64880","desc":"57940"},{"messageId":"57941","fix":"64881","desc":"57943"},{"messageId":"57938","fix":"64882","desc":"57940"},{"messageId":"57941","fix":"64883","desc":"57943"},{"messageId":"57938","fix":"64884","desc":"57940"},{"messageId":"57941","fix":"64885","desc":"57943"},{"messageId":"57938","fix":"64886","desc":"57940"},{"messageId":"57941","fix":"64887","desc":"57943"},{"messageId":"57938","fix":"64888","desc":"57940"},{"messageId":"57941","fix":"64889","desc":"57943"},{"messageId":"57938","fix":"64890","desc":"57940"},{"messageId":"57941","fix":"64891","desc":"57943"},{"messageId":"57938","fix":"64892","desc":"57940"},{"messageId":"57941","fix":"64893","desc":"57943"},{"messageId":"57938","fix":"64894","desc":"57940"},{"messageId":"57941","fix":"64895","desc":"57943"},{"messageId":"57938","fix":"64896","desc":"57940"},{"messageId":"57941","fix":"64897","desc":"57943"},{"messageId":"57938","fix":"64898","desc":"57940"},{"messageId":"57941","fix":"64899","desc":"57943"},{"messageId":"57938","fix":"64900","desc":"57940"},{"messageId":"57941","fix":"64901","desc":"57943"},{"messageId":"57938","fix":"64902","desc":"57940"},{"messageId":"57941","fix":"64903","desc":"57943"},{"messageId":"57938","fix":"64904","desc":"57940"},{"messageId":"57941","fix":"64905","desc":"57943"},{"messageId":"57938","fix":"64906","desc":"57940"},{"messageId":"57941","fix":"64907","desc":"57943"},{"messageId":"57938","fix":"64908","desc":"57940"},{"messageId":"57941","fix":"64909","desc":"57943"},{"messageId":"57938","fix":"64910","desc":"57940"},{"messageId":"57941","fix":"64911","desc":"57943"},{"messageId":"57938","fix":"64912","desc":"57940"},{"messageId":"57941","fix":"64913","desc":"57943"},{"messageId":"57938","fix":"64914","desc":"57940"},{"messageId":"57941","fix":"64915","desc":"57943"},{"messageId":"57938","fix":"64916","desc":"57940"},{"messageId":"57941","fix":"64917","desc":"57943"},{"messageId":"57938","fix":"64918","desc":"57940"},{"messageId":"57941","fix":"64919","desc":"57943"},{"messageId":"57938","fix":"64920","desc":"57940"},{"messageId":"57941","fix":"64921","desc":"57943"},{"messageId":"57938","fix":"64922","desc":"57940"},{"messageId":"57941","fix":"64923","desc":"57943"},{"messageId":"57938","fix":"64924","desc":"57940"},{"messageId":"57941","fix":"64925","desc":"57943"},{"messageId":"57938","fix":"64926","desc":"57940"},{"messageId":"57941","fix":"64927","desc":"57943"},{"messageId":"57938","fix":"64928","desc":"57940"},{"messageId":"57941","fix":"64929","desc":"57943"},{"messageId":"57938","fix":"64930","desc":"57940"},{"messageId":"57941","fix":"64931","desc":"57943"},{"messageId":"57938","fix":"64932","desc":"57940"},{"messageId":"57941","fix":"64933","desc":"57943"},{"messageId":"57938","fix":"64934","desc":"57940"},{"messageId":"57941","fix":"64935","desc":"57943"},{"messageId":"57938","fix":"64936","desc":"57940"},{"messageId":"57941","fix":"64937","desc":"57943"},{"messageId":"57938","fix":"64938","desc":"57940"},{"messageId":"57941","fix":"64939","desc":"57943"},{"messageId":"57938","fix":"64940","desc":"57940"},{"messageId":"57941","fix":"64941","desc":"57943"},{"messageId":"57938","fix":"64942","desc":"57940"},{"messageId":"57941","fix":"64943","desc":"57943"},{"messageId":"57938","fix":"64944","desc":"57940"},{"messageId":"57941","fix":"64945","desc":"57943"},{"messageId":"57938","fix":"64946","desc":"57940"},{"messageId":"57941","fix":"64947","desc":"57943"},{"messageId":"57938","fix":"64948","desc":"57940"},{"messageId":"57941","fix":"64949","desc":"57943"},{"messageId":"57938","fix":"64950","desc":"57940"},{"messageId":"57941","fix":"64951","desc":"57943"},{"messageId":"57938","fix":"64952","desc":"57940"},{"messageId":"57941","fix":"64953","desc":"57943"},{"messageId":"57938","fix":"64954","desc":"57940"},{"messageId":"57941","fix":"64955","desc":"57943"},{"messageId":"57938","fix":"64956","desc":"57940"},{"messageId":"57941","fix":"64957","desc":"57943"},{"messageId":"57938","fix":"64958","desc":"57940"},{"messageId":"57941","fix":"64959","desc":"57943"},{"messageId":"57938","fix":"64960","desc":"57940"},{"messageId":"57941","fix":"64961","desc":"57943"},{"messageId":"57938","fix":"64962","desc":"57940"},{"messageId":"57941","fix":"64963","desc":"57943"},{"messageId":"57938","fix":"64964","desc":"57940"},{"messageId":"57941","fix":"64965","desc":"57943"},{"messageId":"57938","fix":"64966","desc":"57940"},{"messageId":"57941","fix":"64967","desc":"57943"},{"messageId":"57938","fix":"64968","desc":"57940"},{"messageId":"57941","fix":"64969","desc":"57943"},{"messageId":"57938","fix":"64970","desc":"57940"},{"messageId":"57941","fix":"64971","desc":"57943"},{"messageId":"57938","fix":"64972","desc":"57940"},{"messageId":"57941","fix":"64973","desc":"57943"},{"messageId":"57938","fix":"64974","desc":"57940"},{"messageId":"57941","fix":"64975","desc":"57943"},{"messageId":"57938","fix":"64976","desc":"57940"},{"messageId":"57941","fix":"64977","desc":"57943"},{"messageId":"57938","fix":"64978","desc":"57940"},{"messageId":"57941","fix":"64979","desc":"57943"},{"messageId":"57938","fix":"64980","desc":"57940"},{"messageId":"57941","fix":"64981","desc":"57943"},{"messageId":"57938","fix":"64982","desc":"57940"},{"messageId":"57941","fix":"64983","desc":"57943"},{"messageId":"57938","fix":"64984","desc":"57940"},{"messageId":"57941","fix":"64985","desc":"57943"},{"messageId":"57938","fix":"64986","desc":"57940"},{"messageId":"57941","fix":"64987","desc":"57943"},{"messageId":"57938","fix":"64988","desc":"57940"},{"messageId":"57941","fix":"64989","desc":"57943"},{"messageId":"57938","fix":"64990","desc":"57940"},{"messageId":"57941","fix":"64991","desc":"57943"},{"messageId":"57938","fix":"64992","desc":"57940"},{"messageId":"57941","fix":"64993","desc":"57943"},{"messageId":"57938","fix":"64994","desc":"57940"},{"messageId":"57941","fix":"64995","desc":"57943"},{"messageId":"57938","fix":"64996","desc":"57940"},{"messageId":"57941","fix":"64997","desc":"57943"},{"messageId":"57938","fix":"64998","desc":"57940"},{"messageId":"57941","fix":"64999","desc":"57943"},{"messageId":"57938","fix":"65000","desc":"57940"},{"messageId":"57941","fix":"65001","desc":"57943"},{"messageId":"57938","fix":"65002","desc":"57940"},{"messageId":"57941","fix":"65003","desc":"57943"},{"messageId":"57938","fix":"65004","desc":"57940"},{"messageId":"57941","fix":"65005","desc":"57943"},{"messageId":"57938","fix":"65006","desc":"57940"},{"messageId":"57941","fix":"65007","desc":"57943"},{"messageId":"57938","fix":"65008","desc":"57940"},{"messageId":"57941","fix":"65009","desc":"57943"},{"messageId":"57938","fix":"65010","desc":"57940"},{"messageId":"57941","fix":"65011","desc":"57943"},{"messageId":"57938","fix":"65012","desc":"57940"},{"messageId":"57941","fix":"65013","desc":"57943"},{"messageId":"57938","fix":"65014","desc":"57940"},{"messageId":"57941","fix":"65015","desc":"57943"},{"messageId":"57938","fix":"65016","desc":"57940"},{"messageId":"57941","fix":"65017","desc":"57943"},{"messageId":"57938","fix":"65018","desc":"57940"},{"messageId":"57941","fix":"65019","desc":"57943"},{"messageId":"57938","fix":"65020","desc":"57940"},{"messageId":"57941","fix":"65021","desc":"57943"},{"messageId":"57938","fix":"65022","desc":"57940"},{"messageId":"57941","fix":"65023","desc":"57943"},{"messageId":"57938","fix":"65024","desc":"57940"},{"messageId":"57941","fix":"65025","desc":"57943"},{"messageId":"57938","fix":"65026","desc":"57940"},{"messageId":"57941","fix":"65027","desc":"57943"},{"messageId":"57938","fix":"65028","desc":"57940"},{"messageId":"57941","fix":"65029","desc":"57943"},{"messageId":"57938","fix":"65030","desc":"57940"},{"messageId":"57941","fix":"65031","desc":"57943"},{"messageId":"57938","fix":"65032","desc":"57940"},{"messageId":"57941","fix":"65033","desc":"57943"},{"messageId":"57938","fix":"65034","desc":"57940"},{"messageId":"57941","fix":"65035","desc":"57943"},{"messageId":"57938","fix":"65036","desc":"57940"},{"messageId":"57941","fix":"65037","desc":"57943"},{"messageId":"57938","fix":"65038","desc":"57940"},{"messageId":"57941","fix":"65039","desc":"57943"},{"messageId":"57938","fix":"65040","desc":"57940"},{"messageId":"57941","fix":"65041","desc":"57943"},{"messageId":"57938","fix":"65042","desc":"57940"},{"messageId":"57941","fix":"65043","desc":"57943"},{"messageId":"57938","fix":"65044","desc":"57940"},{"messageId":"57941","fix":"65045","desc":"57943"},{"messageId":"57938","fix":"65046","desc":"57940"},{"messageId":"57941","fix":"65047","desc":"57943"},{"messageId":"57938","fix":"65048","desc":"57940"},{"messageId":"57941","fix":"65049","desc":"57943"},{"messageId":"57938","fix":"65050","desc":"57940"},{"messageId":"57941","fix":"65051","desc":"57943"},{"messageId":"57938","fix":"65052","desc":"57940"},{"messageId":"57941","fix":"65053","desc":"57943"},{"messageId":"57938","fix":"65054","desc":"57940"},{"messageId":"57941","fix":"65055","desc":"57943"},{"messageId":"57938","fix":"65056","desc":"57940"},{"messageId":"57941","fix":"65057","desc":"57943"},{"messageId":"57938","fix":"65058","desc":"57940"},{"messageId":"57941","fix":"65059","desc":"57943"},{"messageId":"57938","fix":"65060","desc":"57940"},{"messageId":"57941","fix":"65061","desc":"57943"},{"messageId":"57938","fix":"65062","desc":"57940"},{"messageId":"57941","fix":"65063","desc":"57943"},{"messageId":"57938","fix":"65064","desc":"57940"},{"messageId":"57941","fix":"65065","desc":"57943"},{"messageId":"57938","fix":"65066","desc":"57940"},{"messageId":"57941","fix":"65067","desc":"57943"},{"messageId":"57938","fix":"65068","desc":"57940"},{"messageId":"57941","fix":"65069","desc":"57943"},{"messageId":"57938","fix":"65070","desc":"57940"},{"messageId":"57941","fix":"65071","desc":"57943"},{"messageId":"57938","fix":"65072","desc":"57940"},{"messageId":"57941","fix":"65073","desc":"57943"},{"messageId":"57938","fix":"65074","desc":"57940"},{"messageId":"57941","fix":"65075","desc":"57943"},{"messageId":"57938","fix":"65076","desc":"57940"},{"messageId":"57941","fix":"65077","desc":"57943"},{"messageId":"57938","fix":"65078","desc":"57940"},{"messageId":"57941","fix":"65079","desc":"57943"},{"messageId":"57938","fix":"65080","desc":"57940"},{"messageId":"57941","fix":"65081","desc":"57943"},{"messageId":"57938","fix":"65082","desc":"57940"},{"messageId":"57941","fix":"65083","desc":"57943"},{"messageId":"57938","fix":"65084","desc":"57940"},{"messageId":"57941","fix":"65085","desc":"57943"},{"messageId":"57938","fix":"65086","desc":"57940"},{"messageId":"57941","fix":"65087","desc":"57943"},{"messageId":"57938","fix":"65088","desc":"57940"},{"messageId":"57941","fix":"65089","desc":"57943"},{"messageId":"57938","fix":"65090","desc":"57940"},{"messageId":"57941","fix":"65091","desc":"57943"},{"messageId":"57938","fix":"65092","desc":"57940"},{"messageId":"57941","fix":"65093","desc":"57943"},{"messageId":"57938","fix":"65094","desc":"57940"},{"messageId":"57941","fix":"65095","desc":"57943"},{"messageId":"57938","fix":"65096","desc":"57940"},{"messageId":"57941","fix":"65097","desc":"57943"},{"messageId":"57938","fix":"65098","desc":"57940"},{"messageId":"57941","fix":"65099","desc":"57943"},{"messageId":"57938","fix":"65100","desc":"57940"},{"messageId":"57941","fix":"65101","desc":"57943"},{"messageId":"57938","fix":"65102","desc":"57940"},{"messageId":"57941","fix":"65103","desc":"57943"},{"messageId":"57938","fix":"65104","desc":"57940"},{"messageId":"57941","fix":"65105","desc":"57943"},{"messageId":"57938","fix":"65106","desc":"57940"},{"messageId":"57941","fix":"65107","desc":"57943"},{"messageId":"57938","fix":"65108","desc":"57940"},{"messageId":"57941","fix":"65109","desc":"57943"},{"messageId":"57938","fix":"65110","desc":"57940"},{"messageId":"57941","fix":"65111","desc":"57943"},{"messageId":"57938","fix":"65112","desc":"57940"},{"messageId":"57941","fix":"65113","desc":"57943"},{"messageId":"57938","fix":"65114","desc":"57940"},{"messageId":"57941","fix":"65115","desc":"57943"},{"messageId":"57938","fix":"65116","desc":"57940"},{"messageId":"57941","fix":"65117","desc":"57943"},{"messageId":"57938","fix":"65118","desc":"57940"},{"messageId":"57941","fix":"65119","desc":"57943"},{"messageId":"57938","fix":"65120","desc":"57940"},{"messageId":"57941","fix":"65121","desc":"57943"},{"messageId":"57938","fix":"65122","desc":"57940"},{"messageId":"57941","fix":"65123","desc":"57943"},{"messageId":"57938","fix":"65124","desc":"57940"},{"messageId":"57941","fix":"65125","desc":"57943"},{"messageId":"57938","fix":"65126","desc":"57940"},{"messageId":"57941","fix":"65127","desc":"57943"},{"messageId":"57938","fix":"65128","desc":"57940"},{"messageId":"57941","fix":"65129","desc":"57943"},{"messageId":"57938","fix":"65130","desc":"57940"},{"messageId":"57941","fix":"65131","desc":"57943"},{"messageId":"57938","fix":"65132","desc":"57940"},{"messageId":"57941","fix":"65133","desc":"57943"},{"messageId":"57938","fix":"65134","desc":"57940"},{"messageId":"57941","fix":"65135","desc":"57943"},{"messageId":"57938","fix":"65136","desc":"57940"},{"messageId":"57941","fix":"65137","desc":"57943"},{"messageId":"57938","fix":"65138","desc":"57940"},{"messageId":"57941","fix":"65139","desc":"57943"},{"messageId":"57938","fix":"65140","desc":"57940"},{"messageId":"57941","fix":"65141","desc":"57943"},{"messageId":"57938","fix":"65142","desc":"57940"},{"messageId":"57941","fix":"65143","desc":"57943"},{"messageId":"57938","fix":"65144","desc":"57940"},{"messageId":"57941","fix":"65145","desc":"57943"},{"messageId":"57938","fix":"65146","desc":"57940"},{"messageId":"57941","fix":"65147","desc":"57943"},{"messageId":"57938","fix":"65148","desc":"57940"},{"messageId":"57941","fix":"65149","desc":"57943"},{"messageId":"57938","fix":"65150","desc":"57940"},{"messageId":"57941","fix":"65151","desc":"57943"},{"messageId":"57938","fix":"65152","desc":"57940"},{"messageId":"57941","fix":"65153","desc":"57943"},{"messageId":"57938","fix":"65154","desc":"57940"},{"messageId":"57941","fix":"65155","desc":"57943"},{"messageId":"57938","fix":"65156","desc":"57940"},{"messageId":"57941","fix":"65157","desc":"57943"},{"messageId":"57938","fix":"65158","desc":"57940"},{"messageId":"57941","fix":"65159","desc":"57943"},{"messageId":"57938","fix":"65160","desc":"57940"},{"messageId":"57941","fix":"65161","desc":"57943"},{"messageId":"57938","fix":"65162","desc":"57940"},{"messageId":"57941","fix":"65163","desc":"57943"},{"messageId":"57938","fix":"65164","desc":"57940"},{"messageId":"57941","fix":"65165","desc":"57943"},{"messageId":"57938","fix":"65166","desc":"57940"},{"messageId":"57941","fix":"65167","desc":"57943"},{"messageId":"57938","fix":"65168","desc":"57940"},{"messageId":"57941","fix":"65169","desc":"57943"},{"messageId":"57938","fix":"65170","desc":"57940"},{"messageId":"57941","fix":"65171","desc":"57943"},{"messageId":"57938","fix":"65172","desc":"57940"},{"messageId":"57941","fix":"65173","desc":"57943"},{"messageId":"57938","fix":"65174","desc":"57940"},{"messageId":"57941","fix":"65175","desc":"57943"},{"messageId":"57938","fix":"65176","desc":"57940"},{"messageId":"57941","fix":"65177","desc":"57943"},{"messageId":"57938","fix":"65178","desc":"57940"},{"messageId":"57941","fix":"65179","desc":"57943"},{"messageId":"57938","fix":"65180","desc":"57940"},{"messageId":"57941","fix":"65181","desc":"57943"},{"messageId":"57938","fix":"65182","desc":"57940"},{"messageId":"57941","fix":"65183","desc":"57943"},{"messageId":"57938","fix":"65184","desc":"57940"},{"messageId":"57941","fix":"65185","desc":"57943"},{"messageId":"57938","fix":"65186","desc":"57940"},{"messageId":"57941","fix":"65187","desc":"57943"},{"messageId":"57938","fix":"65188","desc":"57940"},{"messageId":"57941","fix":"65189","desc":"57943"},{"messageId":"57938","fix":"65190","desc":"57940"},{"messageId":"57941","fix":"65191","desc":"57943"},{"messageId":"57938","fix":"65192","desc":"57940"},{"messageId":"57941","fix":"65193","desc":"57943"},{"messageId":"57938","fix":"65194","desc":"57940"},{"messageId":"57941","fix":"65195","desc":"57943"},{"messageId":"57938","fix":"65196","desc":"57940"},{"messageId":"57941","fix":"65197","desc":"57943"},{"messageId":"57938","fix":"65198","desc":"57940"},{"messageId":"57941","fix":"65199","desc":"57943"},{"messageId":"57938","fix":"65200","desc":"57940"},{"messageId":"57941","fix":"65201","desc":"57943"},{"messageId":"57938","fix":"65202","desc":"57940"},{"messageId":"57941","fix":"65203","desc":"57943"},{"messageId":"57938","fix":"65204","desc":"57940"},{"messageId":"57941","fix":"65205","desc":"57943"},{"messageId":"57938","fix":"65206","desc":"57940"},{"messageId":"57941","fix":"65207","desc":"57943"},{"messageId":"57938","fix":"65208","desc":"57940"},{"messageId":"57941","fix":"65209","desc":"57943"},{"messageId":"57938","fix":"65210","desc":"57940"},{"messageId":"57941","fix":"65211","desc":"57943"},{"messageId":"57938","fix":"65212","desc":"57940"},{"messageId":"57941","fix":"65213","desc":"57943"},{"messageId":"57938","fix":"65214","desc":"57940"},{"messageId":"57941","fix":"65215","desc":"57943"},{"messageId":"57938","fix":"65216","desc":"57940"},{"messageId":"57941","fix":"65217","desc":"57943"},{"messageId":"57938","fix":"65218","desc":"57940"},{"messageId":"57941","fix":"65219","desc":"57943"},{"messageId":"57938","fix":"65220","desc":"57940"},{"messageId":"57941","fix":"65221","desc":"57943"},{"messageId":"57938","fix":"65222","desc":"57940"},{"messageId":"57941","fix":"65223","desc":"57943"},{"messageId":"57938","fix":"65224","desc":"57940"},{"messageId":"57941","fix":"65225","desc":"57943"},{"messageId":"57938","fix":"65226","desc":"57940"},{"messageId":"57941","fix":"65227","desc":"57943"},{"messageId":"57938","fix":"65228","desc":"57940"},{"messageId":"57941","fix":"65229","desc":"57943"},{"messageId":"57938","fix":"65230","desc":"57940"},{"messageId":"57941","fix":"65231","desc":"57943"},{"messageId":"57938","fix":"65232","desc":"57940"},{"messageId":"57941","fix":"65233","desc":"57943"},{"messageId":"57938","fix":"65234","desc":"57940"},{"messageId":"57941","fix":"65235","desc":"57943"},{"messageId":"57938","fix":"65236","desc":"57940"},{"messageId":"57941","fix":"65237","desc":"57943"},{"messageId":"57938","fix":"65238","desc":"57940"},{"messageId":"57941","fix":"65239","desc":"57943"},{"messageId":"57938","fix":"65240","desc":"57940"},{"messageId":"57941","fix":"65241","desc":"57943"},{"messageId":"57938","fix":"65242","desc":"57940"},{"messageId":"57941","fix":"65243","desc":"57943"},{"messageId":"57938","fix":"65244","desc":"57940"},{"messageId":"57941","fix":"65245","desc":"57943"},{"messageId":"57938","fix":"65246","desc":"57940"},{"messageId":"57941","fix":"65247","desc":"57943"},{"messageId":"57938","fix":"65248","desc":"57940"},{"messageId":"57941","fix":"65249","desc":"57943"},{"messageId":"57938","fix":"65250","desc":"57940"},{"messageId":"57941","fix":"65251","desc":"57943"},{"messageId":"57938","fix":"65252","desc":"57940"},{"messageId":"57941","fix":"65253","desc":"57943"},{"messageId":"57938","fix":"65254","desc":"57940"},{"messageId":"57941","fix":"65255","desc":"57943"},{"messageId":"57938","fix":"65256","desc":"57940"},{"messageId":"57941","fix":"65257","desc":"57943"},{"messageId":"57938","fix":"65258","desc":"57940"},{"messageId":"57941","fix":"65259","desc":"57943"},{"messageId":"57938","fix":"65260","desc":"57940"},{"messageId":"57941","fix":"65261","desc":"57943"},{"messageId":"57938","fix":"65262","desc":"57940"},{"messageId":"57941","fix":"65263","desc":"57943"},{"messageId":"57938","fix":"65264","desc":"57940"},{"messageId":"57941","fix":"65265","desc":"57943"},{"messageId":"57938","fix":"65266","desc":"57940"},{"messageId":"57941","fix":"65267","desc":"57943"},{"messageId":"57938","fix":"65268","desc":"57940"},{"messageId":"57941","fix":"65269","desc":"57943"},{"messageId":"57938","fix":"65270","desc":"57940"},{"messageId":"57941","fix":"65271","desc":"57943"},{"messageId":"57938","fix":"65272","desc":"57940"},{"messageId":"57941","fix":"65273","desc":"57943"},{"messageId":"57938","fix":"65274","desc":"57940"},{"messageId":"57941","fix":"65275","desc":"57943"},{"messageId":"57938","fix":"65276","desc":"57940"},{"messageId":"57941","fix":"65277","desc":"57943"},{"messageId":"57938","fix":"65278","desc":"57940"},{"messageId":"57941","fix":"65279","desc":"57943"},{"messageId":"57938","fix":"65280","desc":"57940"},{"messageId":"57941","fix":"65281","desc":"57943"},{"messageId":"57938","fix":"65282","desc":"57940"},{"messageId":"57941","fix":"65283","desc":"57943"},{"messageId":"57938","fix":"65284","desc":"57940"},{"messageId":"57941","fix":"65285","desc":"57943"},{"messageId":"57938","fix":"65286","desc":"57940"},{"messageId":"57941","fix":"65287","desc":"57943"},{"messageId":"57938","fix":"65288","desc":"57940"},{"messageId":"57941","fix":"65289","desc":"57943"},{"messageId":"57938","fix":"65290","desc":"57940"},{"messageId":"57941","fix":"65291","desc":"57943"},{"messageId":"57938","fix":"65292","desc":"57940"},{"messageId":"57941","fix":"65293","desc":"57943"},{"messageId":"57938","fix":"65294","desc":"57940"},{"messageId":"57941","fix":"65295","desc":"57943"},{"messageId":"57938","fix":"65296","desc":"57940"},{"messageId":"57941","fix":"65297","desc":"57943"},{"messageId":"57938","fix":"65298","desc":"57940"},{"messageId":"57941","fix":"65299","desc":"57943"},{"messageId":"57938","fix":"65300","desc":"57940"},{"messageId":"57941","fix":"65301","desc":"57943"},{"messageId":"57938","fix":"65302","desc":"57940"},{"messageId":"57941","fix":"65303","desc":"57943"},{"messageId":"57938","fix":"65304","desc":"57940"},{"messageId":"57941","fix":"65305","desc":"57943"},{"messageId":"57938","fix":"65306","desc":"57940"},{"messageId":"57941","fix":"65307","desc":"57943"},{"messageId":"57938","fix":"65308","desc":"57940"},{"messageId":"57941","fix":"65309","desc":"57943"},{"messageId":"57938","fix":"65310","desc":"57940"},{"messageId":"57941","fix":"65311","desc":"57943"},{"messageId":"57938","fix":"65312","desc":"57940"},{"messageId":"57941","fix":"65313","desc":"57943"},{"messageId":"57938","fix":"65314","desc":"57940"},{"messageId":"57941","fix":"65315","desc":"57943"},{"messageId":"57938","fix":"65316","desc":"57940"},{"messageId":"57941","fix":"65317","desc":"57943"},{"messageId":"57938","fix":"65318","desc":"57940"},{"messageId":"57941","fix":"65319","desc":"57943"},{"messageId":"57938","fix":"65320","desc":"57940"},{"messageId":"57941","fix":"65321","desc":"57943"},{"messageId":"57938","fix":"65322","desc":"57940"},{"messageId":"57941","fix":"65323","desc":"57943"},{"messageId":"57938","fix":"65324","desc":"57940"},{"messageId":"57941","fix":"65325","desc":"57943"},{"messageId":"57938","fix":"65326","desc":"57940"},{"messageId":"57941","fix":"65327","desc":"57943"},{"messageId":"57938","fix":"65328","desc":"57940"},{"messageId":"57941","fix":"65329","desc":"57943"},{"messageId":"57938","fix":"65330","desc":"57940"},{"messageId":"57941","fix":"65331","desc":"57943"},{"messageId":"57938","fix":"65332","desc":"57940"},{"messageId":"57941","fix":"65333","desc":"57943"},{"messageId":"57938","fix":"65334","desc":"57940"},{"messageId":"57941","fix":"65335","desc":"57943"},{"messageId":"57938","fix":"65336","desc":"57940"},{"messageId":"57941","fix":"65337","desc":"57943"},{"messageId":"57938","fix":"65338","desc":"57940"},{"messageId":"57941","fix":"65339","desc":"57943"},{"messageId":"57938","fix":"65340","desc":"57940"},{"messageId":"57941","fix":"65341","desc":"57943"},{"messageId":"57938","fix":"65342","desc":"57940"},{"messageId":"57941","fix":"65343","desc":"57943"},{"messageId":"57938","fix":"65344","desc":"57940"},{"messageId":"57941","fix":"65345","desc":"57943"},{"messageId":"57938","fix":"65346","desc":"57940"},{"messageId":"57941","fix":"65347","desc":"57943"},{"messageId":"57938","fix":"65348","desc":"57940"},{"messageId":"57941","fix":"65349","desc":"57943"},{"messageId":"57938","fix":"65350","desc":"57940"},{"messageId":"57941","fix":"65351","desc":"57943"},{"messageId":"57938","fix":"65352","desc":"57940"},{"messageId":"57941","fix":"65353","desc":"57943"},{"messageId":"57938","fix":"65354","desc":"57940"},{"messageId":"57941","fix":"65355","desc":"57943"},{"messageId":"57938","fix":"65356","desc":"57940"},{"messageId":"57941","fix":"65357","desc":"57943"},{"messageId":"57938","fix":"65358","desc":"57940"},{"messageId":"57941","fix":"65359","desc":"57943"},{"messageId":"57938","fix":"65360","desc":"57940"},{"messageId":"57941","fix":"65361","desc":"57943"},{"messageId":"57938","fix":"65362","desc":"57940"},{"messageId":"57941","fix":"65363","desc":"57943"},{"messageId":"57938","fix":"65364","desc":"57940"},{"messageId":"57941","fix":"65365","desc":"57943"},{"messageId":"57938","fix":"65366","desc":"57940"},{"messageId":"57941","fix":"65367","desc":"57943"},{"messageId":"57938","fix":"65368","desc":"57940"},{"messageId":"57941","fix":"65369","desc":"57943"},{"messageId":"57938","fix":"65370","desc":"57940"},{"messageId":"57941","fix":"65371","desc":"57943"},{"messageId":"57938","fix":"65372","desc":"57940"},{"messageId":"57941","fix":"65373","desc":"57943"},{"messageId":"57938","fix":"65374","desc":"57940"},{"messageId":"57941","fix":"65375","desc":"57943"},{"messageId":"57938","fix":"65376","desc":"57940"},{"messageId":"57941","fix":"65377","desc":"57943"},{"messageId":"57938","fix":"65378","desc":"57940"},{"messageId":"57941","fix":"65379","desc":"57943"},{"messageId":"57938","fix":"65380","desc":"57940"},{"messageId":"57941","fix":"65381","desc":"57943"},{"messageId":"57938","fix":"65382","desc":"57940"},{"messageId":"57941","fix":"65383","desc":"57943"},{"messageId":"57938","fix":"65384","desc":"57940"},{"messageId":"57941","fix":"65385","desc":"57943"},{"messageId":"57938","fix":"65386","desc":"57940"},{"messageId":"57941","fix":"65387","desc":"57943"},{"messageId":"57938","fix":"65388","desc":"57940"},{"messageId":"57941","fix":"65389","desc":"57943"},{"messageId":"57938","fix":"65390","desc":"57940"},{"messageId":"57941","fix":"65391","desc":"57943"},{"messageId":"57938","fix":"65392","desc":"57940"},{"messageId":"57941","fix":"65393","desc":"57943"},{"messageId":"57938","fix":"65394","desc":"57940"},{"messageId":"57941","fix":"65395","desc":"57943"},{"messageId":"57938","fix":"65396","desc":"57940"},{"messageId":"57941","fix":"65397","desc":"57943"},{"messageId":"57938","fix":"65398","desc":"57940"},{"messageId":"57941","fix":"65399","desc":"57943"},{"messageId":"57938","fix":"65400","desc":"57940"},{"messageId":"57941","fix":"65401","desc":"57943"},{"messageId":"57938","fix":"65402","desc":"57940"},{"messageId":"57941","fix":"65403","desc":"57943"},{"messageId":"57938","fix":"65404","desc":"57940"},{"messageId":"57941","fix":"65405","desc":"57943"},{"messageId":"57938","fix":"65406","desc":"57940"},{"messageId":"57941","fix":"65407","desc":"57943"},{"messageId":"57938","fix":"65408","desc":"57940"},{"messageId":"57941","fix":"65409","desc":"57943"},{"messageId":"57938","fix":"65410","desc":"57940"},{"messageId":"57941","fix":"65411","desc":"57943"},{"messageId":"57938","fix":"65412","desc":"57940"},{"messageId":"57941","fix":"65413","desc":"57943"},{"messageId":"57938","fix":"65414","desc":"57940"},{"messageId":"57941","fix":"65415","desc":"57943"},{"messageId":"57938","fix":"65416","desc":"57940"},{"messageId":"57941","fix":"65417","desc":"57943"},{"messageId":"57938","fix":"65418","desc":"57940"},{"messageId":"57941","fix":"65419","desc":"57943"},{"messageId":"57938","fix":"65420","desc":"57940"},{"messageId":"57941","fix":"65421","desc":"57943"},{"messageId":"57938","fix":"65422","desc":"57940"},{"messageId":"57941","fix":"65423","desc":"57943"},{"messageId":"57938","fix":"65424","desc":"57940"},{"messageId":"57941","fix":"65425","desc":"57943"},{"messageId":"57938","fix":"65426","desc":"57940"},{"messageId":"57941","fix":"65427","desc":"57943"},{"messageId":"57938","fix":"65428","desc":"57940"},{"messageId":"57941","fix":"65429","desc":"57943"},{"messageId":"57938","fix":"65430","desc":"57940"},{"messageId":"57941","fix":"65431","desc":"57943"},{"messageId":"57938","fix":"65432","desc":"57940"},{"messageId":"57941","fix":"65433","desc":"57943"},{"messageId":"57938","fix":"65434","desc":"57940"},{"messageId":"57941","fix":"65435","desc":"57943"},{"messageId":"57938","fix":"65436","desc":"57940"},{"messageId":"57941","fix":"65437","desc":"57943"},{"messageId":"57938","fix":"65438","desc":"57940"},{"messageId":"57941","fix":"65439","desc":"57943"},{"messageId":"57938","fix":"65440","desc":"57940"},{"messageId":"57941","fix":"65441","desc":"57943"},{"messageId":"57938","fix":"65442","desc":"57940"},{"messageId":"57941","fix":"65443","desc":"57943"},{"messageId":"57938","fix":"65444","desc":"57940"},{"messageId":"57941","fix":"65445","desc":"57943"},{"messageId":"57938","fix":"65446","desc":"57940"},{"messageId":"57941","fix":"65447","desc":"57943"},{"messageId":"57938","fix":"65448","desc":"57940"},{"messageId":"57941","fix":"65449","desc":"57943"},{"messageId":"57938","fix":"65450","desc":"57940"},{"messageId":"57941","fix":"65451","desc":"57943"},{"messageId":"57938","fix":"65452","desc":"57940"},{"messageId":"57941","fix":"65453","desc":"57943"},{"messageId":"57938","fix":"65454","desc":"57940"},{"messageId":"57941","fix":"65455","desc":"57943"},{"messageId":"57938","fix":"65456","desc":"57940"},{"messageId":"57941","fix":"65457","desc":"57943"},{"messageId":"57938","fix":"65458","desc":"57940"},{"messageId":"57941","fix":"65459","desc":"57943"},{"messageId":"57938","fix":"65460","desc":"57940"},{"messageId":"57941","fix":"65461","desc":"57943"},{"messageId":"57938","fix":"65462","desc":"57940"},{"messageId":"57941","fix":"65463","desc":"57943"},{"messageId":"57938","fix":"65464","desc":"57940"},{"messageId":"57941","fix":"65465","desc":"57943"},{"messageId":"57938","fix":"65466","desc":"57940"},{"messageId":"57941","fix":"65467","desc":"57943"},{"messageId":"57938","fix":"65468","desc":"57940"},{"messageId":"57941","fix":"65469","desc":"57943"},{"messageId":"57938","fix":"65470","desc":"57940"},{"messageId":"57941","fix":"65471","desc":"57943"},{"messageId":"57938","fix":"65472","desc":"57940"},{"messageId":"57941","fix":"65473","desc":"57943"},{"messageId":"57938","fix":"65474","desc":"57940"},{"messageId":"57941","fix":"65475","desc":"57943"},{"messageId":"57938","fix":"65476","desc":"57940"},{"messageId":"57941","fix":"65477","desc":"57943"},{"messageId":"57938","fix":"65478","desc":"57940"},{"messageId":"57941","fix":"65479","desc":"57943"},{"messageId":"57938","fix":"65480","desc":"57940"},{"messageId":"57941","fix":"65481","desc":"57943"},{"messageId":"57938","fix":"65482","desc":"57940"},{"messageId":"57941","fix":"65483","desc":"57943"},{"messageId":"57938","fix":"65484","desc":"57940"},{"messageId":"57941","fix":"65485","desc":"57943"},{"messageId":"57938","fix":"65486","desc":"57940"},{"messageId":"57941","fix":"65487","desc":"57943"},{"messageId":"57938","fix":"65488","desc":"57940"},{"messageId":"57941","fix":"65489","desc":"57943"},{"messageId":"57938","fix":"65490","desc":"57940"},{"messageId":"57941","fix":"65491","desc":"57943"},{"messageId":"57938","fix":"65492","desc":"57940"},{"messageId":"57941","fix":"65493","desc":"57943"},{"messageId":"57938","fix":"65494","desc":"57940"},{"messageId":"57941","fix":"65495","desc":"57943"},{"messageId":"57938","fix":"65496","desc":"57940"},{"messageId":"57941","fix":"65497","desc":"57943"},{"messageId":"57938","fix":"65498","desc":"57940"},{"messageId":"57941","fix":"65499","desc":"57943"},{"messageId":"57938","fix":"65500","desc":"57940"},{"messageId":"57941","fix":"65501","desc":"57943"},{"messageId":"57938","fix":"65502","desc":"57940"},{"messageId":"57941","fix":"65503","desc":"57943"},{"messageId":"57938","fix":"65504","desc":"57940"},{"messageId":"57941","fix":"65505","desc":"57943"},{"messageId":"57938","fix":"65506","desc":"57940"},{"messageId":"57941","fix":"65507","desc":"57943"},{"messageId":"57938","fix":"65508","desc":"57940"},{"messageId":"57941","fix":"65509","desc":"57943"},{"messageId":"57938","fix":"65510","desc":"57940"},{"messageId":"57941","fix":"65511","desc":"57943"},{"messageId":"57938","fix":"65512","desc":"57940"},{"messageId":"57941","fix":"65513","desc":"57943"},{"messageId":"57938","fix":"65514","desc":"57940"},{"messageId":"57941","fix":"65515","desc":"57943"},{"messageId":"57938","fix":"65516","desc":"57940"},{"messageId":"57941","fix":"65517","desc":"57943"},{"messageId":"57938","fix":"65518","desc":"57940"},{"messageId":"57941","fix":"65519","desc":"57943"},{"messageId":"57938","fix":"65520","desc":"57940"},{"messageId":"57941","fix":"65521","desc":"57943"},{"messageId":"57938","fix":"65522","desc":"57940"},{"messageId":"57941","fix":"65523","desc":"57943"},{"messageId":"57938","fix":"65524","desc":"57940"},{"messageId":"57941","fix":"65525","desc":"57943"},{"messageId":"57938","fix":"65526","desc":"57940"},{"messageId":"57941","fix":"65527","desc":"57943"},{"messageId":"57938","fix":"65528","desc":"57940"},{"messageId":"57941","fix":"65529","desc":"57943"},{"messageId":"57938","fix":"65530","desc":"57940"},{"messageId":"57941","fix":"65531","desc":"57943"},{"messageId":"57938","fix":"65532","desc":"57940"},{"messageId":"57941","fix":"65533","desc":"57943"},{"messageId":"57938","fix":"65534","desc":"57940"},{"messageId":"57941","fix":"65535","desc":"57943"},{"messageId":"57938","fix":"65536","desc":"57940"},{"messageId":"57941","fix":"65537","desc":"57943"},{"messageId":"57938","fix":"65538","desc":"57940"},{"messageId":"57941","fix":"65539","desc":"57943"},{"messageId":"57938","fix":"65540","desc":"57940"},{"messageId":"57941","fix":"65541","desc":"57943"},{"messageId":"57938","fix":"65542","desc":"57940"},{"messageId":"57941","fix":"65543","desc":"57943"},{"messageId":"57938","fix":"65544","desc":"57940"},{"messageId":"57941","fix":"65545","desc":"57943"},{"messageId":"57938","fix":"65546","desc":"57940"},{"messageId":"57941","fix":"65547","desc":"57943"},{"messageId":"57938","fix":"65548","desc":"57940"},{"messageId":"57941","fix":"65549","desc":"57943"},{"messageId":"57938","fix":"65550","desc":"57940"},{"messageId":"57941","fix":"65551","desc":"57943"},{"messageId":"57938","fix":"65552","desc":"57940"},{"messageId":"57941","fix":"65553","desc":"57943"},{"messageId":"57938","fix":"65554","desc":"57940"},{"messageId":"57941","fix":"65555","desc":"57943"},{"messageId":"57938","fix":"65556","desc":"57940"},{"messageId":"57941","fix":"65557","desc":"57943"},{"messageId":"57938","fix":"65558","desc":"57940"},{"messageId":"57941","fix":"65559","desc":"57943"},{"messageId":"57938","fix":"65560","desc":"57940"},{"messageId":"57941","fix":"65561","desc":"57943"},{"messageId":"57938","fix":"65562","desc":"57940"},{"messageId":"57941","fix":"65563","desc":"57943"},{"messageId":"57938","fix":"65564","desc":"57940"},{"messageId":"57941","fix":"65565","desc":"57943"},{"messageId":"57938","fix":"65566","desc":"57940"},{"messageId":"57941","fix":"65567","desc":"57943"},{"messageId":"57938","fix":"65568","desc":"57940"},{"messageId":"57941","fix":"65569","desc":"57943"},{"messageId":"57938","fix":"65570","desc":"57940"},{"messageId":"57941","fix":"65571","desc":"57943"},{"messageId":"57938","fix":"65572","desc":"57940"},{"messageId":"57941","fix":"65573","desc":"57943"},{"messageId":"57938","fix":"65574","desc":"57940"},{"messageId":"57941","fix":"65575","desc":"57943"},{"messageId":"57938","fix":"65576","desc":"57940"},{"messageId":"57941","fix":"65577","desc":"57943"},{"messageId":"57938","fix":"65578","desc":"57940"},{"messageId":"57941","fix":"65579","desc":"57943"},{"messageId":"57938","fix":"65580","desc":"57940"},{"messageId":"57941","fix":"65581","desc":"57943"},{"messageId":"57938","fix":"65582","desc":"57940"},{"messageId":"57941","fix":"65583","desc":"57943"},{"messageId":"57938","fix":"65584","desc":"57940"},{"messageId":"57941","fix":"65585","desc":"57943"},{"messageId":"57938","fix":"65586","desc":"57940"},{"messageId":"57941","fix":"65587","desc":"57943"},{"messageId":"57938","fix":"65588","desc":"57940"},{"messageId":"57941","fix":"65589","desc":"57943"},{"messageId":"57938","fix":"65590","desc":"57940"},{"messageId":"57941","fix":"65591","desc":"57943"},{"messageId":"57938","fix":"65592","desc":"57940"},{"messageId":"57941","fix":"65593","desc":"57943"},{"messageId":"57938","fix":"65594","desc":"57940"},{"messageId":"57941","fix":"65595","desc":"57943"},{"messageId":"57938","fix":"65596","desc":"57940"},{"messageId":"57941","fix":"65597","desc":"57943"},{"messageId":"57938","fix":"65598","desc":"57940"},{"messageId":"57941","fix":"65599","desc":"57943"},{"messageId":"57938","fix":"65600","desc":"57940"},{"messageId":"57941","fix":"65601","desc":"57943"},{"messageId":"57938","fix":"65602","desc":"57940"},{"messageId":"57941","fix":"65603","desc":"57943"},{"messageId":"57938","fix":"65604","desc":"57940"},{"messageId":"57941","fix":"65605","desc":"57943"},{"messageId":"57938","fix":"65606","desc":"57940"},{"messageId":"57941","fix":"65607","desc":"57943"},{"messageId":"57938","fix":"65608","desc":"57940"},{"messageId":"57941","fix":"65609","desc":"57943"},{"messageId":"57938","fix":"65610","desc":"57940"},{"messageId":"57941","fix":"65611","desc":"57943"},{"messageId":"57938","fix":"65612","desc":"57940"},{"messageId":"57941","fix":"65613","desc":"57943"},{"messageId":"57938","fix":"65614","desc":"57940"},{"messageId":"57941","fix":"65615","desc":"57943"},{"messageId":"57938","fix":"65616","desc":"57940"},{"messageId":"57941","fix":"65617","desc":"57943"},{"messageId":"57938","fix":"65618","desc":"57940"},{"messageId":"57941","fix":"65619","desc":"57943"},{"messageId":"57938","fix":"65620","desc":"57940"},{"messageId":"57941","fix":"65621","desc":"57943"},{"messageId":"57938","fix":"65622","desc":"57940"},{"messageId":"57941","fix":"65623","desc":"57943"},{"messageId":"57938","fix":"65624","desc":"57940"},{"messageId":"57941","fix":"65625","desc":"57943"},{"messageId":"57938","fix":"65626","desc":"57940"},{"messageId":"57941","fix":"65627","desc":"57943"},{"messageId":"57938","fix":"65628","desc":"57940"},{"messageId":"57941","fix":"65629","desc":"57943"},{"messageId":"57938","fix":"65630","desc":"57940"},{"messageId":"57941","fix":"65631","desc":"57943"},{"messageId":"57938","fix":"65632","desc":"57940"},{"messageId":"57941","fix":"65633","desc":"57943"},{"messageId":"57938","fix":"65634","desc":"57940"},{"messageId":"57941","fix":"65635","desc":"57943"},{"messageId":"57938","fix":"65636","desc":"57940"},{"messageId":"57941","fix":"65637","desc":"57943"},{"messageId":"57938","fix":"65638","desc":"57940"},{"messageId":"57941","fix":"65639","desc":"57943"},{"messageId":"57938","fix":"65640","desc":"57940"},{"messageId":"57941","fix":"65641","desc":"57943"},{"messageId":"57938","fix":"65642","desc":"57940"},{"messageId":"57941","fix":"65643","desc":"57943"},{"messageId":"57938","fix":"65644","desc":"57940"},{"messageId":"57941","fix":"65645","desc":"57943"},{"messageId":"57938","fix":"65646","desc":"57940"},{"messageId":"57941","fix":"65647","desc":"57943"},{"messageId":"57938","fix":"65648","desc":"57940"},{"messageId":"57941","fix":"65649","desc":"57943"},{"messageId":"57938","fix":"65650","desc":"57940"},{"messageId":"57941","fix":"65651","desc":"57943"},{"messageId":"57938","fix":"65652","desc":"57940"},{"messageId":"57941","fix":"65653","desc":"57943"},{"messageId":"57938","fix":"65654","desc":"57940"},{"messageId":"57941","fix":"65655","desc":"57943"},{"messageId":"57938","fix":"65656","desc":"57940"},{"messageId":"57941","fix":"65657","desc":"57943"},{"messageId":"57938","fix":"65658","desc":"57940"},{"messageId":"57941","fix":"65659","desc":"57943"},{"messageId":"57938","fix":"65660","desc":"57940"},{"messageId":"57941","fix":"65661","desc":"57943"},{"messageId":"57938","fix":"65662","desc":"57940"},{"messageId":"57941","fix":"65663","desc":"57943"},{"messageId":"57938","fix":"65664","desc":"57940"},{"messageId":"57941","fix":"65665","desc":"57943"},{"messageId":"57938","fix":"65666","desc":"57940"},{"messageId":"57941","fix":"65667","desc":"57943"},{"messageId":"57938","fix":"65668","desc":"57940"},{"messageId":"57941","fix":"65669","desc":"57943"},{"messageId":"57938","fix":"65670","desc":"57940"},{"messageId":"57941","fix":"65671","desc":"57943"},{"messageId":"57938","fix":"65672","desc":"57940"},{"messageId":"57941","fix":"65673","desc":"57943"},{"messageId":"57938","fix":"65674","desc":"57940"},{"messageId":"57941","fix":"65675","desc":"57943"},{"messageId":"57938","fix":"65676","desc":"57940"},{"messageId":"57941","fix":"65677","desc":"57943"},{"messageId":"57938","fix":"65678","desc":"57940"},{"messageId":"57941","fix":"65679","desc":"57943"},{"messageId":"57938","fix":"65680","desc":"57940"},{"messageId":"57941","fix":"65681","desc":"57943"},{"messageId":"57938","fix":"65682","desc":"57940"},{"messageId":"57941","fix":"65683","desc":"57943"},{"messageId":"57938","fix":"65684","desc":"57940"},{"messageId":"57941","fix":"65685","desc":"57943"},{"messageId":"57938","fix":"65686","desc":"57940"},{"messageId":"57941","fix":"65687","desc":"57943"},{"messageId":"57938","fix":"65688","desc":"57940"},{"messageId":"57941","fix":"65689","desc":"57943"},{"messageId":"57938","fix":"65690","desc":"57940"},{"messageId":"57941","fix":"65691","desc":"57943"},{"messageId":"57938","fix":"65692","desc":"57940"},{"messageId":"57941","fix":"65693","desc":"57943"},{"messageId":"57938","fix":"65694","desc":"57940"},{"messageId":"57941","fix":"65695","desc":"57943"},{"messageId":"57938","fix":"65696","desc":"57940"},{"messageId":"57941","fix":"65697","desc":"57943"},{"messageId":"57938","fix":"65698","desc":"57940"},{"messageId":"57941","fix":"65699","desc":"57943"},{"messageId":"57938","fix":"65700","desc":"57940"},{"messageId":"57941","fix":"65701","desc":"57943"},{"messageId":"57938","fix":"65702","desc":"57940"},{"messageId":"57941","fix":"65703","desc":"57943"},{"messageId":"57938","fix":"65704","desc":"57940"},{"messageId":"57941","fix":"65705","desc":"57943"},{"messageId":"57938","fix":"65706","desc":"57940"},{"messageId":"57941","fix":"65707","desc":"57943"},{"messageId":"57938","fix":"65708","desc":"57940"},{"messageId":"57941","fix":"65709","desc":"57943"},{"messageId":"57938","fix":"65710","desc":"57940"},{"messageId":"57941","fix":"65711","desc":"57943"},{"messageId":"57938","fix":"65712","desc":"57940"},{"messageId":"57941","fix":"65713","desc":"57943"},{"messageId":"57938","fix":"65714","desc":"57940"},{"messageId":"57941","fix":"65715","desc":"57943"},{"messageId":"57938","fix":"65716","desc":"57940"},{"messageId":"57941","fix":"65717","desc":"57943"},{"messageId":"57938","fix":"65718","desc":"57940"},{"messageId":"57941","fix":"65719","desc":"57943"},{"messageId":"57938","fix":"65720","desc":"57940"},{"messageId":"57941","fix":"65721","desc":"57943"},{"messageId":"57938","fix":"65722","desc":"57940"},{"messageId":"57941","fix":"65723","desc":"57943"},{"messageId":"57938","fix":"65724","desc":"57940"},{"messageId":"57941","fix":"65725","desc":"57943"},{"messageId":"57938","fix":"65726","desc":"57940"},{"messageId":"57941","fix":"65727","desc":"57943"},{"messageId":"57938","fix":"65728","desc":"57940"},{"messageId":"57941","fix":"65729","desc":"57943"},{"messageId":"57938","fix":"65730","desc":"57940"},{"messageId":"57941","fix":"65731","desc":"57943"},{"messageId":"57938","fix":"65732","desc":"57940"},{"messageId":"57941","fix":"65733","desc":"57943"},{"messageId":"57938","fix":"65734","desc":"57940"},{"messageId":"57941","fix":"65735","desc":"57943"},{"messageId":"57938","fix":"65736","desc":"57940"},{"messageId":"57941","fix":"65737","desc":"57943"},{"messageId":"57938","fix":"65738","desc":"57940"},{"messageId":"57941","fix":"65739","desc":"57943"},{"messageId":"57938","fix":"65740","desc":"57940"},{"messageId":"57941","fix":"65741","desc":"57943"},{"messageId":"57938","fix":"65742","desc":"57940"},{"messageId":"57941","fix":"65743","desc":"57943"},{"messageId":"57938","fix":"65744","desc":"57940"},{"messageId":"57941","fix":"65745","desc":"57943"},{"messageId":"57938","fix":"65746","desc":"57940"},{"messageId":"57941","fix":"65747","desc":"57943"},{"messageId":"57938","fix":"65748","desc":"57940"},{"messageId":"57941","fix":"65749","desc":"57943"},{"messageId":"57938","fix":"65750","desc":"57940"},{"messageId":"57941","fix":"65751","desc":"57943"},{"messageId":"57938","fix":"65752","desc":"57940"},{"messageId":"57941","fix":"65753","desc":"57943"},{"messageId":"57938","fix":"65754","desc":"57940"},{"messageId":"57941","fix":"65755","desc":"57943"},{"messageId":"57938","fix":"65756","desc":"57940"},{"messageId":"57941","fix":"65757","desc":"57943"},{"messageId":"57938","fix":"65758","desc":"57940"},{"messageId":"57941","fix":"65759","desc":"57943"},{"messageId":"57938","fix":"65760","desc":"57940"},{"messageId":"57941","fix":"65761","desc":"57943"},{"messageId":"57938","fix":"65762","desc":"57940"},{"messageId":"57941","fix":"65763","desc":"57943"},{"messageId":"57938","fix":"65764","desc":"57940"},{"messageId":"57941","fix":"65765","desc":"57943"},{"messageId":"57938","fix":"65766","desc":"57940"},{"messageId":"57941","fix":"65767","desc":"57943"},{"messageId":"57938","fix":"65768","desc":"57940"},{"messageId":"57941","fix":"65769","desc":"57943"},{"messageId":"57938","fix":"65770","desc":"57940"},{"messageId":"57941","fix":"65771","desc":"57943"},{"messageId":"57938","fix":"65772","desc":"57940"},{"messageId":"57941","fix":"65773","desc":"57943"},{"messageId":"57938","fix":"65774","desc":"57940"},{"messageId":"57941","fix":"65775","desc":"57943"},{"messageId":"57938","fix":"65776","desc":"57940"},{"messageId":"57941","fix":"65777","desc":"57943"},{"messageId":"57938","fix":"65778","desc":"57940"},{"messageId":"57941","fix":"65779","desc":"57943"},{"messageId":"57938","fix":"65780","desc":"57940"},{"messageId":"57941","fix":"65781","desc":"57943"},{"messageId":"57938","fix":"65782","desc":"57940"},{"messageId":"57941","fix":"65783","desc":"57943"},{"messageId":"57938","fix":"65784","desc":"57940"},{"messageId":"57941","fix":"65785","desc":"57943"},{"messageId":"57938","fix":"65786","desc":"57940"},{"messageId":"57941","fix":"65787","desc":"57943"},{"messageId":"57938","fix":"65788","desc":"57940"},{"messageId":"57941","fix":"65789","desc":"57943"},{"messageId":"57938","fix":"65790","desc":"57940"},{"messageId":"57941","fix":"65791","desc":"57943"},{"messageId":"57938","fix":"65792","desc":"57940"},{"messageId":"57941","fix":"65793","desc":"57943"},{"messageId":"57938","fix":"65794","desc":"57940"},{"messageId":"57941","fix":"65795","desc":"57943"},{"messageId":"57938","fix":"65796","desc":"57940"},{"messageId":"57941","fix":"65797","desc":"57943"},{"messageId":"57938","fix":"65798","desc":"57940"},{"messageId":"57941","fix":"65799","desc":"57943"},{"messageId":"57938","fix":"65800","desc":"57940"},{"messageId":"57941","fix":"65801","desc":"57943"},{"messageId":"57938","fix":"65802","desc":"57940"},{"messageId":"57941","fix":"65803","desc":"57943"},{"messageId":"57938","fix":"65804","desc":"57940"},{"messageId":"57941","fix":"65805","desc":"57943"},{"messageId":"57938","fix":"65806","desc":"57940"},{"messageId":"57941","fix":"65807","desc":"57943"},{"messageId":"57938","fix":"65808","desc":"57940"},{"messageId":"57941","fix":"65809","desc":"57943"},{"messageId":"57938","fix":"65810","desc":"57940"},{"messageId":"57941","fix":"65811","desc":"57943"},{"messageId":"57938","fix":"65812","desc":"57940"},{"messageId":"57941","fix":"65813","desc":"57943"},{"messageId":"57938","fix":"65814","desc":"57940"},{"messageId":"57941","fix":"65815","desc":"57943"},{"messageId":"57938","fix":"65816","desc":"57940"},{"messageId":"57941","fix":"65817","desc":"57943"},{"messageId":"57938","fix":"65818","desc":"57940"},{"messageId":"57941","fix":"65819","desc":"57943"},{"messageId":"57938","fix":"65820","desc":"57940"},{"messageId":"57941","fix":"65821","desc":"57943"},{"messageId":"57938","fix":"65822","desc":"57940"},{"messageId":"57941","fix":"65823","desc":"57943"},{"messageId":"57938","fix":"65824","desc":"57940"},{"messageId":"57941","fix":"65825","desc":"57943"},{"kind":"58246","justification":"58247"},{"kind":"58246","justification":"65826"},{"kind":"58246","justification":"65826"},{"kind":"58246","justification":"65827"},{"kind":"58246","justification":"65827"},{"kind":"58246","justification":"65827"},{"kind":"58246","justification":"65827"},{"kind":"58246","justification":"65827"},{"messageId":"57938","fix":"65828","desc":"57940"},{"messageId":"57941","fix":"65829","desc":"57943"},{"messageId":"57938","fix":"65830","desc":"57940"},{"messageId":"57941","fix":"65831","desc":"57943"},{"messageId":"57938","fix":"65832","desc":"57940"},{"messageId":"57941","fix":"65833","desc":"57943"},{"messageId":"57938","fix":"65834","desc":"57940"},{"messageId":"57941","fix":"65835","desc":"57943"},{"messageId":"57938","fix":"65836","desc":"57940"},{"messageId":"57941","fix":"65837","desc":"57943"},{"messageId":"57938","fix":"65838","desc":"57940"},{"messageId":"57941","fix":"65839","desc":"57943"},{"messageId":"57938","fix":"65840","desc":"57940"},{"messageId":"57941","fix":"65841","desc":"57943"},{"messageId":"57938","fix":"65842","desc":"57940"},{"messageId":"57941","fix":"65843","desc":"57943"},{"messageId":"57938","fix":"65844","desc":"57940"},{"messageId":"57941","fix":"65845","desc":"57943"},{"messageId":"57938","fix":"65846","desc":"57940"},{"messageId":"57941","fix":"65847","desc":"57943"},{"messageId":"57938","fix":"65848","desc":"57940"},{"messageId":"57941","fix":"65849","desc":"57943"},{"messageId":"57938","fix":"65850","desc":"57940"},{"messageId":"57941","fix":"65851","desc":"57943"},{"messageId":"57938","fix":"65852","desc":"57940"},{"messageId":"57941","fix":"65853","desc":"57943"},{"messageId":"57938","fix":"65854","desc":"57940"},{"messageId":"57941","fix":"65855","desc":"57943"},{"messageId":"57938","fix":"65856","desc":"57940"},{"messageId":"57941","fix":"65857","desc":"57943"},{"messageId":"57938","fix":"65858","desc":"57940"},{"messageId":"57941","fix":"65859","desc":"57943"},{"messageId":"57938","fix":"65860","desc":"57940"},{"messageId":"57941","fix":"65861","desc":"57943"},{"messageId":"57938","fix":"65862","desc":"57940"},{"messageId":"57941","fix":"65863","desc":"57943"},{"messageId":"57938","fix":"65864","desc":"57940"},{"messageId":"57941","fix":"65865","desc":"57943"},{"messageId":"57938","fix":"65866","desc":"57940"},{"messageId":"57941","fix":"65867","desc":"57943"},{"messageId":"57938","fix":"65868","desc":"57940"},{"messageId":"57941","fix":"65869","desc":"57943"},{"messageId":"57938","fix":"65870","desc":"57940"},{"messageId":"57941","fix":"65871","desc":"57943"},{"messageId":"57938","fix":"65872","desc":"57940"},{"messageId":"57941","fix":"65873","desc":"57943"},{"messageId":"57938","fix":"65874","desc":"57940"},{"messageId":"57941","fix":"65875","desc":"57943"},{"messageId":"57938","fix":"65876","desc":"57940"},{"messageId":"57941","fix":"65877","desc":"57943"},{"messageId":"57938","fix":"65878","desc":"57940"},{"messageId":"57941","fix":"65879","desc":"57943"},{"messageId":"57938","fix":"65880","desc":"57940"},{"messageId":"57941","fix":"65881","desc":"57943"},{"messageId":"57938","fix":"65882","desc":"57940"},{"messageId":"57941","fix":"65883","desc":"57943"},{"messageId":"57938","fix":"65884","desc":"57940"},{"messageId":"57941","fix":"65885","desc":"57943"},{"messageId":"57938","fix":"65886","desc":"57940"},{"messageId":"57941","fix":"65887","desc":"57943"},{"messageId":"57938","fix":"65888","desc":"57940"},{"messageId":"57941","fix":"65889","desc":"57943"},{"messageId":"57938","fix":"65890","desc":"57940"},{"messageId":"57941","fix":"65891","desc":"57943"},{"messageId":"57938","fix":"65892","desc":"57940"},{"messageId":"57941","fix":"65893","desc":"57943"},{"messageId":"57938","fix":"65894","desc":"57940"},{"messageId":"57941","fix":"65895","desc":"57943"},{"messageId":"57938","fix":"65896","desc":"57940"},{"messageId":"57941","fix":"65897","desc":"57943"},{"messageId":"57938","fix":"65898","desc":"57940"},{"messageId":"57941","fix":"65899","desc":"57943"},{"messageId":"57938","fix":"65900","desc":"57940"},{"messageId":"57941","fix":"65901","desc":"57943"},{"messageId":"57938","fix":"65902","desc":"57940"},{"messageId":"57941","fix":"65903","desc":"57943"},{"messageId":"57938","fix":"65904","desc":"57940"},{"messageId":"57941","fix":"65905","desc":"57943"},{"messageId":"57938","fix":"65906","desc":"57940"},{"messageId":"57941","fix":"65907","desc":"57943"},{"messageId":"57938","fix":"65908","desc":"57940"},{"messageId":"57941","fix":"65909","desc":"57943"},{"messageId":"57938","fix":"65910","desc":"57940"},{"messageId":"57941","fix":"65911","desc":"57943"},{"messageId":"57938","fix":"65912","desc":"57940"},{"messageId":"57941","fix":"65913","desc":"57943"},{"messageId":"57938","fix":"65914","desc":"57940"},{"messageId":"57941","fix":"65915","desc":"57943"},{"messageId":"57938","fix":"65916","desc":"57940"},{"messageId":"57941","fix":"65917","desc":"57943"},{"messageId":"57938","fix":"65918","desc":"57940"},{"messageId":"57941","fix":"65919","desc":"57943"},{"messageId":"57938","fix":"65920","desc":"57940"},{"messageId":"57941","fix":"65921","desc":"57943"},{"messageId":"57938","fix":"65922","desc":"57940"},{"messageId":"57941","fix":"65923","desc":"57943"},{"messageId":"57938","fix":"65924","desc":"57940"},{"messageId":"57941","fix":"65925","desc":"57943"},{"messageId":"57938","fix":"65926","desc":"57940"},{"messageId":"57941","fix":"65927","desc":"57943"},{"messageId":"57938","fix":"65928","desc":"57940"},{"messageId":"57941","fix":"65929","desc":"57943"},{"messageId":"57938","fix":"65930","desc":"57940"},{"messageId":"57941","fix":"65931","desc":"57943"},{"messageId":"57938","fix":"65932","desc":"57940"},{"messageId":"57941","fix":"65933","desc":"57943"},{"messageId":"57938","fix":"65934","desc":"57940"},{"messageId":"57941","fix":"65935","desc":"57943"},{"messageId":"57938","fix":"65936","desc":"57940"},{"messageId":"57941","fix":"65937","desc":"57943"},{"messageId":"57938","fix":"65938","desc":"57940"},{"messageId":"57941","fix":"65939","desc":"57943"},{"messageId":"57938","fix":"65940","desc":"57940"},{"messageId":"57941","fix":"65941","desc":"57943"},{"messageId":"57938","fix":"65942","desc":"57940"},{"messageId":"57941","fix":"65943","desc":"57943"},{"messageId":"57938","fix":"65944","desc":"57940"},{"messageId":"57941","fix":"65945","desc":"57943"},{"messageId":"57938","fix":"65946","desc":"57940"},{"messageId":"57941","fix":"65947","desc":"57943"},{"messageId":"57938","fix":"65948","desc":"57940"},{"messageId":"57941","fix":"65949","desc":"57943"},{"messageId":"57938","fix":"65950","desc":"57940"},{"messageId":"57941","fix":"65951","desc":"57943"},{"messageId":"57938","fix":"65952","desc":"57940"},{"messageId":"57941","fix":"65953","desc":"57943"},{"messageId":"57938","fix":"65954","desc":"57940"},{"messageId":"57941","fix":"65955","desc":"57943"},{"messageId":"57938","fix":"65956","desc":"57940"},{"messageId":"57941","fix":"65957","desc":"57943"},{"messageId":"57938","fix":"65958","desc":"57940"},{"messageId":"57941","fix":"65959","desc":"57943"},{"messageId":"57938","fix":"65960","desc":"57940"},{"messageId":"57941","fix":"65961","desc":"57943"},{"messageId":"57938","fix":"65962","desc":"57940"},{"messageId":"57941","fix":"65963","desc":"57943"},{"messageId":"57938","fix":"65964","desc":"57940"},{"messageId":"57941","fix":"65965","desc":"57943"},{"messageId":"57938","fix":"65966","desc":"57940"},{"messageId":"57941","fix":"65967","desc":"57943"},{"messageId":"57938","fix":"65968","desc":"57940"},{"messageId":"57941","fix":"65969","desc":"57943"},{"messageId":"57938","fix":"65970","desc":"57940"},{"messageId":"57941","fix":"65971","desc":"57943"},{"messageId":"57938","fix":"65972","desc":"57940"},{"messageId":"57941","fix":"65973","desc":"57943"},{"messageId":"57938","fix":"65974","desc":"57940"},{"messageId":"57941","fix":"65975","desc":"57943"},{"messageId":"57938","fix":"65976","desc":"57940"},{"messageId":"57941","fix":"65977","desc":"57943"},{"messageId":"57938","fix":"65978","desc":"57940"},{"messageId":"57941","fix":"65979","desc":"57943"},{"messageId":"57938","fix":"65980","desc":"57940"},{"messageId":"57941","fix":"65981","desc":"57943"},{"messageId":"57938","fix":"65982","desc":"57940"},{"messageId":"57941","fix":"65983","desc":"57943"},{"messageId":"57938","fix":"65984","desc":"57940"},{"messageId":"57941","fix":"65985","desc":"57943"},{"messageId":"57938","fix":"65986","desc":"57940"},{"messageId":"57941","fix":"65987","desc":"57943"},{"messageId":"57938","fix":"65988","desc":"57940"},{"messageId":"57941","fix":"65989","desc":"57943"},{"messageId":"57938","fix":"65990","desc":"57940"},{"messageId":"57941","fix":"65991","desc":"57943"},{"messageId":"57938","fix":"65992","desc":"57940"},{"messageId":"57941","fix":"65993","desc":"57943"},{"messageId":"57938","fix":"65994","desc":"57940"},{"messageId":"57941","fix":"65995","desc":"57943"},{"messageId":"57938","fix":"65996","desc":"57940"},{"messageId":"57941","fix":"65997","desc":"57943"},{"messageId":"57938","fix":"65998","desc":"57940"},{"messageId":"57941","fix":"65999","desc":"57943"},{"messageId":"57938","fix":"66000","desc":"57940"},{"messageId":"57941","fix":"66001","desc":"57943"},{"messageId":"57938","fix":"66002","desc":"57940"},{"messageId":"57941","fix":"66003","desc":"57943"},{"messageId":"57938","fix":"66004","desc":"57940"},{"messageId":"57941","fix":"66005","desc":"57943"},{"messageId":"57938","fix":"66006","desc":"57940"},{"messageId":"57941","fix":"66007","desc":"57943"},{"messageId":"57938","fix":"66008","desc":"57940"},{"messageId":"57941","fix":"66009","desc":"57943"},{"messageId":"57938","fix":"66010","desc":"57940"},{"messageId":"57941","fix":"66011","desc":"57943"},{"messageId":"57938","fix":"66012","desc":"57940"},{"messageId":"57941","fix":"66013","desc":"57943"},{"messageId":"57938","fix":"66014","desc":"57940"},{"messageId":"57941","fix":"66015","desc":"57943"},{"messageId":"57938","fix":"66016","desc":"57940"},{"messageId":"57941","fix":"66017","desc":"57943"},{"messageId":"57938","fix":"66018","desc":"57940"},{"messageId":"57941","fix":"66019","desc":"57943"},{"messageId":"57938","fix":"66020","desc":"57940"},{"messageId":"57941","fix":"66021","desc":"57943"},{"messageId":"57938","fix":"66022","desc":"57940"},{"messageId":"57941","fix":"66023","desc":"57943"},{"messageId":"57938","fix":"66024","desc":"57940"},{"messageId":"57941","fix":"66025","desc":"57943"},{"messageId":"57938","fix":"66026","desc":"57940"},{"messageId":"57941","fix":"66027","desc":"57943"},{"messageId":"57938","fix":"66028","desc":"57940"},{"messageId":"57941","fix":"66029","desc":"57943"},{"messageId":"57938","fix":"66030","desc":"57940"},{"messageId":"57941","fix":"66031","desc":"57943"},{"messageId":"57938","fix":"66032","desc":"57940"},{"messageId":"57941","fix":"66033","desc":"57943"},{"messageId":"57938","fix":"66034","desc":"57940"},{"messageId":"57941","fix":"66035","desc":"57943"},{"messageId":"57938","fix":"66036","desc":"57940"},{"messageId":"57941","fix":"66037","desc":"57943"},{"messageId":"57938","fix":"66038","desc":"57940"},{"messageId":"57941","fix":"66039","desc":"57943"},{"messageId":"57938","fix":"66040","desc":"57940"},{"messageId":"57941","fix":"66041","desc":"57943"},{"messageId":"57938","fix":"66042","desc":"57940"},{"messageId":"57941","fix":"66043","desc":"57943"},{"messageId":"57938","fix":"66044","desc":"57940"},{"messageId":"57941","fix":"66045","desc":"57943"},{"messageId":"57938","fix":"66046","desc":"57940"},{"messageId":"57941","fix":"66047","desc":"57943"},{"messageId":"57938","fix":"66048","desc":"57940"},{"messageId":"57941","fix":"66049","desc":"57943"},{"messageId":"57938","fix":"66050","desc":"57940"},{"messageId":"57941","fix":"66051","desc":"57943"},{"messageId":"57938","fix":"66052","desc":"57940"},{"messageId":"57941","fix":"66053","desc":"57943"},{"messageId":"57938","fix":"66054","desc":"57940"},{"messageId":"57941","fix":"66055","desc":"57943"},{"messageId":"57938","fix":"66056","desc":"57940"},{"messageId":"57941","fix":"66057","desc":"57943"},{"messageId":"57938","fix":"66058","desc":"57940"},{"messageId":"57941","fix":"66059","desc":"57943"},{"messageId":"57938","fix":"66060","desc":"57940"},{"messageId":"57941","fix":"66061","desc":"57943"},{"messageId":"57938","fix":"66062","desc":"57940"},{"messageId":"57941","fix":"66063","desc":"57943"},{"messageId":"57938","fix":"66064","desc":"57940"},{"messageId":"57941","fix":"66065","desc":"57943"},{"messageId":"57938","fix":"66066","desc":"57940"},{"messageId":"57941","fix":"66067","desc":"57943"},{"messageId":"57938","fix":"66068","desc":"57940"},{"messageId":"57941","fix":"66069","desc":"57943"},{"messageId":"57938","fix":"66070","desc":"57940"},{"messageId":"57941","fix":"66071","desc":"57943"},{"messageId":"57938","fix":"66072","desc":"57940"},{"messageId":"57941","fix":"66073","desc":"57943"},{"messageId":"57938","fix":"66074","desc":"57940"},{"messageId":"57941","fix":"66075","desc":"57943"},{"messageId":"57938","fix":"66076","desc":"57940"},{"messageId":"57941","fix":"66077","desc":"57943"},{"messageId":"57938","fix":"66078","desc":"57940"},{"messageId":"57941","fix":"66079","desc":"57943"},{"messageId":"57938","fix":"66080","desc":"57940"},{"messageId":"57941","fix":"66081","desc":"57943"},{"messageId":"57938","fix":"66082","desc":"57940"},{"messageId":"57941","fix":"66083","desc":"57943"},{"messageId":"57938","fix":"66084","desc":"57940"},{"messageId":"57941","fix":"66085","desc":"57943"},{"messageId":"57938","fix":"66086","desc":"57940"},{"messageId":"57941","fix":"66087","desc":"57943"},{"messageId":"57938","fix":"66088","desc":"57940"},{"messageId":"57941","fix":"66089","desc":"57943"},{"messageId":"57938","fix":"66090","desc":"57940"},{"messageId":"57941","fix":"66091","desc":"57943"},{"messageId":"57938","fix":"66092","desc":"57940"},{"messageId":"57941","fix":"66093","desc":"57943"},{"messageId":"57938","fix":"66094","desc":"57940"},{"messageId":"57941","fix":"66095","desc":"57943"},{"messageId":"57938","fix":"66096","desc":"57940"},{"messageId":"57941","fix":"66097","desc":"57943"},{"messageId":"57938","fix":"66098","desc":"57940"},{"messageId":"57941","fix":"66099","desc":"57943"},{"messageId":"57938","fix":"66100","desc":"57940"},{"messageId":"57941","fix":"66101","desc":"57943"},{"messageId":"57938","fix":"66102","desc":"57940"},{"messageId":"57941","fix":"66103","desc":"57943"},{"messageId":"57938","fix":"66104","desc":"57940"},{"messageId":"57941","fix":"66105","desc":"57943"},{"messageId":"57938","fix":"66106","desc":"57940"},{"messageId":"57941","fix":"66107","desc":"57943"},{"messageId":"57938","fix":"66108","desc":"57940"},{"messageId":"57941","fix":"66109","desc":"57943"},{"messageId":"57938","fix":"66110","desc":"57940"},{"messageId":"57941","fix":"66111","desc":"57943"},{"messageId":"57938","fix":"66112","desc":"57940"},{"messageId":"57941","fix":"66113","desc":"57943"},{"messageId":"57938","fix":"66114","desc":"57940"},{"messageId":"57941","fix":"66115","desc":"57943"},{"messageId":"57938","fix":"66116","desc":"57940"},{"messageId":"57941","fix":"66117","desc":"57943"},{"messageId":"57938","fix":"66118","desc":"57940"},{"messageId":"57941","fix":"66119","desc":"57943"},{"messageId":"57938","fix":"66120","desc":"57940"},{"messageId":"57941","fix":"66121","desc":"57943"},{"messageId":"57938","fix":"66122","desc":"57940"},{"messageId":"57941","fix":"66123","desc":"57943"},{"messageId":"57938","fix":"66124","desc":"57940"},{"messageId":"57941","fix":"66125","desc":"57943"},{"messageId":"57938","fix":"66126","desc":"57940"},{"messageId":"57941","fix":"66127","desc":"57943"},{"messageId":"57938","fix":"66128","desc":"57940"},{"messageId":"57941","fix":"66129","desc":"57943"},{"messageId":"57938","fix":"66130","desc":"57940"},{"messageId":"57941","fix":"66131","desc":"57943"},{"messageId":"57938","fix":"66132","desc":"57940"},{"messageId":"57941","fix":"66133","desc":"57943"},{"messageId":"57938","fix":"66134","desc":"57940"},{"messageId":"57941","fix":"66135","desc":"57943"},{"messageId":"57938","fix":"66136","desc":"57940"},{"messageId":"57941","fix":"66137","desc":"57943"},{"messageId":"57938","fix":"66138","desc":"57940"},{"messageId":"57941","fix":"66139","desc":"57943"},{"messageId":"57938","fix":"66140","desc":"57940"},{"messageId":"57941","fix":"66141","desc":"57943"},{"messageId":"57938","fix":"66142","desc":"57940"},{"messageId":"57941","fix":"66143","desc":"57943"},{"messageId":"57938","fix":"66144","desc":"57940"},{"messageId":"57941","fix":"66145","desc":"57943"},{"messageId":"57938","fix":"66146","desc":"57940"},{"messageId":"57941","fix":"66147","desc":"57943"},{"messageId":"57938","fix":"66148","desc":"57940"},{"messageId":"57941","fix":"66149","desc":"57943"},{"messageId":"57938","fix":"66150","desc":"57940"},{"messageId":"57941","fix":"66151","desc":"57943"},{"messageId":"57938","fix":"66152","desc":"57940"},{"messageId":"57941","fix":"66153","desc":"57943"},{"messageId":"57938","fix":"66154","desc":"57940"},{"messageId":"57941","fix":"66155","desc":"57943"},{"messageId":"57938","fix":"66156","desc":"57940"},{"messageId":"57941","fix":"66157","desc":"57943"},{"messageId":"57938","fix":"66158","desc":"57940"},{"messageId":"57941","fix":"66159","desc":"57943"},{"messageId":"57938","fix":"66160","desc":"57940"},{"messageId":"57941","fix":"66161","desc":"57943"},{"messageId":"57938","fix":"66162","desc":"57940"},{"messageId":"57941","fix":"66163","desc":"57943"},{"messageId":"57938","fix":"66164","desc":"57940"},{"messageId":"57941","fix":"66165","desc":"57943"},{"messageId":"57938","fix":"66166","desc":"57940"},{"messageId":"57941","fix":"66167","desc":"57943"},{"messageId":"57938","fix":"66168","desc":"57940"},{"messageId":"57941","fix":"66169","desc":"57943"},{"messageId":"57938","fix":"66170","desc":"57940"},{"messageId":"57941","fix":"66171","desc":"57943"},{"messageId":"57938","fix":"66172","desc":"57940"},{"messageId":"57941","fix":"66173","desc":"57943"},{"messageId":"57938","fix":"66174","desc":"57940"},{"messageId":"57941","fix":"66175","desc":"57943"},{"messageId":"57938","fix":"66176","desc":"57940"},{"messageId":"57941","fix":"66177","desc":"57943"},{"messageId":"57938","fix":"66178","desc":"57940"},{"messageId":"57941","fix":"66179","desc":"57943"},{"messageId":"57938","fix":"66180","desc":"57940"},{"messageId":"57941","fix":"66181","desc":"57943"},{"messageId":"57938","fix":"66182","desc":"57940"},{"messageId":"57941","fix":"66183","desc":"57943"},{"messageId":"57938","fix":"66184","desc":"57940"},{"messageId":"57941","fix":"66185","desc":"57943"},{"messageId":"57938","fix":"66186","desc":"57940"},{"messageId":"57941","fix":"66187","desc":"57943"},{"messageId":"57938","fix":"66188","desc":"57940"},{"messageId":"57941","fix":"66189","desc":"57943"},{"messageId":"57938","fix":"66190","desc":"57940"},{"messageId":"57941","fix":"66191","desc":"57943"},{"messageId":"57938","fix":"66192","desc":"57940"},{"messageId":"57941","fix":"66193","desc":"57943"},{"messageId":"57938","fix":"66194","desc":"57940"},{"messageId":"57941","fix":"66195","desc":"57943"},{"messageId":"57938","fix":"66196","desc":"57940"},{"messageId":"57941","fix":"66197","desc":"57943"},"suggestUnknown",{"range":"66198","text":"66199"},"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct.","suggestNever",{"range":"66200","text":"66201"},"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of.",{"range":"66202","text":"66199"},{"range":"66203","text":"66201"},{"range":"66204","text":"66199"},{"range":"66205","text":"66201"},{"range":"66206","text":"66199"},{"range":"66207","text":"66201"},{"range":"66208","text":"66199"},{"range":"66209","text":"66201"},{"range":"66210","text":"66199"},{"range":"66211","text":"66201"},{"range":"66212","text":"66199"},{"range":"66213","text":"66201"},{"range":"66214","text":"66199"},{"range":"66215","text":"66201"},{"range":"66216","text":"66199"},{"range":"66217","text":"66201"},{"range":"66218","text":"66199"},{"range":"66219","text":"66201"},{"range":"66220","text":"66199"},{"range":"66221","text":"66201"},{"range":"66222","text":"66199"},{"range":"66223","text":"66201"},{"range":"66224","text":"66199"},{"range":"66225","text":"66201"},{"range":"66226","text":"66199"},{"range":"66227","text":"66201"},{"range":"66228","text":"66199"},{"range":"66229","text":"66201"},{"range":"66230","text":"66199"},{"range":"66231","text":"66201"},{"range":"66232","text":"66199"},{"range":"66233","text":"66201"},{"range":"66234","text":"66199"},{"range":"66235","text":"66201"},{"range":"66236","text":"66199"},{"range":"66237","text":"66201"},{"range":"66238","text":"66199"},{"range":"66239","text":"66201"},{"range":"66240","text":"66199"},{"range":"66241","text":"66201"},{"range":"66242","text":"66199"},{"range":"66243","text":"66201"},{"range":"66244","text":"66199"},{"range":"66245","text":"66201"},{"range":"66246","text":"66199"},{"range":"66247","text":"66201"},{"range":"66248","text":"66199"},{"range":"66249","text":"66201"},{"range":"66250","text":"66199"},{"range":"66251","text":"66201"},{"range":"66252","text":"66199"},{"range":"66253","text":"66201"},{"range":"66254","text":"66199"},{"range":"66255","text":"66201"},{"range":"66256","text":"66199"},{"range":"66257","text":"66201"},{"range":"66258","text":"66199"},{"range":"66259","text":"66201"},{"range":"66260","text":"66199"},{"range":"66261","text":"66201"},{"range":"66262","text":"66199"},{"range":"66263","text":"66201"},{"range":"66264","text":"66199"},{"range":"66265","text":"66201"},{"range":"66266","text":"66199"},{"range":"66267","text":"66201"},{"range":"66268","text":"66199"},{"range":"66269","text":"66201"},{"range":"66270","text":"66199"},{"range":"66271","text":"66201"},{"range":"66272","text":"66199"},{"range":"66273","text":"66201"},{"range":"66274","text":"66199"},{"range":"66275","text":"66201"},{"range":"66276","text":"66199"},{"range":"66277","text":"66201"},{"range":"66278","text":"66199"},{"range":"66279","text":"66201"},{"range":"66280","text":"66199"},{"range":"66281","text":"66201"},{"range":"66282","text":"66199"},{"range":"66283","text":"66201"},{"range":"66284","text":"66199"},{"range":"66285","text":"66201"},{"range":"66286","text":"66199"},{"range":"66287","text":"66201"},{"range":"66288","text":"66199"},{"range":"66289","text":"66201"},{"range":"66290","text":"66199"},{"range":"66291","text":"66201"},{"range":"66292","text":"66199"},{"range":"66293","text":"66201"},{"range":"66294","text":"66199"},{"range":"66295","text":"66201"},{"range":"66296","text":"66199"},{"range":"66297","text":"66201"},{"range":"66298","text":"66199"},{"range":"66299","text":"66201"},{"range":"66300","text":"66199"},{"range":"66301","text":"66201"},{"range":"66302","text":"66199"},{"range":"66303","text":"66201"},{"range":"66304","text":"66199"},{"range":"66305","text":"66201"},{"range":"66306","text":"66199"},{"range":"66307","text":"66201"},{"range":"66308","text":"66199"},{"range":"66309","text":"66201"},{"range":"66310","text":"66199"},{"range":"66311","text":"66201"},{"range":"66312","text":"66199"},{"range":"66313","text":"66201"},{"range":"66314","text":"66199"},{"range":"66315","text":"66201"},{"range":"66316","text":"66199"},{"range":"66317","text":"66201"},{"range":"66318","text":"66199"},{"range":"66319","text":"66201"},{"range":"66320","text":"66199"},{"range":"66321","text":"66201"},{"range":"66322","text":"66199"},{"range":"66323","text":"66201"},{"range":"66324","text":"66199"},{"range":"66325","text":"66201"},{"range":"66326","text":"66199"},{"range":"66327","text":"66201"},{"range":"66328","text":"66199"},{"range":"66329","text":"66201"},{"range":"66330","text":"66199"},{"range":"66331","text":"66201"},{"range":"66332","text":"66199"},{"range":"66333","text":"66201"},{"range":"66334","text":"66199"},{"range":"66335","text":"66201"},{"range":"66336","text":"66199"},{"range":"66337","text":"66201"},{"range":"66338","text":"66199"},{"range":"66339","text":"66201"},{"range":"66340","text":"66199"},{"range":"66341","text":"66201"},{"range":"66342","text":"66199"},{"range":"66343","text":"66201"},{"range":"66344","text":"66199"},{"range":"66345","text":"66201"},{"range":"66346","text":"66199"},{"range":"66347","text":"66201"},{"range":"66348","text":"66199"},{"range":"66349","text":"66201"},{"range":"66350","text":"66199"},{"range":"66351","text":"66201"},{"range":"66352","text":"66199"},{"range":"66353","text":"66201"},{"range":"66354","text":"66199"},{"range":"66355","text":"66201"},{"range":"66356","text":"66199"},{"range":"66357","text":"66201"},{"range":"66358","text":"66199"},{"range":"66359","text":"66201"},{"range":"66360","text":"66199"},{"range":"66361","text":"66201"},{"range":"66362","text":"66199"},{"range":"66363","text":"66201"},{"range":"66364","text":"66199"},{"range":"66365","text":"66201"},{"range":"66366","text":"66199"},{"range":"66367","text":"66201"},{"range":"66368","text":"66199"},{"range":"66369","text":"66201"},{"range":"66370","text":"66199"},{"range":"66371","text":"66201"},{"range":"66372","text":"66199"},{"range":"66373","text":"66201"},{"range":"66374","text":"66199"},{"range":"66375","text":"66201"},{"range":"66376","text":"66199"},{"range":"66377","text":"66201"},{"range":"66378","text":"66199"},{"range":"66379","text":"66201"},{"range":"66380","text":"66199"},{"range":"66381","text":"66201"},{"range":"66382","text":"66199"},{"range":"66383","text":"66201"},{"range":"66384","text":"66199"},{"range":"66385","text":"66201"},{"range":"66386","text":"66199"},{"range":"66387","text":"66201"},{"range":"66388","text":"66199"},{"range":"66389","text":"66201"},{"range":"66390","text":"66199"},{"range":"66391","text":"66201"},{"range":"66392","text":"66199"},{"range":"66393","text":"66201"},{"range":"66394","text":"66199"},{"range":"66395","text":"66201"},{"range":"66396","text":"66199"},{"range":"66397","text":"66201"},{"range":"66398","text":"66199"},{"range":"66399","text":"66201"},{"range":"66400","text":"66199"},{"range":"66401","text":"66201"},{"range":"66402","text":"66199"},{"range":"66403","text":"66201"},{"range":"66404","text":"66199"},{"range":"66405","text":"66201"},{"range":"66406","text":"66199"},{"range":"66407","text":"66201"},{"range":"66408","text":"66199"},{"range":"66409","text":"66201"},{"range":"66410","text":"66199"},{"range":"66411","text":"66201"},{"range":"66412","text":"66199"},{"range":"66413","text":"66201"},{"range":"66414","text":"66199"},{"range":"66415","text":"66201"},{"range":"66416","text":"66199"},{"range":"66417","text":"66201"},{"range":"66418","text":"66199"},{"range":"66419","text":"66201"},{"range":"66420","text":"66199"},{"range":"66421","text":"66201"},{"range":"66422","text":"66199"},{"range":"66423","text":"66201"},{"range":"66424","text":"66199"},{"range":"66425","text":"66201"},{"range":"66426","text":"66199"},{"range":"66427","text":"66201"},{"range":"66428","text":"66199"},{"range":"66429","text":"66201"},{"range":"66430","text":"66199"},{"range":"66431","text":"66201"},{"range":"66432","text":"66199"},{"range":"66433","text":"66201"},{"range":"66434","text":"66199"},{"range":"66435","text":"66201"},{"range":"66436","text":"66199"},{"range":"66437","text":"66201"},{"range":"66438","text":"66199"},{"range":"66439","text":"66201"},{"range":"66440","text":"66199"},{"range":"66441","text":"66201"},{"range":"66442","text":"66199"},{"range":"66443","text":"66201"},{"range":"66444","text":"66199"},{"range":"66445","text":"66201"},{"range":"66446","text":"66199"},{"range":"66447","text":"66201"},{"range":"66448","text":"66199"},{"range":"66449","text":"66201"},{"range":"66450","text":"66199"},{"range":"66451","text":"66201"},{"range":"66452","text":"66199"},{"range":"66453","text":"66201"},{"range":"66454","text":"66199"},{"range":"66455","text":"66201"},{"range":"66456","text":"66199"},{"range":"66457","text":"66201"},{"range":"66458","text":"66199"},{"range":"66459","text":"66201"},{"range":"66460","text":"66199"},{"range":"66461","text":"66201"},{"range":"66462","text":"66199"},{"range":"66463","text":"66201"},{"range":"66464","text":"66199"},{"range":"66465","text":"66201"},{"range":"66466","text":"66199"},{"range":"66467","text":"66201"},{"range":"66468","text":"66199"},{"range":"66469","text":"66201"},{"range":"66470","text":"66199"},{"range":"66471","text":"66201"},{"range":"66472","text":"66199"},{"range":"66473","text":"66201"},{"range":"66474","text":"66199"},{"range":"66475","text":"66201"},{"range":"66476","text":"66199"},{"range":"66477","text":"66201"},{"range":"66478","text":"66199"},{"range":"66479","text":"66201"},{"range":"66480","text":"66199"},{"range":"66481","text":"66201"},{"range":"66482","text":"66199"},{"range":"66483","text":"66201"},{"range":"66484","text":"66199"},{"range":"66485","text":"66201"},{"range":"66486","text":"66199"},{"range":"66487","text":"66201"},{"range":"66488","text":"66199"},{"range":"66489","text":"66201"},{"range":"66490","text":"66199"},{"range":"66491","text":"66201"},{"range":"66492","text":"66199"},{"range":"66493","text":"66201"},{"range":"66494","text":"66199"},{"range":"66495","text":"66201"},{"range":"66496","text":"66199"},{"range":"66497","text":"66201"},{"range":"66498","text":"66199"},{"range":"66499","text":"66201"},{"range":"66500","text":"66199"},{"range":"66501","text":"66201"},{"range":"66502","text":"66199"},{"range":"66503","text":"66201"},"directive","",{"range":"66504","text":"66199"},{"range":"66505","text":"66201"},{"range":"66506","text":"66199"},{"range":"66507","text":"66201"},{"range":"66508","text":"66199"},{"range":"66509","text":"66201"},{"range":"66510","text":"66199"},{"range":"66511","text":"66201"},{"range":"66512","text":"66199"},{"range":"66513","text":"66201"},{"range":"66514","text":"66199"},{"range":"66515","text":"66201"},{"range":"66516","text":"66199"},{"range":"66517","text":"66201"},{"range":"66518","text":"66199"},{"range":"66519","text":"66201"},{"range":"66520","text":"66199"},{"range":"66521","text":"66201"},{"range":"66522","text":"66199"},{"range":"66523","text":"66201"},{"range":"66524","text":"66199"},{"range":"66525","text":"66201"},{"range":"66526","text":"66199"},{"range":"66527","text":"66201"},{"range":"66528","text":"66199"},{"range":"66529","text":"66201"},{"range":"66530","text":"66199"},{"range":"66531","text":"66201"},{"range":"66532","text":"66199"},{"range":"66533","text":"66201"},{"range":"66534","text":"66199"},{"range":"66535","text":"66201"},{"range":"66536","text":"66199"},{"range":"66537","text":"66201"},{"range":"66538","text":"66199"},{"range":"66539","text":"66201"},{"range":"66540","text":"66199"},{"range":"66541","text":"66201"},{"range":"66542","text":"66199"},{"range":"66543","text":"66201"},"Update the dependencies array to be: [versionInfo, platform]",{"range":"66544","text":"66545"},"Update the dependencies array to be: [fetchData]",{"range":"66546","text":"66547"},"initial dashboard load only","localStorage hydration, runs once","Update the dependencies array to be: [jsonl, endpoint, onResult, t]",{"range":"66548","text":"66549"},"teknik string kontrolü, kullanıcı metni araması değil","Update the dependencies array to be: [LOCAL_PROVIDERS]",{"range":"66550","text":"66551"},"Update the dependencies array to be: [isExpanded, loadSavedMappings, status]",{"range":"66552","text":"66553"},"data URI, no loader needed","Update the dependencies array to be: [plans, primaryConnectionId, selectedConn]",{"range":"66554","text":"66555"},"Update the dependencies array to be: [open, editPool, initialGroupId, editPoolExclusive, plans]",{"range":"66556","text":"66557"},"Update the dependencies array to be: [open, editPool, groups, groupId]",{"range":"66558","text":"66559"},"Update the dependencies array to be: [pools]",{"range":"66560","text":"66561"},"Update the dependencies array to be: [availableModels, configState, configState.model, setConfigState]",{"range":"66562","text":"66563"},"Update the dependencies array to be: [configState, reasoningSpec, reasoningSpec.show, setConfigState]",{"range":"66564","text":"66565"},"Wrap the definition of 'clearResults' in its own useCallback() Hook.",{"range":"66566","text":"66567"},"Update the dependencies array to be: [getUpstreamHeadersRecord, open, protocol]",{"range":"66568","text":"66569"},"see above","Update the dependencies array to be: [searchParams, setProviderDisplayMode]",{"range":"66570","text":"66571"},"Update the dependencies array to be: [searchParams, setActiveCategory, setActiveServiceKind, setModelSearchQuery, setSearchQuery, setShowFreeOnly]",{"range":"66572","text":"66573"},"Update the dependencies array to be: [L]",{"range":"66574","text":"66575"},"Update the dependencies array to be: [customThemeColor]",{"range":"66576","text":"66577"},"Update the dependencies array to be: [notify, t]",{"range":"66578","text":"66579"},"Update the dependencies array to be: [load, providerKey]",{"range":"66580","text":"66581"},"Update the dependencies array to be: [t]",{"range":"66582","text":"66583"},"async data fetch on filter change","Update the dependencies array to be: [forceOpen, onOpenChange]",{"range":"66584","text":"66585"},"Update the dependencies array to be: [defaultOpen, forceOpen, onOpenChange]",{"range":"66586","text":"66587"},"Update the dependencies array to be: [onFirstOpen]",{"range":"66588","text":"66589"},{"range":"66590","text":"66579"},"Update the dependencies array to be: [providers, activeSet, lastSet, errorSet]",{"range":"66591","text":"66592"},"Update the dependencies array to be: [apiKey, effectiveWsUrl, channels, autoReconnect, connection.reconnectAttempt]",{"range":"66593","text":"66594"},"Update the dependencies array to be: [isOpen, t]",{"range":"66595","text":"66596"},"Update the dependencies array to be: [router]",{"range":"66597","text":"66598"},"Update the dependencies array to be: [isOpen, activeProviders, fetchProviderModels]",{"range":"66599","text":"66600"},"operator-supplied remote URL, not a static/known asset","external SVG from thesvg.org, not a static/known asset","Update the dependencies array to be: [isOpen, level, levelId, resetFields, t]",{"range":"66601","text":"66602"},"Update the dependencies array to be: [columnSortMap]",{"range":"66603","text":"66604"},"Update the dependencies array to be: [columnSortMap, sortBy]",{"range":"66605","text":"66606"},"Wrap the definition of 'openDetail' in its own useCallback() Hook.",{"range":"66607","text":"66608"},"Update the dependencies array to be: [initialSelectedId, openDetail]",{"range":"66609","text":"66610"},"Update the dependencies array to be: [closeDetail, currentLogIndex, openDetail, sortedLogsForNav]",{"range":"66611","text":"66612"},{"range":"66613","text":"66612"},"Update the dependencies array to be: [activeHref, collapsed, pinnedSections, sidebarExpansionLoaded, visibleSections]",{"range":"66614","text":"66615"},{"range":"66616","text":"66199"},{"range":"66617","text":"66201"},{"range":"66618","text":"66199"},{"range":"66619","text":"66201"},{"range":"66620","text":"66199"},{"range":"66621","text":"66201"},{"range":"66622","text":"66199"},{"range":"66623","text":"66201"},{"range":"66624","text":"66199"},{"range":"66625","text":"66201"},{"range":"66626","text":"66199"},{"range":"66627","text":"66201"},{"range":"66628","text":"66199"},{"range":"66629","text":"66201"},{"range":"66630","text":"66199"},{"range":"66631","text":"66201"},{"range":"66632","text":"66199"},{"range":"66633","text":"66201"},{"range":"66634","text":"66199"},{"range":"66635","text":"66201"},{"range":"66636","text":"66199"},{"range":"66637","text":"66201"},{"range":"66638","text":"66199"},{"range":"66639","text":"66201"},{"range":"66640","text":"66199"},{"range":"66641","text":"66201"},{"range":"66642","text":"66199"},{"range":"66643","text":"66201"},{"range":"66644","text":"66199"},{"range":"66645","text":"66201"},{"range":"66646","text":"66199"},{"range":"66647","text":"66201"},{"range":"66648","text":"66199"},{"range":"66649","text":"66201"},{"range":"66650","text":"66199"},{"range":"66651","text":"66201"},{"range":"66652","text":"66199"},{"range":"66653","text":"66201"},{"range":"66654","text":"66199"},{"range":"66655","text":"66201"},{"range":"66656","text":"66199"},{"range":"66657","text":"66201"},{"range":"66658","text":"66199"},{"range":"66659","text":"66201"},{"range":"66660","text":"66199"},{"range":"66661","text":"66201"},{"range":"66662","text":"66199"},{"range":"66663","text":"66201"},{"range":"66664","text":"66199"},{"range":"66665","text":"66201"},{"range":"66666","text":"66199"},{"range":"66667","text":"66201"},{"range":"66668","text":"66199"},{"range":"66669","text":"66201"},{"range":"66670","text":"66199"},{"range":"66671","text":"66201"},{"range":"66672","text":"66199"},{"range":"66673","text":"66201"},{"range":"66674","text":"66199"},{"range":"66675","text":"66201"},{"range":"66676","text":"66199"},{"range":"66677","text":"66201"},{"range":"66678","text":"66199"},{"range":"66679","text":"66201"},{"range":"66680","text":"66199"},{"range":"66681","text":"66201"},{"range":"66682","text":"66199"},{"range":"66683","text":"66201"},{"range":"66684","text":"66199"},{"range":"66685","text":"66201"},{"range":"66686","text":"66199"},{"range":"66687","text":"66201"},{"range":"66688","text":"66199"},{"range":"66689","text":"66201"},{"range":"66690","text":"66199"},{"range":"66691","text":"66201"},{"range":"66692","text":"66199"},{"range":"66693","text":"66201"},{"range":"66694","text":"66199"},{"range":"66695","text":"66201"},{"range":"66696","text":"66199"},{"range":"66697","text":"66201"},{"range":"66698","text":"66199"},{"range":"66699","text":"66201"},{"range":"66700","text":"66199"},{"range":"66701","text":"66201"},{"range":"66702","text":"66199"},{"range":"66703","text":"66201"},{"range":"66704","text":"66199"},{"range":"66705","text":"66201"},{"range":"66706","text":"66199"},{"range":"66707","text":"66201"},{"range":"66708","text":"66199"},{"range":"66709","text":"66201"},{"range":"66710","text":"66199"},{"range":"66711","text":"66201"},{"range":"66712","text":"66199"},{"range":"66713","text":"66201"},{"range":"66714","text":"66199"},{"range":"66715","text":"66201"},{"range":"66716","text":"66199"},{"range":"66717","text":"66201"},{"range":"66718","text":"66199"},{"range":"66719","text":"66201"},{"range":"66720","text":"66199"},{"range":"66721","text":"66201"},{"range":"66722","text":"66199"},{"range":"66723","text":"66201"},{"range":"66724","text":"66199"},{"range":"66725","text":"66201"},{"range":"66726","text":"66199"},{"range":"66727","text":"66201"},{"range":"66728","text":"66199"},{"range":"66729","text":"66201"},{"range":"66730","text":"66199"},{"range":"66731","text":"66201"},{"range":"66732","text":"66199"},{"range":"66733","text":"66201"},{"range":"66734","text":"66199"},{"range":"66735","text":"66201"},{"range":"66736","text":"66199"},{"range":"66737","text":"66201"},{"range":"66738","text":"66199"},{"range":"66739","text":"66201"},{"range":"66740","text":"66199"},{"range":"66741","text":"66201"},{"range":"66742","text":"66199"},{"range":"66743","text":"66201"},{"range":"66744","text":"66199"},{"range":"66745","text":"66201"},{"range":"66746","text":"66199"},{"range":"66747","text":"66201"},{"range":"66748","text":"66199"},{"range":"66749","text":"66201"},{"range":"66750","text":"66199"},{"range":"66751","text":"66201"},{"range":"66752","text":"66199"},{"range":"66753","text":"66201"},{"range":"66754","text":"66199"},{"range":"66755","text":"66201"},{"range":"66756","text":"66199"},{"range":"66757","text":"66201"},{"range":"66758","text":"66199"},{"range":"66759","text":"66201"},{"range":"66760","text":"66199"},{"range":"66761","text":"66201"},{"range":"66762","text":"66199"},{"range":"66763","text":"66201"},{"range":"66764","text":"66199"},{"range":"66765","text":"66201"},{"range":"66766","text":"66199"},{"range":"66767","text":"66201"},{"range":"66768","text":"66199"},{"range":"66769","text":"66201"},{"range":"66770","text":"66199"},{"range":"66771","text":"66201"},{"range":"66772","text":"66199"},{"range":"66773","text":"66201"},{"range":"66774","text":"66199"},{"range":"66775","text":"66201"},{"range":"66776","text":"66199"},{"range":"66777","text":"66201"},{"range":"66778","text":"66199"},{"range":"66779","text":"66201"},{"range":"66780","text":"66199"},{"range":"66781","text":"66201"},{"range":"66782","text":"66199"},{"range":"66783","text":"66201"},{"range":"66784","text":"66199"},{"range":"66785","text":"66201"},{"range":"66786","text":"66199"},{"range":"66787","text":"66201"},{"range":"66788","text":"66199"},{"range":"66789","text":"66201"},{"range":"66790","text":"66199"},{"range":"66791","text":"66201"},{"range":"66792","text":"66199"},{"range":"66793","text":"66201"},{"range":"66794","text":"66199"},{"range":"66795","text":"66201"},{"range":"66796","text":"66199"},{"range":"66797","text":"66201"},{"range":"66798","text":"66199"},{"range":"66799","text":"66201"},{"range":"66800","text":"66199"},{"range":"66801","text":"66201"},{"range":"66802","text":"66199"},{"range":"66803","text":"66201"},{"range":"66804","text":"66199"},{"range":"66805","text":"66201"},{"range":"66806","text":"66199"},{"range":"66807","text":"66201"},{"range":"66808","text":"66199"},{"range":"66809","text":"66201"},{"range":"66810","text":"66199"},{"range":"66811","text":"66201"},{"range":"66812","text":"66199"},{"range":"66813","text":"66201"},{"range":"66814","text":"66199"},{"range":"66815","text":"66201"},{"range":"66816","text":"66199"},{"range":"66817","text":"66201"},{"range":"66818","text":"66199"},{"range":"66819","text":"66201"},{"range":"66820","text":"66199"},{"range":"66821","text":"66201"},{"range":"66822","text":"66199"},{"range":"66823","text":"66201"},{"range":"66824","text":"66199"},{"range":"66825","text":"66201"},{"range":"66826","text":"66199"},{"range":"66827","text":"66201"},{"range":"66828","text":"66199"},{"range":"66829","text":"66201"},{"range":"66830","text":"66199"},{"range":"66831","text":"66201"},{"range":"66832","text":"66199"},{"range":"66833","text":"66201"},{"range":"66834","text":"66199"},{"range":"66835","text":"66201"},{"range":"66836","text":"66199"},{"range":"66837","text":"66201"},{"range":"66838","text":"66199"},{"range":"66839","text":"66201"},{"range":"66840","text":"66199"},{"range":"66841","text":"66201"},{"range":"66842","text":"66199"},{"range":"66843","text":"66201"},{"range":"66844","text":"66199"},{"range":"66845","text":"66201"},{"range":"66846","text":"66199"},{"range":"66847","text":"66201"},{"range":"66848","text":"66199"},{"range":"66849","text":"66201"},{"range":"66850","text":"66199"},{"range":"66851","text":"66201"},{"range":"66852","text":"66199"},{"range":"66853","text":"66201"},{"range":"66854","text":"66199"},{"range":"66855","text":"66201"},{"range":"66856","text":"66199"},{"range":"66857","text":"66201"},{"range":"66858","text":"66199"},{"range":"66859","text":"66201"},{"range":"66860","text":"66199"},{"range":"66861","text":"66201"},{"range":"66862","text":"66199"},{"range":"66863","text":"66201"},{"range":"66864","text":"66199"},{"range":"66865","text":"66201"},{"range":"66866","text":"66199"},{"range":"66867","text":"66201"},{"range":"66868","text":"66199"},{"range":"66869","text":"66201"},{"range":"66870","text":"66199"},{"range":"66871","text":"66201"},{"range":"66872","text":"66199"},{"range":"66873","text":"66201"},{"range":"66874","text":"66199"},{"range":"66875","text":"66201"},{"range":"66876","text":"66199"},{"range":"66877","text":"66201"},{"range":"66878","text":"66199"},{"range":"66879","text":"66201"},{"range":"66880","text":"66199"},{"range":"66881","text":"66201"},{"range":"66882","text":"66199"},{"range":"66883","text":"66201"},{"range":"66884","text":"66199"},{"range":"66885","text":"66201"},{"range":"66886","text":"66199"},{"range":"66887","text":"66201"},{"range":"66888","text":"66199"},{"range":"66889","text":"66201"},{"range":"66890","text":"66199"},{"range":"66891","text":"66201"},{"range":"66892","text":"66199"},{"range":"66893","text":"66201"},{"range":"66894","text":"66199"},{"range":"66895","text":"66201"},{"range":"66896","text":"66199"},{"range":"66897","text":"66201"},{"range":"66898","text":"66199"},{"range":"66899","text":"66201"},{"range":"66900","text":"66199"},{"range":"66901","text":"66201"},{"range":"66902","text":"66199"},{"range":"66903","text":"66201"},{"range":"66904","text":"66199"},{"range":"66905","text":"66201"},{"range":"66906","text":"66199"},{"range":"66907","text":"66201"},{"range":"66908","text":"66199"},{"range":"66909","text":"66201"},{"range":"66910","text":"66199"},{"range":"66911","text":"66201"},{"range":"66912","text":"66199"},{"range":"66913","text":"66201"},{"range":"66914","text":"66199"},{"range":"66915","text":"66201"},{"range":"66916","text":"66199"},{"range":"66917","text":"66201"},{"range":"66918","text":"66199"},{"range":"66919","text":"66201"},{"range":"66920","text":"66199"},{"range":"66921","text":"66201"},{"range":"66922","text":"66199"},{"range":"66923","text":"66201"},{"range":"66924","text":"66199"},{"range":"66925","text":"66201"},{"range":"66926","text":"66199"},{"range":"66927","text":"66201"},{"range":"66928","text":"66199"},{"range":"66929","text":"66201"},{"range":"66930","text":"66199"},{"range":"66931","text":"66201"},{"range":"66932","text":"66199"},{"range":"66933","text":"66201"},{"range":"66934","text":"66199"},{"range":"66935","text":"66201"},{"range":"66936","text":"66199"},{"range":"66937","text":"66201"},{"range":"66938","text":"66199"},{"range":"66939","text":"66201"},{"range":"66940","text":"66199"},{"range":"66941","text":"66201"},{"range":"66942","text":"66199"},{"range":"66943","text":"66201"},{"range":"66944","text":"66199"},{"range":"66945","text":"66201"},{"range":"66946","text":"66199"},{"range":"66947","text":"66201"},{"range":"66948","text":"66199"},{"range":"66949","text":"66201"},{"range":"66950","text":"66199"},{"range":"66951","text":"66201"},{"range":"66952","text":"66199"},{"range":"66953","text":"66201"},{"range":"66954","text":"66199"},{"range":"66955","text":"66201"},{"range":"66956","text":"66199"},{"range":"66957","text":"66201"},{"range":"66958","text":"66199"},{"range":"66959","text":"66201"},{"range":"66960","text":"66199"},{"range":"66961","text":"66201"},{"range":"66962","text":"66199"},{"range":"66963","text":"66201"},{"range":"66964","text":"66199"},{"range":"66965","text":"66201"},{"range":"66966","text":"66199"},{"range":"66967","text":"66201"},{"range":"66968","text":"66199"},{"range":"66969","text":"66201"},{"range":"66970","text":"66199"},{"range":"66971","text":"66201"},{"range":"66972","text":"66199"},{"range":"66973","text":"66201"},{"range":"66974","text":"66199"},{"range":"66975","text":"66201"},{"range":"66976","text":"66199"},{"range":"66977","text":"66201"},{"range":"66978","text":"66199"},{"range":"66979","text":"66201"},{"range":"66980","text":"66199"},{"range":"66981","text":"66201"},{"range":"66982","text":"66199"},{"range":"66983","text":"66201"},{"range":"66984","text":"66199"},{"range":"66985","text":"66201"},{"range":"66986","text":"66199"},{"range":"66987","text":"66201"},{"range":"66988","text":"66199"},{"range":"66989","text":"66201"},{"range":"66990","text":"66199"},{"range":"66991","text":"66201"},{"range":"66992","text":"66199"},{"range":"66993","text":"66201"},{"range":"66994","text":"66199"},{"range":"66995","text":"66201"},{"range":"66996","text":"66199"},{"range":"66997","text":"66201"},{"range":"66998","text":"66199"},{"range":"66999","text":"66201"},{"range":"67000","text":"66199"},{"range":"67001","text":"66201"},{"range":"67002","text":"66199"},{"range":"67003","text":"66201"},{"range":"67004","text":"66199"},{"range":"67005","text":"66201"},{"range":"67006","text":"66199"},{"range":"67007","text":"66201"},{"range":"67008","text":"66199"},{"range":"67009","text":"66201"},{"range":"67010","text":"66199"},{"range":"67011","text":"66201"},{"range":"67012","text":"66199"},{"range":"67013","text":"66201"},{"range":"67014","text":"66199"},{"range":"67015","text":"66201"},{"range":"67016","text":"66199"},{"range":"67017","text":"66201"},{"range":"67018","text":"66199"},{"range":"67019","text":"66201"},{"range":"67020","text":"66199"},{"range":"67021","text":"66201"},{"range":"67022","text":"66199"},{"range":"67023","text":"66201"},{"range":"67024","text":"66199"},{"range":"67025","text":"66201"},{"range":"67026","text":"66199"},{"range":"67027","text":"66201"},{"range":"67028","text":"66199"},{"range":"67029","text":"66201"},{"range":"67030","text":"66199"},{"range":"67031","text":"66201"},{"range":"67032","text":"66199"},{"range":"67033","text":"66201"},{"range":"67034","text":"66199"},{"range":"67035","text":"66201"},{"range":"67036","text":"66199"},{"range":"67037","text":"66201"},{"range":"67038","text":"66199"},{"range":"67039","text":"66201"},{"range":"67040","text":"66199"},{"range":"67041","text":"66201"},{"range":"67042","text":"66199"},{"range":"67043","text":"66201"},{"range":"67044","text":"66199"},{"range":"67045","text":"66201"},{"range":"67046","text":"66199"},{"range":"67047","text":"66201"},{"range":"67048","text":"66199"},{"range":"67049","text":"66201"},{"range":"67050","text":"66199"},{"range":"67051","text":"66201"},{"range":"67052","text":"66199"},{"range":"67053","text":"66201"},{"range":"67054","text":"66199"},{"range":"67055","text":"66201"},{"range":"67056","text":"66199"},{"range":"67057","text":"66201"},{"range":"67058","text":"66199"},{"range":"67059","text":"66201"},{"range":"67060","text":"66199"},{"range":"67061","text":"66201"},{"range":"67062","text":"66199"},{"range":"67063","text":"66201"},{"range":"67064","text":"66199"},{"range":"67065","text":"66201"},{"range":"67066","text":"66199"},{"range":"67067","text":"66201"},{"range":"67068","text":"66199"},{"range":"67069","text":"66201"},{"range":"67070","text":"66199"},{"range":"67071","text":"66201"},{"range":"67072","text":"66199"},{"range":"67073","text":"66201"},{"range":"67074","text":"66199"},{"range":"67075","text":"66201"},{"range":"67076","text":"66199"},{"range":"67077","text":"66201"},{"range":"67078","text":"66199"},{"range":"67079","text":"66201"},{"range":"67080","text":"66199"},{"range":"67081","text":"66201"},{"range":"67082","text":"66199"},{"range":"67083","text":"66201"},{"range":"67084","text":"66199"},{"range":"67085","text":"66201"},{"range":"67086","text":"66199"},{"range":"67087","text":"66201"},{"range":"67088","text":"66199"},{"range":"67089","text":"66201"},{"range":"67090","text":"66199"},{"range":"67091","text":"66201"},{"range":"67092","text":"66199"},{"range":"67093","text":"66201"},{"range":"67094","text":"66199"},{"range":"67095","text":"66201"},{"range":"67096","text":"66199"},{"range":"67097","text":"66201"},{"range":"67098","text":"66199"},{"range":"67099","text":"66201"},{"range":"67100","text":"66199"},{"range":"67101","text":"66201"},{"range":"67102","text":"66199"},{"range":"67103","text":"66201"},{"range":"67104","text":"66199"},{"range":"67105","text":"66201"},{"range":"67106","text":"66199"},{"range":"67107","text":"66201"},{"range":"67108","text":"66199"},{"range":"67109","text":"66201"},{"range":"67110","text":"66199"},{"range":"67111","text":"66201"},{"range":"67112","text":"66199"},{"range":"67113","text":"66201"},{"range":"67114","text":"66199"},{"range":"67115","text":"66201"},{"range":"67116","text":"66199"},{"range":"67117","text":"66201"},{"range":"67118","text":"66199"},{"range":"67119","text":"66201"},{"range":"67120","text":"66199"},{"range":"67121","text":"66201"},{"range":"67122","text":"66199"},{"range":"67123","text":"66201"},{"range":"67124","text":"66199"},{"range":"67125","text":"66201"},{"range":"67126","text":"66199"},{"range":"67127","text":"66201"},{"range":"67128","text":"66199"},{"range":"67129","text":"66201"},{"range":"67130","text":"66199"},{"range":"67131","text":"66201"},{"range":"67132","text":"66199"},{"range":"67133","text":"66201"},{"range":"67134","text":"66199"},{"range":"67135","text":"66201"},{"range":"67136","text":"66199"},{"range":"67137","text":"66201"},{"range":"67138","text":"66199"},{"range":"67139","text":"66201"},{"range":"67140","text":"66199"},{"range":"67141","text":"66201"},{"range":"67142","text":"66199"},{"range":"67143","text":"66201"},{"range":"67144","text":"66199"},{"range":"67145","text":"66201"},{"range":"67146","text":"66199"},{"range":"67147","text":"66201"},{"range":"67148","text":"66199"},{"range":"67149","text":"66201"},{"range":"67150","text":"66199"},{"range":"67151","text":"66201"},{"range":"67152","text":"66199"},{"range":"67153","text":"66201"},{"range":"67154","text":"66199"},{"range":"67155","text":"66201"},{"range":"67156","text":"66199"},{"range":"67157","text":"66201"},{"range":"67158","text":"66199"},{"range":"67159","text":"66201"},{"range":"67160","text":"66199"},{"range":"67161","text":"66201"},{"range":"67162","text":"66199"},{"range":"67163","text":"66201"},{"range":"67164","text":"66199"},{"range":"67165","text":"66201"},{"range":"67166","text":"66199"},{"range":"67167","text":"66201"},{"range":"67168","text":"66199"},{"range":"67169","text":"66201"},{"range":"67170","text":"66199"},{"range":"67171","text":"66201"},{"range":"67172","text":"66199"},{"range":"67173","text":"66201"},{"range":"67174","text":"66199"},{"range":"67175","text":"66201"},{"range":"67176","text":"66199"},{"range":"67177","text":"66201"},{"range":"67178","text":"66199"},{"range":"67179","text":"66201"},{"range":"67180","text":"66199"},{"range":"67181","text":"66201"},{"range":"67182","text":"66199"},{"range":"67183","text":"66201"},{"range":"67184","text":"66199"},{"range":"67185","text":"66201"},{"range":"67186","text":"66199"},{"range":"67187","text":"66201"},{"range":"67188","text":"66199"},{"range":"67189","text":"66201"},{"range":"67190","text":"66199"},{"range":"67191","text":"66201"},{"range":"67192","text":"66199"},{"range":"67193","text":"66201"},{"range":"67194","text":"66199"},{"range":"67195","text":"66201"},{"range":"67196","text":"66199"},{"range":"67197","text":"66201"},{"range":"67198","text":"66199"},{"range":"67199","text":"66201"},{"range":"67200","text":"66199"},{"range":"67201","text":"66201"},{"range":"67202","text":"66199"},{"range":"67203","text":"66201"},{"range":"67204","text":"66199"},{"range":"67205","text":"66201"},{"range":"67206","text":"66199"},{"range":"67207","text":"66201"},{"range":"67208","text":"66199"},{"range":"67209","text":"66201"},{"range":"67210","text":"66199"},{"range":"67211","text":"66201"},{"range":"67212","text":"66199"},{"range":"67213","text":"66201"},{"range":"67214","text":"66199"},{"range":"67215","text":"66201"},{"range":"67216","text":"66199"},{"range":"67217","text":"66201"},{"range":"67218","text":"66199"},{"range":"67219","text":"66201"},{"range":"67220","text":"66199"},{"range":"67221","text":"66201"},{"range":"67222","text":"66199"},{"range":"67223","text":"66201"},{"range":"67224","text":"66199"},{"range":"67225","text":"66201"},{"range":"67226","text":"66199"},{"range":"67227","text":"66201"},{"range":"67228","text":"66199"},{"range":"67229","text":"66201"},{"range":"67230","text":"66199"},{"range":"67231","text":"66201"},{"range":"67232","text":"66199"},{"range":"67233","text":"66201"},{"range":"67234","text":"66199"},{"range":"67235","text":"66201"},{"range":"67236","text":"66199"},{"range":"67237","text":"66201"},{"range":"67238","text":"66199"},{"range":"67239","text":"66201"},{"range":"67240","text":"66199"},{"range":"67241","text":"66201"},{"range":"67242","text":"66199"},{"range":"67243","text":"66201"},{"range":"67244","text":"66199"},{"range":"67245","text":"66201"},{"range":"67246","text":"66199"},{"range":"67247","text":"66201"},{"range":"67248","text":"66199"},{"range":"67249","text":"66201"},{"range":"67250","text":"66199"},{"range":"67251","text":"66201"},{"range":"67252","text":"66199"},{"range":"67253","text":"66201"},{"range":"67254","text":"66199"},{"range":"67255","text":"66201"},{"range":"67256","text":"66199"},{"range":"67257","text":"66201"},{"range":"67258","text":"66199"},{"range":"67259","text":"66201"},{"range":"67260","text":"66199"},{"range":"67261","text":"66201"},{"range":"67262","text":"66199"},{"range":"67263","text":"66201"},{"range":"67264","text":"66199"},{"range":"67265","text":"66201"},{"range":"67266","text":"66199"},{"range":"67267","text":"66201"},{"range":"67268","text":"66199"},{"range":"67269","text":"66201"},{"range":"67270","text":"66199"},{"range":"67271","text":"66201"},{"range":"67272","text":"66199"},{"range":"67273","text":"66201"},{"range":"67274","text":"66199"},{"range":"67275","text":"66201"},{"range":"67276","text":"66199"},{"range":"67277","text":"66201"},{"range":"67278","text":"66199"},{"range":"67279","text":"66201"},{"range":"67280","text":"66199"},{"range":"67281","text":"66201"},{"range":"67282","text":"66199"},{"range":"67283","text":"66201"},{"range":"67284","text":"66199"},{"range":"67285","text":"66201"},{"range":"67286","text":"66199"},{"range":"67287","text":"66201"},{"range":"67288","text":"66199"},{"range":"67289","text":"66201"},{"range":"67290","text":"66199"},{"range":"67291","text":"66201"},{"range":"67292","text":"66199"},{"range":"67293","text":"66201"},{"range":"67294","text":"66199"},{"range":"67295","text":"66201"},{"range":"67296","text":"66199"},{"range":"67297","text":"66201"},{"range":"67298","text":"66199"},{"range":"67299","text":"66201"},{"range":"67300","text":"66199"},{"range":"67301","text":"66201"},{"range":"67302","text":"66199"},{"range":"67303","text":"66201"},{"range":"67304","text":"66199"},{"range":"67305","text":"66201"},{"range":"67306","text":"66199"},{"range":"67307","text":"66201"},{"range":"67308","text":"66199"},{"range":"67309","text":"66201"},{"range":"67310","text":"66199"},{"range":"67311","text":"66201"},{"range":"67312","text":"66199"},{"range":"67313","text":"66201"},{"range":"67314","text":"66199"},{"range":"67315","text":"66201"},{"range":"67316","text":"66199"},{"range":"67317","text":"66201"},{"range":"67318","text":"66199"},{"range":"67319","text":"66201"},{"range":"67320","text":"66199"},{"range":"67321","text":"66201"},{"range":"67322","text":"66199"},{"range":"67323","text":"66201"},{"range":"67324","text":"66199"},{"range":"67325","text":"66201"},{"range":"67326","text":"66199"},{"range":"67327","text":"66201"},{"range":"67328","text":"66199"},{"range":"67329","text":"66201"},{"range":"67330","text":"66199"},{"range":"67331","text":"66201"},{"range":"67332","text":"66199"},{"range":"67333","text":"66201"},{"range":"67334","text":"66199"},{"range":"67335","text":"66201"},{"range":"67336","text":"66199"},{"range":"67337","text":"66201"},{"range":"67338","text":"66199"},{"range":"67339","text":"66201"},{"range":"67340","text":"66199"},{"range":"67341","text":"66201"},{"range":"67342","text":"66199"},{"range":"67343","text":"66201"},{"range":"67344","text":"66199"},{"range":"67345","text":"66201"},{"range":"67346","text":"66199"},{"range":"67347","text":"66201"},{"range":"67348","text":"66199"},{"range":"67349","text":"66201"},{"range":"67350","text":"66199"},{"range":"67351","text":"66201"},{"range":"67352","text":"66199"},{"range":"67353","text":"66201"},{"range":"67354","text":"66199"},{"range":"67355","text":"66201"},{"range":"67356","text":"66199"},{"range":"67357","text":"66201"},{"range":"67358","text":"66199"},{"range":"67359","text":"66201"},{"range":"67360","text":"66199"},{"range":"67361","text":"66201"},{"range":"67362","text":"66199"},{"range":"67363","text":"66201"},{"range":"67364","text":"66199"},{"range":"67365","text":"66201"},{"range":"67366","text":"66199"},{"range":"67367","text":"66201"},{"range":"67368","text":"66199"},{"range":"67369","text":"66201"},{"range":"67370","text":"66199"},{"range":"67371","text":"66201"},{"range":"67372","text":"66199"},{"range":"67373","text":"66201"},{"range":"67374","text":"66199"},{"range":"67375","text":"66201"},{"range":"67376","text":"66199"},{"range":"67377","text":"66201"},{"range":"67378","text":"66199"},{"range":"67379","text":"66201"},{"range":"67380","text":"66199"},{"range":"67381","text":"66201"},{"range":"67382","text":"66199"},{"range":"67383","text":"66201"},{"range":"67384","text":"66199"},{"range":"67385","text":"66201"},{"range":"67386","text":"66199"},{"range":"67387","text":"66201"},{"range":"67388","text":"66199"},{"range":"67389","text":"66201"},{"range":"67390","text":"66199"},{"range":"67391","text":"66201"},{"range":"67392","text":"66199"},{"range":"67393","text":"66201"},{"range":"67394","text":"66199"},{"range":"67395","text":"66201"},{"range":"67396","text":"66199"},{"range":"67397","text":"66201"},{"range":"67398","text":"66199"},{"range":"67399","text":"66201"},{"range":"67400","text":"66199"},{"range":"67401","text":"66201"},{"range":"67402","text":"66199"},{"range":"67403","text":"66201"},{"range":"67404","text":"66199"},{"range":"67405","text":"66201"},{"range":"67406","text":"66199"},{"range":"67407","text":"66201"},{"range":"67408","text":"66199"},{"range":"67409","text":"66201"},{"range":"67410","text":"66199"},{"range":"67411","text":"66201"},{"range":"67412","text":"66199"},{"range":"67413","text":"66201"},{"range":"67414","text":"66199"},{"range":"67415","text":"66201"},{"range":"67416","text":"66199"},{"range":"67417","text":"66201"},{"range":"67418","text":"66199"},{"range":"67419","text":"66201"},{"range":"67420","text":"66199"},{"range":"67421","text":"66201"},{"range":"67422","text":"66199"},{"range":"67423","text":"66201"},{"range":"67424","text":"66199"},{"range":"67425","text":"66201"},{"range":"67426","text":"66199"},{"range":"67427","text":"66201"},{"range":"67428","text":"66199"},{"range":"67429","text":"66201"},{"range":"67430","text":"66199"},{"range":"67431","text":"66201"},{"range":"67432","text":"66199"},{"range":"67433","text":"66201"},{"range":"67434","text":"66199"},{"range":"67435","text":"66201"},{"range":"67436","text":"66199"},{"range":"67437","text":"66201"},{"range":"67438","text":"66199"},{"range":"67439","text":"66201"},{"range":"67440","text":"66199"},{"range":"67441","text":"66201"},{"range":"67442","text":"66199"},{"range":"67443","text":"66201"},{"range":"67444","text":"66199"},{"range":"67445","text":"66201"},{"range":"67446","text":"66199"},{"range":"67447","text":"66201"},{"range":"67448","text":"66199"},{"range":"67449","text":"66201"},{"range":"67450","text":"66199"},{"range":"67451","text":"66201"},{"range":"67452","text":"66199"},{"range":"67453","text":"66201"},{"range":"67454","text":"66199"},{"range":"67455","text":"66201"},{"range":"67456","text":"66199"},{"range":"67457","text":"66201"},{"range":"67458","text":"66199"},{"range":"67459","text":"66201"},{"range":"67460","text":"66199"},{"range":"67461","text":"66201"},{"range":"67462","text":"66199"},{"range":"67463","text":"66201"},{"range":"67464","text":"66199"},{"range":"67465","text":"66201"},{"range":"67466","text":"66199"},{"range":"67467","text":"66201"},{"range":"67468","text":"66199"},{"range":"67469","text":"66201"},{"range":"67470","text":"66199"},{"range":"67471","text":"66201"},{"range":"67472","text":"66199"},{"range":"67473","text":"66201"},{"range":"67474","text":"66199"},{"range":"67475","text":"66201"},{"range":"67476","text":"66199"},{"range":"67477","text":"66201"},{"range":"67478","text":"66199"},{"range":"67479","text":"66201"},{"range":"67480","text":"66199"},{"range":"67481","text":"66201"},{"range":"67482","text":"66199"},{"range":"67483","text":"66201"},{"range":"67484","text":"66199"},{"range":"67485","text":"66201"},{"range":"67486","text":"66199"},{"range":"67487","text":"66201"},{"range":"67488","text":"66199"},{"range":"67489","text":"66201"},{"range":"67490","text":"66199"},{"range":"67491","text":"66201"},{"range":"67492","text":"66199"},{"range":"67493","text":"66201"},{"range":"67494","text":"66199"},{"range":"67495","text":"66201"},{"range":"67496","text":"66199"},{"range":"67497","text":"66201"},{"range":"67498","text":"66199"},{"range":"67499","text":"66201"},{"range":"67500","text":"66199"},{"range":"67501","text":"66201"},{"range":"67502","text":"66199"},{"range":"67503","text":"66201"},{"range":"67504","text":"66199"},{"range":"67505","text":"66201"},{"range":"67506","text":"66199"},{"range":"67507","text":"66201"},{"range":"67508","text":"66199"},{"range":"67509","text":"66201"},{"range":"67510","text":"66199"},{"range":"67511","text":"66201"},{"range":"67512","text":"66199"},{"range":"67513","text":"66201"},{"range":"67514","text":"66199"},{"range":"67515","text":"66201"},{"range":"67516","text":"66199"},{"range":"67517","text":"66201"},{"range":"67518","text":"66199"},{"range":"67519","text":"66201"},{"range":"67520","text":"66199"},{"range":"67521","text":"66201"},{"range":"67522","text":"66199"},{"range":"67523","text":"66201"},{"range":"67524","text":"66199"},{"range":"67525","text":"66201"},{"range":"67526","text":"66199"},{"range":"67527","text":"66201"},{"range":"67528","text":"66199"},{"range":"67529","text":"66201"},{"range":"67530","text":"66199"},{"range":"67531","text":"66201"},{"range":"67532","text":"66199"},{"range":"67533","text":"66201"},{"range":"67534","text":"66199"},{"range":"67535","text":"66201"},{"range":"67536","text":"66199"},{"range":"67537","text":"66201"},{"range":"67538","text":"66199"},{"range":"67539","text":"66201"},{"range":"67540","text":"66199"},{"range":"67541","text":"66201"},{"range":"67542","text":"66199"},{"range":"67543","text":"66201"},{"range":"67544","text":"66199"},{"range":"67545","text":"66201"},{"range":"67546","text":"66199"},{"range":"67547","text":"66201"},{"range":"67548","text":"66199"},{"range":"67549","text":"66201"},{"range":"67550","text":"66199"},{"range":"67551","text":"66201"},{"range":"67552","text":"66199"},{"range":"67553","text":"66201"},{"range":"67554","text":"66199"},{"range":"67555","text":"66201"},{"range":"67556","text":"66199"},{"range":"67557","text":"66201"},{"range":"67558","text":"66199"},{"range":"67559","text":"66201"},{"range":"67560","text":"66199"},{"range":"67561","text":"66201"},{"range":"67562","text":"66199"},{"range":"67563","text":"66201"},{"range":"67564","text":"66199"},{"range":"67565","text":"66201"},{"range":"67566","text":"66199"},{"range":"67567","text":"66201"},{"range":"67568","text":"66199"},{"range":"67569","text":"66201"},{"range":"67570","text":"66199"},{"range":"67571","text":"66201"},{"range":"67572","text":"66199"},{"range":"67573","text":"66201"},{"range":"67574","text":"66199"},{"range":"67575","text":"66201"},{"range":"67576","text":"66199"},{"range":"67577","text":"66201"},{"range":"67578","text":"66199"},{"range":"67579","text":"66201"},{"range":"67580","text":"66199"},{"range":"67581","text":"66201"},{"range":"67582","text":"66199"},{"range":"67583","text":"66201"},{"range":"67584","text":"66199"},{"range":"67585","text":"66201"},{"range":"67586","text":"66199"},{"range":"67587","text":"66201"},{"range":"67588","text":"66199"},{"range":"67589","text":"66201"},{"range":"67590","text":"66199"},{"range":"67591","text":"66201"},{"range":"67592","text":"66199"},{"range":"67593","text":"66201"},{"range":"67594","text":"66199"},{"range":"67595","text":"66201"},{"range":"67596","text":"66199"},{"range":"67597","text":"66201"},{"range":"67598","text":"66199"},{"range":"67599","text":"66201"},{"range":"67600","text":"66199"},{"range":"67601","text":"66201"},{"range":"67602","text":"66199"},{"range":"67603","text":"66201"},{"range":"67604","text":"66199"},{"range":"67605","text":"66201"},{"range":"67606","text":"66199"},{"range":"67607","text":"66201"},{"range":"67608","text":"66199"},{"range":"67609","text":"66201"},{"range":"67610","text":"66199"},{"range":"67611","text":"66201"},{"range":"67612","text":"66199"},{"range":"67613","text":"66201"},{"range":"67614","text":"66199"},{"range":"67615","text":"66201"},{"range":"67616","text":"66199"},{"range":"67617","text":"66201"},{"range":"67618","text":"66199"},{"range":"67619","text":"66201"},{"range":"67620","text":"66199"},{"range":"67621","text":"66201"},{"range":"67622","text":"66199"},{"range":"67623","text":"66201"},{"range":"67624","text":"66199"},{"range":"67625","text":"66201"},{"range":"67626","text":"66199"},{"range":"67627","text":"66201"},{"range":"67628","text":"66199"},{"range":"67629","text":"66201"},{"range":"67630","text":"66199"},{"range":"67631","text":"66201"},{"range":"67632","text":"66199"},{"range":"67633","text":"66201"},{"range":"67634","text":"66199"},{"range":"67635","text":"66201"},{"range":"67636","text":"66199"},{"range":"67637","text":"66201"},{"range":"67638","text":"66199"},{"range":"67639","text":"66201"},{"range":"67640","text":"66199"},{"range":"67641","text":"66201"},{"range":"67642","text":"66199"},{"range":"67643","text":"66201"},{"range":"67644","text":"66199"},{"range":"67645","text":"66201"},{"range":"67646","text":"66199"},{"range":"67647","text":"66201"},{"range":"67648","text":"66199"},{"range":"67649","text":"66201"},{"range":"67650","text":"66199"},{"range":"67651","text":"66201"},{"range":"67652","text":"66199"},{"range":"67653","text":"66201"},{"range":"67654","text":"66199"},{"range":"67655","text":"66201"},{"range":"67656","text":"66199"},{"range":"67657","text":"66201"},{"range":"67658","text":"66199"},{"range":"67659","text":"66201"},{"range":"67660","text":"66199"},{"range":"67661","text":"66201"},{"range":"67662","text":"66199"},{"range":"67663","text":"66201"},{"range":"67664","text":"66199"},{"range":"67665","text":"66201"},{"range":"67666","text":"66199"},{"range":"67667","text":"66201"},{"range":"67668","text":"66199"},{"range":"67669","text":"66201"},{"range":"67670","text":"66199"},{"range":"67671","text":"66201"},{"range":"67672","text":"66199"},{"range":"67673","text":"66201"},{"range":"67674","text":"66199"},{"range":"67675","text":"66201"},{"range":"67676","text":"66199"},{"range":"67677","text":"66201"},{"range":"67678","text":"66199"},{"range":"67679","text":"66201"},{"range":"67680","text":"66199"},{"range":"67681","text":"66201"},{"range":"67682","text":"66199"},{"range":"67683","text":"66201"},{"range":"67684","text":"66199"},{"range":"67685","text":"66201"},{"range":"67686","text":"66199"},{"range":"67687","text":"66201"},{"range":"67688","text":"66199"},{"range":"67689","text":"66201"},{"range":"67690","text":"66199"},{"range":"67691","text":"66201"},{"range":"67692","text":"66199"},{"range":"67693","text":"66201"},{"range":"67694","text":"66199"},{"range":"67695","text":"66201"},{"range":"67696","text":"66199"},{"range":"67697","text":"66201"},{"range":"67698","text":"66199"},{"range":"67699","text":"66201"},{"range":"67700","text":"66199"},{"range":"67701","text":"66201"},{"range":"67702","text":"66199"},{"range":"67703","text":"66201"},{"range":"67704","text":"66199"},{"range":"67705","text":"66201"},{"range":"67706","text":"66199"},{"range":"67707","text":"66201"},{"range":"67708","text":"66199"},{"range":"67709","text":"66201"},{"range":"67710","text":"66199"},{"range":"67711","text":"66201"},{"range":"67712","text":"66199"},{"range":"67713","text":"66201"},{"range":"67714","text":"66199"},{"range":"67715","text":"66201"},{"range":"67716","text":"66199"},{"range":"67717","text":"66201"},{"range":"67718","text":"66199"},{"range":"67719","text":"66201"},{"range":"67720","text":"66199"},{"range":"67721","text":"66201"},{"range":"67722","text":"66199"},{"range":"67723","text":"66201"},{"range":"67724","text":"66199"},{"range":"67725","text":"66201"},{"range":"67726","text":"66199"},{"range":"67727","text":"66201"},{"range":"67728","text":"66199"},{"range":"67729","text":"66201"},{"range":"67730","text":"66199"},{"range":"67731","text":"66201"},{"range":"67732","text":"66199"},{"range":"67733","text":"66201"},{"range":"67734","text":"66199"},{"range":"67735","text":"66201"},{"range":"67736","text":"66199"},{"range":"67737","text":"66201"},{"range":"67738","text":"66199"},{"range":"67739","text":"66201"},{"range":"67740","text":"66199"},{"range":"67741","text":"66201"},{"range":"67742","text":"66199"},{"range":"67743","text":"66201"},{"range":"67744","text":"66199"},{"range":"67745","text":"66201"},{"range":"67746","text":"66199"},{"range":"67747","text":"66201"},{"range":"67748","text":"66199"},{"range":"67749","text":"66201"},{"range":"67750","text":"66199"},{"range":"67751","text":"66201"},{"range":"67752","text":"66199"},{"range":"67753","text":"66201"},{"range":"67754","text":"66199"},{"range":"67755","text":"66201"},{"range":"67756","text":"66199"},{"range":"67757","text":"66201"},{"range":"67758","text":"66199"},{"range":"67759","text":"66201"},{"range":"67760","text":"66199"},{"range":"67761","text":"66201"},{"range":"67762","text":"66199"},{"range":"67763","text":"66201"},{"range":"67764","text":"66199"},{"range":"67765","text":"66201"},{"range":"67766","text":"66199"},{"range":"67767","text":"66201"},{"range":"67768","text":"66199"},{"range":"67769","text":"66201"},{"range":"67770","text":"66199"},{"range":"67771","text":"66201"},{"range":"67772","text":"66199"},{"range":"67773","text":"66201"},{"range":"67774","text":"66199"},{"range":"67775","text":"66201"},{"range":"67776","text":"66199"},{"range":"67777","text":"66201"},{"range":"67778","text":"66199"},{"range":"67779","text":"66201"},{"range":"67780","text":"66199"},{"range":"67781","text":"66201"},{"range":"67782","text":"66199"},{"range":"67783","text":"66201"},{"range":"67784","text":"66199"},{"range":"67785","text":"66201"},{"range":"67786","text":"66199"},{"range":"67787","text":"66201"},{"range":"67788","text":"66199"},{"range":"67789","text":"66201"},{"range":"67790","text":"66199"},{"range":"67791","text":"66201"},{"range":"67792","text":"66199"},{"range":"67793","text":"66201"},{"range":"67794","text":"66199"},{"range":"67795","text":"66201"},{"range":"67796","text":"66199"},{"range":"67797","text":"66201"},{"range":"67798","text":"66199"},{"range":"67799","text":"66201"},{"range":"67800","text":"66199"},{"range":"67801","text":"66201"},{"range":"67802","text":"66199"},{"range":"67803","text":"66201"},{"range":"67804","text":"66199"},{"range":"67805","text":"66201"},{"range":"67806","text":"66199"},{"range":"67807","text":"66201"},{"range":"67808","text":"66199"},{"range":"67809","text":"66201"},{"range":"67810","text":"66199"},{"range":"67811","text":"66201"},{"range":"67812","text":"66199"},{"range":"67813","text":"66201"},{"range":"67814","text":"66199"},{"range":"67815","text":"66201"},{"range":"67816","text":"66199"},{"range":"67817","text":"66201"},{"range":"67818","text":"66199"},{"range":"67819","text":"66201"},{"range":"67820","text":"66199"},{"range":"67821","text":"66201"},{"range":"67822","text":"66199"},{"range":"67823","text":"66201"},{"range":"67824","text":"66199"},{"range":"67825","text":"66201"},{"range":"67826","text":"66199"},{"range":"67827","text":"66201"},{"range":"67828","text":"66199"},{"range":"67829","text":"66201"},{"range":"67830","text":"66199"},{"range":"67831","text":"66201"},{"range":"67832","text":"66199"},{"range":"67833","text":"66201"},{"range":"67834","text":"66199"},{"range":"67835","text":"66201"},{"range":"67836","text":"66199"},{"range":"67837","text":"66201"},{"range":"67838","text":"66199"},{"range":"67839","text":"66201"},{"range":"67840","text":"66199"},{"range":"67841","text":"66201"},{"range":"67842","text":"66199"},{"range":"67843","text":"66201"},{"range":"67844","text":"66199"},{"range":"67845","text":"66201"},{"range":"67846","text":"66199"},{"range":"67847","text":"66201"},{"range":"67848","text":"66199"},{"range":"67849","text":"66201"},{"range":"67850","text":"66199"},{"range":"67851","text":"66201"},{"range":"67852","text":"66199"},{"range":"67853","text":"66201"},{"range":"67854","text":"66199"},{"range":"67855","text":"66201"},{"range":"67856","text":"66199"},{"range":"67857","text":"66201"},{"range":"67858","text":"66199"},{"range":"67859","text":"66201"},{"range":"67860","text":"66199"},{"range":"67861","text":"66201"},{"range":"67862","text":"66199"},{"range":"67863","text":"66201"},{"range":"67864","text":"66199"},{"range":"67865","text":"66201"},{"range":"67866","text":"66199"},{"range":"67867","text":"66201"},{"range":"67868","text":"66199"},{"range":"67869","text":"66201"},{"range":"67870","text":"66199"},{"range":"67871","text":"66201"},{"range":"67872","text":"66199"},{"range":"67873","text":"66201"},{"range":"67874","text":"66199"},{"range":"67875","text":"66201"},{"range":"67876","text":"66199"},{"range":"67877","text":"66201"},{"range":"67878","text":"66199"},{"range":"67879","text":"66201"},{"range":"67880","text":"66199"},{"range":"67881","text":"66201"},{"range":"67882","text":"66199"},{"range":"67883","text":"66201"},{"range":"67884","text":"66199"},{"range":"67885","text":"66201"},{"range":"67886","text":"66199"},{"range":"67887","text":"66201"},{"range":"67888","text":"66199"},{"range":"67889","text":"66201"},{"range":"67890","text":"66199"},{"range":"67891","text":"66201"},{"range":"67892","text":"66199"},{"range":"67893","text":"66201"},{"range":"67894","text":"66199"},{"range":"67895","text":"66201"},{"range":"67896","text":"66199"},{"range":"67897","text":"66201"},{"range":"67898","text":"66199"},{"range":"67899","text":"66201"},{"range":"67900","text":"66199"},{"range":"67901","text":"66201"},{"range":"67902","text":"66199"},{"range":"67903","text":"66201"},{"range":"67904","text":"66199"},{"range":"67905","text":"66201"},{"range":"67906","text":"66199"},{"range":"67907","text":"66201"},{"range":"67908","text":"66199"},{"range":"67909","text":"66201"},{"range":"67910","text":"66199"},{"range":"67911","text":"66201"},{"range":"67912","text":"66199"},{"range":"67913","text":"66201"},{"range":"67914","text":"66199"},{"range":"67915","text":"66201"},{"range":"67916","text":"66199"},{"range":"67917","text":"66201"},{"range":"67918","text":"66199"},{"range":"67919","text":"66201"},{"range":"67920","text":"66199"},{"range":"67921","text":"66201"},{"range":"67922","text":"66199"},{"range":"67923","text":"66201"},{"range":"67924","text":"66199"},{"range":"67925","text":"66201"},{"range":"67926","text":"66199"},{"range":"67927","text":"66201"},{"range":"67928","text":"66199"},{"range":"67929","text":"66201"},{"range":"67930","text":"66199"},{"range":"67931","text":"66201"},{"range":"67932","text":"66199"},{"range":"67933","text":"66201"},{"range":"67934","text":"66199"},{"range":"67935","text":"66201"},{"range":"67936","text":"66199"},{"range":"67937","text":"66201"},{"range":"67938","text":"66199"},{"range":"67939","text":"66201"},{"range":"67940","text":"66199"},{"range":"67941","text":"66201"},{"range":"67942","text":"66199"},{"range":"67943","text":"66201"},{"range":"67944","text":"66199"},{"range":"67945","text":"66201"},{"range":"67946","text":"66199"},{"range":"67947","text":"66201"},{"range":"67948","text":"66199"},{"range":"67949","text":"66201"},{"range":"67950","text":"66199"},{"range":"67951","text":"66201"},{"range":"67952","text":"66199"},{"range":"67953","text":"66201"},{"range":"67954","text":"66199"},{"range":"67955","text":"66201"},{"range":"67956","text":"66199"},{"range":"67957","text":"66201"},{"range":"67958","text":"66199"},{"range":"67959","text":"66201"},{"range":"67960","text":"66199"},{"range":"67961","text":"66201"},{"range":"67962","text":"66199"},{"range":"67963","text":"66201"},{"range":"67964","text":"66199"},{"range":"67965","text":"66201"},{"range":"67966","text":"66199"},{"range":"67967","text":"66201"},{"range":"67968","text":"66199"},{"range":"67969","text":"66201"},{"range":"67970","text":"66199"},{"range":"67971","text":"66201"},{"range":"67972","text":"66199"},{"range":"67973","text":"66201"},{"range":"67974","text":"66199"},{"range":"67975","text":"66201"},{"range":"67976","text":"66199"},{"range":"67977","text":"66201"},{"range":"67978","text":"66199"},{"range":"67979","text":"66201"},{"range":"67980","text":"66199"},{"range":"67981","text":"66201"},{"range":"67982","text":"66199"},{"range":"67983","text":"66201"},{"range":"67984","text":"66199"},{"range":"67985","text":"66201"},{"range":"67986","text":"66199"},{"range":"67987","text":"66201"},{"range":"67988","text":"66199"},{"range":"67989","text":"66201"},{"range":"67990","text":"66199"},{"range":"67991","text":"66201"},{"range":"67992","text":"66199"},{"range":"67993","text":"66201"},{"range":"67994","text":"66199"},{"range":"67995","text":"66201"},{"range":"67996","text":"66199"},{"range":"67997","text":"66201"},{"range":"67998","text":"66199"},{"range":"67999","text":"66201"},{"range":"68000","text":"66199"},{"range":"68001","text":"66201"},{"range":"68002","text":"66199"},{"range":"68003","text":"66201"},{"range":"68004","text":"66199"},{"range":"68005","text":"66201"},{"range":"68006","text":"66199"},{"range":"68007","text":"66201"},{"range":"68008","text":"66199"},{"range":"68009","text":"66201"},{"range":"68010","text":"66199"},{"range":"68011","text":"66201"},{"range":"68012","text":"66199"},{"range":"68013","text":"66201"},{"range":"68014","text":"66199"},{"range":"68015","text":"66201"},{"range":"68016","text":"66199"},{"range":"68017","text":"66201"},{"range":"68018","text":"66199"},{"range":"68019","text":"66201"},{"range":"68020","text":"66199"},{"range":"68021","text":"66201"},{"range":"68022","text":"66199"},{"range":"68023","text":"66201"},{"range":"68024","text":"66199"},{"range":"68025","text":"66201"},{"range":"68026","text":"66199"},{"range":"68027","text":"66201"},{"range":"68028","text":"66199"},{"range":"68029","text":"66201"},{"range":"68030","text":"66199"},{"range":"68031","text":"66201"},{"range":"68032","text":"66199"},{"range":"68033","text":"66201"},{"range":"68034","text":"66199"},{"range":"68035","text":"66201"},{"range":"68036","text":"66199"},{"range":"68037","text":"66201"},{"range":"68038","text":"66199"},{"range":"68039","text":"66201"},{"range":"68040","text":"66199"},{"range":"68041","text":"66201"},{"range":"68042","text":"66199"},{"range":"68043","text":"66201"},{"range":"68044","text":"66199"},{"range":"68045","text":"66201"},{"range":"68046","text":"66199"},{"range":"68047","text":"66201"},{"range":"68048","text":"66199"},{"range":"68049","text":"66201"},{"range":"68050","text":"66199"},{"range":"68051","text":"66201"},{"range":"68052","text":"66199"},{"range":"68053","text":"66201"},{"range":"68054","text":"66199"},{"range":"68055","text":"66201"},{"range":"68056","text":"66199"},{"range":"68057","text":"66201"},{"range":"68058","text":"66199"},{"range":"68059","text":"66201"},{"range":"68060","text":"66199"},{"range":"68061","text":"66201"},{"range":"68062","text":"66199"},{"range":"68063","text":"66201"},{"range":"68064","text":"66199"},{"range":"68065","text":"66201"},{"range":"68066","text":"66199"},{"range":"68067","text":"66201"},{"range":"68068","text":"66199"},{"range":"68069","text":"66201"},{"range":"68070","text":"66199"},{"range":"68071","text":"66201"},{"range":"68072","text":"66199"},{"range":"68073","text":"66201"},{"range":"68074","text":"66199"},{"range":"68075","text":"66201"},{"range":"68076","text":"66199"},{"range":"68077","text":"66201"},{"range":"68078","text":"66199"},{"range":"68079","text":"66201"},{"range":"68080","text":"66199"},{"range":"68081","text":"66201"},{"range":"68082","text":"66199"},{"range":"68083","text":"66201"},{"range":"68084","text":"66199"},{"range":"68085","text":"66201"},{"range":"68086","text":"66199"},{"range":"68087","text":"66201"},{"range":"68088","text":"66199"},{"range":"68089","text":"66201"},{"range":"68090","text":"66199"},{"range":"68091","text":"66201"},{"range":"68092","text":"66199"},{"range":"68093","text":"66201"},{"range":"68094","text":"66199"},{"range":"68095","text":"66201"},{"range":"68096","text":"66199"},{"range":"68097","text":"66201"},{"range":"68098","text":"66199"},{"range":"68099","text":"66201"},{"range":"68100","text":"66199"},{"range":"68101","text":"66201"},{"range":"68102","text":"66199"},{"range":"68103","text":"66201"},{"range":"68104","text":"66199"},{"range":"68105","text":"66201"},{"range":"68106","text":"66199"},{"range":"68107","text":"66201"},{"range":"68108","text":"66199"},{"range":"68109","text":"66201"},{"range":"68110","text":"66199"},{"range":"68111","text":"66201"},{"range":"68112","text":"66199"},{"range":"68113","text":"66201"},{"range":"68114","text":"66199"},{"range":"68115","text":"66201"},{"range":"68116","text":"66199"},{"range":"68117","text":"66201"},{"range":"68118","text":"66199"},{"range":"68119","text":"66201"},{"range":"68120","text":"66199"},{"range":"68121","text":"66201"},{"range":"68122","text":"66199"},{"range":"68123","text":"66201"},{"range":"68124","text":"66199"},{"range":"68125","text":"66201"},{"range":"68126","text":"66199"},{"range":"68127","text":"66201"},{"range":"68128","text":"66199"},{"range":"68129","text":"66201"},{"range":"68130","text":"66199"},{"range":"68131","text":"66201"},{"range":"68132","text":"66199"},{"range":"68133","text":"66201"},{"range":"68134","text":"66199"},{"range":"68135","text":"66201"},{"range":"68136","text":"66199"},{"range":"68137","text":"66201"},{"range":"68138","text":"66199"},{"range":"68139","text":"66201"},{"range":"68140","text":"66199"},{"range":"68141","text":"66201"},{"range":"68142","text":"66199"},{"range":"68143","text":"66201"},{"range":"68144","text":"66199"},{"range":"68145","text":"66201"},{"range":"68146","text":"66199"},{"range":"68147","text":"66201"},{"range":"68148","text":"66199"},{"range":"68149","text":"66201"},{"range":"68150","text":"66199"},{"range":"68151","text":"66201"},{"range":"68152","text":"66199"},{"range":"68153","text":"66201"},{"range":"68154","text":"66199"},{"range":"68155","text":"66201"},{"range":"68156","text":"66199"},{"range":"68157","text":"66201"},{"range":"68158","text":"66199"},{"range":"68159","text":"66201"},{"range":"68160","text":"66199"},{"range":"68161","text":"66201"},{"range":"68162","text":"66199"},{"range":"68163","text":"66201"},{"range":"68164","text":"66199"},{"range":"68165","text":"66201"},{"range":"68166","text":"66199"},{"range":"68167","text":"66201"},{"range":"68168","text":"66199"},{"range":"68169","text":"66201"},{"range":"68170","text":"66199"},{"range":"68171","text":"66201"},{"range":"68172","text":"66199"},{"range":"68173","text":"66201"},{"range":"68174","text":"66199"},{"range":"68175","text":"66201"},{"range":"68176","text":"66199"},{"range":"68177","text":"66201"},{"range":"68178","text":"66199"},{"range":"68179","text":"66201"},{"range":"68180","text":"66199"},{"range":"68181","text":"66201"},{"range":"68182","text":"66199"},{"range":"68183","text":"66201"},{"range":"68184","text":"66199"},{"range":"68185","text":"66201"},{"range":"68186","text":"66199"},{"range":"68187","text":"66201"},{"range":"68188","text":"66199"},{"range":"68189","text":"66201"},{"range":"68190","text":"66199"},{"range":"68191","text":"66201"},{"range":"68192","text":"66199"},{"range":"68193","text":"66201"},{"range":"68194","text":"66199"},{"range":"68195","text":"66201"},{"range":"68196","text":"66199"},{"range":"68197","text":"66201"},{"range":"68198","text":"66199"},{"range":"68199","text":"66201"},{"range":"68200","text":"66199"},{"range":"68201","text":"66201"},{"range":"68202","text":"66199"},{"range":"68203","text":"66201"},{"range":"68204","text":"66199"},{"range":"68205","text":"66201"},{"range":"68206","text":"66199"},{"range":"68207","text":"66201"},{"range":"68208","text":"66199"},{"range":"68209","text":"66201"},{"range":"68210","text":"66199"},{"range":"68211","text":"66201"},{"range":"68212","text":"66199"},{"range":"68213","text":"66201"},{"range":"68214","text":"66199"},{"range":"68215","text":"66201"},{"range":"68216","text":"66199"},{"range":"68217","text":"66201"},{"range":"68218","text":"66199"},{"range":"68219","text":"66201"},{"range":"68220","text":"66199"},{"range":"68221","text":"66201"},{"range":"68222","text":"66199"},{"range":"68223","text":"66201"},{"range":"68224","text":"66199"},{"range":"68225","text":"66201"},{"range":"68226","text":"66199"},{"range":"68227","text":"66201"},{"range":"68228","text":"66199"},{"range":"68229","text":"66201"},{"range":"68230","text":"66199"},{"range":"68231","text":"66201"},{"range":"68232","text":"66199"},{"range":"68233","text":"66201"},{"range":"68234","text":"66199"},{"range":"68235","text":"66201"},{"range":"68236","text":"66199"},{"range":"68237","text":"66201"},{"range":"68238","text":"66199"},{"range":"68239","text":"66201"},{"range":"68240","text":"66199"},{"range":"68241","text":"66201"},{"range":"68242","text":"66199"},{"range":"68243","text":"66201"},{"range":"68244","text":"66199"},{"range":"68245","text":"66201"},{"range":"68246","text":"66199"},{"range":"68247","text":"66201"},{"range":"68248","text":"66199"},{"range":"68249","text":"66201"},{"range":"68250","text":"66199"},{"range":"68251","text":"66201"},{"range":"68252","text":"66199"},{"range":"68253","text":"66201"},{"range":"68254","text":"66199"},{"range":"68255","text":"66201"},{"range":"68256","text":"66199"},{"range":"68257","text":"66201"},{"range":"68258","text":"66199"},{"range":"68259","text":"66201"},{"range":"68260","text":"66199"},{"range":"68261","text":"66201"},{"range":"68262","text":"66199"},{"range":"68263","text":"66201"},{"range":"68264","text":"66199"},{"range":"68265","text":"66201"},{"range":"68266","text":"66199"},{"range":"68267","text":"66201"},{"range":"68268","text":"66199"},{"range":"68269","text":"66201"},{"range":"68270","text":"66199"},{"range":"68271","text":"66201"},{"range":"68272","text":"66199"},{"range":"68273","text":"66201"},{"range":"68274","text":"66199"},{"range":"68275","text":"66201"},{"range":"68276","text":"66199"},{"range":"68277","text":"66201"},{"range":"68278","text":"66199"},{"range":"68279","text":"66201"},{"range":"68280","text":"66199"},{"range":"68281","text":"66201"},{"range":"68282","text":"66199"},{"range":"68283","text":"66201"},{"range":"68284","text":"66199"},{"range":"68285","text":"66201"},{"range":"68286","text":"66199"},{"range":"68287","text":"66201"},{"range":"68288","text":"66199"},{"range":"68289","text":"66201"},{"range":"68290","text":"66199"},{"range":"68291","text":"66201"},{"range":"68292","text":"66199"},{"range":"68293","text":"66201"},{"range":"68294","text":"66199"},{"range":"68295","text":"66201"},{"range":"68296","text":"66199"},{"range":"68297","text":"66201"},{"range":"68298","text":"66199"},{"range":"68299","text":"66201"},{"range":"68300","text":"66199"},{"range":"68301","text":"66201"},{"range":"68302","text":"66199"},{"range":"68303","text":"66201"},{"range":"68304","text":"66199"},{"range":"68305","text":"66201"},{"range":"68306","text":"66199"},{"range":"68307","text":"66201"},{"range":"68308","text":"66199"},{"range":"68309","text":"66201"},{"range":"68310","text":"66199"},{"range":"68311","text":"66201"},{"range":"68312","text":"66199"},{"range":"68313","text":"66201"},{"range":"68314","text":"66199"},{"range":"68315","text":"66201"},{"range":"68316","text":"66199"},{"range":"68317","text":"66201"},{"range":"68318","text":"66199"},{"range":"68319","text":"66201"},{"range":"68320","text":"66199"},{"range":"68321","text":"66201"},{"range":"68322","text":"66199"},{"range":"68323","text":"66201"},{"range":"68324","text":"66199"},{"range":"68325","text":"66201"},{"range":"68326","text":"66199"},{"range":"68327","text":"66201"},{"range":"68328","text":"66199"},{"range":"68329","text":"66201"},{"range":"68330","text":"66199"},{"range":"68331","text":"66201"},{"range":"68332","text":"66199"},{"range":"68333","text":"66201"},{"range":"68334","text":"66199"},{"range":"68335","text":"66201"},{"range":"68336","text":"66199"},{"range":"68337","text":"66201"},{"range":"68338","text":"66199"},{"range":"68339","text":"66201"},{"range":"68340","text":"66199"},{"range":"68341","text":"66201"},{"range":"68342","text":"66199"},{"range":"68343","text":"66201"},{"range":"68344","text":"66199"},{"range":"68345","text":"66201"},{"range":"68346","text":"66199"},{"range":"68347","text":"66201"},{"range":"68348","text":"66199"},{"range":"68349","text":"66201"},{"range":"68350","text":"66199"},{"range":"68351","text":"66201"},{"range":"68352","text":"66199"},{"range":"68353","text":"66201"},{"range":"68354","text":"66199"},{"range":"68355","text":"66201"},{"range":"68356","text":"66199"},{"range":"68357","text":"66201"},{"range":"68358","text":"66199"},{"range":"68359","text":"66201"},{"range":"68360","text":"66199"},{"range":"68361","text":"66201"},{"range":"68362","text":"66199"},{"range":"68363","text":"66201"},{"range":"68364","text":"66199"},{"range":"68365","text":"66201"},{"range":"68366","text":"66199"},{"range":"68367","text":"66201"},{"range":"68368","text":"66199"},{"range":"68369","text":"66201"},{"range":"68370","text":"66199"},{"range":"68371","text":"66201"},{"range":"68372","text":"66199"},{"range":"68373","text":"66201"},{"range":"68374","text":"66199"},{"range":"68375","text":"66201"},{"range":"68376","text":"66199"},{"range":"68377","text":"66201"},{"range":"68378","text":"66199"},{"range":"68379","text":"66201"},{"range":"68380","text":"66199"},{"range":"68381","text":"66201"},{"range":"68382","text":"66199"},{"range":"68383","text":"66201"},{"range":"68384","text":"66199"},{"range":"68385","text":"66201"},{"range":"68386","text":"66199"},{"range":"68387","text":"66201"},{"range":"68388","text":"66199"},{"range":"68389","text":"66201"},{"range":"68390","text":"66199"},{"range":"68391","text":"66201"},{"range":"68392","text":"66199"},{"range":"68393","text":"66201"},{"range":"68394","text":"66199"},{"range":"68395","text":"66201"},{"range":"68396","text":"66199"},{"range":"68397","text":"66201"},{"range":"68398","text":"66199"},{"range":"68399","text":"66201"},{"range":"68400","text":"66199"},{"range":"68401","text":"66201"},{"range":"68402","text":"66199"},{"range":"68403","text":"66201"},{"range":"68404","text":"66199"},{"range":"68405","text":"66201"},{"range":"68406","text":"66199"},{"range":"68407","text":"66201"},{"range":"68408","text":"66199"},{"range":"68409","text":"66201"},{"range":"68410","text":"66199"},{"range":"68411","text":"66201"},{"range":"68412","text":"66199"},{"range":"68413","text":"66201"},{"range":"68414","text":"66199"},{"range":"68415","text":"66201"},{"range":"68416","text":"66199"},{"range":"68417","text":"66201"},{"range":"68418","text":"66199"},{"range":"68419","text":"66201"},{"range":"68420","text":"66199"},{"range":"68421","text":"66201"},{"range":"68422","text":"66199"},{"range":"68423","text":"66201"},{"range":"68424","text":"66199"},{"range":"68425","text":"66201"},{"range":"68426","text":"66199"},{"range":"68427","text":"66201"},{"range":"68428","text":"66199"},{"range":"68429","text":"66201"},{"range":"68430","text":"66199"},{"range":"68431","text":"66201"},{"range":"68432","text":"66199"},{"range":"68433","text":"66201"},{"range":"68434","text":"66199"},{"range":"68435","text":"66201"},{"range":"68436","text":"66199"},{"range":"68437","text":"66201"},{"range":"68438","text":"66199"},{"range":"68439","text":"66201"},{"range":"68440","text":"66199"},{"range":"68441","text":"66201"},{"range":"68442","text":"66199"},{"range":"68443","text":"66201"},{"range":"68444","text":"66199"},{"range":"68445","text":"66201"},{"range":"68446","text":"66199"},{"range":"68447","text":"66201"},{"range":"68448","text":"66199"},{"range":"68449","text":"66201"},{"range":"68450","text":"66199"},{"range":"68451","text":"66201"},{"range":"68452","text":"66199"},{"range":"68453","text":"66201"},{"range":"68454","text":"66199"},{"range":"68455","text":"66201"},{"range":"68456","text":"66199"},{"range":"68457","text":"66201"},{"range":"68458","text":"66199"},{"range":"68459","text":"66201"},{"range":"68460","text":"66199"},{"range":"68461","text":"66201"},{"range":"68462","text":"66199"},{"range":"68463","text":"66201"},{"range":"68464","text":"66199"},{"range":"68465","text":"66201"},{"range":"68466","text":"66199"},{"range":"68467","text":"66201"},{"range":"68468","text":"66199"},{"range":"68469","text":"66201"},{"range":"68470","text":"66199"},{"range":"68471","text":"66201"},{"range":"68472","text":"66199"},{"range":"68473","text":"66201"},{"range":"68474","text":"66199"},{"range":"68475","text":"66201"},{"range":"68476","text":"66199"},{"range":"68477","text":"66201"},{"range":"68478","text":"66199"},{"range":"68479","text":"66201"},{"range":"68480","text":"66199"},{"range":"68481","text":"66201"},{"range":"68482","text":"66199"},{"range":"68483","text":"66201"},{"range":"68484","text":"66199"},{"range":"68485","text":"66201"},{"range":"68486","text":"66199"},{"range":"68487","text":"66201"},{"range":"68488","text":"66199"},{"range":"68489","text":"66201"},{"range":"68490","text":"66199"},{"range":"68491","text":"66201"},{"range":"68492","text":"66199"},{"range":"68493","text":"66201"},{"range":"68494","text":"66199"},{"range":"68495","text":"66201"},{"range":"68496","text":"66199"},{"range":"68497","text":"66201"},{"range":"68498","text":"66199"},{"range":"68499","text":"66201"},{"range":"68500","text":"66199"},{"range":"68501","text":"66201"},{"range":"68502","text":"66199"},{"range":"68503","text":"66201"},{"range":"68504","text":"66199"},{"range":"68505","text":"66201"},{"range":"68506","text":"66199"},{"range":"68507","text":"66201"},{"range":"68508","text":"66199"},{"range":"68509","text":"66201"},{"range":"68510","text":"66199"},{"range":"68511","text":"66201"},{"range":"68512","text":"66199"},{"range":"68513","text":"66201"},{"range":"68514","text":"66199"},{"range":"68515","text":"66201"},{"range":"68516","text":"66199"},{"range":"68517","text":"66201"},{"range":"68518","text":"66199"},{"range":"68519","text":"66201"},{"range":"68520","text":"66199"},{"range":"68521","text":"66201"},{"range":"68522","text":"66199"},{"range":"68523","text":"66201"},{"range":"68524","text":"66199"},{"range":"68525","text":"66201"},{"range":"68526","text":"66199"},{"range":"68527","text":"66201"},{"range":"68528","text":"66199"},{"range":"68529","text":"66201"},{"range":"68530","text":"66199"},{"range":"68531","text":"66201"},{"range":"68532","text":"66199"},{"range":"68533","text":"66201"},{"range":"68534","text":"66199"},{"range":"68535","text":"66201"},{"range":"68536","text":"66199"},{"range":"68537","text":"66201"},{"range":"68538","text":"66199"},{"range":"68539","text":"66201"},{"range":"68540","text":"66199"},{"range":"68541","text":"66201"},{"range":"68542","text":"66199"},{"range":"68543","text":"66201"},{"range":"68544","text":"66199"},{"range":"68545","text":"66201"},{"range":"68546","text":"66199"},{"range":"68547","text":"66201"},{"range":"68548","text":"66199"},{"range":"68549","text":"66201"},{"range":"68550","text":"66199"},{"range":"68551","text":"66201"},{"range":"68552","text":"66199"},{"range":"68553","text":"66201"},{"range":"68554","text":"66199"},{"range":"68555","text":"66201"},{"range":"68556","text":"66199"},{"range":"68557","text":"66201"},{"range":"68558","text":"66199"},{"range":"68559","text":"66201"},{"range":"68560","text":"66199"},{"range":"68561","text":"66201"},{"range":"68562","text":"66199"},{"range":"68563","text":"66201"},{"range":"68564","text":"66199"},{"range":"68565","text":"66201"},{"range":"68566","text":"66199"},{"range":"68567","text":"66201"},{"range":"68568","text":"66199"},{"range":"68569","text":"66201"},{"range":"68570","text":"66199"},{"range":"68571","text":"66201"},{"range":"68572","text":"66199"},{"range":"68573","text":"66201"},{"range":"68574","text":"66199"},{"range":"68575","text":"66201"},{"range":"68576","text":"66199"},{"range":"68577","text":"66201"},{"range":"68578","text":"66199"},{"range":"68579","text":"66201"},{"range":"68580","text":"66199"},{"range":"68581","text":"66201"},{"range":"68582","text":"66199"},{"range":"68583","text":"66201"},{"range":"68584","text":"66199"},{"range":"68585","text":"66201"},{"range":"68586","text":"66199"},{"range":"68587","text":"66201"},{"range":"68588","text":"66199"},{"range":"68589","text":"66201"},{"range":"68590","text":"66199"},{"range":"68591","text":"66201"},{"range":"68592","text":"66199"},{"range":"68593","text":"66201"},{"range":"68594","text":"66199"},{"range":"68595","text":"66201"},{"range":"68596","text":"66199"},{"range":"68597","text":"66201"},{"range":"68598","text":"66199"},{"range":"68599","text":"66201"},{"range":"68600","text":"66199"},{"range":"68601","text":"66201"},{"range":"68602","text":"66199"},{"range":"68603","text":"66201"},{"range":"68604","text":"66199"},{"range":"68605","text":"66201"},{"range":"68606","text":"66199"},{"range":"68607","text":"66201"},{"range":"68608","text":"66199"},{"range":"68609","text":"66201"},{"range":"68610","text":"66199"},{"range":"68611","text":"66201"},{"range":"68612","text":"66199"},{"range":"68613","text":"66201"},{"range":"68614","text":"66199"},{"range":"68615","text":"66201"},{"range":"68616","text":"66199"},{"range":"68617","text":"66201"},{"range":"68618","text":"66199"},{"range":"68619","text":"66201"},{"range":"68620","text":"66199"},{"range":"68621","text":"66201"},{"range":"68622","text":"66199"},{"range":"68623","text":"66201"},{"range":"68624","text":"66199"},{"range":"68625","text":"66201"},{"range":"68626","text":"66199"},{"range":"68627","text":"66201"},{"range":"68628","text":"66199"},{"range":"68629","text":"66201"},{"range":"68630","text":"66199"},{"range":"68631","text":"66201"},{"range":"68632","text":"66199"},{"range":"68633","text":"66201"},{"range":"68634","text":"66199"},{"range":"68635","text":"66201"},{"range":"68636","text":"66199"},{"range":"68637","text":"66201"},{"range":"68638","text":"66199"},{"range":"68639","text":"66201"},{"range":"68640","text":"66199"},{"range":"68641","text":"66201"},{"range":"68642","text":"66199"},{"range":"68643","text":"66201"},{"range":"68644","text":"66199"},{"range":"68645","text":"66201"},{"range":"68646","text":"66199"},{"range":"68647","text":"66201"},{"range":"68648","text":"66199"},{"range":"68649","text":"66201"},{"range":"68650","text":"66199"},{"range":"68651","text":"66201"},{"range":"68652","text":"66199"},{"range":"68653","text":"66201"},{"range":"68654","text":"66199"},{"range":"68655","text":"66201"},{"range":"68656","text":"66199"},{"range":"68657","text":"66201"},{"range":"68658","text":"66199"},{"range":"68659","text":"66201"},{"range":"68660","text":"66199"},{"range":"68661","text":"66201"},{"range":"68662","text":"66199"},{"range":"68663","text":"66201"},{"range":"68664","text":"66199"},{"range":"68665","text":"66201"},{"range":"68666","text":"66199"},{"range":"68667","text":"66201"},{"range":"68668","text":"66199"},{"range":"68669","text":"66201"},{"range":"68670","text":"66199"},{"range":"68671","text":"66201"},{"range":"68672","text":"66199"},{"range":"68673","text":"66201"},{"range":"68674","text":"66199"},{"range":"68675","text":"66201"},{"range":"68676","text":"66199"},{"range":"68677","text":"66201"},{"range":"68678","text":"66199"},{"range":"68679","text":"66201"},{"range":"68680","text":"66199"},{"range":"68681","text":"66201"},{"range":"68682","text":"66199"},{"range":"68683","text":"66201"},{"range":"68684","text":"66199"},{"range":"68685","text":"66201"},{"range":"68686","text":"66199"},{"range":"68687","text":"66201"},{"range":"68688","text":"66199"},{"range":"68689","text":"66201"},{"range":"68690","text":"66199"},{"range":"68691","text":"66201"},{"range":"68692","text":"66199"},{"range":"68693","text":"66201"},{"range":"68694","text":"66199"},{"range":"68695","text":"66201"},{"range":"68696","text":"66199"},{"range":"68697","text":"66201"},{"range":"68698","text":"66199"},{"range":"68699","text":"66201"},{"range":"68700","text":"66199"},{"range":"68701","text":"66201"},{"range":"68702","text":"66199"},{"range":"68703","text":"66201"},{"range":"68704","text":"66199"},{"range":"68705","text":"66201"},{"range":"68706","text":"66199"},{"range":"68707","text":"66201"},{"range":"68708","text":"66199"},{"range":"68709","text":"66201"},{"range":"68710","text":"66199"},{"range":"68711","text":"66201"},{"range":"68712","text":"66199"},{"range":"68713","text":"66201"},{"range":"68714","text":"66199"},{"range":"68715","text":"66201"},{"range":"68716","text":"66199"},{"range":"68717","text":"66201"},{"range":"68718","text":"66199"},{"range":"68719","text":"66201"},{"range":"68720","text":"66199"},{"range":"68721","text":"66201"},{"range":"68722","text":"66199"},{"range":"68723","text":"66201"},{"range":"68724","text":"66199"},{"range":"68725","text":"66201"},{"range":"68726","text":"66199"},{"range":"68727","text":"66201"},{"range":"68728","text":"66199"},{"range":"68729","text":"66201"},{"range":"68730","text":"66199"},{"range":"68731","text":"66201"},{"range":"68732","text":"66199"},{"range":"68733","text":"66201"},{"range":"68734","text":"66199"},{"range":"68735","text":"66201"},{"range":"68736","text":"66199"},{"range":"68737","text":"66201"},{"range":"68738","text":"66199"},{"range":"68739","text":"66201"},{"range":"68740","text":"66199"},{"range":"68741","text":"66201"},{"range":"68742","text":"66199"},{"range":"68743","text":"66201"},{"range":"68744","text":"66199"},{"range":"68745","text":"66201"},{"range":"68746","text":"66199"},{"range":"68747","text":"66201"},{"range":"68748","text":"66199"},{"range":"68749","text":"66201"},{"range":"68750","text":"66199"},{"range":"68751","text":"66201"},{"range":"68752","text":"66199"},{"range":"68753","text":"66201"},{"range":"68754","text":"66199"},{"range":"68755","text":"66201"},{"range":"68756","text":"66199"},{"range":"68757","text":"66201"},{"range":"68758","text":"66199"},{"range":"68759","text":"66201"},{"range":"68760","text":"66199"},{"range":"68761","text":"66201"},{"range":"68762","text":"66199"},{"range":"68763","text":"66201"},{"range":"68764","text":"66199"},{"range":"68765","text":"66201"},{"range":"68766","text":"66199"},{"range":"68767","text":"66201"},{"range":"68768","text":"66199"},{"range":"68769","text":"66201"},{"range":"68770","text":"66199"},{"range":"68771","text":"66201"},{"range":"68772","text":"66199"},{"range":"68773","text":"66201"},{"range":"68774","text":"66199"},{"range":"68775","text":"66201"},{"range":"68776","text":"66199"},{"range":"68777","text":"66201"},{"range":"68778","text":"66199"},{"range":"68779","text":"66201"},{"range":"68780","text":"66199"},{"range":"68781","text":"66201"},{"range":"68782","text":"66199"},{"range":"68783","text":"66201"},{"range":"68784","text":"66199"},{"range":"68785","text":"66201"},{"range":"68786","text":"66199"},{"range":"68787","text":"66201"},{"range":"68788","text":"66199"},{"range":"68789","text":"66201"},{"range":"68790","text":"66199"},{"range":"68791","text":"66201"},{"range":"68792","text":"66199"},{"range":"68793","text":"66201"},{"range":"68794","text":"66199"},{"range":"68795","text":"66201"},{"range":"68796","text":"66199"},{"range":"68797","text":"66201"},{"range":"68798","text":"66199"},{"range":"68799","text":"66201"},{"range":"68800","text":"66199"},{"range":"68801","text":"66201"},{"range":"68802","text":"66199"},{"range":"68803","text":"66201"},{"range":"68804","text":"66199"},{"range":"68805","text":"66201"},{"range":"68806","text":"66199"},{"range":"68807","text":"66201"},{"range":"68808","text":"66199"},{"range":"68809","text":"66201"},{"range":"68810","text":"66199"},{"range":"68811","text":"66201"},{"range":"68812","text":"66199"},{"range":"68813","text":"66201"},{"range":"68814","text":"66199"},{"range":"68815","text":"66201"},{"range":"68816","text":"66199"},{"range":"68817","text":"66201"},{"range":"68818","text":"66199"},{"range":"68819","text":"66201"},{"range":"68820","text":"66199"},{"range":"68821","text":"66201"},{"range":"68822","text":"66199"},{"range":"68823","text":"66201"},{"range":"68824","text":"66199"},{"range":"68825","text":"66201"},{"range":"68826","text":"66199"},{"range":"68827","text":"66201"},{"range":"68828","text":"66199"},{"range":"68829","text":"66201"},{"range":"68830","text":"66199"},{"range":"68831","text":"66201"},{"range":"68832","text":"66199"},{"range":"68833","text":"66201"},{"range":"68834","text":"66199"},{"range":"68835","text":"66201"},{"range":"68836","text":"66199"},{"range":"68837","text":"66201"},{"range":"68838","text":"66199"},{"range":"68839","text":"66201"},{"range":"68840","text":"66199"},{"range":"68841","text":"66201"},{"range":"68842","text":"66199"},{"range":"68843","text":"66201"},{"range":"68844","text":"66199"},{"range":"68845","text":"66201"},{"range":"68846","text":"66199"},{"range":"68847","text":"66201"},{"range":"68848","text":"66199"},{"range":"68849","text":"66201"},{"range":"68850","text":"66199"},{"range":"68851","text":"66201"},{"range":"68852","text":"66199"},{"range":"68853","text":"66201"},{"range":"68854","text":"66199"},{"range":"68855","text":"66201"},{"range":"68856","text":"66199"},{"range":"68857","text":"66201"},{"range":"68858","text":"66199"},{"range":"68859","text":"66201"},{"range":"68860","text":"66199"},{"range":"68861","text":"66201"},{"range":"68862","text":"66199"},{"range":"68863","text":"66201"},{"range":"68864","text":"66199"},{"range":"68865","text":"66201"},{"range":"68866","text":"66199"},{"range":"68867","text":"66201"},{"range":"68868","text":"66199"},{"range":"68869","text":"66201"},{"range":"68870","text":"66199"},{"range":"68871","text":"66201"},{"range":"68872","text":"66199"},{"range":"68873","text":"66201"},{"range":"68874","text":"66199"},{"range":"68875","text":"66201"},{"range":"68876","text":"66199"},{"range":"68877","text":"66201"},{"range":"68878","text":"66199"},{"range":"68879","text":"66201"},{"range":"68880","text":"66199"},{"range":"68881","text":"66201"},{"range":"68882","text":"66199"},{"range":"68883","text":"66201"},{"range":"68884","text":"66199"},{"range":"68885","text":"66201"},{"range":"68886","text":"66199"},{"range":"68887","text":"66201"},{"range":"68888","text":"66199"},{"range":"68889","text":"66201"},{"range":"68890","text":"66199"},{"range":"68891","text":"66201"},{"range":"68892","text":"66199"},{"range":"68893","text":"66201"},{"range":"68894","text":"66199"},{"range":"68895","text":"66201"},{"range":"68896","text":"66199"},{"range":"68897","text":"66201"},{"range":"68898","text":"66199"},{"range":"68899","text":"66201"},{"range":"68900","text":"66199"},{"range":"68901","text":"66201"},{"range":"68902","text":"66199"},{"range":"68903","text":"66201"},{"range":"68904","text":"66199"},{"range":"68905","text":"66201"},{"range":"68906","text":"66199"},{"range":"68907","text":"66201"},{"range":"68908","text":"66199"},{"range":"68909","text":"66201"},{"range":"68910","text":"66199"},{"range":"68911","text":"66201"},{"range":"68912","text":"66199"},{"range":"68913","text":"66201"},{"range":"68914","text":"66199"},{"range":"68915","text":"66201"},{"range":"68916","text":"66199"},{"range":"68917","text":"66201"},{"range":"68918","text":"66199"},{"range":"68919","text":"66201"},{"range":"68920","text":"66199"},{"range":"68921","text":"66201"},{"range":"68922","text":"66199"},{"range":"68923","text":"66201"},{"range":"68924","text":"66199"},{"range":"68925","text":"66201"},{"range":"68926","text":"66199"},{"range":"68927","text":"66201"},{"range":"68928","text":"66199"},{"range":"68929","text":"66201"},{"range":"68930","text":"66199"},{"range":"68931","text":"66201"},{"range":"68932","text":"66199"},{"range":"68933","text":"66201"},{"range":"68934","text":"66199"},{"range":"68935","text":"66201"},{"range":"68936","text":"66199"},{"range":"68937","text":"66201"},{"range":"68938","text":"66199"},{"range":"68939","text":"66201"},{"range":"68940","text":"66199"},{"range":"68941","text":"66201"},{"range":"68942","text":"66199"},{"range":"68943","text":"66201"},{"range":"68944","text":"66199"},{"range":"68945","text":"66201"},{"range":"68946","text":"66199"},{"range":"68947","text":"66201"},{"range":"68948","text":"66199"},{"range":"68949","text":"66201"},{"range":"68950","text":"66199"},{"range":"68951","text":"66201"},{"range":"68952","text":"66199"},{"range":"68953","text":"66201"},{"range":"68954","text":"66199"},{"range":"68955","text":"66201"},{"range":"68956","text":"66199"},{"range":"68957","text":"66201"},{"range":"68958","text":"66199"},{"range":"68959","text":"66201"},{"range":"68960","text":"66199"},{"range":"68961","text":"66201"},{"range":"68962","text":"66199"},{"range":"68963","text":"66201"},{"range":"68964","text":"66199"},{"range":"68965","text":"66201"},{"range":"68966","text":"66199"},{"range":"68967","text":"66201"},{"range":"68968","text":"66199"},{"range":"68969","text":"66201"},{"range":"68970","text":"66199"},{"range":"68971","text":"66201"},{"range":"68972","text":"66199"},{"range":"68973","text":"66201"},{"range":"68974","text":"66199"},{"range":"68975","text":"66201"},{"range":"68976","text":"66199"},{"range":"68977","text":"66201"},{"range":"68978","text":"66199"},{"range":"68979","text":"66201"},{"range":"68980","text":"66199"},{"range":"68981","text":"66201"},{"range":"68982","text":"66199"},{"range":"68983","text":"66201"},{"range":"68984","text":"66199"},{"range":"68985","text":"66201"},{"range":"68986","text":"66199"},{"range":"68987","text":"66201"},{"range":"68988","text":"66199"},{"range":"68989","text":"66201"},{"range":"68990","text":"66199"},{"range":"68991","text":"66201"},{"range":"68992","text":"66199"},{"range":"68993","text":"66201"},{"range":"68994","text":"66199"},{"range":"68995","text":"66201"},{"range":"68996","text":"66199"},{"range":"68997","text":"66201"},{"range":"68998","text":"66199"},{"range":"68999","text":"66201"},{"range":"69000","text":"66199"},{"range":"69001","text":"66201"},{"range":"69002","text":"66199"},{"range":"69003","text":"66201"},{"range":"69004","text":"66199"},{"range":"69005","text":"66201"},{"range":"69006","text":"66199"},{"range":"69007","text":"66201"},{"range":"69008","text":"66199"},{"range":"69009","text":"66201"},{"range":"69010","text":"66199"},{"range":"69011","text":"66201"},{"range":"69012","text":"66199"},{"range":"69013","text":"66201"},{"range":"69014","text":"66199"},{"range":"69015","text":"66201"},{"range":"69016","text":"66199"},{"range":"69017","text":"66201"},{"range":"69018","text":"66199"},{"range":"69019","text":"66201"},{"range":"69020","text":"66199"},{"range":"69021","text":"66201"},{"range":"69022","text":"66199"},{"range":"69023","text":"66201"},{"range":"69024","text":"66199"},{"range":"69025","text":"66201"},{"range":"69026","text":"66199"},{"range":"69027","text":"66201"},{"range":"69028","text":"66199"},{"range":"69029","text":"66201"},{"range":"69030","text":"66199"},{"range":"69031","text":"66201"},{"range":"69032","text":"66199"},{"range":"69033","text":"66201"},{"range":"69034","text":"66199"},{"range":"69035","text":"66201"},{"range":"69036","text":"66199"},{"range":"69037","text":"66201"},{"range":"69038","text":"66199"},{"range":"69039","text":"66201"},{"range":"69040","text":"66199"},{"range":"69041","text":"66201"},{"range":"69042","text":"66199"},{"range":"69043","text":"66201"},{"range":"69044","text":"66199"},{"range":"69045","text":"66201"},{"range":"69046","text":"66199"},{"range":"69047","text":"66201"},{"range":"69048","text":"66199"},{"range":"69049","text":"66201"},{"range":"69050","text":"66199"},{"range":"69051","text":"66201"},{"range":"69052","text":"66199"},{"range":"69053","text":"66201"},{"range":"69054","text":"66199"},{"range":"69055","text":"66201"},{"range":"69056","text":"66199"},{"range":"69057","text":"66201"},{"range":"69058","text":"66199"},{"range":"69059","text":"66201"},{"range":"69060","text":"66199"},{"range":"69061","text":"66201"},{"range":"69062","text":"66199"},{"range":"69063","text":"66201"},{"range":"69064","text":"66199"},{"range":"69065","text":"66201"},{"range":"69066","text":"66199"},{"range":"69067","text":"66201"},{"range":"69068","text":"66199"},{"range":"69069","text":"66201"},{"range":"69070","text":"66199"},{"range":"69071","text":"66201"},{"range":"69072","text":"66199"},{"range":"69073","text":"66201"},{"range":"69074","text":"66199"},{"range":"69075","text":"66201"},{"range":"69076","text":"66199"},{"range":"69077","text":"66201"},{"range":"69078","text":"66199"},{"range":"69079","text":"66201"},{"range":"69080","text":"66199"},{"range":"69081","text":"66201"},{"range":"69082","text":"66199"},{"range":"69083","text":"66201"},{"range":"69084","text":"66199"},{"range":"69085","text":"66201"},{"range":"69086","text":"66199"},{"range":"69087","text":"66201"},{"range":"69088","text":"66199"},{"range":"69089","text":"66201"},{"range":"69090","text":"66199"},{"range":"69091","text":"66201"},{"range":"69092","text":"66199"},{"range":"69093","text":"66201"},{"range":"69094","text":"66199"},{"range":"69095","text":"66201"},{"range":"69096","text":"66199"},{"range":"69097","text":"66201"},{"range":"69098","text":"66199"},{"range":"69099","text":"66201"},{"range":"69100","text":"66199"},{"range":"69101","text":"66201"},{"range":"69102","text":"66199"},{"range":"69103","text":"66201"},{"range":"69104","text":"66199"},{"range":"69105","text":"66201"},{"range":"69106","text":"66199"},{"range":"69107","text":"66201"},{"range":"69108","text":"66199"},{"range":"69109","text":"66201"},{"range":"69110","text":"66199"},{"range":"69111","text":"66201"},{"range":"69112","text":"66199"},{"range":"69113","text":"66201"},{"range":"69114","text":"66199"},{"range":"69115","text":"66201"},{"range":"69116","text":"66199"},{"range":"69117","text":"66201"},{"range":"69118","text":"66199"},{"range":"69119","text":"66201"},{"range":"69120","text":"66199"},{"range":"69121","text":"66201"},{"range":"69122","text":"66199"},{"range":"69123","text":"66201"},{"range":"69124","text":"66199"},{"range":"69125","text":"66201"},{"range":"69126","text":"66199"},{"range":"69127","text":"66201"},{"range":"69128","text":"66199"},{"range":"69129","text":"66201"},{"range":"69130","text":"66199"},{"range":"69131","text":"66201"},{"range":"69132","text":"66199"},{"range":"69133","text":"66201"},{"range":"69134","text":"66199"},{"range":"69135","text":"66201"},{"range":"69136","text":"66199"},{"range":"69137","text":"66201"},{"range":"69138","text":"66199"},{"range":"69139","text":"66201"},{"range":"69140","text":"66199"},{"range":"69141","text":"66201"},{"range":"69142","text":"66199"},{"range":"69143","text":"66201"},{"range":"69144","text":"66199"},{"range":"69145","text":"66201"},{"range":"69146","text":"66199"},{"range":"69147","text":"66201"},{"range":"69148","text":"66199"},{"range":"69149","text":"66201"},{"range":"69150","text":"66199"},{"range":"69151","text":"66201"},{"range":"69152","text":"66199"},{"range":"69153","text":"66201"},{"range":"69154","text":"66199"},{"range":"69155","text":"66201"},{"range":"69156","text":"66199"},{"range":"69157","text":"66201"},{"range":"69158","text":"66199"},{"range":"69159","text":"66201"},{"range":"69160","text":"66199"},{"range":"69161","text":"66201"},{"range":"69162","text":"66199"},{"range":"69163","text":"66201"},{"range":"69164","text":"66199"},{"range":"69165","text":"66201"},{"range":"69166","text":"66199"},{"range":"69167","text":"66201"},{"range":"69168","text":"66199"},{"range":"69169","text":"66201"},{"range":"69170","text":"66199"},{"range":"69171","text":"66201"},{"range":"69172","text":"66199"},{"range":"69173","text":"66201"},{"range":"69174","text":"66199"},{"range":"69175","text":"66201"},{"range":"69176","text":"66199"},{"range":"69177","text":"66201"},{"range":"69178","text":"66199"},{"range":"69179","text":"66201"},{"range":"69180","text":"66199"},{"range":"69181","text":"66201"},{"range":"69182","text":"66199"},{"range":"69183","text":"66201"},{"range":"69184","text":"66199"},{"range":"69185","text":"66201"},{"range":"69186","text":"66199"},{"range":"69187","text":"66201"},{"range":"69188","text":"66199"},{"range":"69189","text":"66201"},{"range":"69190","text":"66199"},{"range":"69191","text":"66201"},{"range":"69192","text":"66199"},{"range":"69193","text":"66201"},{"range":"69194","text":"66199"},{"range":"69195","text":"66201"},{"range":"69196","text":"66199"},{"range":"69197","text":"66201"},{"range":"69198","text":"66199"},{"range":"69199","text":"66201"},{"range":"69200","text":"66199"},{"range":"69201","text":"66201"},{"range":"69202","text":"66199"},{"range":"69203","text":"66201"},{"range":"69204","text":"66199"},{"range":"69205","text":"66201"},{"range":"69206","text":"66199"},{"range":"69207","text":"66201"},{"range":"69208","text":"66199"},{"range":"69209","text":"66201"},{"range":"69210","text":"66199"},{"range":"69211","text":"66201"},{"range":"69212","text":"66199"},{"range":"69213","text":"66201"},{"range":"69214","text":"66199"},{"range":"69215","text":"66201"},{"range":"69216","text":"66199"},{"range":"69217","text":"66201"},{"range":"69218","text":"66199"},{"range":"69219","text":"66201"},{"range":"69220","text":"66199"},{"range":"69221","text":"66201"},{"range":"69222","text":"66199"},{"range":"69223","text":"66201"},{"range":"69224","text":"66199"},{"range":"69225","text":"66201"},{"range":"69226","text":"66199"},{"range":"69227","text":"66201"},{"range":"69228","text":"66199"},{"range":"69229","text":"66201"},{"range":"69230","text":"66199"},{"range":"69231","text":"66201"},{"range":"69232","text":"66199"},{"range":"69233","text":"66201"},{"range":"69234","text":"66199"},{"range":"69235","text":"66201"},{"range":"69236","text":"66199"},{"range":"69237","text":"66201"},{"range":"69238","text":"66199"},{"range":"69239","text":"66201"},{"range":"69240","text":"66199"},{"range":"69241","text":"66201"},{"range":"69242","text":"66199"},{"range":"69243","text":"66201"},{"range":"69244","text":"66199"},{"range":"69245","text":"66201"},{"range":"69246","text":"66199"},{"range":"69247","text":"66201"},{"range":"69248","text":"66199"},{"range":"69249","text":"66201"},{"range":"69250","text":"66199"},{"range":"69251","text":"66201"},{"range":"69252","text":"66199"},{"range":"69253","text":"66201"},{"range":"69254","text":"66199"},{"range":"69255","text":"66201"},{"range":"69256","text":"66199"},{"range":"69257","text":"66201"},{"range":"69258","text":"66199"},{"range":"69259","text":"66201"},{"range":"69260","text":"66199"},{"range":"69261","text":"66201"},{"range":"69262","text":"66199"},{"range":"69263","text":"66201"},{"range":"69264","text":"66199"},{"range":"69265","text":"66201"},{"range":"69266","text":"66199"},{"range":"69267","text":"66201"},{"range":"69268","text":"66199"},{"range":"69269","text":"66201"},{"range":"69270","text":"66199"},{"range":"69271","text":"66201"},{"range":"69272","text":"66199"},{"range":"69273","text":"66201"},{"range":"69274","text":"66199"},{"range":"69275","text":"66201"},{"range":"69276","text":"66199"},{"range":"69277","text":"66201"},{"range":"69278","text":"66199"},{"range":"69279","text":"66201"},{"range":"69280","text":"66199"},{"range":"69281","text":"66201"},{"range":"69282","text":"66199"},{"range":"69283","text":"66201"},{"range":"69284","text":"66199"},{"range":"69285","text":"66201"},{"range":"69286","text":"66199"},{"range":"69287","text":"66201"},{"range":"69288","text":"66199"},{"range":"69289","text":"66201"},{"range":"69290","text":"66199"},{"range":"69291","text":"66201"},{"range":"69292","text":"66199"},{"range":"69293","text":"66201"},{"range":"69294","text":"66199"},{"range":"69295","text":"66201"},{"range":"69296","text":"66199"},{"range":"69297","text":"66201"},{"range":"69298","text":"66199"},{"range":"69299","text":"66201"},{"range":"69300","text":"66199"},{"range":"69301","text":"66201"},{"range":"69302","text":"66199"},{"range":"69303","text":"66201"},{"range":"69304","text":"66199"},{"range":"69305","text":"66201"},{"range":"69306","text":"66199"},{"range":"69307","text":"66201"},{"range":"69308","text":"66199"},{"range":"69309","text":"66201"},{"range":"69310","text":"66199"},{"range":"69311","text":"66201"},{"range":"69312","text":"66199"},{"range":"69313","text":"66201"},{"range":"69314","text":"66199"},{"range":"69315","text":"66201"},{"range":"69316","text":"66199"},{"range":"69317","text":"66201"},{"range":"69318","text":"66199"},{"range":"69319","text":"66201"},{"range":"69320","text":"66199"},{"range":"69321","text":"66201"},{"range":"69322","text":"66199"},{"range":"69323","text":"66201"},{"range":"69324","text":"66199"},{"range":"69325","text":"66201"},{"range":"69326","text":"66199"},{"range":"69327","text":"66201"},{"range":"69328","text":"66199"},{"range":"69329","text":"66201"},{"range":"69330","text":"66199"},{"range":"69331","text":"66201"},{"range":"69332","text":"66199"},{"range":"69333","text":"66201"},{"range":"69334","text":"66199"},{"range":"69335","text":"66201"},{"range":"69336","text":"66199"},{"range":"69337","text":"66201"},{"range":"69338","text":"66199"},{"range":"69339","text":"66201"},{"range":"69340","text":"66199"},{"range":"69341","text":"66201"},{"range":"69342","text":"66199"},{"range":"69343","text":"66201"},{"range":"69344","text":"66199"},{"range":"69345","text":"66201"},{"range":"69346","text":"66199"},{"range":"69347","text":"66201"},{"range":"69348","text":"66199"},{"range":"69349","text":"66201"},{"range":"69350","text":"66199"},{"range":"69351","text":"66201"},{"range":"69352","text":"66199"},{"range":"69353","text":"66201"},{"range":"69354","text":"66199"},{"range":"69355","text":"66201"},{"range":"69356","text":"66199"},{"range":"69357","text":"66201"},{"range":"69358","text":"66199"},{"range":"69359","text":"66201"},{"range":"69360","text":"66199"},{"range":"69361","text":"66201"},{"range":"69362","text":"66199"},{"range":"69363","text":"66201"},{"range":"69364","text":"66199"},{"range":"69365","text":"66201"},{"range":"69366","text":"66199"},{"range":"69367","text":"66201"},{"range":"69368","text":"66199"},{"range":"69369","text":"66201"},{"range":"69370","text":"66199"},{"range":"69371","text":"66201"},{"range":"69372","text":"66199"},{"range":"69373","text":"66201"},{"range":"69374","text":"66199"},{"range":"69375","text":"66201"},{"range":"69376","text":"66199"},{"range":"69377","text":"66201"},{"range":"69378","text":"66199"},{"range":"69379","text":"66201"},{"range":"69380","text":"66199"},{"range":"69381","text":"66201"},{"range":"69382","text":"66199"},{"range":"69383","text":"66201"},{"range":"69384","text":"66199"},{"range":"69385","text":"66201"},{"range":"69386","text":"66199"},{"range":"69387","text":"66201"},{"range":"69388","text":"66199"},{"range":"69389","text":"66201"},{"range":"69390","text":"66199"},{"range":"69391","text":"66201"},{"range":"69392","text":"66199"},{"range":"69393","text":"66201"},{"range":"69394","text":"66199"},{"range":"69395","text":"66201"},{"range":"69396","text":"66199"},{"range":"69397","text":"66201"},{"range":"69398","text":"66199"},{"range":"69399","text":"66201"},{"range":"69400","text":"66199"},{"range":"69401","text":"66201"},{"range":"69402","text":"66199"},{"range":"69403","text":"66201"},{"range":"69404","text":"66199"},{"range":"69405","text":"66201"},{"range":"69406","text":"66199"},{"range":"69407","text":"66201"},{"range":"69408","text":"66199"},{"range":"69409","text":"66201"},{"range":"69410","text":"66199"},{"range":"69411","text":"66201"},{"range":"69412","text":"66199"},{"range":"69413","text":"66201"},{"range":"69414","text":"66199"},{"range":"69415","text":"66201"},{"range":"69416","text":"66199"},{"range":"69417","text":"66201"},{"range":"69418","text":"66199"},{"range":"69419","text":"66201"},{"range":"69420","text":"66199"},{"range":"69421","text":"66201"},{"range":"69422","text":"66199"},{"range":"69423","text":"66201"},{"range":"69424","text":"66199"},{"range":"69425","text":"66201"},{"range":"69426","text":"66199"},{"range":"69427","text":"66201"},{"range":"69428","text":"66199"},{"range":"69429","text":"66201"},{"range":"69430","text":"66199"},{"range":"69431","text":"66201"},{"range":"69432","text":"66199"},{"range":"69433","text":"66201"},{"range":"69434","text":"66199"},{"range":"69435","text":"66201"},{"range":"69436","text":"66199"},{"range":"69437","text":"66201"},{"range":"69438","text":"66199"},{"range":"69439","text":"66201"},{"range":"69440","text":"66199"},{"range":"69441","text":"66201"},{"range":"69442","text":"66199"},{"range":"69443","text":"66201"},{"range":"69444","text":"66199"},{"range":"69445","text":"66201"},{"range":"69446","text":"66199"},{"range":"69447","text":"66201"},{"range":"69448","text":"66199"},{"range":"69449","text":"66201"},{"range":"69450","text":"66199"},{"range":"69451","text":"66201"},{"range":"69452","text":"66199"},{"range":"69453","text":"66201"},{"range":"69454","text":"66199"},{"range":"69455","text":"66201"},{"range":"69456","text":"66199"},{"range":"69457","text":"66201"},{"range":"69458","text":"66199"},{"range":"69459","text":"66201"},{"range":"69460","text":"66199"},{"range":"69461","text":"66201"},{"range":"69462","text":"66199"},{"range":"69463","text":"66201"},{"range":"69464","text":"66199"},{"range":"69465","text":"66201"},{"range":"69466","text":"66199"},{"range":"69467","text":"66201"},{"range":"69468","text":"66199"},{"range":"69469","text":"66201"},{"range":"69470","text":"66199"},{"range":"69471","text":"66201"},{"range":"69472","text":"66199"},{"range":"69473","text":"66201"},{"range":"69474","text":"66199"},{"range":"69475","text":"66201"},{"range":"69476","text":"66199"},{"range":"69477","text":"66201"},{"range":"69478","text":"66199"},{"range":"69479","text":"66201"},{"range":"69480","text":"66199"},{"range":"69481","text":"66201"},{"range":"69482","text":"66199"},{"range":"69483","text":"66201"},{"range":"69484","text":"66199"},{"range":"69485","text":"66201"},{"range":"69486","text":"66199"},{"range":"69487","text":"66201"},{"range":"69488","text":"66199"},{"range":"69489","text":"66201"},{"range":"69490","text":"66199"},{"range":"69491","text":"66201"},{"range":"69492","text":"66199"},{"range":"69493","text":"66201"},{"range":"69494","text":"66199"},{"range":"69495","text":"66201"},{"range":"69496","text":"66199"},{"range":"69497","text":"66201"},{"range":"69498","text":"66199"},{"range":"69499","text":"66201"},{"range":"69500","text":"66199"},{"range":"69501","text":"66201"},{"range":"69502","text":"66199"},{"range":"69503","text":"66201"},{"range":"69504","text":"66199"},{"range":"69505","text":"66201"},{"range":"69506","text":"66199"},{"range":"69507","text":"66201"},{"range":"69508","text":"66199"},{"range":"69509","text":"66201"},{"range":"69510","text":"66199"},{"range":"69511","text":"66201"},{"range":"69512","text":"66199"},{"range":"69513","text":"66201"},{"range":"69514","text":"66199"},{"range":"69515","text":"66201"},{"range":"69516","text":"66199"},{"range":"69517","text":"66201"},{"range":"69518","text":"66199"},{"range":"69519","text":"66201"},{"range":"69520","text":"66199"},{"range":"69521","text":"66201"},{"range":"69522","text":"66199"},{"range":"69523","text":"66201"},{"range":"69524","text":"66199"},{"range":"69525","text":"66201"},{"range":"69526","text":"66199"},{"range":"69527","text":"66201"},{"range":"69528","text":"66199"},{"range":"69529","text":"66201"},{"range":"69530","text":"66199"},{"range":"69531","text":"66201"},{"range":"69532","text":"66199"},{"range":"69533","text":"66201"},{"range":"69534","text":"66199"},{"range":"69535","text":"66201"},{"range":"69536","text":"66199"},{"range":"69537","text":"66201"},{"range":"69538","text":"66199"},{"range":"69539","text":"66201"},{"range":"69540","text":"66199"},{"range":"69541","text":"66201"},{"range":"69542","text":"66199"},{"range":"69543","text":"66201"},{"range":"69544","text":"66199"},{"range":"69545","text":"66201"},{"range":"69546","text":"66199"},{"range":"69547","text":"66201"},{"range":"69548","text":"66199"},{"range":"69549","text":"66201"},{"range":"69550","text":"66199"},{"range":"69551","text":"66201"},{"range":"69552","text":"66199"},{"range":"69553","text":"66201"},{"range":"69554","text":"66199"},{"range":"69555","text":"66201"},{"range":"69556","text":"66199"},{"range":"69557","text":"66201"},{"range":"69558","text":"66199"},{"range":"69559","text":"66201"},{"range":"69560","text":"66199"},{"range":"69561","text":"66201"},{"range":"69562","text":"66199"},{"range":"69563","text":"66201"},{"range":"69564","text":"66199"},{"range":"69565","text":"66201"},{"range":"69566","text":"66199"},{"range":"69567","text":"66201"},{"range":"69568","text":"66199"},{"range":"69569","text":"66201"},{"range":"69570","text":"66199"},{"range":"69571","text":"66201"},{"range":"69572","text":"66199"},{"range":"69573","text":"66201"},{"range":"69574","text":"66199"},{"range":"69575","text":"66201"},{"range":"69576","text":"66199"},{"range":"69577","text":"66201"},{"range":"69578","text":"66199"},{"range":"69579","text":"66201"},{"range":"69580","text":"66199"},{"range":"69581","text":"66201"},{"range":"69582","text":"66199"},{"range":"69583","text":"66201"},{"range":"69584","text":"66199"},{"range":"69585","text":"66201"},{"range":"69586","text":"66199"},{"range":"69587","text":"66201"},{"range":"69588","text":"66199"},{"range":"69589","text":"66201"},{"range":"69590","text":"66199"},{"range":"69591","text":"66201"},{"range":"69592","text":"66199"},{"range":"69593","text":"66201"},{"range":"69594","text":"66199"},{"range":"69595","text":"66201"},{"range":"69596","text":"66199"},{"range":"69597","text":"66201"},{"range":"69598","text":"66199"},{"range":"69599","text":"66201"},{"range":"69600","text":"66199"},{"range":"69601","text":"66201"},{"range":"69602","text":"66199"},{"range":"69603","text":"66201"},{"range":"69604","text":"66199"},{"range":"69605","text":"66201"},{"range":"69606","text":"66199"},{"range":"69607","text":"66201"},{"range":"69608","text":"66199"},{"range":"69609","text":"66201"},{"range":"69610","text":"66199"},{"range":"69611","text":"66201"},{"range":"69612","text":"66199"},{"range":"69613","text":"66201"},{"range":"69614","text":"66199"},{"range":"69615","text":"66201"},{"range":"69616","text":"66199"},{"range":"69617","text":"66201"},{"range":"69618","text":"66199"},{"range":"69619","text":"66201"},{"range":"69620","text":"66199"},{"range":"69621","text":"66201"},{"range":"69622","text":"66199"},{"range":"69623","text":"66201"},{"range":"69624","text":"66199"},{"range":"69625","text":"66201"},{"range":"69626","text":"66199"},{"range":"69627","text":"66201"},{"range":"69628","text":"66199"},{"range":"69629","text":"66201"},{"range":"69630","text":"66199"},{"range":"69631","text":"66201"},{"range":"69632","text":"66199"},{"range":"69633","text":"66201"},{"range":"69634","text":"66199"},{"range":"69635","text":"66201"},{"range":"69636","text":"66199"},{"range":"69637","text":"66201"},{"range":"69638","text":"66199"},{"range":"69639","text":"66201"},{"range":"69640","text":"66199"},{"range":"69641","text":"66201"},{"range":"69642","text":"66199"},{"range":"69643","text":"66201"},{"range":"69644","text":"66199"},{"range":"69645","text":"66201"},{"range":"69646","text":"66199"},{"range":"69647","text":"66201"},{"range":"69648","text":"66199"},{"range":"69649","text":"66201"},{"range":"69650","text":"66199"},{"range":"69651","text":"66201"},{"range":"69652","text":"66199"},{"range":"69653","text":"66201"},{"range":"69654","text":"66199"},{"range":"69655","text":"66201"},{"range":"69656","text":"66199"},{"range":"69657","text":"66201"},{"range":"69658","text":"66199"},{"range":"69659","text":"66201"},{"range":"69660","text":"66199"},{"range":"69661","text":"66201"},{"range":"69662","text":"66199"},{"range":"69663","text":"66201"},{"range":"69664","text":"66199"},{"range":"69665","text":"66201"},{"range":"69666","text":"66199"},{"range":"69667","text":"66201"},{"range":"69668","text":"66199"},{"range":"69669","text":"66201"},{"range":"69670","text":"66199"},{"range":"69671","text":"66201"},{"range":"69672","text":"66199"},{"range":"69673","text":"66201"},{"range":"69674","text":"66199"},{"range":"69675","text":"66201"},{"range":"69676","text":"66199"},{"range":"69677","text":"66201"},{"range":"69678","text":"66199"},{"range":"69679","text":"66201"},{"range":"69680","text":"66199"},{"range":"69681","text":"66201"},{"range":"69682","text":"66199"},{"range":"69683","text":"66201"},{"range":"69684","text":"66199"},{"range":"69685","text":"66201"},{"range":"69686","text":"66199"},{"range":"69687","text":"66201"},{"range":"69688","text":"66199"},{"range":"69689","text":"66201"},{"range":"69690","text":"66199"},{"range":"69691","text":"66201"},{"range":"69692","text":"66199"},{"range":"69693","text":"66201"},{"range":"69694","text":"66199"},{"range":"69695","text":"66201"},{"range":"69696","text":"66199"},{"range":"69697","text":"66201"},{"range":"69698","text":"66199"},{"range":"69699","text":"66201"},{"range":"69700","text":"66199"},{"range":"69701","text":"66201"},{"range":"69702","text":"66199"},{"range":"69703","text":"66201"},{"range":"69704","text":"66199"},{"range":"69705","text":"66201"},{"range":"69706","text":"66199"},{"range":"69707","text":"66201"},{"range":"69708","text":"66199"},{"range":"69709","text":"66201"},{"range":"69710","text":"66199"},{"range":"69711","text":"66201"},{"range":"69712","text":"66199"},{"range":"69713","text":"66201"},{"range":"69714","text":"66199"},{"range":"69715","text":"66201"},{"range":"69716","text":"66199"},{"range":"69717","text":"66201"},{"range":"69718","text":"66199"},{"range":"69719","text":"66201"},{"range":"69720","text":"66199"},{"range":"69721","text":"66201"},{"range":"69722","text":"66199"},{"range":"69723","text":"66201"},{"range":"69724","text":"66199"},{"range":"69725","text":"66201"},{"range":"69726","text":"66199"},{"range":"69727","text":"66201"},{"range":"69728","text":"66199"},{"range":"69729","text":"66201"},{"range":"69730","text":"66199"},{"range":"69731","text":"66201"},{"range":"69732","text":"66199"},{"range":"69733","text":"66201"},{"range":"69734","text":"66199"},{"range":"69735","text":"66201"},{"range":"69736","text":"66199"},{"range":"69737","text":"66201"},{"range":"69738","text":"66199"},{"range":"69739","text":"66201"},{"range":"69740","text":"66199"},{"range":"69741","text":"66201"},{"range":"69742","text":"66199"},{"range":"69743","text":"66201"},{"range":"69744","text":"66199"},{"range":"69745","text":"66201"},{"range":"69746","text":"66199"},{"range":"69747","text":"66201"},{"range":"69748","text":"66199"},{"range":"69749","text":"66201"},{"range":"69750","text":"66199"},{"range":"69751","text":"66201"},{"range":"69752","text":"66199"},{"range":"69753","text":"66201"},{"range":"69754","text":"66199"},{"range":"69755","text":"66201"},{"range":"69756","text":"66199"},{"range":"69757","text":"66201"},{"range":"69758","text":"66199"},{"range":"69759","text":"66201"},{"range":"69760","text":"66199"},{"range":"69761","text":"66201"},{"range":"69762","text":"66199"},{"range":"69763","text":"66201"},{"range":"69764","text":"66199"},{"range":"69765","text":"66201"},{"range":"69766","text":"66199"},{"range":"69767","text":"66201"},{"range":"69768","text":"66199"},{"range":"69769","text":"66201"},{"range":"69770","text":"66199"},{"range":"69771","text":"66201"},{"range":"69772","text":"66199"},{"range":"69773","text":"66201"},{"range":"69774","text":"66199"},{"range":"69775","text":"66201"},{"range":"69776","text":"66199"},{"range":"69777","text":"66201"},{"range":"69778","text":"66199"},{"range":"69779","text":"66201"},{"range":"69780","text":"66199"},{"range":"69781","text":"66201"},{"range":"69782","text":"66199"},{"range":"69783","text":"66201"},{"range":"69784","text":"66199"},{"range":"69785","text":"66201"},{"range":"69786","text":"66199"},{"range":"69787","text":"66201"},{"range":"69788","text":"66199"},{"range":"69789","text":"66201"},{"range":"69790","text":"66199"},{"range":"69791","text":"66201"},{"range":"69792","text":"66199"},{"range":"69793","text":"66201"},{"range":"69794","text":"66199"},{"range":"69795","text":"66201"},{"range":"69796","text":"66199"},{"range":"69797","text":"66201"},{"range":"69798","text":"66199"},{"range":"69799","text":"66201"},{"range":"69800","text":"66199"},{"range":"69801","text":"66201"},{"range":"69802","text":"66199"},{"range":"69803","text":"66201"},{"range":"69804","text":"66199"},{"range":"69805","text":"66201"},{"range":"69806","text":"66199"},{"range":"69807","text":"66201"},{"range":"69808","text":"66199"},{"range":"69809","text":"66201"},{"range":"69810","text":"66199"},{"range":"69811","text":"66201"},{"range":"69812","text":"66199"},{"range":"69813","text":"66201"},{"range":"69814","text":"66199"},{"range":"69815","text":"66201"},{"range":"69816","text":"66199"},{"range":"69817","text":"66201"},{"range":"69818","text":"66199"},{"range":"69819","text":"66201"},{"range":"69820","text":"66199"},{"range":"69821","text":"66201"},{"range":"69822","text":"66199"},{"range":"69823","text":"66201"},{"range":"69824","text":"66199"},{"range":"69825","text":"66201"},{"range":"69826","text":"66199"},{"range":"69827","text":"66201"},{"range":"69828","text":"66199"},{"range":"69829","text":"66201"},{"range":"69830","text":"66199"},{"range":"69831","text":"66201"},{"range":"69832","text":"66199"},{"range":"69833","text":"66201"},{"range":"69834","text":"66199"},{"range":"69835","text":"66201"},{"range":"69836","text":"66199"},{"range":"69837","text":"66201"},{"range":"69838","text":"66199"},{"range":"69839","text":"66201"},{"range":"69840","text":"66199"},{"range":"69841","text":"66201"},{"range":"69842","text":"66199"},{"range":"69843","text":"66201"},{"range":"69844","text":"66199"},{"range":"69845","text":"66201"},{"range":"69846","text":"66199"},{"range":"69847","text":"66201"},{"range":"69848","text":"66199"},{"range":"69849","text":"66201"},{"range":"69850","text":"66199"},{"range":"69851","text":"66201"},{"range":"69852","text":"66199"},{"range":"69853","text":"66201"},{"range":"69854","text":"66199"},{"range":"69855","text":"66201"},{"range":"69856","text":"66199"},{"range":"69857","text":"66201"},{"range":"69858","text":"66199"},{"range":"69859","text":"66201"},{"range":"69860","text":"66199"},{"range":"69861","text":"66201"},{"range":"69862","text":"66199"},{"range":"69863","text":"66201"},{"range":"69864","text":"66199"},{"range":"69865","text":"66201"},{"range":"69866","text":"66199"},{"range":"69867","text":"66201"},{"range":"69868","text":"66199"},{"range":"69869","text":"66201"},{"range":"69870","text":"66199"},{"range":"69871","text":"66201"},{"range":"69872","text":"66199"},{"range":"69873","text":"66201"},{"range":"69874","text":"66199"},{"range":"69875","text":"66201"},{"range":"69876","text":"66199"},{"range":"69877","text":"66201"},{"range":"69878","text":"66199"},{"range":"69879","text":"66201"},{"range":"69880","text":"66199"},{"range":"69881","text":"66201"},{"range":"69882","text":"66199"},{"range":"69883","text":"66201"},{"range":"69884","text":"66199"},{"range":"69885","text":"66201"},{"range":"69886","text":"66199"},{"range":"69887","text":"66201"},{"range":"69888","text":"66199"},{"range":"69889","text":"66201"},{"range":"69890","text":"66199"},{"range":"69891","text":"66201"},{"range":"69892","text":"66199"},{"range":"69893","text":"66201"},{"range":"69894","text":"66199"},{"range":"69895","text":"66201"},{"range":"69896","text":"66199"},{"range":"69897","text":"66201"},{"range":"69898","text":"66199"},{"range":"69899","text":"66201"},{"range":"69900","text":"66199"},{"range":"69901","text":"66201"},{"range":"69902","text":"66199"},{"range":"69903","text":"66201"},{"range":"69904","text":"66199"},{"range":"69905","text":"66201"},{"range":"69906","text":"66199"},{"range":"69907","text":"66201"},{"range":"69908","text":"66199"},{"range":"69909","text":"66201"},{"range":"69910","text":"66199"},{"range":"69911","text":"66201"},{"range":"69912","text":"66199"},{"range":"69913","text":"66201"},{"range":"69914","text":"66199"},{"range":"69915","text":"66201"},{"range":"69916","text":"66199"},{"range":"69917","text":"66201"},{"range":"69918","text":"66199"},{"range":"69919","text":"66201"},{"range":"69920","text":"66199"},{"range":"69921","text":"66201"},{"range":"69922","text":"66199"},{"range":"69923","text":"66201"},{"range":"69924","text":"66199"},{"range":"69925","text":"66201"},{"range":"69926","text":"66199"},{"range":"69927","text":"66201"},{"range":"69928","text":"66199"},{"range":"69929","text":"66201"},{"range":"69930","text":"66199"},{"range":"69931","text":"66201"},{"range":"69932","text":"66199"},{"range":"69933","text":"66201"},{"range":"69934","text":"66199"},{"range":"69935","text":"66201"},{"range":"69936","text":"66199"},{"range":"69937","text":"66201"},{"range":"69938","text":"66199"},{"range":"69939","text":"66201"},{"range":"69940","text":"66199"},{"range":"69941","text":"66201"},{"range":"69942","text":"66199"},{"range":"69943","text":"66201"},{"range":"69944","text":"66199"},{"range":"69945","text":"66201"},{"range":"69946","text":"66199"},{"range":"69947","text":"66201"},{"range":"69948","text":"66199"},{"range":"69949","text":"66201"},{"range":"69950","text":"66199"},{"range":"69951","text":"66201"},{"range":"69952","text":"66199"},{"range":"69953","text":"66201"},{"range":"69954","text":"66199"},{"range":"69955","text":"66201"},{"range":"69956","text":"66199"},{"range":"69957","text":"66201"},{"range":"69958","text":"66199"},{"range":"69959","text":"66201"},{"range":"69960","text":"66199"},{"range":"69961","text":"66201"},{"range":"69962","text":"66199"},{"range":"69963","text":"66201"},{"range":"69964","text":"66199"},{"range":"69965","text":"66201"},{"range":"69966","text":"66199"},{"range":"69967","text":"66201"},{"range":"69968","text":"66199"},{"range":"69969","text":"66201"},{"range":"69970","text":"66199"},{"range":"69971","text":"66201"},{"range":"69972","text":"66199"},{"range":"69973","text":"66201"},{"range":"69974","text":"66199"},{"range":"69975","text":"66201"},{"range":"69976","text":"66199"},{"range":"69977","text":"66201"},{"range":"69978","text":"66199"},{"range":"69979","text":"66201"},{"range":"69980","text":"66199"},{"range":"69981","text":"66201"},{"range":"69982","text":"66199"},{"range":"69983","text":"66201"},{"range":"69984","text":"66199"},{"range":"69985","text":"66201"},{"range":"69986","text":"66199"},{"range":"69987","text":"66201"},{"range":"69988","text":"66199"},{"range":"69989","text":"66201"},{"range":"69990","text":"66199"},{"range":"69991","text":"66201"},{"range":"69992","text":"66199"},{"range":"69993","text":"66201"},{"range":"69994","text":"66199"},{"range":"69995","text":"66201"},{"range":"69996","text":"66199"},{"range":"69997","text":"66201"},{"range":"69998","text":"66199"},{"range":"69999","text":"66201"},{"range":"70000","text":"66199"},{"range":"70001","text":"66201"},{"range":"70002","text":"66199"},{"range":"70003","text":"66201"},{"range":"70004","text":"66199"},{"range":"70005","text":"66201"},{"range":"70006","text":"66199"},{"range":"70007","text":"66201"},{"range":"70008","text":"66199"},{"range":"70009","text":"66201"},{"range":"70010","text":"66199"},{"range":"70011","text":"66201"},{"range":"70012","text":"66199"},{"range":"70013","text":"66201"},{"range":"70014","text":"66199"},{"range":"70015","text":"66201"},{"range":"70016","text":"66199"},{"range":"70017","text":"66201"},{"range":"70018","text":"66199"},{"range":"70019","text":"66201"},{"range":"70020","text":"66199"},{"range":"70021","text":"66201"},{"range":"70022","text":"66199"},{"range":"70023","text":"66201"},{"range":"70024","text":"66199"},{"range":"70025","text":"66201"},{"range":"70026","text":"66199"},{"range":"70027","text":"66201"},{"range":"70028","text":"66199"},{"range":"70029","text":"66201"},{"range":"70030","text":"66199"},{"range":"70031","text":"66201"},{"range":"70032","text":"66199"},{"range":"70033","text":"66201"},{"range":"70034","text":"66199"},{"range":"70035","text":"66201"},{"range":"70036","text":"66199"},{"range":"70037","text":"66201"},{"range":"70038","text":"66199"},{"range":"70039","text":"66201"},{"range":"70040","text":"66199"},{"range":"70041","text":"66201"},{"range":"70042","text":"66199"},{"range":"70043","text":"66201"},{"range":"70044","text":"66199"},{"range":"70045","text":"66201"},{"range":"70046","text":"66199"},{"range":"70047","text":"66201"},{"range":"70048","text":"66199"},{"range":"70049","text":"66201"},{"range":"70050","text":"66199"},{"range":"70051","text":"66201"},{"range":"70052","text":"66199"},{"range":"70053","text":"66201"},{"range":"70054","text":"66199"},{"range":"70055","text":"66201"},{"range":"70056","text":"66199"},{"range":"70057","text":"66201"},{"range":"70058","text":"66199"},{"range":"70059","text":"66201"},{"range":"70060","text":"66199"},{"range":"70061","text":"66201"},{"range":"70062","text":"66199"},{"range":"70063","text":"66201"},{"range":"70064","text":"66199"},{"range":"70065","text":"66201"},{"range":"70066","text":"66199"},{"range":"70067","text":"66201"},{"range":"70068","text":"66199"},{"range":"70069","text":"66201"},{"range":"70070","text":"66199"},{"range":"70071","text":"66201"},{"range":"70072","text":"66199"},{"range":"70073","text":"66201"},{"range":"70074","text":"66199"},{"range":"70075","text":"66201"},{"range":"70076","text":"66199"},{"range":"70077","text":"66201"},{"range":"70078","text":"66199"},{"range":"70079","text":"66201"},{"range":"70080","text":"66199"},{"range":"70081","text":"66201"},{"range":"70082","text":"66199"},{"range":"70083","text":"66201"},{"range":"70084","text":"66199"},{"range":"70085","text":"66201"},{"range":"70086","text":"66199"},{"range":"70087","text":"66201"},{"range":"70088","text":"66199"},{"range":"70089","text":"66201"},{"range":"70090","text":"66199"},{"range":"70091","text":"66201"},{"range":"70092","text":"66199"},{"range":"70093","text":"66201"},{"range":"70094","text":"66199"},{"range":"70095","text":"66201"},{"range":"70096","text":"66199"},{"range":"70097","text":"66201"},{"range":"70098","text":"66199"},{"range":"70099","text":"66201"},{"range":"70100","text":"66199"},{"range":"70101","text":"66201"},{"range":"70102","text":"66199"},{"range":"70103","text":"66201"},{"range":"70104","text":"66199"},{"range":"70105","text":"66201"},{"range":"70106","text":"66199"},{"range":"70107","text":"66201"},{"range":"70108","text":"66199"},{"range":"70109","text":"66201"},{"range":"70110","text":"66199"},{"range":"70111","text":"66201"},{"range":"70112","text":"66199"},{"range":"70113","text":"66201"},{"range":"70114","text":"66199"},{"range":"70115","text":"66201"},{"range":"70116","text":"66199"},{"range":"70117","text":"66201"},{"range":"70118","text":"66199"},{"range":"70119","text":"66201"},{"range":"70120","text":"66199"},{"range":"70121","text":"66201"},{"range":"70122","text":"66199"},{"range":"70123","text":"66201"},{"range":"70124","text":"66199"},{"range":"70125","text":"66201"},{"range":"70126","text":"66199"},{"range":"70127","text":"66201"},{"range":"70128","text":"66199"},{"range":"70129","text":"66201"},{"range":"70130","text":"66199"},{"range":"70131","text":"66201"},{"range":"70132","text":"66199"},{"range":"70133","text":"66201"},{"range":"70134","text":"66199"},{"range":"70135","text":"66201"},{"range":"70136","text":"66199"},{"range":"70137","text":"66201"},{"range":"70138","text":"66199"},{"range":"70139","text":"66201"},{"range":"70140","text":"66199"},{"range":"70141","text":"66201"},{"range":"70142","text":"66199"},{"range":"70143","text":"66201"},{"range":"70144","text":"66199"},{"range":"70145","text":"66201"},{"range":"70146","text":"66199"},{"range":"70147","text":"66201"},{"range":"70148","text":"66199"},{"range":"70149","text":"66201"},{"range":"70150","text":"66199"},{"range":"70151","text":"66201"},{"range":"70152","text":"66199"},{"range":"70153","text":"66201"},{"range":"70154","text":"66199"},{"range":"70155","text":"66201"},{"range":"70156","text":"66199"},{"range":"70157","text":"66201"},{"range":"70158","text":"66199"},{"range":"70159","text":"66201"},{"range":"70160","text":"66199"},{"range":"70161","text":"66201"},{"range":"70162","text":"66199"},{"range":"70163","text":"66201"},{"range":"70164","text":"66199"},{"range":"70165","text":"66201"},{"range":"70166","text":"66199"},{"range":"70167","text":"66201"},{"range":"70168","text":"66199"},{"range":"70169","text":"66201"},{"range":"70170","text":"66199"},{"range":"70171","text":"66201"},{"range":"70172","text":"66199"},{"range":"70173","text":"66201"},{"range":"70174","text":"66199"},{"range":"70175","text":"66201"},{"range":"70176","text":"66199"},{"range":"70177","text":"66201"},{"range":"70178","text":"66199"},{"range":"70179","text":"66201"},{"range":"70180","text":"66199"},{"range":"70181","text":"66201"},{"range":"70182","text":"66199"},{"range":"70183","text":"66201"},{"range":"70184","text":"66199"},{"range":"70185","text":"66201"},{"range":"70186","text":"66199"},{"range":"70187","text":"66201"},{"range":"70188","text":"66199"},{"range":"70189","text":"66201"},{"range":"70190","text":"66199"},{"range":"70191","text":"66201"},{"range":"70192","text":"66199"},{"range":"70193","text":"66201"},{"range":"70194","text":"66199"},{"range":"70195","text":"66201"},{"range":"70196","text":"66199"},{"range":"70197","text":"66201"},{"range":"70198","text":"66199"},{"range":"70199","text":"66201"},{"range":"70200","text":"66199"},{"range":"70201","text":"66201"},{"range":"70202","text":"66199"},{"range":"70203","text":"66201"},{"range":"70204","text":"66199"},{"range":"70205","text":"66201"},{"range":"70206","text":"66199"},{"range":"70207","text":"66201"},{"range":"70208","text":"66199"},{"range":"70209","text":"66201"},{"range":"70210","text":"66199"},{"range":"70211","text":"66201"},{"range":"70212","text":"66199"},{"range":"70213","text":"66201"},{"range":"70214","text":"66199"},{"range":"70215","text":"66201"},{"range":"70216","text":"66199"},{"range":"70217","text":"66201"},{"range":"70218","text":"66199"},{"range":"70219","text":"66201"},{"range":"70220","text":"66199"},{"range":"70221","text":"66201"},{"range":"70222","text":"66199"},{"range":"70223","text":"66201"},{"range":"70224","text":"66199"},{"range":"70225","text":"66201"},{"range":"70226","text":"66199"},{"range":"70227","text":"66201"},{"range":"70228","text":"66199"},{"range":"70229","text":"66201"},{"range":"70230","text":"66199"},{"range":"70231","text":"66201"},{"range":"70232","text":"66199"},{"range":"70233","text":"66201"},{"range":"70234","text":"66199"},{"range":"70235","text":"66201"},{"range":"70236","text":"66199"},{"range":"70237","text":"66201"},{"range":"70238","text":"66199"},{"range":"70239","text":"66201"},{"range":"70240","text":"66199"},{"range":"70241","text":"66201"},{"range":"70242","text":"66199"},{"range":"70243","text":"66201"},{"range":"70244","text":"66199"},{"range":"70245","text":"66201"},{"range":"70246","text":"66199"},{"range":"70247","text":"66201"},{"range":"70248","text":"66199"},{"range":"70249","text":"66201"},{"range":"70250","text":"66199"},{"range":"70251","text":"66201"},{"range":"70252","text":"66199"},{"range":"70253","text":"66201"},{"range":"70254","text":"66199"},{"range":"70255","text":"66201"},{"range":"70256","text":"66199"},{"range":"70257","text":"66201"},{"range":"70258","text":"66199"},{"range":"70259","text":"66201"},{"range":"70260","text":"66199"},{"range":"70261","text":"66201"},{"range":"70262","text":"66199"},{"range":"70263","text":"66201"},{"range":"70264","text":"66199"},{"range":"70265","text":"66201"},{"range":"70266","text":"66199"},{"range":"70267","text":"66201"},{"range":"70268","text":"66199"},{"range":"70269","text":"66201"},{"range":"70270","text":"66199"},{"range":"70271","text":"66201"},{"range":"70272","text":"66199"},{"range":"70273","text":"66201"},{"range":"70274","text":"66199"},{"range":"70275","text":"66201"},{"range":"70276","text":"66199"},{"range":"70277","text":"66201"},{"range":"70278","text":"66199"},{"range":"70279","text":"66201"},{"range":"70280","text":"66199"},{"range":"70281","text":"66201"},{"range":"70282","text":"66199"},{"range":"70283","text":"66201"},{"range":"70284","text":"66199"},{"range":"70285","text":"66201"},{"range":"70286","text":"66199"},{"range":"70287","text":"66201"},{"range":"70288","text":"66199"},{"range":"70289","text":"66201"},{"range":"70290","text":"66199"},{"range":"70291","text":"66201"},{"range":"70292","text":"66199"},{"range":"70293","text":"66201"},{"range":"70294","text":"66199"},{"range":"70295","text":"66201"},{"range":"70296","text":"66199"},{"range":"70297","text":"66201"},{"range":"70298","text":"66199"},{"range":"70299","text":"66201"},{"range":"70300","text":"66199"},{"range":"70301","text":"66201"},{"range":"70302","text":"66199"},{"range":"70303","text":"66201"},{"range":"70304","text":"66199"},{"range":"70305","text":"66201"},{"range":"70306","text":"66199"},{"range":"70307","text":"66201"},{"range":"70308","text":"66199"},{"range":"70309","text":"66201"},{"range":"70310","text":"66199"},{"range":"70311","text":"66201"},{"range":"70312","text":"66199"},{"range":"70313","text":"66201"},{"range":"70314","text":"66199"},{"range":"70315","text":"66201"},{"range":"70316","text":"66199"},{"range":"70317","text":"66201"},{"range":"70318","text":"66199"},{"range":"70319","text":"66201"},{"range":"70320","text":"66199"},{"range":"70321","text":"66201"},{"range":"70322","text":"66199"},{"range":"70323","text":"66201"},{"range":"70324","text":"66199"},{"range":"70325","text":"66201"},{"range":"70326","text":"66199"},{"range":"70327","text":"66201"},{"range":"70328","text":"66199"},{"range":"70329","text":"66201"},{"range":"70330","text":"66199"},{"range":"70331","text":"66201"},{"range":"70332","text":"66199"},{"range":"70333","text":"66201"},{"range":"70334","text":"66199"},{"range":"70335","text":"66201"},{"range":"70336","text":"66199"},{"range":"70337","text":"66201"},{"range":"70338","text":"66199"},{"range":"70339","text":"66201"},{"range":"70340","text":"66199"},{"range":"70341","text":"66201"},{"range":"70342","text":"66199"},{"range":"70343","text":"66201"},{"range":"70344","text":"66199"},{"range":"70345","text":"66201"},{"range":"70346","text":"66199"},{"range":"70347","text":"66201"},{"range":"70348","text":"66199"},{"range":"70349","text":"66201"},{"range":"70350","text":"66199"},{"range":"70351","text":"66201"},{"range":"70352","text":"66199"},{"range":"70353","text":"66201"},{"range":"70354","text":"66199"},{"range":"70355","text":"66201"},{"range":"70356","text":"66199"},{"range":"70357","text":"66201"},{"range":"70358","text":"66199"},{"range":"70359","text":"66201"},{"range":"70360","text":"66199"},{"range":"70361","text":"66201"},{"range":"70362","text":"66199"},{"range":"70363","text":"66201"},{"range":"70364","text":"66199"},{"range":"70365","text":"66201"},{"range":"70366","text":"66199"},{"range":"70367","text":"66201"},{"range":"70368","text":"66199"},{"range":"70369","text":"66201"},{"range":"70370","text":"66199"},{"range":"70371","text":"66201"},{"range":"70372","text":"66199"},{"range":"70373","text":"66201"},{"range":"70374","text":"66199"},{"range":"70375","text":"66201"},{"range":"70376","text":"66199"},{"range":"70377","text":"66201"},{"range":"70378","text":"66199"},{"range":"70379","text":"66201"},{"range":"70380","text":"66199"},{"range":"70381","text":"66201"},{"range":"70382","text":"66199"},{"range":"70383","text":"66201"},{"range":"70384","text":"66199"},{"range":"70385","text":"66201"},{"range":"70386","text":"66199"},{"range":"70387","text":"66201"},{"range":"70388","text":"66199"},{"range":"70389","text":"66201"},{"range":"70390","text":"66199"},{"range":"70391","text":"66201"},{"range":"70392","text":"66199"},{"range":"70393","text":"66201"},{"range":"70394","text":"66199"},{"range":"70395","text":"66201"},{"range":"70396","text":"66199"},{"range":"70397","text":"66201"},{"range":"70398","text":"66199"},{"range":"70399","text":"66201"},{"range":"70400","text":"66199"},{"range":"70401","text":"66201"},{"range":"70402","text":"66199"},{"range":"70403","text":"66201"},{"range":"70404","text":"66199"},{"range":"70405","text":"66201"},{"range":"70406","text":"66199"},{"range":"70407","text":"66201"},{"range":"70408","text":"66199"},{"range":"70409","text":"66201"},{"range":"70410","text":"66199"},{"range":"70411","text":"66201"},{"range":"70412","text":"66199"},{"range":"70413","text":"66201"},{"range":"70414","text":"66199"},{"range":"70415","text":"66201"},{"range":"70416","text":"66199"},{"range":"70417","text":"66201"},{"range":"70418","text":"66199"},{"range":"70419","text":"66201"},{"range":"70420","text":"66199"},{"range":"70421","text":"66201"},{"range":"70422","text":"66199"},{"range":"70423","text":"66201"},{"range":"70424","text":"66199"},{"range":"70425","text":"66201"},{"range":"70426","text":"66199"},{"range":"70427","text":"66201"},{"range":"70428","text":"66199"},{"range":"70429","text":"66201"},{"range":"70430","text":"66199"},{"range":"70431","text":"66201"},{"range":"70432","text":"66199"},{"range":"70433","text":"66201"},{"range":"70434","text":"66199"},{"range":"70435","text":"66201"},{"range":"70436","text":"66199"},{"range":"70437","text":"66201"},{"range":"70438","text":"66199"},{"range":"70439","text":"66201"},{"range":"70440","text":"66199"},{"range":"70441","text":"66201"},{"range":"70442","text":"66199"},{"range":"70443","text":"66201"},{"range":"70444","text":"66199"},{"range":"70445","text":"66201"},{"range":"70446","text":"66199"},{"range":"70447","text":"66201"},{"range":"70448","text":"66199"},{"range":"70449","text":"66201"},{"range":"70450","text":"66199"},{"range":"70451","text":"66201"},{"range":"70452","text":"66199"},{"range":"70453","text":"66201"},{"range":"70454","text":"66199"},{"range":"70455","text":"66201"},{"range":"70456","text":"66199"},{"range":"70457","text":"66201"},{"range":"70458","text":"66199"},{"range":"70459","text":"66201"},{"range":"70460","text":"66199"},{"range":"70461","text":"66201"},{"range":"70462","text":"66199"},{"range":"70463","text":"66201"},{"range":"70464","text":"66199"},{"range":"70465","text":"66201"},{"range":"70466","text":"66199"},{"range":"70467","text":"66201"},{"range":"70468","text":"66199"},{"range":"70469","text":"66201"},{"range":"70470","text":"66199"},{"range":"70471","text":"66201"},{"range":"70472","text":"66199"},{"range":"70473","text":"66201"},{"range":"70474","text":"66199"},{"range":"70475","text":"66201"},{"range":"70476","text":"66199"},{"range":"70477","text":"66201"},{"range":"70478","text":"66199"},{"range":"70479","text":"66201"},{"range":"70480","text":"66199"},{"range":"70481","text":"66201"},{"range":"70482","text":"66199"},{"range":"70483","text":"66201"},{"range":"70484","text":"66199"},{"range":"70485","text":"66201"},{"range":"70486","text":"66199"},{"range":"70487","text":"66201"},{"range":"70488","text":"66199"},{"range":"70489","text":"66201"},{"range":"70490","text":"66199"},{"range":"70491","text":"66201"},{"range":"70492","text":"66199"},{"range":"70493","text":"66201"},{"range":"70494","text":"66199"},{"range":"70495","text":"66201"},{"range":"70496","text":"66199"},{"range":"70497","text":"66201"},{"range":"70498","text":"66199"},{"range":"70499","text":"66201"},{"range":"70500","text":"66199"},{"range":"70501","text":"66201"},{"range":"70502","text":"66199"},{"range":"70503","text":"66201"},{"range":"70504","text":"66199"},{"range":"70505","text":"66201"},{"range":"70506","text":"66199"},{"range":"70507","text":"66201"},{"range":"70508","text":"66199"},{"range":"70509","text":"66201"},{"range":"70510","text":"66199"},{"range":"70511","text":"66201"},{"range":"70512","text":"66199"},{"range":"70513","text":"66201"},{"range":"70514","text":"66199"},{"range":"70515","text":"66201"},{"range":"70516","text":"66199"},{"range":"70517","text":"66201"},{"range":"70518","text":"66199"},{"range":"70519","text":"66201"},{"range":"70520","text":"66199"},{"range":"70521","text":"66201"},{"range":"70522","text":"66199"},{"range":"70523","text":"66201"},{"range":"70524","text":"66199"},{"range":"70525","text":"66201"},{"range":"70526","text":"66199"},{"range":"70527","text":"66201"},{"range":"70528","text":"66199"},{"range":"70529","text":"66201"},{"range":"70530","text":"66199"},{"range":"70531","text":"66201"},{"range":"70532","text":"66199"},{"range":"70533","text":"66201"},{"range":"70534","text":"66199"},{"range":"70535","text":"66201"},{"range":"70536","text":"66199"},{"range":"70537","text":"66201"},{"range":"70538","text":"66199"},{"range":"70539","text":"66201"},{"range":"70540","text":"66199"},{"range":"70541","text":"66201"},{"range":"70542","text":"66199"},{"range":"70543","text":"66201"},{"range":"70544","text":"66199"},{"range":"70545","text":"66201"},{"range":"70546","text":"66199"},{"range":"70547","text":"66201"},{"range":"70548","text":"66199"},{"range":"70549","text":"66201"},{"range":"70550","text":"66199"},{"range":"70551","text":"66201"},{"range":"70552","text":"66199"},{"range":"70553","text":"66201"},{"range":"70554","text":"66199"},{"range":"70555","text":"66201"},{"range":"70556","text":"66199"},{"range":"70557","text":"66201"},{"range":"70558","text":"66199"},{"range":"70559","text":"66201"},{"range":"70560","text":"66199"},{"range":"70561","text":"66201"},{"range":"70562","text":"66199"},{"range":"70563","text":"66201"},{"range":"70564","text":"66199"},{"range":"70565","text":"66201"},{"range":"70566","text":"66199"},{"range":"70567","text":"66201"},{"range":"70568","text":"66199"},{"range":"70569","text":"66201"},{"range":"70570","text":"66199"},{"range":"70571","text":"66201"},{"range":"70572","text":"66199"},{"range":"70573","text":"66201"},{"range":"70574","text":"66199"},{"range":"70575","text":"66201"},{"range":"70576","text":"66199"},{"range":"70577","text":"66201"},{"range":"70578","text":"66199"},{"range":"70579","text":"66201"},{"range":"70580","text":"66199"},{"range":"70581","text":"66201"},{"range":"70582","text":"66199"},{"range":"70583","text":"66201"},{"range":"70584","text":"66199"},{"range":"70585","text":"66201"},{"range":"70586","text":"66199"},{"range":"70587","text":"66201"},{"range":"70588","text":"66199"},{"range":"70589","text":"66201"},{"range":"70590","text":"66199"},{"range":"70591","text":"66201"},{"range":"70592","text":"66199"},{"range":"70593","text":"66201"},{"range":"70594","text":"66199"},{"range":"70595","text":"66201"},{"range":"70596","text":"66199"},{"range":"70597","text":"66201"},{"range":"70598","text":"66199"},{"range":"70599","text":"66201"},{"range":"70600","text":"66199"},{"range":"70601","text":"66201"},{"range":"70602","text":"66199"},{"range":"70603","text":"66201"},{"range":"70604","text":"66199"},{"range":"70605","text":"66201"},{"range":"70606","text":"66199"},{"range":"70607","text":"66201"},{"range":"70608","text":"66199"},{"range":"70609","text":"66201"},{"range":"70610","text":"66199"},{"range":"70611","text":"66201"},{"range":"70612","text":"66199"},{"range":"70613","text":"66201"},{"range":"70614","text":"66199"},{"range":"70615","text":"66201"},{"range":"70616","text":"66199"},{"range":"70617","text":"66201"},{"range":"70618","text":"66199"},{"range":"70619","text":"66201"},{"range":"70620","text":"66199"},{"range":"70621","text":"66201"},{"range":"70622","text":"66199"},{"range":"70623","text":"66201"},{"range":"70624","text":"66199"},{"range":"70625","text":"66201"},{"range":"70626","text":"66199"},{"range":"70627","text":"66201"},{"range":"70628","text":"66199"},{"range":"70629","text":"66201"},{"range":"70630","text":"66199"},{"range":"70631","text":"66201"},{"range":"70632","text":"66199"},{"range":"70633","text":"66201"},{"range":"70634","text":"66199"},{"range":"70635","text":"66201"},{"range":"70636","text":"66199"},{"range":"70637","text":"66201"},{"range":"70638","text":"66199"},{"range":"70639","text":"66201"},{"range":"70640","text":"66199"},{"range":"70641","text":"66201"},{"range":"70642","text":"66199"},{"range":"70643","text":"66201"},{"range":"70644","text":"66199"},{"range":"70645","text":"66201"},{"range":"70646","text":"66199"},{"range":"70647","text":"66201"},{"range":"70648","text":"66199"},{"range":"70649","text":"66201"},{"range":"70650","text":"66199"},{"range":"70651","text":"66201"},{"range":"70652","text":"66199"},{"range":"70653","text":"66201"},{"range":"70654","text":"66199"},{"range":"70655","text":"66201"},{"range":"70656","text":"66199"},{"range":"70657","text":"66201"},{"range":"70658","text":"66199"},{"range":"70659","text":"66201"},{"range":"70660","text":"66199"},{"range":"70661","text":"66201"},{"range":"70662","text":"66199"},{"range":"70663","text":"66201"},{"range":"70664","text":"66199"},{"range":"70665","text":"66201"},{"range":"70666","text":"66199"},{"range":"70667","text":"66201"},{"range":"70668","text":"66199"},{"range":"70669","text":"66201"},{"range":"70670","text":"66199"},{"range":"70671","text":"66201"},{"range":"70672","text":"66199"},{"range":"70673","text":"66201"},{"range":"70674","text":"66199"},{"range":"70675","text":"66201"},{"range":"70676","text":"66199"},{"range":"70677","text":"66201"},{"range":"70678","text":"66199"},{"range":"70679","text":"66201"},{"range":"70680","text":"66199"},{"range":"70681","text":"66201"},{"range":"70682","text":"66199"},{"range":"70683","text":"66201"},{"range":"70684","text":"66199"},{"range":"70685","text":"66201"},{"range":"70686","text":"66199"},{"range":"70687","text":"66201"},{"range":"70688","text":"66199"},{"range":"70689","text":"66201"},{"range":"70690","text":"66199"},{"range":"70691","text":"66201"},{"range":"70692","text":"66199"},{"range":"70693","text":"66201"},{"range":"70694","text":"66199"},{"range":"70695","text":"66201"},{"range":"70696","text":"66199"},{"range":"70697","text":"66201"},{"range":"70698","text":"66199"},{"range":"70699","text":"66201"},{"range":"70700","text":"66199"},{"range":"70701","text":"66201"},{"range":"70702","text":"66199"},{"range":"70703","text":"66201"},{"range":"70704","text":"66199"},{"range":"70705","text":"66201"},{"range":"70706","text":"66199"},{"range":"70707","text":"66201"},{"range":"70708","text":"66199"},{"range":"70709","text":"66201"},{"range":"70710","text":"66199"},{"range":"70711","text":"66201"},{"range":"70712","text":"66199"},{"range":"70713","text":"66201"},{"range":"70714","text":"66199"},{"range":"70715","text":"66201"},{"range":"70716","text":"66199"},{"range":"70717","text":"66201"},{"range":"70718","text":"66199"},{"range":"70719","text":"66201"},{"range":"70720","text":"66199"},{"range":"70721","text":"66201"},{"range":"70722","text":"66199"},{"range":"70723","text":"66201"},{"range":"70724","text":"66199"},{"range":"70725","text":"66201"},{"range":"70726","text":"66199"},{"range":"70727","text":"66201"},{"range":"70728","text":"66199"},{"range":"70729","text":"66201"},{"range":"70730","text":"66199"},{"range":"70731","text":"66201"},{"range":"70732","text":"66199"},{"range":"70733","text":"66201"},{"range":"70734","text":"66199"},{"range":"70735","text":"66201"},{"range":"70736","text":"66199"},{"range":"70737","text":"66201"},{"range":"70738","text":"66199"},{"range":"70739","text":"66201"},{"range":"70740","text":"66199"},{"range":"70741","text":"66201"},{"range":"70742","text":"66199"},{"range":"70743","text":"66201"},{"range":"70744","text":"66199"},{"range":"70745","text":"66201"},{"range":"70746","text":"66199"},{"range":"70747","text":"66201"},{"range":"70748","text":"66199"},{"range":"70749","text":"66201"},{"range":"70750","text":"66199"},{"range":"70751","text":"66201"},{"range":"70752","text":"66199"},{"range":"70753","text":"66201"},{"range":"70754","text":"66199"},{"range":"70755","text":"66201"},{"range":"70756","text":"66199"},{"range":"70757","text":"66201"},{"range":"70758","text":"66199"},{"range":"70759","text":"66201"},{"range":"70760","text":"66199"},{"range":"70761","text":"66201"},{"range":"70762","text":"66199"},{"range":"70763","text":"66201"},{"range":"70764","text":"66199"},{"range":"70765","text":"66201"},{"range":"70766","text":"66199"},{"range":"70767","text":"66201"},{"range":"70768","text":"66199"},{"range":"70769","text":"66201"},{"range":"70770","text":"66199"},{"range":"70771","text":"66201"},{"range":"70772","text":"66199"},{"range":"70773","text":"66201"},{"range":"70774","text":"66199"},{"range":"70775","text":"66201"},{"range":"70776","text":"66199"},{"range":"70777","text":"66201"},{"range":"70778","text":"66199"},{"range":"70779","text":"66201"},{"range":"70780","text":"66199"},{"range":"70781","text":"66201"},{"range":"70782","text":"66199"},{"range":"70783","text":"66201"},{"range":"70784","text":"66199"},{"range":"70785","text":"66201"},{"range":"70786","text":"66199"},{"range":"70787","text":"66201"},{"range":"70788","text":"66199"},{"range":"70789","text":"66201"},{"range":"70790","text":"66199"},{"range":"70791","text":"66201"},{"range":"70792","text":"66199"},{"range":"70793","text":"66201"},{"range":"70794","text":"66199"},{"range":"70795","text":"66201"},{"range":"70796","text":"66199"},{"range":"70797","text":"66201"},{"range":"70798","text":"66199"},{"range":"70799","text":"66201"},{"range":"70800","text":"66199"},{"range":"70801","text":"66201"},{"range":"70802","text":"66199"},{"range":"70803","text":"66201"},{"range":"70804","text":"66199"},{"range":"70805","text":"66201"},{"range":"70806","text":"66199"},{"range":"70807","text":"66201"},{"range":"70808","text":"66199"},{"range":"70809","text":"66201"},{"range":"70810","text":"66199"},{"range":"70811","text":"66201"},{"range":"70812","text":"66199"},{"range":"70813","text":"66201"},{"range":"70814","text":"66199"},{"range":"70815","text":"66201"},{"range":"70816","text":"66199"},{"range":"70817","text":"66201"},{"range":"70818","text":"66199"},{"range":"70819","text":"66201"},{"range":"70820","text":"66199"},{"range":"70821","text":"66201"},{"range":"70822","text":"66199"},{"range":"70823","text":"66201"},{"range":"70824","text":"66199"},{"range":"70825","text":"66201"},{"range":"70826","text":"66199"},{"range":"70827","text":"66201"},{"range":"70828","text":"66199"},{"range":"70829","text":"66201"},{"range":"70830","text":"66199"},{"range":"70831","text":"66201"},{"range":"70832","text":"66199"},{"range":"70833","text":"66201"},{"range":"70834","text":"66199"},{"range":"70835","text":"66201"},{"range":"70836","text":"66199"},{"range":"70837","text":"66201"},{"range":"70838","text":"66199"},{"range":"70839","text":"66201"},{"range":"70840","text":"66199"},{"range":"70841","text":"66201"},{"range":"70842","text":"66199"},{"range":"70843","text":"66201"},{"range":"70844","text":"66199"},{"range":"70845","text":"66201"},{"range":"70846","text":"66199"},{"range":"70847","text":"66201"},{"range":"70848","text":"66199"},{"range":"70849","text":"66201"},{"range":"70850","text":"66199"},{"range":"70851","text":"66201"},{"range":"70852","text":"66199"},{"range":"70853","text":"66201"},{"range":"70854","text":"66199"},{"range":"70855","text":"66201"},{"range":"70856","text":"66199"},{"range":"70857","text":"66201"},{"range":"70858","text":"66199"},{"range":"70859","text":"66201"},{"range":"70860","text":"66199"},{"range":"70861","text":"66201"},{"range":"70862","text":"66199"},{"range":"70863","text":"66201"},{"range":"70864","text":"66199"},{"range":"70865","text":"66201"},{"range":"70866","text":"66199"},{"range":"70867","text":"66201"},{"range":"70868","text":"66199"},{"range":"70869","text":"66201"},{"range":"70870","text":"66199"},{"range":"70871","text":"66201"},{"range":"70872","text":"66199"},{"range":"70873","text":"66201"},{"range":"70874","text":"66199"},{"range":"70875","text":"66201"},{"range":"70876","text":"66199"},{"range":"70877","text":"66201"},{"range":"70878","text":"66199"},{"range":"70879","text":"66201"},{"range":"70880","text":"66199"},{"range":"70881","text":"66201"},{"range":"70882","text":"66199"},{"range":"70883","text":"66201"},{"range":"70884","text":"66199"},{"range":"70885","text":"66201"},{"range":"70886","text":"66199"},{"range":"70887","text":"66201"},{"range":"70888","text":"66199"},{"range":"70889","text":"66201"},{"range":"70890","text":"66199"},{"range":"70891","text":"66201"},{"range":"70892","text":"66199"},{"range":"70893","text":"66201"},{"range":"70894","text":"66199"},{"range":"70895","text":"66201"},{"range":"70896","text":"66199"},{"range":"70897","text":"66201"},{"range":"70898","text":"66199"},{"range":"70899","text":"66201"},{"range":"70900","text":"66199"},{"range":"70901","text":"66201"},{"range":"70902","text":"66199"},{"range":"70903","text":"66201"},{"range":"70904","text":"66199"},{"range":"70905","text":"66201"},{"range":"70906","text":"66199"},{"range":"70907","text":"66201"},{"range":"70908","text":"66199"},{"range":"70909","text":"66201"},{"range":"70910","text":"66199"},{"range":"70911","text":"66201"},{"range":"70912","text":"66199"},{"range":"70913","text":"66201"},{"range":"70914","text":"66199"},{"range":"70915","text":"66201"},{"range":"70916","text":"66199"},{"range":"70917","text":"66201"},{"range":"70918","text":"66199"},{"range":"70919","text":"66201"},{"range":"70920","text":"66199"},{"range":"70921","text":"66201"},{"range":"70922","text":"66199"},{"range":"70923","text":"66201"},{"range":"70924","text":"66199"},{"range":"70925","text":"66201"},{"range":"70926","text":"66199"},{"range":"70927","text":"66201"},{"range":"70928","text":"66199"},{"range":"70929","text":"66201"},{"range":"70930","text":"66199"},{"range":"70931","text":"66201"},{"range":"70932","text":"66199"},{"range":"70933","text":"66201"},{"range":"70934","text":"66199"},{"range":"70935","text":"66201"},{"range":"70936","text":"66199"},{"range":"70937","text":"66201"},{"range":"70938","text":"66199"},{"range":"70939","text":"66201"},{"range":"70940","text":"66199"},{"range":"70941","text":"66201"},{"range":"70942","text":"66199"},{"range":"70943","text":"66201"},{"range":"70944","text":"66199"},{"range":"70945","text":"66201"},{"range":"70946","text":"66199"},{"range":"70947","text":"66201"},{"range":"70948","text":"66199"},{"range":"70949","text":"66201"},{"range":"70950","text":"66199"},{"range":"70951","text":"66201"},{"range":"70952","text":"66199"},{"range":"70953","text":"66201"},{"range":"70954","text":"66199"},{"range":"70955","text":"66201"},{"range":"70956","text":"66199"},{"range":"70957","text":"66201"},{"range":"70958","text":"66199"},{"range":"70959","text":"66201"},{"range":"70960","text":"66199"},{"range":"70961","text":"66201"},{"range":"70962","text":"66199"},{"range":"70963","text":"66201"},{"range":"70964","text":"66199"},{"range":"70965","text":"66201"},{"range":"70966","text":"66199"},{"range":"70967","text":"66201"},{"range":"70968","text":"66199"},{"range":"70969","text":"66201"},{"range":"70970","text":"66199"},{"range":"70971","text":"66201"},{"range":"70972","text":"66199"},{"range":"70973","text":"66201"},{"range":"70974","text":"66199"},{"range":"70975","text":"66201"},{"range":"70976","text":"66199"},{"range":"70977","text":"66201"},{"range":"70978","text":"66199"},{"range":"70979","text":"66201"},{"range":"70980","text":"66199"},{"range":"70981","text":"66201"},{"range":"70982","text":"66199"},{"range":"70983","text":"66201"},{"range":"70984","text":"66199"},{"range":"70985","text":"66201"},{"range":"70986","text":"66199"},{"range":"70987","text":"66201"},{"range":"70988","text":"66199"},{"range":"70989","text":"66201"},{"range":"70990","text":"66199"},{"range":"70991","text":"66201"},{"range":"70992","text":"66199"},{"range":"70993","text":"66201"},{"range":"70994","text":"66199"},{"range":"70995","text":"66201"},{"range":"70996","text":"66199"},{"range":"70997","text":"66201"},{"range":"70998","text":"66199"},{"range":"70999","text":"66201"},{"range":"71000","text":"66199"},{"range":"71001","text":"66201"},{"range":"71002","text":"66199"},{"range":"71003","text":"66201"},{"range":"71004","text":"66199"},{"range":"71005","text":"66201"},{"range":"71006","text":"66199"},{"range":"71007","text":"66201"},{"range":"71008","text":"66199"},{"range":"71009","text":"66201"},{"range":"71010","text":"66199"},{"range":"71011","text":"66201"},{"range":"71012","text":"66199"},{"range":"71013","text":"66201"},{"range":"71014","text":"66199"},{"range":"71015","text":"66201"},{"range":"71016","text":"66199"},{"range":"71017","text":"66201"},{"range":"71018","text":"66199"},{"range":"71019","text":"66201"},{"range":"71020","text":"66199"},{"range":"71021","text":"66201"},{"range":"71022","text":"66199"},{"range":"71023","text":"66201"},{"range":"71024","text":"66199"},{"range":"71025","text":"66201"},{"range":"71026","text":"66199"},{"range":"71027","text":"66201"},{"range":"71028","text":"66199"},{"range":"71029","text":"66201"},{"range":"71030","text":"66199"},{"range":"71031","text":"66201"},{"range":"71032","text":"66199"},{"range":"71033","text":"66201"},{"range":"71034","text":"66199"},{"range":"71035","text":"66201"},{"range":"71036","text":"66199"},{"range":"71037","text":"66201"},{"range":"71038","text":"66199"},{"range":"71039","text":"66201"},{"range":"71040","text":"66199"},{"range":"71041","text":"66201"},{"range":"71042","text":"66199"},{"range":"71043","text":"66201"},{"range":"71044","text":"66199"},{"range":"71045","text":"66201"},{"range":"71046","text":"66199"},{"range":"71047","text":"66201"},{"range":"71048","text":"66199"},{"range":"71049","text":"66201"},{"range":"71050","text":"66199"},{"range":"71051","text":"66201"},{"range":"71052","text":"66199"},{"range":"71053","text":"66201"},{"range":"71054","text":"66199"},{"range":"71055","text":"66201"},{"range":"71056","text":"66199"},{"range":"71057","text":"66201"},{"range":"71058","text":"66199"},{"range":"71059","text":"66201"},{"range":"71060","text":"66199"},{"range":"71061","text":"66201"},{"range":"71062","text":"66199"},{"range":"71063","text":"66201"},{"range":"71064","text":"66199"},{"range":"71065","text":"66201"},{"range":"71066","text":"66199"},{"range":"71067","text":"66201"},{"range":"71068","text":"66199"},{"range":"71069","text":"66201"},{"range":"71070","text":"66199"},{"range":"71071","text":"66201"},{"range":"71072","text":"66199"},{"range":"71073","text":"66201"},{"range":"71074","text":"66199"},{"range":"71075","text":"66201"},{"range":"71076","text":"66199"},{"range":"71077","text":"66201"},{"range":"71078","text":"66199"},{"range":"71079","text":"66201"},{"range":"71080","text":"66199"},{"range":"71081","text":"66201"},{"range":"71082","text":"66199"},{"range":"71083","text":"66201"},{"range":"71084","text":"66199"},{"range":"71085","text":"66201"},{"range":"71086","text":"66199"},{"range":"71087","text":"66201"},{"range":"71088","text":"66199"},{"range":"71089","text":"66201"},{"range":"71090","text":"66199"},{"range":"71091","text":"66201"},{"range":"71092","text":"66199"},{"range":"71093","text":"66201"},{"range":"71094","text":"66199"},{"range":"71095","text":"66201"},{"range":"71096","text":"66199"},{"range":"71097","text":"66201"},{"range":"71098","text":"66199"},{"range":"71099","text":"66201"},{"range":"71100","text":"66199"},{"range":"71101","text":"66201"},{"range":"71102","text":"66199"},{"range":"71103","text":"66201"},{"range":"71104","text":"66199"},{"range":"71105","text":"66201"},{"range":"71106","text":"66199"},{"range":"71107","text":"66201"},{"range":"71108","text":"66199"},{"range":"71109","text":"66201"},{"range":"71110","text":"66199"},{"range":"71111","text":"66201"},{"range":"71112","text":"66199"},{"range":"71113","text":"66201"},{"range":"71114","text":"66199"},{"range":"71115","text":"66201"},{"range":"71116","text":"66199"},{"range":"71117","text":"66201"},{"range":"71118","text":"66199"},{"range":"71119","text":"66201"},{"range":"71120","text":"66199"},{"range":"71121","text":"66201"},{"range":"71122","text":"66199"},{"range":"71123","text":"66201"},{"range":"71124","text":"66199"},{"range":"71125","text":"66201"},{"range":"71126","text":"66199"},{"range":"71127","text":"66201"},{"range":"71128","text":"66199"},{"range":"71129","text":"66201"},{"range":"71130","text":"66199"},{"range":"71131","text":"66201"},{"range":"71132","text":"66199"},{"range":"71133","text":"66201"},{"range":"71134","text":"66199"},{"range":"71135","text":"66201"},{"range":"71136","text":"66199"},{"range":"71137","text":"66201"},{"range":"71138","text":"66199"},{"range":"71139","text":"66201"},{"range":"71140","text":"66199"},{"range":"71141","text":"66201"},{"range":"71142","text":"66199"},{"range":"71143","text":"66201"},{"range":"71144","text":"66199"},{"range":"71145","text":"66201"},{"range":"71146","text":"66199"},{"range":"71147","text":"66201"},{"range":"71148","text":"66199"},{"range":"71149","text":"66201"},{"range":"71150","text":"66199"},{"range":"71151","text":"66201"},{"range":"71152","text":"66199"},{"range":"71153","text":"66201"},{"range":"71154","text":"66199"},{"range":"71155","text":"66201"},{"range":"71156","text":"66199"},{"range":"71157","text":"66201"},{"range":"71158","text":"66199"},{"range":"71159","text":"66201"},{"range":"71160","text":"66199"},{"range":"71161","text":"66201"},{"range":"71162","text":"66199"},{"range":"71163","text":"66201"},{"range":"71164","text":"66199"},{"range":"71165","text":"66201"},{"range":"71166","text":"66199"},{"range":"71167","text":"66201"},{"range":"71168","text":"66199"},{"range":"71169","text":"66201"},{"range":"71170","text":"66199"},{"range":"71171","text":"66201"},{"range":"71172","text":"66199"},{"range":"71173","text":"66201"},{"range":"71174","text":"66199"},{"range":"71175","text":"66201"},{"range":"71176","text":"66199"},{"range":"71177","text":"66201"},{"range":"71178","text":"66199"},{"range":"71179","text":"66201"},{"range":"71180","text":"66199"},{"range":"71181","text":"66201"},{"range":"71182","text":"66199"},{"range":"71183","text":"66201"},{"range":"71184","text":"66199"},{"range":"71185","text":"66201"},{"range":"71186","text":"66199"},{"range":"71187","text":"66201"},{"range":"71188","text":"66199"},{"range":"71189","text":"66201"},{"range":"71190","text":"66199"},{"range":"71191","text":"66201"},{"range":"71192","text":"66199"},{"range":"71193","text":"66201"},{"range":"71194","text":"66199"},{"range":"71195","text":"66201"},{"range":"71196","text":"66199"},{"range":"71197","text":"66201"},{"range":"71198","text":"66199"},{"range":"71199","text":"66201"},{"range":"71200","text":"66199"},{"range":"71201","text":"66201"},{"range":"71202","text":"66199"},{"range":"71203","text":"66201"},{"range":"71204","text":"66199"},{"range":"71205","text":"66201"},{"range":"71206","text":"66199"},{"range":"71207","text":"66201"},{"range":"71208","text":"66199"},{"range":"71209","text":"66201"},{"range":"71210","text":"66199"},{"range":"71211","text":"66201"},{"range":"71212","text":"66199"},{"range":"71213","text":"66201"},{"range":"71214","text":"66199"},{"range":"71215","text":"66201"},{"range":"71216","text":"66199"},{"range":"71217","text":"66201"},{"range":"71218","text":"66199"},{"range":"71219","text":"66201"},{"range":"71220","text":"66199"},{"range":"71221","text":"66201"},{"range":"71222","text":"66199"},{"range":"71223","text":"66201"},{"range":"71224","text":"66199"},{"range":"71225","text":"66201"},{"range":"71226","text":"66199"},{"range":"71227","text":"66201"},{"range":"71228","text":"66199"},{"range":"71229","text":"66201"},{"range":"71230","text":"66199"},{"range":"71231","text":"66201"},{"range":"71232","text":"66199"},{"range":"71233","text":"66201"},{"range":"71234","text":"66199"},{"range":"71235","text":"66201"},{"range":"71236","text":"66199"},{"range":"71237","text":"66201"},{"range":"71238","text":"66199"},{"range":"71239","text":"66201"},{"range":"71240","text":"66199"},{"range":"71241","text":"66201"},{"range":"71242","text":"66199"},{"range":"71243","text":"66201"},{"range":"71244","text":"66199"},{"range":"71245","text":"66201"},{"range":"71246","text":"66199"},{"range":"71247","text":"66201"},{"range":"71248","text":"66199"},{"range":"71249","text":"66201"},{"range":"71250","text":"66199"},{"range":"71251","text":"66201"},{"range":"71252","text":"66199"},{"range":"71253","text":"66201"},{"range":"71254","text":"66199"},{"range":"71255","text":"66201"},{"range":"71256","text":"66199"},{"range":"71257","text":"66201"},{"range":"71258","text":"66199"},{"range":"71259","text":"66201"},{"range":"71260","text":"66199"},{"range":"71261","text":"66201"},{"range":"71262","text":"66199"},{"range":"71263","text":"66201"},{"range":"71264","text":"66199"},{"range":"71265","text":"66201"},{"range":"71266","text":"66199"},{"range":"71267","text":"66201"},{"range":"71268","text":"66199"},{"range":"71269","text":"66201"},{"range":"71270","text":"66199"},{"range":"71271","text":"66201"},{"range":"71272","text":"66199"},{"range":"71273","text":"66201"},{"range":"71274","text":"66199"},{"range":"71275","text":"66201"},{"range":"71276","text":"66199"},{"range":"71277","text":"66201"},{"range":"71278","text":"66199"},{"range":"71279","text":"66201"},{"range":"71280","text":"66199"},{"range":"71281","text":"66201"},{"range":"71282","text":"66199"},{"range":"71283","text":"66201"},{"range":"71284","text":"66199"},{"range":"71285","text":"66201"},{"range":"71286","text":"66199"},{"range":"71287","text":"66201"},{"range":"71288","text":"66199"},{"range":"71289","text":"66201"},{"range":"71290","text":"66199"},{"range":"71291","text":"66201"},{"range":"71292","text":"66199"},{"range":"71293","text":"66201"},{"range":"71294","text":"66199"},{"range":"71295","text":"66201"},{"range":"71296","text":"66199"},{"range":"71297","text":"66201"},{"range":"71298","text":"66199"},{"range":"71299","text":"66201"},{"range":"71300","text":"66199"},{"range":"71301","text":"66201"},{"range":"71302","text":"66199"},{"range":"71303","text":"66201"},{"range":"71304","text":"66199"},{"range":"71305","text":"66201"},{"range":"71306","text":"66199"},{"range":"71307","text":"66201"},{"range":"71308","text":"66199"},{"range":"71309","text":"66201"},{"range":"71310","text":"66199"},{"range":"71311","text":"66201"},{"range":"71312","text":"66199"},{"range":"71313","text":"66201"},{"range":"71314","text":"66199"},{"range":"71315","text":"66201"},{"range":"71316","text":"66199"},{"range":"71317","text":"66201"},{"range":"71318","text":"66199"},{"range":"71319","text":"66201"},{"range":"71320","text":"66199"},{"range":"71321","text":"66201"},{"range":"71322","text":"66199"},{"range":"71323","text":"66201"},{"range":"71324","text":"66199"},{"range":"71325","text":"66201"},{"range":"71326","text":"66199"},{"range":"71327","text":"66201"},{"range":"71328","text":"66199"},{"range":"71329","text":"66201"},{"range":"71330","text":"66199"},{"range":"71331","text":"66201"},{"range":"71332","text":"66199"},{"range":"71333","text":"66201"},{"range":"71334","text":"66199"},{"range":"71335","text":"66201"},{"range":"71336","text":"66199"},{"range":"71337","text":"66201"},{"range":"71338","text":"66199"},{"range":"71339","text":"66201"},{"range":"71340","text":"66199"},{"range":"71341","text":"66201"},{"range":"71342","text":"66199"},{"range":"71343","text":"66201"},{"range":"71344","text":"66199"},{"range":"71345","text":"66201"},{"range":"71346","text":"66199"},{"range":"71347","text":"66201"},{"range":"71348","text":"66199"},{"range":"71349","text":"66201"},{"range":"71350","text":"66199"},{"range":"71351","text":"66201"},{"range":"71352","text":"66199"},{"range":"71353","text":"66201"},{"range":"71354","text":"66199"},{"range":"71355","text":"66201"},{"range":"71356","text":"66199"},{"range":"71357","text":"66201"},{"range":"71358","text":"66199"},{"range":"71359","text":"66201"},{"range":"71360","text":"66199"},{"range":"71361","text":"66201"},{"range":"71362","text":"66199"},{"range":"71363","text":"66201"},{"range":"71364","text":"66199"},{"range":"71365","text":"66201"},{"range":"71366","text":"66199"},{"range":"71367","text":"66201"},{"range":"71368","text":"66199"},{"range":"71369","text":"66201"},{"range":"71370","text":"66199"},{"range":"71371","text":"66201"},{"range":"71372","text":"66199"},{"range":"71373","text":"66201"},{"range":"71374","text":"66199"},{"range":"71375","text":"66201"},{"range":"71376","text":"66199"},{"range":"71377","text":"66201"},{"range":"71378","text":"66199"},{"range":"71379","text":"66201"},{"range":"71380","text":"66199"},{"range":"71381","text":"66201"},{"range":"71382","text":"66199"},{"range":"71383","text":"66201"},{"range":"71384","text":"66199"},{"range":"71385","text":"66201"},{"range":"71386","text":"66199"},{"range":"71387","text":"66201"},{"range":"71388","text":"66199"},{"range":"71389","text":"66201"},{"range":"71390","text":"66199"},{"range":"71391","text":"66201"},{"range":"71392","text":"66199"},{"range":"71393","text":"66201"},{"range":"71394","text":"66199"},{"range":"71395","text":"66201"},{"range":"71396","text":"66199"},{"range":"71397","text":"66201"},{"range":"71398","text":"66199"},{"range":"71399","text":"66201"},{"range":"71400","text":"66199"},{"range":"71401","text":"66201"},{"range":"71402","text":"66199"},{"range":"71403","text":"66201"},{"range":"71404","text":"66199"},{"range":"71405","text":"66201"},{"range":"71406","text":"66199"},{"range":"71407","text":"66201"},{"range":"71408","text":"66199"},{"range":"71409","text":"66201"},{"range":"71410","text":"66199"},{"range":"71411","text":"66201"},{"range":"71412","text":"66199"},{"range":"71413","text":"66201"},{"range":"71414","text":"66199"},{"range":"71415","text":"66201"},{"range":"71416","text":"66199"},{"range":"71417","text":"66201"},{"range":"71418","text":"66199"},{"range":"71419","text":"66201"},{"range":"71420","text":"66199"},{"range":"71421","text":"66201"},{"range":"71422","text":"66199"},{"range":"71423","text":"66201"},{"range":"71424","text":"66199"},{"range":"71425","text":"66201"},{"range":"71426","text":"66199"},{"range":"71427","text":"66201"},{"range":"71428","text":"66199"},{"range":"71429","text":"66201"},{"range":"71430","text":"66199"},{"range":"71431","text":"66201"},{"range":"71432","text":"66199"},{"range":"71433","text":"66201"},{"range":"71434","text":"66199"},{"range":"71435","text":"66201"},{"range":"71436","text":"66199"},{"range":"71437","text":"66201"},{"range":"71438","text":"66199"},{"range":"71439","text":"66201"},{"range":"71440","text":"66199"},{"range":"71441","text":"66201"},{"range":"71442","text":"66199"},{"range":"71443","text":"66201"},{"range":"71444","text":"66199"},{"range":"71445","text":"66201"},{"range":"71446","text":"66199"},{"range":"71447","text":"66201"},{"range":"71448","text":"66199"},{"range":"71449","text":"66201"},{"range":"71450","text":"66199"},{"range":"71451","text":"66201"},{"range":"71452","text":"66199"},{"range":"71453","text":"66201"},{"range":"71454","text":"66199"},{"range":"71455","text":"66201"},{"range":"71456","text":"66199"},{"range":"71457","text":"66201"},{"range":"71458","text":"66199"},{"range":"71459","text":"66201"},{"range":"71460","text":"66199"},{"range":"71461","text":"66201"},{"range":"71462","text":"66199"},{"range":"71463","text":"66201"},{"range":"71464","text":"66199"},{"range":"71465","text":"66201"},{"range":"71466","text":"66199"},{"range":"71467","text":"66201"},{"range":"71468","text":"66199"},{"range":"71469","text":"66201"},{"range":"71470","text":"66199"},{"range":"71471","text":"66201"},{"range":"71472","text":"66199"},{"range":"71473","text":"66201"},{"range":"71474","text":"66199"},{"range":"71475","text":"66201"},{"range":"71476","text":"66199"},{"range":"71477","text":"66201"},{"range":"71478","text":"66199"},{"range":"71479","text":"66201"},{"range":"71480","text":"66199"},{"range":"71481","text":"66201"},{"range":"71482","text":"66199"},{"range":"71483","text":"66201"},{"range":"71484","text":"66199"},{"range":"71485","text":"66201"},{"range":"71486","text":"66199"},{"range":"71487","text":"66201"},{"range":"71488","text":"66199"},{"range":"71489","text":"66201"},{"range":"71490","text":"66199"},{"range":"71491","text":"66201"},{"range":"71492","text":"66199"},{"range":"71493","text":"66201"},{"range":"71494","text":"66199"},{"range":"71495","text":"66201"},{"range":"71496","text":"66199"},{"range":"71497","text":"66201"},{"range":"71498","text":"66199"},{"range":"71499","text":"66201"},{"range":"71500","text":"66199"},{"range":"71501","text":"66201"},{"range":"71502","text":"66199"},{"range":"71503","text":"66201"},{"range":"71504","text":"66199"},{"range":"71505","text":"66201"},{"range":"71506","text":"66199"},{"range":"71507","text":"66201"},{"range":"71508","text":"66199"},{"range":"71509","text":"66201"},{"range":"71510","text":"66199"},{"range":"71511","text":"66201"},{"range":"71512","text":"66199"},{"range":"71513","text":"66201"},{"range":"71514","text":"66199"},{"range":"71515","text":"66201"},{"range":"71516","text":"66199"},{"range":"71517","text":"66201"},{"range":"71518","text":"66199"},{"range":"71519","text":"66201"},{"range":"71520","text":"66199"},{"range":"71521","text":"66201"},{"range":"71522","text":"66199"},{"range":"71523","text":"66201"},{"range":"71524","text":"66199"},{"range":"71525","text":"66201"},{"range":"71526","text":"66199"},{"range":"71527","text":"66201"},{"range":"71528","text":"66199"},{"range":"71529","text":"66201"},{"range":"71530","text":"66199"},{"range":"71531","text":"66201"},{"range":"71532","text":"66199"},{"range":"71533","text":"66201"},{"range":"71534","text":"66199"},{"range":"71535","text":"66201"},{"range":"71536","text":"66199"},{"range":"71537","text":"66201"},{"range":"71538","text":"66199"},{"range":"71539","text":"66201"},{"range":"71540","text":"66199"},{"range":"71541","text":"66201"},{"range":"71542","text":"66199"},{"range":"71543","text":"66201"},{"range":"71544","text":"66199"},{"range":"71545","text":"66201"},{"range":"71546","text":"66199"},{"range":"71547","text":"66201"},{"range":"71548","text":"66199"},{"range":"71549","text":"66201"},{"range":"71550","text":"66199"},{"range":"71551","text":"66201"},{"range":"71552","text":"66199"},{"range":"71553","text":"66201"},{"range":"71554","text":"66199"},{"range":"71555","text":"66201"},{"range":"71556","text":"66199"},{"range":"71557","text":"66201"},{"range":"71558","text":"66199"},{"range":"71559","text":"66201"},{"range":"71560","text":"66199"},{"range":"71561","text":"66201"},{"range":"71562","text":"66199"},{"range":"71563","text":"66201"},{"range":"71564","text":"66199"},{"range":"71565","text":"66201"},{"range":"71566","text":"66199"},{"range":"71567","text":"66201"},{"range":"71568","text":"66199"},{"range":"71569","text":"66201"},{"range":"71570","text":"66199"},{"range":"71571","text":"66201"},{"range":"71572","text":"66199"},{"range":"71573","text":"66201"},{"range":"71574","text":"66199"},{"range":"71575","text":"66201"},{"range":"71576","text":"66199"},{"range":"71577","text":"66201"},{"range":"71578","text":"66199"},{"range":"71579","text":"66201"},{"range":"71580","text":"66199"},{"range":"71581","text":"66201"},{"range":"71582","text":"66199"},{"range":"71583","text":"66201"},{"range":"71584","text":"66199"},{"range":"71585","text":"66201"},{"range":"71586","text":"66199"},{"range":"71587","text":"66201"},{"range":"71588","text":"66199"},{"range":"71589","text":"66201"},{"range":"71590","text":"66199"},{"range":"71591","text":"66201"},{"range":"71592","text":"66199"},{"range":"71593","text":"66201"},{"range":"71594","text":"66199"},{"range":"71595","text":"66201"},{"range":"71596","text":"66199"},{"range":"71597","text":"66201"},{"range":"71598","text":"66199"},{"range":"71599","text":"66201"},{"range":"71600","text":"66199"},{"range":"71601","text":"66201"},{"range":"71602","text":"66199"},{"range":"71603","text":"66201"},{"range":"71604","text":"66199"},{"range":"71605","text":"66201"},{"range":"71606","text":"66199"},{"range":"71607","text":"66201"},{"range":"71608","text":"66199"},{"range":"71609","text":"66201"},{"range":"71610","text":"66199"},{"range":"71611","text":"66201"},{"range":"71612","text":"66199"},{"range":"71613","text":"66201"},{"range":"71614","text":"66199"},{"range":"71615","text":"66201"},{"range":"71616","text":"66199"},{"range":"71617","text":"66201"},{"range":"71618","text":"66199"},{"range":"71619","text":"66201"},{"range":"71620","text":"66199"},{"range":"71621","text":"66201"},{"range":"71622","text":"66199"},{"range":"71623","text":"66201"},{"range":"71624","text":"66199"},{"range":"71625","text":"66201"},{"range":"71626","text":"66199"},{"range":"71627","text":"66201"},{"range":"71628","text":"66199"},{"range":"71629","text":"66201"},{"range":"71630","text":"66199"},{"range":"71631","text":"66201"},{"range":"71632","text":"66199"},{"range":"71633","text":"66201"},{"range":"71634","text":"66199"},{"range":"71635","text":"66201"},{"range":"71636","text":"66199"},{"range":"71637","text":"66201"},{"range":"71638","text":"66199"},{"range":"71639","text":"66201"},{"range":"71640","text":"66199"},{"range":"71641","text":"66201"},{"range":"71642","text":"66199"},{"range":"71643","text":"66201"},{"range":"71644","text":"66199"},{"range":"71645","text":"66201"},{"range":"71646","text":"66199"},{"range":"71647","text":"66201"},{"range":"71648","text":"66199"},{"range":"71649","text":"66201"},{"range":"71650","text":"66199"},{"range":"71651","text":"66201"},{"range":"71652","text":"66199"},{"range":"71653","text":"66201"},{"range":"71654","text":"66199"},{"range":"71655","text":"66201"},{"range":"71656","text":"66199"},{"range":"71657","text":"66201"},{"range":"71658","text":"66199"},{"range":"71659","text":"66201"},{"range":"71660","text":"66199"},{"range":"71661","text":"66201"},{"range":"71662","text":"66199"},{"range":"71663","text":"66201"},{"range":"71664","text":"66199"},{"range":"71665","text":"66201"},{"range":"71666","text":"66199"},{"range":"71667","text":"66201"},{"range":"71668","text":"66199"},{"range":"71669","text":"66201"},{"range":"71670","text":"66199"},{"range":"71671","text":"66201"},{"range":"71672","text":"66199"},{"range":"71673","text":"66201"},{"range":"71674","text":"66199"},{"range":"71675","text":"66201"},{"range":"71676","text":"66199"},{"range":"71677","text":"66201"},{"range":"71678","text":"66199"},{"range":"71679","text":"66201"},{"range":"71680","text":"66199"},{"range":"71681","text":"66201"},{"range":"71682","text":"66199"},{"range":"71683","text":"66201"},{"range":"71684","text":"66199"},{"range":"71685","text":"66201"},{"range":"71686","text":"66199"},{"range":"71687","text":"66201"},{"range":"71688","text":"66199"},{"range":"71689","text":"66201"},{"range":"71690","text":"66199"},{"range":"71691","text":"66201"},{"range":"71692","text":"66199"},{"range":"71693","text":"66201"},{"range":"71694","text":"66199"},{"range":"71695","text":"66201"},{"range":"71696","text":"66199"},{"range":"71697","text":"66201"},{"range":"71698","text":"66199"},{"range":"71699","text":"66201"},{"range":"71700","text":"66199"},{"range":"71701","text":"66201"},{"range":"71702","text":"66199"},{"range":"71703","text":"66201"},{"range":"71704","text":"66199"},{"range":"71705","text":"66201"},{"range":"71706","text":"66199"},{"range":"71707","text":"66201"},{"range":"71708","text":"66199"},{"range":"71709","text":"66201"},{"range":"71710","text":"66199"},{"range":"71711","text":"66201"},{"range":"71712","text":"66199"},{"range":"71713","text":"66201"},{"range":"71714","text":"66199"},{"range":"71715","text":"66201"},{"range":"71716","text":"66199"},{"range":"71717","text":"66201"},{"range":"71718","text":"66199"},{"range":"71719","text":"66201"},{"range":"71720","text":"66199"},{"range":"71721","text":"66201"},{"range":"71722","text":"66199"},{"range":"71723","text":"66201"},{"range":"71724","text":"66199"},{"range":"71725","text":"66201"},{"range":"71726","text":"66199"},{"range":"71727","text":"66201"},{"range":"71728","text":"66199"},{"range":"71729","text":"66201"},{"range":"71730","text":"66199"},{"range":"71731","text":"66201"},{"range":"71732","text":"66199"},{"range":"71733","text":"66201"},{"range":"71734","text":"66199"},{"range":"71735","text":"66201"},{"range":"71736","text":"66199"},{"range":"71737","text":"66201"},{"range":"71738","text":"66199"},{"range":"71739","text":"66201"},{"range":"71740","text":"66199"},{"range":"71741","text":"66201"},{"range":"71742","text":"66199"},{"range":"71743","text":"66201"},{"range":"71744","text":"66199"},{"range":"71745","text":"66201"},{"range":"71746","text":"66199"},{"range":"71747","text":"66201"},{"range":"71748","text":"66199"},{"range":"71749","text":"66201"},{"range":"71750","text":"66199"},{"range":"71751","text":"66201"},{"range":"71752","text":"66199"},{"range":"71753","text":"66201"},{"range":"71754","text":"66199"},{"range":"71755","text":"66201"},{"range":"71756","text":"66199"},{"range":"71757","text":"66201"},{"range":"71758","text":"66199"},{"range":"71759","text":"66201"},{"range":"71760","text":"66199"},{"range":"71761","text":"66201"},{"range":"71762","text":"66199"},{"range":"71763","text":"66201"},{"range":"71764","text":"66199"},{"range":"71765","text":"66201"},{"range":"71766","text":"66199"},{"range":"71767","text":"66201"},{"range":"71768","text":"66199"},{"range":"71769","text":"66201"},{"range":"71770","text":"66199"},{"range":"71771","text":"66201"},{"range":"71772","text":"66199"},{"range":"71773","text":"66201"},{"range":"71774","text":"66199"},{"range":"71775","text":"66201"},{"range":"71776","text":"66199"},{"range":"71777","text":"66201"},{"range":"71778","text":"66199"},{"range":"71779","text":"66201"},{"range":"71780","text":"66199"},{"range":"71781","text":"66201"},{"range":"71782","text":"66199"},{"range":"71783","text":"66201"},{"range":"71784","text":"66199"},{"range":"71785","text":"66201"},{"range":"71786","text":"66199"},{"range":"71787","text":"66201"},{"range":"71788","text":"66199"},{"range":"71789","text":"66201"},{"range":"71790","text":"66199"},{"range":"71791","text":"66201"},{"range":"71792","text":"66199"},{"range":"71793","text":"66201"},{"range":"71794","text":"66199"},{"range":"71795","text":"66201"},{"range":"71796","text":"66199"},{"range":"71797","text":"66201"},{"range":"71798","text":"66199"},{"range":"71799","text":"66201"},{"range":"71800","text":"66199"},{"range":"71801","text":"66201"},{"range":"71802","text":"66199"},{"range":"71803","text":"66201"},{"range":"71804","text":"66199"},{"range":"71805","text":"66201"},{"range":"71806","text":"66199"},{"range":"71807","text":"66201"},{"range":"71808","text":"66199"},{"range":"71809","text":"66201"},{"range":"71810","text":"66199"},{"range":"71811","text":"66201"},{"range":"71812","text":"66199"},{"range":"71813","text":"66201"},{"range":"71814","text":"66199"},{"range":"71815","text":"66201"},{"range":"71816","text":"66199"},{"range":"71817","text":"66201"},{"range":"71818","text":"66199"},{"range":"71819","text":"66201"},{"range":"71820","text":"66199"},{"range":"71821","text":"66201"},{"range":"71822","text":"66199"},{"range":"71823","text":"66201"},{"range":"71824","text":"66199"},{"range":"71825","text":"66201"},{"range":"71826","text":"66199"},{"range":"71827","text":"66201"},{"range":"71828","text":"66199"},{"range":"71829","text":"66201"},{"range":"71830","text":"66199"},{"range":"71831","text":"66201"},{"range":"71832","text":"66199"},{"range":"71833","text":"66201"},{"range":"71834","text":"66199"},{"range":"71835","text":"66201"},{"range":"71836","text":"66199"},{"range":"71837","text":"66201"},{"range":"71838","text":"66199"},{"range":"71839","text":"66201"},{"range":"71840","text":"66199"},{"range":"71841","text":"66201"},{"range":"71842","text":"66199"},{"range":"71843","text":"66201"},{"range":"71844","text":"66199"},{"range":"71845","text":"66201"},{"range":"71846","text":"66199"},{"range":"71847","text":"66201"},{"range":"71848","text":"66199"},{"range":"71849","text":"66201"},{"range":"71850","text":"66199"},{"range":"71851","text":"66201"},{"range":"71852","text":"66199"},{"range":"71853","text":"66201"},{"range":"71854","text":"66199"},{"range":"71855","text":"66201"},{"range":"71856","text":"66199"},{"range":"71857","text":"66201"},{"range":"71858","text":"66199"},{"range":"71859","text":"66201"},{"range":"71860","text":"66199"},{"range":"71861","text":"66201"},{"range":"71862","text":"66199"},{"range":"71863","text":"66201"},{"range":"71864","text":"66199"},{"range":"71865","text":"66201"},{"range":"71866","text":"66199"},{"range":"71867","text":"66201"},{"range":"71868","text":"66199"},{"range":"71869","text":"66201"},{"range":"71870","text":"66199"},{"range":"71871","text":"66201"},{"range":"71872","text":"66199"},{"range":"71873","text":"66201"},{"range":"71874","text":"66199"},{"range":"71875","text":"66201"},{"range":"71876","text":"66199"},{"range":"71877","text":"66201"},{"range":"71878","text":"66199"},{"range":"71879","text":"66201"},{"range":"71880","text":"66199"},{"range":"71881","text":"66201"},{"range":"71882","text":"66199"},{"range":"71883","text":"66201"},{"range":"71884","text":"66199"},{"range":"71885","text":"66201"},{"range":"71886","text":"66199"},{"range":"71887","text":"66201"},{"range":"71888","text":"66199"},{"range":"71889","text":"66201"},{"range":"71890","text":"66199"},{"range":"71891","text":"66201"},{"range":"71892","text":"66199"},{"range":"71893","text":"66201"},{"range":"71894","text":"66199"},{"range":"71895","text":"66201"},{"range":"71896","text":"66199"},{"range":"71897","text":"66201"},{"range":"71898","text":"66199"},{"range":"71899","text":"66201"},{"range":"71900","text":"66199"},{"range":"71901","text":"66201"},{"range":"71902","text":"66199"},{"range":"71903","text":"66201"},{"range":"71904","text":"66199"},{"range":"71905","text":"66201"},{"range":"71906","text":"66199"},{"range":"71907","text":"66201"},{"range":"71908","text":"66199"},{"range":"71909","text":"66201"},{"range":"71910","text":"66199"},{"range":"71911","text":"66201"},{"range":"71912","text":"66199"},{"range":"71913","text":"66201"},{"range":"71914","text":"66199"},{"range":"71915","text":"66201"},{"range":"71916","text":"66199"},{"range":"71917","text":"66201"},{"range":"71918","text":"66199"},{"range":"71919","text":"66201"},{"range":"71920","text":"66199"},{"range":"71921","text":"66201"},{"range":"71922","text":"66199"},{"range":"71923","text":"66201"},{"range":"71924","text":"66199"},{"range":"71925","text":"66201"},{"range":"71926","text":"66199"},{"range":"71927","text":"66201"},{"range":"71928","text":"66199"},{"range":"71929","text":"66201"},{"range":"71930","text":"66199"},{"range":"71931","text":"66201"},{"range":"71932","text":"66199"},{"range":"71933","text":"66201"},{"range":"71934","text":"66199"},{"range":"71935","text":"66201"},{"range":"71936","text":"66199"},{"range":"71937","text":"66201"},{"range":"71938","text":"66199"},{"range":"71939","text":"66201"},{"range":"71940","text":"66199"},{"range":"71941","text":"66201"},{"range":"71942","text":"66199"},{"range":"71943","text":"66201"},{"range":"71944","text":"66199"},{"range":"71945","text":"66201"},{"range":"71946","text":"66199"},{"range":"71947","text":"66201"},{"range":"71948","text":"66199"},{"range":"71949","text":"66201"},{"range":"71950","text":"66199"},{"range":"71951","text":"66201"},{"range":"71952","text":"66199"},{"range":"71953","text":"66201"},{"range":"71954","text":"66199"},{"range":"71955","text":"66201"},{"range":"71956","text":"66199"},{"range":"71957","text":"66201"},{"range":"71958","text":"66199"},{"range":"71959","text":"66201"},{"range":"71960","text":"66199"},{"range":"71961","text":"66201"},{"range":"71962","text":"66199"},{"range":"71963","text":"66201"},{"range":"71964","text":"66199"},{"range":"71965","text":"66201"},{"range":"71966","text":"66199"},{"range":"71967","text":"66201"},{"range":"71968","text":"66199"},{"range":"71969","text":"66201"},{"range":"71970","text":"66199"},{"range":"71971","text":"66201"},{"range":"71972","text":"66199"},{"range":"71973","text":"66201"},{"range":"71974","text":"66199"},{"range":"71975","text":"66201"},{"range":"71976","text":"66199"},{"range":"71977","text":"66201"},{"range":"71978","text":"66199"},{"range":"71979","text":"66201"},{"range":"71980","text":"66199"},{"range":"71981","text":"66201"},{"range":"71982","text":"66199"},{"range":"71983","text":"66201"},{"range":"71984","text":"66199"},{"range":"71985","text":"66201"},{"range":"71986","text":"66199"},{"range":"71987","text":"66201"},{"range":"71988","text":"66199"},{"range":"71989","text":"66201"},{"range":"71990","text":"66199"},{"range":"71991","text":"66201"},{"range":"71992","text":"66199"},{"range":"71993","text":"66201"},{"range":"71994","text":"66199"},{"range":"71995","text":"66201"},{"range":"71996","text":"66199"},{"range":"71997","text":"66201"},{"range":"71998","text":"66199"},{"range":"71999","text":"66201"},{"range":"72000","text":"66199"},{"range":"72001","text":"66201"},{"range":"72002","text":"66199"},{"range":"72003","text":"66201"},{"range":"72004","text":"66199"},{"range":"72005","text":"66201"},{"range":"72006","text":"66199"},{"range":"72007","text":"66201"},{"range":"72008","text":"66199"},{"range":"72009","text":"66201"},{"range":"72010","text":"66199"},{"range":"72011","text":"66201"},{"range":"72012","text":"66199"},{"range":"72013","text":"66201"},{"range":"72014","text":"66199"},{"range":"72015","text":"66201"},{"range":"72016","text":"66199"},{"range":"72017","text":"66201"},{"range":"72018","text":"66199"},{"range":"72019","text":"66201"},{"range":"72020","text":"66199"},{"range":"72021","text":"66201"},{"range":"72022","text":"66199"},{"range":"72023","text":"66201"},{"range":"72024","text":"66199"},{"range":"72025","text":"66201"},{"range":"72026","text":"66199"},{"range":"72027","text":"66201"},{"range":"72028","text":"66199"},{"range":"72029","text":"66201"},{"range":"72030","text":"66199"},{"range":"72031","text":"66201"},{"range":"72032","text":"66199"},{"range":"72033","text":"66201"},{"range":"72034","text":"66199"},{"range":"72035","text":"66201"},{"range":"72036","text":"66199"},{"range":"72037","text":"66201"},{"range":"72038","text":"66199"},{"range":"72039","text":"66201"},{"range":"72040","text":"66199"},{"range":"72041","text":"66201"},{"range":"72042","text":"66199"},{"range":"72043","text":"66201"},{"range":"72044","text":"66199"},{"range":"72045","text":"66201"},{"range":"72046","text":"66199"},{"range":"72047","text":"66201"},{"range":"72048","text":"66199"},{"range":"72049","text":"66201"},{"range":"72050","text":"66199"},{"range":"72051","text":"66201"},{"range":"72052","text":"66199"},{"range":"72053","text":"66201"},{"range":"72054","text":"66199"},{"range":"72055","text":"66201"},{"range":"72056","text":"66199"},{"range":"72057","text":"66201"},{"range":"72058","text":"66199"},{"range":"72059","text":"66201"},{"range":"72060","text":"66199"},{"range":"72061","text":"66201"},{"range":"72062","text":"66199"},{"range":"72063","text":"66201"},{"range":"72064","text":"66199"},{"range":"72065","text":"66201"},{"range":"72066","text":"66199"},{"range":"72067","text":"66201"},{"range":"72068","text":"66199"},{"range":"72069","text":"66201"},{"range":"72070","text":"66199"},{"range":"72071","text":"66201"},{"range":"72072","text":"66199"},{"range":"72073","text":"66201"},{"range":"72074","text":"66199"},{"range":"72075","text":"66201"},{"range":"72076","text":"66199"},{"range":"72077","text":"66201"},{"range":"72078","text":"66199"},{"range":"72079","text":"66201"},{"range":"72080","text":"66199"},{"range":"72081","text":"66201"},{"range":"72082","text":"66199"},{"range":"72083","text":"66201"},{"range":"72084","text":"66199"},{"range":"72085","text":"66201"},{"range":"72086","text":"66199"},{"range":"72087","text":"66201"},{"range":"72088","text":"66199"},{"range":"72089","text":"66201"},{"range":"72090","text":"66199"},{"range":"72091","text":"66201"},{"range":"72092","text":"66199"},{"range":"72093","text":"66201"},{"range":"72094","text":"66199"},{"range":"72095","text":"66201"},{"range":"72096","text":"66199"},{"range":"72097","text":"66201"},{"range":"72098","text":"66199"},{"range":"72099","text":"66201"},{"range":"72100","text":"66199"},{"range":"72101","text":"66201"},{"range":"72102","text":"66199"},{"range":"72103","text":"66201"},{"range":"72104","text":"66199"},{"range":"72105","text":"66201"},{"range":"72106","text":"66199"},{"range":"72107","text":"66201"},{"range":"72108","text":"66199"},{"range":"72109","text":"66201"},{"range":"72110","text":"66199"},{"range":"72111","text":"66201"},{"range":"72112","text":"66199"},{"range":"72113","text":"66201"},{"range":"72114","text":"66199"},{"range":"72115","text":"66201"},{"range":"72116","text":"66199"},{"range":"72117","text":"66201"},{"range":"72118","text":"66199"},{"range":"72119","text":"66201"},{"range":"72120","text":"66199"},{"range":"72121","text":"66201"},{"range":"72122","text":"66199"},{"range":"72123","text":"66201"},{"range":"72124","text":"66199"},{"range":"72125","text":"66201"},{"range":"72126","text":"66199"},{"range":"72127","text":"66201"},{"range":"72128","text":"66199"},{"range":"72129","text":"66201"},{"range":"72130","text":"66199"},{"range":"72131","text":"66201"},{"range":"72132","text":"66199"},{"range":"72133","text":"66201"},{"range":"72134","text":"66199"},{"range":"72135","text":"66201"},{"range":"72136","text":"66199"},{"range":"72137","text":"66201"},{"range":"72138","text":"66199"},{"range":"72139","text":"66201"},{"range":"72140","text":"66199"},{"range":"72141","text":"66201"},{"range":"72142","text":"66199"},{"range":"72143","text":"66201"},{"range":"72144","text":"66199"},{"range":"72145","text":"66201"},{"range":"72146","text":"66199"},{"range":"72147","text":"66201"},{"range":"72148","text":"66199"},{"range":"72149","text":"66201"},{"range":"72150","text":"66199"},{"range":"72151","text":"66201"},{"range":"72152","text":"66199"},{"range":"72153","text":"66201"},{"range":"72154","text":"66199"},{"range":"72155","text":"66201"},{"range":"72156","text":"66199"},{"range":"72157","text":"66201"},{"range":"72158","text":"66199"},{"range":"72159","text":"66201"},{"range":"72160","text":"66199"},{"range":"72161","text":"66201"},{"range":"72162","text":"66199"},{"range":"72163","text":"66201"},{"range":"72164","text":"66199"},{"range":"72165","text":"66201"},{"range":"72166","text":"66199"},{"range":"72167","text":"66201"},{"range":"72168","text":"66199"},{"range":"72169","text":"66201"},{"range":"72170","text":"66199"},{"range":"72171","text":"66201"},{"range":"72172","text":"66199"},{"range":"72173","text":"66201"},{"range":"72174","text":"66199"},{"range":"72175","text":"66201"},{"range":"72176","text":"66199"},{"range":"72177","text":"66201"},{"range":"72178","text":"66199"},{"range":"72179","text":"66201"},{"range":"72180","text":"66199"},{"range":"72181","text":"66201"},{"range":"72182","text":"66199"},{"range":"72183","text":"66201"},{"range":"72184","text":"66199"},{"range":"72185","text":"66201"},{"range":"72186","text":"66199"},{"range":"72187","text":"66201"},{"range":"72188","text":"66199"},{"range":"72189","text":"66201"},{"range":"72190","text":"66199"},{"range":"72191","text":"66201"},{"range":"72192","text":"66199"},{"range":"72193","text":"66201"},{"range":"72194","text":"66199"},{"range":"72195","text":"66201"},{"range":"72196","text":"66199"},{"range":"72197","text":"66201"},{"range":"72198","text":"66199"},{"range":"72199","text":"66201"},{"range":"72200","text":"66199"},{"range":"72201","text":"66201"},{"range":"72202","text":"66199"},{"range":"72203","text":"66201"},{"range":"72204","text":"66199"},{"range":"72205","text":"66201"},{"range":"72206","text":"66199"},{"range":"72207","text":"66201"},{"range":"72208","text":"66199"},{"range":"72209","text":"66201"},{"range":"72210","text":"66199"},{"range":"72211","text":"66201"},{"range":"72212","text":"66199"},{"range":"72213","text":"66201"},{"range":"72214","text":"66199"},{"range":"72215","text":"66201"},{"range":"72216","text":"66199"},{"range":"72217","text":"66201"},{"range":"72218","text":"66199"},{"range":"72219","text":"66201"},{"range":"72220","text":"66199"},{"range":"72221","text":"66201"},{"range":"72222","text":"66199"},{"range":"72223","text":"66201"},{"range":"72224","text":"66199"},{"range":"72225","text":"66201"},{"range":"72226","text":"66199"},{"range":"72227","text":"66201"},{"range":"72228","text":"66199"},{"range":"72229","text":"66201"},{"range":"72230","text":"66199"},{"range":"72231","text":"66201"},{"range":"72232","text":"66199"},{"range":"72233","text":"66201"},{"range":"72234","text":"66199"},{"range":"72235","text":"66201"},{"range":"72236","text":"66199"},{"range":"72237","text":"66201"},{"range":"72238","text":"66199"},{"range":"72239","text":"66201"},{"range":"72240","text":"66199"},{"range":"72241","text":"66201"},{"range":"72242","text":"66199"},{"range":"72243","text":"66201"},{"range":"72244","text":"66199"},{"range":"72245","text":"66201"},{"range":"72246","text":"66199"},{"range":"72247","text":"66201"},{"range":"72248","text":"66199"},{"range":"72249","text":"66201"},{"range":"72250","text":"66199"},{"range":"72251","text":"66201"},{"range":"72252","text":"66199"},{"range":"72253","text":"66201"},{"range":"72254","text":"66199"},{"range":"72255","text":"66201"},{"range":"72256","text":"66199"},{"range":"72257","text":"66201"},{"range":"72258","text":"66199"},{"range":"72259","text":"66201"},{"range":"72260","text":"66199"},{"range":"72261","text":"66201"},{"range":"72262","text":"66199"},{"range":"72263","text":"66201"},{"range":"72264","text":"66199"},{"range":"72265","text":"66201"},{"range":"72266","text":"66199"},{"range":"72267","text":"66201"},{"range":"72268","text":"66199"},{"range":"72269","text":"66201"},{"range":"72270","text":"66199"},{"range":"72271","text":"66201"},{"range":"72272","text":"66199"},{"range":"72273","text":"66201"},{"range":"72274","text":"66199"},{"range":"72275","text":"66201"},{"range":"72276","text":"66199"},{"range":"72277","text":"66201"},{"range":"72278","text":"66199"},{"range":"72279","text":"66201"},{"range":"72280","text":"66199"},{"range":"72281","text":"66201"},{"range":"72282","text":"66199"},{"range":"72283","text":"66201"},{"range":"72284","text":"66199"},{"range":"72285","text":"66201"},{"range":"72286","text":"66199"},{"range":"72287","text":"66201"},{"range":"72288","text":"66199"},{"range":"72289","text":"66201"},{"range":"72290","text":"66199"},{"range":"72291","text":"66201"},{"range":"72292","text":"66199"},{"range":"72293","text":"66201"},{"range":"72294","text":"66199"},{"range":"72295","text":"66201"},{"range":"72296","text":"66199"},{"range":"72297","text":"66201"},{"range":"72298","text":"66199"},{"range":"72299","text":"66201"},{"range":"72300","text":"66199"},{"range":"72301","text":"66201"},{"range":"72302","text":"66199"},{"range":"72303","text":"66201"},{"range":"72304","text":"66199"},{"range":"72305","text":"66201"},{"range":"72306","text":"66199"},{"range":"72307","text":"66201"},{"range":"72308","text":"66199"},{"range":"72309","text":"66201"},{"range":"72310","text":"66199"},{"range":"72311","text":"66201"},{"range":"72312","text":"66199"},{"range":"72313","text":"66201"},{"range":"72314","text":"66199"},{"range":"72315","text":"66201"},{"range":"72316","text":"66199"},{"range":"72317","text":"66201"},{"range":"72318","text":"66199"},{"range":"72319","text":"66201"},{"range":"72320","text":"66199"},{"range":"72321","text":"66201"},{"range":"72322","text":"66199"},{"range":"72323","text":"66201"},{"range":"72324","text":"66199"},{"range":"72325","text":"66201"},{"range":"72326","text":"66199"},{"range":"72327","text":"66201"},{"range":"72328","text":"66199"},{"range":"72329","text":"66201"},{"range":"72330","text":"66199"},{"range":"72331","text":"66201"},{"range":"72332","text":"66199"},{"range":"72333","text":"66201"},{"range":"72334","text":"66199"},{"range":"72335","text":"66201"},{"range":"72336","text":"66199"},{"range":"72337","text":"66201"},{"range":"72338","text":"66199"},{"range":"72339","text":"66201"},{"range":"72340","text":"66199"},{"range":"72341","text":"66201"},{"range":"72342","text":"66199"},{"range":"72343","text":"66201"},{"range":"72344","text":"66199"},{"range":"72345","text":"66201"},{"range":"72346","text":"66199"},{"range":"72347","text":"66201"},{"range":"72348","text":"66199"},{"range":"72349","text":"66201"},{"range":"72350","text":"66199"},{"range":"72351","text":"66201"},{"range":"72352","text":"66199"},{"range":"72353","text":"66201"},{"range":"72354","text":"66199"},{"range":"72355","text":"66201"},{"range":"72356","text":"66199"},{"range":"72357","text":"66201"},{"range":"72358","text":"66199"},{"range":"72359","text":"66201"},{"range":"72360","text":"66199"},{"range":"72361","text":"66201"},{"range":"72362","text":"66199"},{"range":"72363","text":"66201"},{"range":"72364","text":"66199"},{"range":"72365","text":"66201"},{"range":"72366","text":"66199"},{"range":"72367","text":"66201"},{"range":"72368","text":"66199"},{"range":"72369","text":"66201"},{"range":"72370","text":"66199"},{"range":"72371","text":"66201"},{"range":"72372","text":"66199"},{"range":"72373","text":"66201"},{"range":"72374","text":"66199"},{"range":"72375","text":"66201"},{"range":"72376","text":"66199"},{"range":"72377","text":"66201"},{"range":"72378","text":"66199"},{"range":"72379","text":"66201"},{"range":"72380","text":"66199"},{"range":"72381","text":"66201"},{"range":"72382","text":"66199"},{"range":"72383","text":"66201"},{"range":"72384","text":"66199"},{"range":"72385","text":"66201"},{"range":"72386","text":"66199"},{"range":"72387","text":"66201"},{"range":"72388","text":"66199"},{"range":"72389","text":"66201"},{"range":"72390","text":"66199"},{"range":"72391","text":"66201"},{"range":"72392","text":"66199"},{"range":"72393","text":"66201"},{"range":"72394","text":"66199"},{"range":"72395","text":"66201"},{"range":"72396","text":"66199"},{"range":"72397","text":"66201"},{"range":"72398","text":"66199"},{"range":"72399","text":"66201"},{"range":"72400","text":"66199"},{"range":"72401","text":"66201"},{"range":"72402","text":"66199"},{"range":"72403","text":"66201"},{"range":"72404","text":"66199"},{"range":"72405","text":"66201"},{"range":"72406","text":"66199"},{"range":"72407","text":"66201"},{"range":"72408","text":"66199"},{"range":"72409","text":"66201"},{"range":"72410","text":"66199"},{"range":"72411","text":"66201"},{"range":"72412","text":"66199"},{"range":"72413","text":"66201"},{"range":"72414","text":"66199"},{"range":"72415","text":"66201"},{"range":"72416","text":"66199"},{"range":"72417","text":"66201"},{"range":"72418","text":"66199"},{"range":"72419","text":"66201"},{"range":"72420","text":"66199"},{"range":"72421","text":"66201"},{"range":"72422","text":"66199"},{"range":"72423","text":"66201"},{"range":"72424","text":"66199"},{"range":"72425","text":"66201"},{"range":"72426","text":"66199"},{"range":"72427","text":"66201"},{"range":"72428","text":"66199"},{"range":"72429","text":"66201"},{"range":"72430","text":"66199"},{"range":"72431","text":"66201"},{"range":"72432","text":"66199"},{"range":"72433","text":"66201"},{"range":"72434","text":"66199"},{"range":"72435","text":"66201"},{"range":"72436","text":"66199"},{"range":"72437","text":"66201"},{"range":"72438","text":"66199"},{"range":"72439","text":"66201"},{"range":"72440","text":"66199"},{"range":"72441","text":"66201"},{"range":"72442","text":"66199"},{"range":"72443","text":"66201"},{"range":"72444","text":"66199"},{"range":"72445","text":"66201"},{"range":"72446","text":"66199"},{"range":"72447","text":"66201"},{"range":"72448","text":"66199"},{"range":"72449","text":"66201"},{"range":"72450","text":"66199"},{"range":"72451","text":"66201"},{"range":"72452","text":"66199"},{"range":"72453","text":"66201"},{"range":"72454","text":"66199"},{"range":"72455","text":"66201"},{"range":"72456","text":"66199"},{"range":"72457","text":"66201"},{"range":"72458","text":"66199"},{"range":"72459","text":"66201"},{"range":"72460","text":"66199"},{"range":"72461","text":"66201"},{"range":"72462","text":"66199"},{"range":"72463","text":"66201"},{"range":"72464","text":"66199"},{"range":"72465","text":"66201"},{"range":"72466","text":"66199"},{"range":"72467","text":"66201"},{"range":"72468","text":"66199"},{"range":"72469","text":"66201"},{"range":"72470","text":"66199"},{"range":"72471","text":"66201"},{"range":"72472","text":"66199"},{"range":"72473","text":"66201"},{"range":"72474","text":"66199"},{"range":"72475","text":"66201"},{"range":"72476","text":"66199"},{"range":"72477","text":"66201"},{"range":"72478","text":"66199"},{"range":"72479","text":"66201"},{"range":"72480","text":"66199"},{"range":"72481","text":"66201"},{"range":"72482","text":"66199"},{"range":"72483","text":"66201"},{"range":"72484","text":"66199"},{"range":"72485","text":"66201"},{"range":"72486","text":"66199"},{"range":"72487","text":"66201"},{"range":"72488","text":"66199"},{"range":"72489","text":"66201"},{"range":"72490","text":"66199"},{"range":"72491","text":"66201"},{"range":"72492","text":"66199"},{"range":"72493","text":"66201"},{"range":"72494","text":"66199"},{"range":"72495","text":"66201"},{"range":"72496","text":"66199"},{"range":"72497","text":"66201"},{"range":"72498","text":"66199"},{"range":"72499","text":"66201"},{"range":"72500","text":"66199"},{"range":"72501","text":"66201"},{"range":"72502","text":"66199"},{"range":"72503","text":"66201"},{"range":"72504","text":"66199"},{"range":"72505","text":"66201"},{"range":"72506","text":"66199"},{"range":"72507","text":"66201"},{"range":"72508","text":"66199"},{"range":"72509","text":"66201"},{"range":"72510","text":"66199"},{"range":"72511","text":"66201"},{"range":"72512","text":"66199"},{"range":"72513","text":"66201"},{"range":"72514","text":"66199"},{"range":"72515","text":"66201"},{"range":"72516","text":"66199"},{"range":"72517","text":"66201"},{"range":"72518","text":"66199"},{"range":"72519","text":"66201"},{"range":"72520","text":"66199"},{"range":"72521","text":"66201"},{"range":"72522","text":"66199"},{"range":"72523","text":"66201"},{"range":"72524","text":"66199"},{"range":"72525","text":"66201"},{"range":"72526","text":"66199"},{"range":"72527","text":"66201"},{"range":"72528","text":"66199"},{"range":"72529","text":"66201"},{"range":"72530","text":"66199"},{"range":"72531","text":"66201"},{"range":"72532","text":"66199"},{"range":"72533","text":"66201"},{"range":"72534","text":"66199"},{"range":"72535","text":"66201"},{"range":"72536","text":"66199"},{"range":"72537","text":"66201"},{"range":"72538","text":"66199"},{"range":"72539","text":"66201"},{"range":"72540","text":"66199"},{"range":"72541","text":"66201"},{"range":"72542","text":"66199"},{"range":"72543","text":"66201"},{"range":"72544","text":"66199"},{"range":"72545","text":"66201"},{"range":"72546","text":"66199"},{"range":"72547","text":"66201"},{"range":"72548","text":"66199"},{"range":"72549","text":"66201"},{"range":"72550","text":"66199"},{"range":"72551","text":"66201"},{"range":"72552","text":"66199"},{"range":"72553","text":"66201"},{"range":"72554","text":"66199"},{"range":"72555","text":"66201"},{"range":"72556","text":"66199"},{"range":"72557","text":"66201"},{"range":"72558","text":"66199"},{"range":"72559","text":"66201"},{"range":"72560","text":"66199"},{"range":"72561","text":"66201"},{"range":"72562","text":"66199"},{"range":"72563","text":"66201"},{"range":"72564","text":"66199"},{"range":"72565","text":"66201"},{"range":"72566","text":"66199"},{"range":"72567","text":"66201"},{"range":"72568","text":"66199"},{"range":"72569","text":"66201"},{"range":"72570","text":"66199"},{"range":"72571","text":"66201"},{"range":"72572","text":"66199"},{"range":"72573","text":"66201"},{"range":"72574","text":"66199"},{"range":"72575","text":"66201"},{"range":"72576","text":"66199"},{"range":"72577","text":"66201"},{"range":"72578","text":"66199"},{"range":"72579","text":"66201"},{"range":"72580","text":"66199"},{"range":"72581","text":"66201"},{"range":"72582","text":"66199"},{"range":"72583","text":"66201"},{"range":"72584","text":"66199"},{"range":"72585","text":"66201"},{"range":"72586","text":"66199"},{"range":"72587","text":"66201"},{"range":"72588","text":"66199"},{"range":"72589","text":"66201"},{"range":"72590","text":"66199"},{"range":"72591","text":"66201"},{"range":"72592","text":"66199"},{"range":"72593","text":"66201"},{"range":"72594","text":"66199"},{"range":"72595","text":"66201"},{"range":"72596","text":"66199"},{"range":"72597","text":"66201"},{"range":"72598","text":"66199"},{"range":"72599","text":"66201"},{"range":"72600","text":"66199"},{"range":"72601","text":"66201"},{"range":"72602","text":"66199"},{"range":"72603","text":"66201"},{"range":"72604","text":"66199"},{"range":"72605","text":"66201"},{"range":"72606","text":"66199"},{"range":"72607","text":"66201"},{"range":"72608","text":"66199"},{"range":"72609","text":"66201"},{"range":"72610","text":"66199"},{"range":"72611","text":"66201"},{"range":"72612","text":"66199"},{"range":"72613","text":"66201"},{"range":"72614","text":"66199"},{"range":"72615","text":"66201"},{"range":"72616","text":"66199"},{"range":"72617","text":"66201"},{"range":"72618","text":"66199"},{"range":"72619","text":"66201"},{"range":"72620","text":"66199"},{"range":"72621","text":"66201"},{"range":"72622","text":"66199"},{"range":"72623","text":"66201"},{"range":"72624","text":"66199"},{"range":"72625","text":"66201"},{"range":"72626","text":"66199"},{"range":"72627","text":"66201"},{"range":"72628","text":"66199"},{"range":"72629","text":"66201"},{"range":"72630","text":"66199"},{"range":"72631","text":"66201"},{"range":"72632","text":"66199"},{"range":"72633","text":"66201"},{"range":"72634","text":"66199"},{"range":"72635","text":"66201"},{"range":"72636","text":"66199"},{"range":"72637","text":"66201"},{"range":"72638","text":"66199"},{"range":"72639","text":"66201"},{"range":"72640","text":"66199"},{"range":"72641","text":"66201"},{"range":"72642","text":"66199"},{"range":"72643","text":"66201"},{"range":"72644","text":"66199"},{"range":"72645","text":"66201"},{"range":"72646","text":"66199"},{"range":"72647","text":"66201"},{"range":"72648","text":"66199"},{"range":"72649","text":"66201"},{"range":"72650","text":"66199"},{"range":"72651","text":"66201"},{"range":"72652","text":"66199"},{"range":"72653","text":"66201"},{"range":"72654","text":"66199"},{"range":"72655","text":"66201"},{"range":"72656","text":"66199"},{"range":"72657","text":"66201"},{"range":"72658","text":"66199"},{"range":"72659","text":"66201"},{"range":"72660","text":"66199"},{"range":"72661","text":"66201"},{"range":"72662","text":"66199"},{"range":"72663","text":"66201"},{"range":"72664","text":"66199"},{"range":"72665","text":"66201"},{"range":"72666","text":"66199"},{"range":"72667","text":"66201"},{"range":"72668","text":"66199"},{"range":"72669","text":"66201"},{"range":"72670","text":"66199"},{"range":"72671","text":"66201"},{"range":"72672","text":"66199"},{"range":"72673","text":"66201"},{"range":"72674","text":"66199"},{"range":"72675","text":"66201"},{"range":"72676","text":"66199"},{"range":"72677","text":"66201"},{"range":"72678","text":"66199"},{"range":"72679","text":"66201"},{"range":"72680","text":"66199"},{"range":"72681","text":"66201"},{"range":"72682","text":"66199"},{"range":"72683","text":"66201"},{"range":"72684","text":"66199"},{"range":"72685","text":"66201"},{"range":"72686","text":"66199"},{"range":"72687","text":"66201"},{"range":"72688","text":"66199"},{"range":"72689","text":"66201"},{"range":"72690","text":"66199"},{"range":"72691","text":"66201"},{"range":"72692","text":"66199"},{"range":"72693","text":"66201"},{"range":"72694","text":"66199"},{"range":"72695","text":"66201"},{"range":"72696","text":"66199"},{"range":"72697","text":"66201"},{"range":"72698","text":"66199"},{"range":"72699","text":"66201"},{"range":"72700","text":"66199"},{"range":"72701","text":"66201"},{"range":"72702","text":"66199"},{"range":"72703","text":"66201"},{"range":"72704","text":"66199"},{"range":"72705","text":"66201"},{"range":"72706","text":"66199"},{"range":"72707","text":"66201"},{"range":"72708","text":"66199"},{"range":"72709","text":"66201"},{"range":"72710","text":"66199"},{"range":"72711","text":"66201"},{"range":"72712","text":"66199"},{"range":"72713","text":"66201"},{"range":"72714","text":"66199"},{"range":"72715","text":"66201"},{"range":"72716","text":"66199"},{"range":"72717","text":"66201"},{"range":"72718","text":"66199"},{"range":"72719","text":"66201"},{"range":"72720","text":"66199"},{"range":"72721","text":"66201"},{"range":"72722","text":"66199"},{"range":"72723","text":"66201"},{"range":"72724","text":"66199"},{"range":"72725","text":"66201"},{"range":"72726","text":"66199"},{"range":"72727","text":"66201"},{"range":"72728","text":"66199"},{"range":"72729","text":"66201"},{"range":"72730","text":"66199"},{"range":"72731","text":"66201"},{"range":"72732","text":"66199"},{"range":"72733","text":"66201"},{"range":"72734","text":"66199"},{"range":"72735","text":"66201"},{"range":"72736","text":"66199"},{"range":"72737","text":"66201"},{"range":"72738","text":"66199"},{"range":"72739","text":"66201"},{"range":"72740","text":"66199"},{"range":"72741","text":"66201"},{"range":"72742","text":"66199"},{"range":"72743","text":"66201"},{"range":"72744","text":"66199"},{"range":"72745","text":"66201"},{"range":"72746","text":"66199"},{"range":"72747","text":"66201"},{"range":"72748","text":"66199"},{"range":"72749","text":"66201"},{"range":"72750","text":"66199"},{"range":"72751","text":"66201"},{"range":"72752","text":"66199"},{"range":"72753","text":"66201"},{"range":"72754","text":"66199"},{"range":"72755","text":"66201"},{"range":"72756","text":"66199"},{"range":"72757","text":"66201"},{"range":"72758","text":"66199"},{"range":"72759","text":"66201"},{"range":"72760","text":"66199"},{"range":"72761","text":"66201"},{"range":"72762","text":"66199"},{"range":"72763","text":"66201"},{"range":"72764","text":"66199"},{"range":"72765","text":"66201"},{"range":"72766","text":"66199"},{"range":"72767","text":"66201"},{"range":"72768","text":"66199"},{"range":"72769","text":"66201"},{"range":"72770","text":"66199"},{"range":"72771","text":"66201"},{"range":"72772","text":"66199"},{"range":"72773","text":"66201"},{"range":"72774","text":"66199"},{"range":"72775","text":"66201"},{"range":"72776","text":"66199"},{"range":"72777","text":"66201"},{"range":"72778","text":"66199"},{"range":"72779","text":"66201"},{"range":"72780","text":"66199"},{"range":"72781","text":"66201"},{"range":"72782","text":"66199"},{"range":"72783","text":"66201"},{"range":"72784","text":"66199"},{"range":"72785","text":"66201"},{"range":"72786","text":"66199"},{"range":"72787","text":"66201"},{"range":"72788","text":"66199"},{"range":"72789","text":"66201"},{"range":"72790","text":"66199"},{"range":"72791","text":"66201"},{"range":"72792","text":"66199"},{"range":"72793","text":"66201"},{"range":"72794","text":"66199"},{"range":"72795","text":"66201"},{"range":"72796","text":"66199"},{"range":"72797","text":"66201"},{"range":"72798","text":"66199"},{"range":"72799","text":"66201"},{"range":"72800","text":"66199"},{"range":"72801","text":"66201"},{"range":"72802","text":"66199"},{"range":"72803","text":"66201"},{"range":"72804","text":"66199"},{"range":"72805","text":"66201"},{"range":"72806","text":"66199"},{"range":"72807","text":"66201"},{"range":"72808","text":"66199"},{"range":"72809","text":"66201"},{"range":"72810","text":"66199"},{"range":"72811","text":"66201"},{"range":"72812","text":"66199"},{"range":"72813","text":"66201"},{"range":"72814","text":"66199"},{"range":"72815","text":"66201"},{"range":"72816","text":"66199"},{"range":"72817","text":"66201"},{"range":"72818","text":"66199"},{"range":"72819","text":"66201"},{"range":"72820","text":"66199"},{"range":"72821","text":"66201"},{"range":"72822","text":"66199"},{"range":"72823","text":"66201"},{"range":"72824","text":"66199"},{"range":"72825","text":"66201"},{"range":"72826","text":"66199"},{"range":"72827","text":"66201"},{"range":"72828","text":"66199"},{"range":"72829","text":"66201"},{"range":"72830","text":"66199"},{"range":"72831","text":"66201"},{"range":"72832","text":"66199"},{"range":"72833","text":"66201"},{"range":"72834","text":"66199"},{"range":"72835","text":"66201"},{"range":"72836","text":"66199"},{"range":"72837","text":"66201"},{"range":"72838","text":"66199"},{"range":"72839","text":"66201"},{"range":"72840","text":"66199"},{"range":"72841","text":"66201"},{"range":"72842","text":"66199"},{"range":"72843","text":"66201"},{"range":"72844","text":"66199"},{"range":"72845","text":"66201"},{"range":"72846","text":"66199"},{"range":"72847","text":"66201"},{"range":"72848","text":"66199"},{"range":"72849","text":"66201"},{"range":"72850","text":"66199"},{"range":"72851","text":"66201"},{"range":"72852","text":"66199"},{"range":"72853","text":"66201"},{"range":"72854","text":"66199"},{"range":"72855","text":"66201"},{"range":"72856","text":"66199"},{"range":"72857","text":"66201"},{"range":"72858","text":"66199"},{"range":"72859","text":"66201"},{"range":"72860","text":"66199"},{"range":"72861","text":"66201"},{"range":"72862","text":"66199"},{"range":"72863","text":"66201"},{"range":"72864","text":"66199"},{"range":"72865","text":"66201"},{"range":"72866","text":"66199"},{"range":"72867","text":"66201"},{"range":"72868","text":"66199"},{"range":"72869","text":"66201"},{"range":"72870","text":"66199"},{"range":"72871","text":"66201"},{"range":"72872","text":"66199"},{"range":"72873","text":"66201"},{"range":"72874","text":"66199"},{"range":"72875","text":"66201"},{"range":"72876","text":"66199"},{"range":"72877","text":"66201"},{"range":"72878","text":"66199"},{"range":"72879","text":"66201"},{"range":"72880","text":"66199"},{"range":"72881","text":"66201"},{"range":"72882","text":"66199"},{"range":"72883","text":"66201"},{"range":"72884","text":"66199"},{"range":"72885","text":"66201"},{"range":"72886","text":"66199"},{"range":"72887","text":"66201"},{"range":"72888","text":"66199"},{"range":"72889","text":"66201"},{"range":"72890","text":"66199"},{"range":"72891","text":"66201"},{"range":"72892","text":"66199"},{"range":"72893","text":"66201"},{"range":"72894","text":"66199"},{"range":"72895","text":"66201"},{"range":"72896","text":"66199"},{"range":"72897","text":"66201"},{"range":"72898","text":"66199"},{"range":"72899","text":"66201"},{"range":"72900","text":"66199"},{"range":"72901","text":"66201"},{"range":"72902","text":"66199"},{"range":"72903","text":"66201"},{"range":"72904","text":"66199"},{"range":"72905","text":"66201"},{"range":"72906","text":"66199"},{"range":"72907","text":"66201"},{"range":"72908","text":"66199"},{"range":"72909","text":"66201"},{"range":"72910","text":"66199"},{"range":"72911","text":"66201"},{"range":"72912","text":"66199"},{"range":"72913","text":"66201"},{"range":"72914","text":"66199"},{"range":"72915","text":"66201"},{"range":"72916","text":"66199"},{"range":"72917","text":"66201"},{"range":"72918","text":"66199"},{"range":"72919","text":"66201"},{"range":"72920","text":"66199"},{"range":"72921","text":"66201"},{"range":"72922","text":"66199"},{"range":"72923","text":"66201"},{"range":"72924","text":"66199"},{"range":"72925","text":"66201"},{"range":"72926","text":"66199"},{"range":"72927","text":"66201"},{"range":"72928","text":"66199"},{"range":"72929","text":"66201"},{"range":"72930","text":"66199"},{"range":"72931","text":"66201"},{"range":"72932","text":"66199"},{"range":"72933","text":"66201"},{"range":"72934","text":"66199"},{"range":"72935","text":"66201"},{"range":"72936","text":"66199"},{"range":"72937","text":"66201"},{"range":"72938","text":"66199"},{"range":"72939","text":"66201"},{"range":"72940","text":"66199"},{"range":"72941","text":"66201"},{"range":"72942","text":"66199"},{"range":"72943","text":"66201"},{"range":"72944","text":"66199"},{"range":"72945","text":"66201"},{"range":"72946","text":"66199"},{"range":"72947","text":"66201"},{"range":"72948","text":"66199"},{"range":"72949","text":"66201"},{"range":"72950","text":"66199"},{"range":"72951","text":"66201"},{"range":"72952","text":"66199"},{"range":"72953","text":"66201"},{"range":"72954","text":"66199"},{"range":"72955","text":"66201"},{"range":"72956","text":"66199"},{"range":"72957","text":"66201"},{"range":"72958","text":"66199"},{"range":"72959","text":"66201"},{"range":"72960","text":"66199"},{"range":"72961","text":"66201"},{"range":"72962","text":"66199"},{"range":"72963","text":"66201"},{"range":"72964","text":"66199"},{"range":"72965","text":"66201"},{"range":"72966","text":"66199"},{"range":"72967","text":"66201"},{"range":"72968","text":"66199"},{"range":"72969","text":"66201"},{"range":"72970","text":"66199"},{"range":"72971","text":"66201"},{"range":"72972","text":"66199"},{"range":"72973","text":"66201"},{"range":"72974","text":"66199"},{"range":"72975","text":"66201"},{"range":"72976","text":"66199"},{"range":"72977","text":"66201"},{"range":"72978","text":"66199"},{"range":"72979","text":"66201"},{"range":"72980","text":"66199"},{"range":"72981","text":"66201"},{"range":"72982","text":"66199"},{"range":"72983","text":"66201"},{"range":"72984","text":"66199"},{"range":"72985","text":"66201"},{"range":"72986","text":"66199"},{"range":"72987","text":"66201"},{"range":"72988","text":"66199"},{"range":"72989","text":"66201"},{"range":"72990","text":"66199"},{"range":"72991","text":"66201"},{"range":"72992","text":"66199"},{"range":"72993","text":"66201"},{"range":"72994","text":"66199"},{"range":"72995","text":"66201"},{"range":"72996","text":"66199"},{"range":"72997","text":"66201"},{"range":"72998","text":"66199"},{"range":"72999","text":"66201"},{"range":"73000","text":"66199"},{"range":"73001","text":"66201"},{"range":"73002","text":"66199"},{"range":"73003","text":"66201"},{"range":"73004","text":"66199"},{"range":"73005","text":"66201"},{"range":"73006","text":"66199"},{"range":"73007","text":"66201"},{"range":"73008","text":"66199"},{"range":"73009","text":"66201"},{"range":"73010","text":"66199"},{"range":"73011","text":"66201"},{"range":"73012","text":"66199"},{"range":"73013","text":"66201"},{"range":"73014","text":"66199"},{"range":"73015","text":"66201"},{"range":"73016","text":"66199"},{"range":"73017","text":"66201"},{"range":"73018","text":"66199"},{"range":"73019","text":"66201"},{"range":"73020","text":"66199"},{"range":"73021","text":"66201"},{"range":"73022","text":"66199"},{"range":"73023","text":"66201"},{"range":"73024","text":"66199"},{"range":"73025","text":"66201"},{"range":"73026","text":"66199"},{"range":"73027","text":"66201"},{"range":"73028","text":"66199"},{"range":"73029","text":"66201"},{"range":"73030","text":"66199"},{"range":"73031","text":"66201"},{"range":"73032","text":"66199"},{"range":"73033","text":"66201"},{"range":"73034","text":"66199"},{"range":"73035","text":"66201"},{"range":"73036","text":"66199"},{"range":"73037","text":"66201"},{"range":"73038","text":"66199"},{"range":"73039","text":"66201"},{"range":"73040","text":"66199"},{"range":"73041","text":"66201"},{"range":"73042","text":"66199"},{"range":"73043","text":"66201"},{"range":"73044","text":"66199"},{"range":"73045","text":"66201"},{"range":"73046","text":"66199"},{"range":"73047","text":"66201"},{"range":"73048","text":"66199"},{"range":"73049","text":"66201"},{"range":"73050","text":"66199"},{"range":"73051","text":"66201"},{"range":"73052","text":"66199"},{"range":"73053","text":"66201"},{"range":"73054","text":"66199"},{"range":"73055","text":"66201"},{"range":"73056","text":"66199"},{"range":"73057","text":"66201"},{"range":"73058","text":"66199"},{"range":"73059","text":"66201"},{"range":"73060","text":"66199"},{"range":"73061","text":"66201"},{"range":"73062","text":"66199"},{"range":"73063","text":"66201"},{"range":"73064","text":"66199"},{"range":"73065","text":"66201"},{"range":"73066","text":"66199"},{"range":"73067","text":"66201"},{"range":"73068","text":"66199"},{"range":"73069","text":"66201"},{"range":"73070","text":"66199"},{"range":"73071","text":"66201"},{"range":"73072","text":"66199"},{"range":"73073","text":"66201"},{"range":"73074","text":"66199"},{"range":"73075","text":"66201"},{"range":"73076","text":"66199"},{"range":"73077","text":"66201"},{"range":"73078","text":"66199"},{"range":"73079","text":"66201"},{"range":"73080","text":"66199"},{"range":"73081","text":"66201"},{"range":"73082","text":"66199"},{"range":"73083","text":"66201"},{"range":"73084","text":"66199"},{"range":"73085","text":"66201"},{"range":"73086","text":"66199"},{"range":"73087","text":"66201"},{"range":"73088","text":"66199"},{"range":"73089","text":"66201"},{"range":"73090","text":"66199"},{"range":"73091","text":"66201"},{"range":"73092","text":"66199"},{"range":"73093","text":"66201"},{"range":"73094","text":"66199"},{"range":"73095","text":"66201"},{"range":"73096","text":"66199"},{"range":"73097","text":"66201"},{"range":"73098","text":"66199"},{"range":"73099","text":"66201"},{"range":"73100","text":"66199"},{"range":"73101","text":"66201"},{"range":"73102","text":"66199"},{"range":"73103","text":"66201"},{"range":"73104","text":"66199"},{"range":"73105","text":"66201"},{"range":"73106","text":"66199"},{"range":"73107","text":"66201"},{"range":"73108","text":"66199"},{"range":"73109","text":"66201"},{"range":"73110","text":"66199"},{"range":"73111","text":"66201"},{"range":"73112","text":"66199"},{"range":"73113","text":"66201"},{"range":"73114","text":"66199"},{"range":"73115","text":"66201"},{"range":"73116","text":"66199"},{"range":"73117","text":"66201"},{"range":"73118","text":"66199"},{"range":"73119","text":"66201"},{"range":"73120","text":"66199"},{"range":"73121","text":"66201"},{"range":"73122","text":"66199"},{"range":"73123","text":"66201"},{"range":"73124","text":"66199"},{"range":"73125","text":"66201"},{"range":"73126","text":"66199"},{"range":"73127","text":"66201"},{"range":"73128","text":"66199"},{"range":"73129","text":"66201"},{"range":"73130","text":"66199"},{"range":"73131","text":"66201"},{"range":"73132","text":"66199"},{"range":"73133","text":"66201"},{"range":"73134","text":"66199"},{"range":"73135","text":"66201"},{"range":"73136","text":"66199"},{"range":"73137","text":"66201"},{"range":"73138","text":"66199"},{"range":"73139","text":"66201"},{"range":"73140","text":"66199"},{"range":"73141","text":"66201"},{"range":"73142","text":"66199"},{"range":"73143","text":"66201"},{"range":"73144","text":"66199"},{"range":"73145","text":"66201"},{"range":"73146","text":"66199"},{"range":"73147","text":"66201"},{"range":"73148","text":"66199"},{"range":"73149","text":"66201"},{"range":"73150","text":"66199"},{"range":"73151","text":"66201"},{"range":"73152","text":"66199"},{"range":"73153","text":"66201"},{"range":"73154","text":"66199"},{"range":"73155","text":"66201"},{"range":"73156","text":"66199"},{"range":"73157","text":"66201"},{"range":"73158","text":"66199"},{"range":"73159","text":"66201"},{"range":"73160","text":"66199"},{"range":"73161","text":"66201"},{"range":"73162","text":"66199"},{"range":"73163","text":"66201"},{"range":"73164","text":"66199"},{"range":"73165","text":"66201"},{"range":"73166","text":"66199"},{"range":"73167","text":"66201"},{"range":"73168","text":"66199"},{"range":"73169","text":"66201"},{"range":"73170","text":"66199"},{"range":"73171","text":"66201"},{"range":"73172","text":"66199"},{"range":"73173","text":"66201"},{"range":"73174","text":"66199"},{"range":"73175","text":"66201"},{"range":"73176","text":"66199"},{"range":"73177","text":"66201"},{"range":"73178","text":"66199"},{"range":"73179","text":"66201"},{"range":"73180","text":"66199"},{"range":"73181","text":"66201"},{"range":"73182","text":"66199"},{"range":"73183","text":"66201"},{"range":"73184","text":"66199"},{"range":"73185","text":"66201"},{"range":"73186","text":"66199"},{"range":"73187","text":"66201"},{"range":"73188","text":"66199"},{"range":"73189","text":"66201"},{"range":"73190","text":"66199"},{"range":"73191","text":"66201"},{"range":"73192","text":"66199"},{"range":"73193","text":"66201"},{"range":"73194","text":"66199"},{"range":"73195","text":"66201"},{"range":"73196","text":"66199"},{"range":"73197","text":"66201"},{"range":"73198","text":"66199"},{"range":"73199","text":"66201"},{"range":"73200","text":"66199"},{"range":"73201","text":"66201"},{"range":"73202","text":"66199"},{"range":"73203","text":"66201"},{"range":"73204","text":"66199"},{"range":"73205","text":"66201"},{"range":"73206","text":"66199"},{"range":"73207","text":"66201"},{"range":"73208","text":"66199"},{"range":"73209","text":"66201"},{"range":"73210","text":"66199"},{"range":"73211","text":"66201"},{"range":"73212","text":"66199"},{"range":"73213","text":"66201"},{"range":"73214","text":"66199"},{"range":"73215","text":"66201"},{"range":"73216","text":"66199"},{"range":"73217","text":"66201"},{"range":"73218","text":"66199"},{"range":"73219","text":"66201"},{"range":"73220","text":"66199"},{"range":"73221","text":"66201"},{"range":"73222","text":"66199"},{"range":"73223","text":"66201"},{"range":"73224","text":"66199"},{"range":"73225","text":"66201"},{"range":"73226","text":"66199"},{"range":"73227","text":"66201"},{"range":"73228","text":"66199"},{"range":"73229","text":"66201"},{"range":"73230","text":"66199"},{"range":"73231","text":"66201"},{"range":"73232","text":"66199"},{"range":"73233","text":"66201"},{"range":"73234","text":"66199"},{"range":"73235","text":"66201"},{"range":"73236","text":"66199"},{"range":"73237","text":"66201"},{"range":"73238","text":"66199"},{"range":"73239","text":"66201"},{"range":"73240","text":"66199"},{"range":"73241","text":"66201"},{"range":"73242","text":"66199"},{"range":"73243","text":"66201"},{"range":"73244","text":"66199"},{"range":"73245","text":"66201"},{"range":"73246","text":"66199"},{"range":"73247","text":"66201"},{"range":"73248","text":"66199"},{"range":"73249","text":"66201"},{"range":"73250","text":"66199"},{"range":"73251","text":"66201"},{"range":"73252","text":"66199"},{"range":"73253","text":"66201"},{"range":"73254","text":"66199"},{"range":"73255","text":"66201"},{"range":"73256","text":"66199"},{"range":"73257","text":"66201"},{"range":"73258","text":"66199"},{"range":"73259","text":"66201"},{"range":"73260","text":"66199"},{"range":"73261","text":"66201"},{"range":"73262","text":"66199"},{"range":"73263","text":"66201"},{"range":"73264","text":"66199"},{"range":"73265","text":"66201"},{"range":"73266","text":"66199"},{"range":"73267","text":"66201"},{"range":"73268","text":"66199"},{"range":"73269","text":"66201"},{"range":"73270","text":"66199"},{"range":"73271","text":"66201"},{"range":"73272","text":"66199"},{"range":"73273","text":"66201"},{"range":"73274","text":"66199"},{"range":"73275","text":"66201"},{"range":"73276","text":"66199"},{"range":"73277","text":"66201"},{"range":"73278","text":"66199"},{"range":"73279","text":"66201"},{"range":"73280","text":"66199"},{"range":"73281","text":"66201"},{"range":"73282","text":"66199"},{"range":"73283","text":"66201"},{"range":"73284","text":"66199"},{"range":"73285","text":"66201"},{"range":"73286","text":"66199"},{"range":"73287","text":"66201"},{"range":"73288","text":"66199"},{"range":"73289","text":"66201"},{"range":"73290","text":"66199"},{"range":"73291","text":"66201"},{"range":"73292","text":"66199"},{"range":"73293","text":"66201"},{"range":"73294","text":"66199"},{"range":"73295","text":"66201"},{"range":"73296","text":"66199"},{"range":"73297","text":"66201"},{"range":"73298","text":"66199"},{"range":"73299","text":"66201"},{"range":"73300","text":"66199"},{"range":"73301","text":"66201"},{"range":"73302","text":"66199"},{"range":"73303","text":"66201"},{"range":"73304","text":"66199"},{"range":"73305","text":"66201"},{"range":"73306","text":"66199"},{"range":"73307","text":"66201"},{"range":"73308","text":"66199"},{"range":"73309","text":"66201"},{"range":"73310","text":"66199"},{"range":"73311","text":"66201"},{"range":"73312","text":"66199"},{"range":"73313","text":"66201"},{"range":"73314","text":"66199"},{"range":"73315","text":"66201"},{"range":"73316","text":"66199"},{"range":"73317","text":"66201"},{"range":"73318","text":"66199"},{"range":"73319","text":"66201"},{"range":"73320","text":"66199"},{"range":"73321","text":"66201"},{"range":"73322","text":"66199"},{"range":"73323","text":"66201"},{"range":"73324","text":"66199"},{"range":"73325","text":"66201"},{"range":"73326","text":"66199"},{"range":"73327","text":"66201"},{"range":"73328","text":"66199"},{"range":"73329","text":"66201"},{"range":"73330","text":"66199"},{"range":"73331","text":"66201"},{"range":"73332","text":"66199"},{"range":"73333","text":"66201"},{"range":"73334","text":"66199"},{"range":"73335","text":"66201"},{"range":"73336","text":"66199"},{"range":"73337","text":"66201"},{"range":"73338","text":"66199"},{"range":"73339","text":"66201"},{"range":"73340","text":"66199"},{"range":"73341","text":"66201"},{"range":"73342","text":"66199"},{"range":"73343","text":"66201"},{"range":"73344","text":"66199"},{"range":"73345","text":"66201"},{"range":"73346","text":"66199"},{"range":"73347","text":"66201"},{"range":"73348","text":"66199"},{"range":"73349","text":"66201"},{"range":"73350","text":"66199"},{"range":"73351","text":"66201"},{"range":"73352","text":"66199"},{"range":"73353","text":"66201"},{"range":"73354","text":"66199"},{"range":"73355","text":"66201"},{"range":"73356","text":"66199"},{"range":"73357","text":"66201"},{"range":"73358","text":"66199"},{"range":"73359","text":"66201"},{"range":"73360","text":"66199"},{"range":"73361","text":"66201"},{"range":"73362","text":"66199"},{"range":"73363","text":"66201"},{"range":"73364","text":"66199"},{"range":"73365","text":"66201"},{"range":"73366","text":"66199"},{"range":"73367","text":"66201"},{"range":"73368","text":"66199"},{"range":"73369","text":"66201"},{"range":"73370","text":"66199"},{"range":"73371","text":"66201"},{"range":"73372","text":"66199"},{"range":"73373","text":"66201"},{"range":"73374","text":"66199"},{"range":"73375","text":"66201"},{"range":"73376","text":"66199"},{"range":"73377","text":"66201"},{"range":"73378","text":"66199"},{"range":"73379","text":"66201"},{"range":"73380","text":"66199"},{"range":"73381","text":"66201"},{"range":"73382","text":"66199"},{"range":"73383","text":"66201"},{"range":"73384","text":"66199"},{"range":"73385","text":"66201"},{"range":"73386","text":"66199"},{"range":"73387","text":"66201"},{"range":"73388","text":"66199"},{"range":"73389","text":"66201"},{"range":"73390","text":"66199"},{"range":"73391","text":"66201"},{"range":"73392","text":"66199"},{"range":"73393","text":"66201"},{"range":"73394","text":"66199"},{"range":"73395","text":"66201"},{"range":"73396","text":"66199"},{"range":"73397","text":"66201"},{"range":"73398","text":"66199"},{"range":"73399","text":"66201"},{"range":"73400","text":"66199"},{"range":"73401","text":"66201"},{"range":"73402","text":"66199"},{"range":"73403","text":"66201"},{"range":"73404","text":"66199"},{"range":"73405","text":"66201"},{"range":"73406","text":"66199"},{"range":"73407","text":"66201"},{"range":"73408","text":"66199"},{"range":"73409","text":"66201"},{"range":"73410","text":"66199"},{"range":"73411","text":"66201"},{"range":"73412","text":"66199"},{"range":"73413","text":"66201"},{"range":"73414","text":"66199"},{"range":"73415","text":"66201"},{"range":"73416","text":"66199"},{"range":"73417","text":"66201"},{"range":"73418","text":"66199"},{"range":"73419","text":"66201"},{"range":"73420","text":"66199"},{"range":"73421","text":"66201"},{"range":"73422","text":"66199"},{"range":"73423","text":"66201"},{"range":"73424","text":"66199"},{"range":"73425","text":"66201"},{"range":"73426","text":"66199"},{"range":"73427","text":"66201"},{"range":"73428","text":"66199"},{"range":"73429","text":"66201"},{"range":"73430","text":"66199"},{"range":"73431","text":"66201"},{"range":"73432","text":"66199"},{"range":"73433","text":"66201"},{"range":"73434","text":"66199"},{"range":"73435","text":"66201"},{"range":"73436","text":"66199"},{"range":"73437","text":"66201"},{"range":"73438","text":"66199"},{"range":"73439","text":"66201"},{"range":"73440","text":"66199"},{"range":"73441","text":"66201"},{"range":"73442","text":"66199"},{"range":"73443","text":"66201"},{"range":"73444","text":"66199"},{"range":"73445","text":"66201"},{"range":"73446","text":"66199"},{"range":"73447","text":"66201"},{"range":"73448","text":"66199"},{"range":"73449","text":"66201"},{"range":"73450","text":"66199"},{"range":"73451","text":"66201"},{"range":"73452","text":"66199"},{"range":"73453","text":"66201"},{"range":"73454","text":"66199"},{"range":"73455","text":"66201"},{"range":"73456","text":"66199"},{"range":"73457","text":"66201"},{"range":"73458","text":"66199"},{"range":"73459","text":"66201"},{"range":"73460","text":"66199"},{"range":"73461","text":"66201"},{"range":"73462","text":"66199"},{"range":"73463","text":"66201"},{"range":"73464","text":"66199"},{"range":"73465","text":"66201"},{"range":"73466","text":"66199"},{"range":"73467","text":"66201"},{"range":"73468","text":"66199"},{"range":"73469","text":"66201"},{"range":"73470","text":"66199"},{"range":"73471","text":"66201"},{"range":"73472","text":"66199"},{"range":"73473","text":"66201"},{"range":"73474","text":"66199"},{"range":"73475","text":"66201"},{"range":"73476","text":"66199"},{"range":"73477","text":"66201"},{"range":"73478","text":"66199"},{"range":"73479","text":"66201"},{"range":"73480","text":"66199"},{"range":"73481","text":"66201"},{"range":"73482","text":"66199"},{"range":"73483","text":"66201"},{"range":"73484","text":"66199"},{"range":"73485","text":"66201"},{"range":"73486","text":"66199"},{"range":"73487","text":"66201"},{"range":"73488","text":"66199"},{"range":"73489","text":"66201"},{"range":"73490","text":"66199"},{"range":"73491","text":"66201"},{"range":"73492","text":"66199"},{"range":"73493","text":"66201"},{"range":"73494","text":"66199"},{"range":"73495","text":"66201"},{"range":"73496","text":"66199"},{"range":"73497","text":"66201"},{"range":"73498","text":"66199"},{"range":"73499","text":"66201"},{"range":"73500","text":"66199"},{"range":"73501","text":"66201"},{"range":"73502","text":"66199"},{"range":"73503","text":"66201"},{"range":"73504","text":"66199"},{"range":"73505","text":"66201"},{"range":"73506","text":"66199"},{"range":"73507","text":"66201"},{"range":"73508","text":"66199"},{"range":"73509","text":"66201"},{"range":"73510","text":"66199"},{"range":"73511","text":"66201"},{"range":"73512","text":"66199"},{"range":"73513","text":"66201"},{"range":"73514","text":"66199"},{"range":"73515","text":"66201"},{"range":"73516","text":"66199"},{"range":"73517","text":"66201"},{"range":"73518","text":"66199"},{"range":"73519","text":"66201"},{"range":"73520","text":"66199"},{"range":"73521","text":"66201"},{"range":"73522","text":"66199"},{"range":"73523","text":"66201"},{"range":"73524","text":"66199"},{"range":"73525","text":"66201"},{"range":"73526","text":"66199"},{"range":"73527","text":"66201"},{"range":"73528","text":"66199"},{"range":"73529","text":"66201"},{"range":"73530","text":"66199"},{"range":"73531","text":"66201"},{"range":"73532","text":"66199"},{"range":"73533","text":"66201"},{"range":"73534","text":"66199"},{"range":"73535","text":"66201"},{"range":"73536","text":"66199"},{"range":"73537","text":"66201"},{"range":"73538","text":"66199"},{"range":"73539","text":"66201"},{"range":"73540","text":"66199"},{"range":"73541","text":"66201"},{"range":"73542","text":"66199"},{"range":"73543","text":"66201"},{"range":"73544","text":"66199"},{"range":"73545","text":"66201"},{"range":"73546","text":"66199"},{"range":"73547","text":"66201"},{"range":"73548","text":"66199"},{"range":"73549","text":"66201"},{"range":"73550","text":"66199"},{"range":"73551","text":"66201"},{"range":"73552","text":"66199"},{"range":"73553","text":"66201"},{"range":"73554","text":"66199"},{"range":"73555","text":"66201"},{"range":"73556","text":"66199"},{"range":"73557","text":"66201"},{"range":"73558","text":"66199"},{"range":"73559","text":"66201"},{"range":"73560","text":"66199"},{"range":"73561","text":"66201"},{"range":"73562","text":"66199"},{"range":"73563","text":"66201"},{"range":"73564","text":"66199"},{"range":"73565","text":"66201"},{"range":"73566","text":"66199"},{"range":"73567","text":"66201"},{"range":"73568","text":"66199"},{"range":"73569","text":"66201"},{"range":"73570","text":"66199"},{"range":"73571","text":"66201"},{"range":"73572","text":"66199"},{"range":"73573","text":"66201"},{"range":"73574","text":"66199"},{"range":"73575","text":"66201"},{"range":"73576","text":"66199"},{"range":"73577","text":"66201"},{"range":"73578","text":"66199"},{"range":"73579","text":"66201"},{"range":"73580","text":"66199"},{"range":"73581","text":"66201"},{"range":"73582","text":"66199"},{"range":"73583","text":"66201"},{"range":"73584","text":"66199"},{"range":"73585","text":"66201"},{"range":"73586","text":"66199"},{"range":"73587","text":"66201"},{"range":"73588","text":"66199"},{"range":"73589","text":"66201"},{"range":"73590","text":"66199"},{"range":"73591","text":"66201"},{"range":"73592","text":"66199"},{"range":"73593","text":"66201"},{"range":"73594","text":"66199"},{"range":"73595","text":"66201"},{"range":"73596","text":"66199"},{"range":"73597","text":"66201"},{"range":"73598","text":"66199"},{"range":"73599","text":"66201"},{"range":"73600","text":"66199"},{"range":"73601","text":"66201"},{"range":"73602","text":"66199"},{"range":"73603","text":"66201"},{"range":"73604","text":"66199"},{"range":"73605","text":"66201"},{"range":"73606","text":"66199"},{"range":"73607","text":"66201"},{"range":"73608","text":"66199"},{"range":"73609","text":"66201"},{"range":"73610","text":"66199"},{"range":"73611","text":"66201"},{"range":"73612","text":"66199"},{"range":"73613","text":"66201"},{"range":"73614","text":"66199"},{"range":"73615","text":"66201"},{"range":"73616","text":"66199"},{"range":"73617","text":"66201"},{"range":"73618","text":"66199"},{"range":"73619","text":"66201"},{"range":"73620","text":"66199"},{"range":"73621","text":"66201"},{"range":"73622","text":"66199"},{"range":"73623","text":"66201"},{"range":"73624","text":"66199"},{"range":"73625","text":"66201"},{"range":"73626","text":"66199"},{"range":"73627","text":"66201"},{"range":"73628","text":"66199"},{"range":"73629","text":"66201"},{"range":"73630","text":"66199"},{"range":"73631","text":"66201"},{"range":"73632","text":"66199"},{"range":"73633","text":"66201"},{"range":"73634","text":"66199"},{"range":"73635","text":"66201"},{"range":"73636","text":"66199"},{"range":"73637","text":"66201"},{"range":"73638","text":"66199"},{"range":"73639","text":"66201"},{"range":"73640","text":"66199"},{"range":"73641","text":"66201"},{"range":"73642","text":"66199"},{"range":"73643","text":"66201"},{"range":"73644","text":"66199"},{"range":"73645","text":"66201"},{"range":"73646","text":"66199"},{"range":"73647","text":"66201"},{"range":"73648","text":"66199"},{"range":"73649","text":"66201"},{"range":"73650","text":"66199"},{"range":"73651","text":"66201"},{"range":"73652","text":"66199"},{"range":"73653","text":"66201"},{"range":"73654","text":"66199"},{"range":"73655","text":"66201"},{"range":"73656","text":"66199"},{"range":"73657","text":"66201"},{"range":"73658","text":"66199"},{"range":"73659","text":"66201"},{"range":"73660","text":"66199"},{"range":"73661","text":"66201"},{"range":"73662","text":"66199"},{"range":"73663","text":"66201"},{"range":"73664","text":"66199"},{"range":"73665","text":"66201"},{"range":"73666","text":"66199"},{"range":"73667","text":"66201"},{"range":"73668","text":"66199"},{"range":"73669","text":"66201"},{"range":"73670","text":"66199"},{"range":"73671","text":"66201"},{"range":"73672","text":"66199"},{"range":"73673","text":"66201"},{"range":"73674","text":"66199"},{"range":"73675","text":"66201"},{"range":"73676","text":"66199"},{"range":"73677","text":"66201"},{"range":"73678","text":"66199"},{"range":"73679","text":"66201"},{"range":"73680","text":"66199"},{"range":"73681","text":"66201"},{"range":"73682","text":"66199"},{"range":"73683","text":"66201"},{"range":"73684","text":"66199"},{"range":"73685","text":"66201"},{"range":"73686","text":"66199"},{"range":"73687","text":"66201"},{"range":"73688","text":"66199"},{"range":"73689","text":"66201"},{"range":"73690","text":"66199"},{"range":"73691","text":"66201"},{"range":"73692","text":"66199"},{"range":"73693","text":"66201"},{"range":"73694","text":"66199"},{"range":"73695","text":"66201"},{"range":"73696","text":"66199"},{"range":"73697","text":"66201"},{"range":"73698","text":"66199"},{"range":"73699","text":"66201"},{"range":"73700","text":"66199"},{"range":"73701","text":"66201"},{"range":"73702","text":"66199"},{"range":"73703","text":"66201"},{"range":"73704","text":"66199"},{"range":"73705","text":"66201"},{"range":"73706","text":"66199"},{"range":"73707","text":"66201"},{"range":"73708","text":"66199"},{"range":"73709","text":"66201"},{"range":"73710","text":"66199"},{"range":"73711","text":"66201"},{"range":"73712","text":"66199"},{"range":"73713","text":"66201"},{"range":"73714","text":"66199"},{"range":"73715","text":"66201"},{"range":"73716","text":"66199"},{"range":"73717","text":"66201"},{"range":"73718","text":"66199"},{"range":"73719","text":"66201"},{"range":"73720","text":"66199"},{"range":"73721","text":"66201"},{"range":"73722","text":"66199"},{"range":"73723","text":"66201"},{"range":"73724","text":"66199"},{"range":"73725","text":"66201"},{"range":"73726","text":"66199"},{"range":"73727","text":"66201"},{"range":"73728","text":"66199"},{"range":"73729","text":"66201"},{"range":"73730","text":"66199"},{"range":"73731","text":"66201"},{"range":"73732","text":"66199"},{"range":"73733","text":"66201"},{"range":"73734","text":"66199"},{"range":"73735","text":"66201"},{"range":"73736","text":"66199"},{"range":"73737","text":"66201"},{"range":"73738","text":"66199"},{"range":"73739","text":"66201"},{"range":"73740","text":"66199"},{"range":"73741","text":"66201"},{"range":"73742","text":"66199"},{"range":"73743","text":"66201"},{"range":"73744","text":"66199"},{"range":"73745","text":"66201"},{"range":"73746","text":"66199"},{"range":"73747","text":"66201"},{"range":"73748","text":"66199"},{"range":"73749","text":"66201"},{"range":"73750","text":"66199"},{"range":"73751","text":"66201"},{"range":"73752","text":"66199"},{"range":"73753","text":"66201"},{"range":"73754","text":"66199"},{"range":"73755","text":"66201"},{"range":"73756","text":"66199"},{"range":"73757","text":"66201"},{"range":"73758","text":"66199"},{"range":"73759","text":"66201"},{"range":"73760","text":"66199"},{"range":"73761","text":"66201"},{"range":"73762","text":"66199"},{"range":"73763","text":"66201"},{"range":"73764","text":"66199"},{"range":"73765","text":"66201"},{"range":"73766","text":"66199"},{"range":"73767","text":"66201"},{"range":"73768","text":"66199"},{"range":"73769","text":"66201"},{"range":"73770","text":"66199"},{"range":"73771","text":"66201"},{"range":"73772","text":"66199"},{"range":"73773","text":"66201"},{"range":"73774","text":"66199"},{"range":"73775","text":"66201"},{"range":"73776","text":"66199"},{"range":"73777","text":"66201"},{"range":"73778","text":"66199"},{"range":"73779","text":"66201"},{"range":"73780","text":"66199"},{"range":"73781","text":"66201"},{"range":"73782","text":"66199"},{"range":"73783","text":"66201"},{"range":"73784","text":"66199"},{"range":"73785","text":"66201"},{"range":"73786","text":"66199"},{"range":"73787","text":"66201"},{"range":"73788","text":"66199"},{"range":"73789","text":"66201"},{"range":"73790","text":"66199"},{"range":"73791","text":"66201"},{"range":"73792","text":"66199"},{"range":"73793","text":"66201"},{"range":"73794","text":"66199"},{"range":"73795","text":"66201"},{"range":"73796","text":"66199"},{"range":"73797","text":"66201"},{"range":"73798","text":"66199"},{"range":"73799","text":"66201"},{"range":"73800","text":"66199"},{"range":"73801","text":"66201"},{"range":"73802","text":"66199"},{"range":"73803","text":"66201"},{"range":"73804","text":"66199"},{"range":"73805","text":"66201"},{"range":"73806","text":"66199"},{"range":"73807","text":"66201"},{"range":"73808","text":"66199"},{"range":"73809","text":"66201"},{"range":"73810","text":"66199"},{"range":"73811","text":"66201"},{"range":"73812","text":"66199"},{"range":"73813","text":"66201"},{"range":"73814","text":"66199"},{"range":"73815","text":"66201"},{"range":"73816","text":"66199"},{"range":"73817","text":"66201"},{"range":"73818","text":"66199"},{"range":"73819","text":"66201"},{"range":"73820","text":"66199"},{"range":"73821","text":"66201"},{"range":"73822","text":"66199"},{"range":"73823","text":"66201"},{"range":"73824","text":"66199"},{"range":"73825","text":"66201"},{"range":"73826","text":"66199"},{"range":"73827","text":"66201"},{"range":"73828","text":"66199"},{"range":"73829","text":"66201"},{"range":"73830","text":"66199"},{"range":"73831","text":"66201"},{"range":"73832","text":"66199"},{"range":"73833","text":"66201"},{"range":"73834","text":"66199"},{"range":"73835","text":"66201"},{"range":"73836","text":"66199"},{"range":"73837","text":"66201"},{"range":"73838","text":"66199"},{"range":"73839","text":"66201"},{"range":"73840","text":"66199"},{"range":"73841","text":"66201"},{"range":"73842","text":"66199"},{"range":"73843","text":"66201"},{"range":"73844","text":"66199"},{"range":"73845","text":"66201"},{"range":"73846","text":"66199"},{"range":"73847","text":"66201"},{"range":"73848","text":"66199"},{"range":"73849","text":"66201"},{"range":"73850","text":"66199"},{"range":"73851","text":"66201"},{"range":"73852","text":"66199"},{"range":"73853","text":"66201"},{"range":"73854","text":"66199"},{"range":"73855","text":"66201"},{"range":"73856","text":"66199"},{"range":"73857","text":"66201"},{"range":"73858","text":"66199"},{"range":"73859","text":"66201"},{"range":"73860","text":"66199"},{"range":"73861","text":"66201"},{"range":"73862","text":"66199"},{"range":"73863","text":"66201"},{"range":"73864","text":"66199"},{"range":"73865","text":"66201"},{"range":"73866","text":"66199"},{"range":"73867","text":"66201"},{"range":"73868","text":"66199"},{"range":"73869","text":"66201"},{"range":"73870","text":"66199"},{"range":"73871","text":"66201"},{"range":"73872","text":"66199"},{"range":"73873","text":"66201"},{"range":"73874","text":"66199"},{"range":"73875","text":"66201"},{"range":"73876","text":"66199"},{"range":"73877","text":"66201"},{"range":"73878","text":"66199"},{"range":"73879","text":"66201"},{"range":"73880","text":"66199"},{"range":"73881","text":"66201"},{"range":"73882","text":"66199"},{"range":"73883","text":"66201"},{"range":"73884","text":"66199"},{"range":"73885","text":"66201"},{"range":"73886","text":"66199"},{"range":"73887","text":"66201"},{"range":"73888","text":"66199"},{"range":"73889","text":"66201"},{"range":"73890","text":"66199"},{"range":"73891","text":"66201"},{"range":"73892","text":"66199"},{"range":"73893","text":"66201"},{"range":"73894","text":"66199"},{"range":"73895","text":"66201"},{"range":"73896","text":"66199"},{"range":"73897","text":"66201"},{"range":"73898","text":"66199"},{"range":"73899","text":"66201"},{"range":"73900","text":"66199"},{"range":"73901","text":"66201"},{"range":"73902","text":"66199"},{"range":"73903","text":"66201"},{"range":"73904","text":"66199"},{"range":"73905","text":"66201"},{"range":"73906","text":"66199"},{"range":"73907","text":"66201"},{"range":"73908","text":"66199"},{"range":"73909","text":"66201"},{"range":"73910","text":"66199"},{"range":"73911","text":"66201"},{"range":"73912","text":"66199"},{"range":"73913","text":"66201"},{"range":"73914","text":"66199"},{"range":"73915","text":"66201"},{"range":"73916","text":"66199"},{"range":"73917","text":"66201"},{"range":"73918","text":"66199"},{"range":"73919","text":"66201"},{"range":"73920","text":"66199"},{"range":"73921","text":"66201"},{"range":"73922","text":"66199"},{"range":"73923","text":"66201"},{"range":"73924","text":"66199"},{"range":"73925","text":"66201"},{"range":"73926","text":"66199"},{"range":"73927","text":"66201"},{"range":"73928","text":"66199"},{"range":"73929","text":"66201"},{"range":"73930","text":"66199"},{"range":"73931","text":"66201"},{"range":"73932","text":"66199"},{"range":"73933","text":"66201"},{"range":"73934","text":"66199"},{"range":"73935","text":"66201"},{"range":"73936","text":"66199"},{"range":"73937","text":"66201"},{"range":"73938","text":"66199"},{"range":"73939","text":"66201"},{"range":"73940","text":"66199"},{"range":"73941","text":"66201"},{"range":"73942","text":"66199"},{"range":"73943","text":"66201"},{"range":"73944","text":"66199"},{"range":"73945","text":"66201"},{"range":"73946","text":"66199"},{"range":"73947","text":"66201"},{"range":"73948","text":"66199"},{"range":"73949","text":"66201"},{"range":"73950","text":"66199"},{"range":"73951","text":"66201"},{"range":"73952","text":"66199"},{"range":"73953","text":"66201"},{"range":"73954","text":"66199"},{"range":"73955","text":"66201"},{"range":"73956","text":"66199"},{"range":"73957","text":"66201"},{"range":"73958","text":"66199"},{"range":"73959","text":"66201"},{"range":"73960","text":"66199"},{"range":"73961","text":"66201"},{"range":"73962","text":"66199"},{"range":"73963","text":"66201"},{"range":"73964","text":"66199"},{"range":"73965","text":"66201"},{"range":"73966","text":"66199"},{"range":"73967","text":"66201"},{"range":"73968","text":"66199"},{"range":"73969","text":"66201"},{"range":"73970","text":"66199"},{"range":"73971","text":"66201"},{"range":"73972","text":"66199"},{"range":"73973","text":"66201"},{"range":"73974","text":"66199"},{"range":"73975","text":"66201"},{"range":"73976","text":"66199"},{"range":"73977","text":"66201"},{"range":"73978","text":"66199"},{"range":"73979","text":"66201"},{"range":"73980","text":"66199"},{"range":"73981","text":"66201"},{"range":"73982","text":"66199"},{"range":"73983","text":"66201"},{"range":"73984","text":"66199"},{"range":"73985","text":"66201"},{"range":"73986","text":"66199"},{"range":"73987","text":"66201"},{"range":"73988","text":"66199"},{"range":"73989","text":"66201"},{"range":"73990","text":"66199"},{"range":"73991","text":"66201"},{"range":"73992","text":"66199"},{"range":"73993","text":"66201"},{"range":"73994","text":"66199"},{"range":"73995","text":"66201"},{"range":"73996","text":"66199"},{"range":"73997","text":"66201"},{"range":"73998","text":"66199"},{"range":"73999","text":"66201"},{"range":"74000","text":"66199"},{"range":"74001","text":"66201"},{"range":"74002","text":"66199"},{"range":"74003","text":"66201"},{"range":"74004","text":"66199"},{"range":"74005","text":"66201"},{"range":"74006","text":"66199"},{"range":"74007","text":"66201"},{"range":"74008","text":"66199"},{"range":"74009","text":"66201"},{"range":"74010","text":"66199"},{"range":"74011","text":"66201"},{"range":"74012","text":"66199"},{"range":"74013","text":"66201"},{"range":"74014","text":"66199"},{"range":"74015","text":"66201"},{"range":"74016","text":"66199"},{"range":"74017","text":"66201"},{"range":"74018","text":"66199"},{"range":"74019","text":"66201"},{"range":"74020","text":"66199"},{"range":"74021","text":"66201"},{"range":"74022","text":"66199"},{"range":"74023","text":"66201"},{"range":"74024","text":"66199"},{"range":"74025","text":"66201"},{"range":"74026","text":"66199"},{"range":"74027","text":"66201"},{"range":"74028","text":"66199"},{"range":"74029","text":"66201"},{"range":"74030","text":"66199"},{"range":"74031","text":"66201"},{"range":"74032","text":"66199"},{"range":"74033","text":"66201"},{"range":"74034","text":"66199"},{"range":"74035","text":"66201"},{"range":"74036","text":"66199"},{"range":"74037","text":"66201"},{"range":"74038","text":"66199"},{"range":"74039","text":"66201"},{"range":"74040","text":"66199"},{"range":"74041","text":"66201"},{"range":"74042","text":"66199"},{"range":"74043","text":"66201"},{"range":"74044","text":"66199"},{"range":"74045","text":"66201"},{"range":"74046","text":"66199"},{"range":"74047","text":"66201"},{"range":"74048","text":"66199"},{"range":"74049","text":"66201"},{"range":"74050","text":"66199"},{"range":"74051","text":"66201"},{"range":"74052","text":"66199"},{"range":"74053","text":"66201"},{"range":"74054","text":"66199"},{"range":"74055","text":"66201"},{"range":"74056","text":"66199"},{"range":"74057","text":"66201"},{"range":"74058","text":"66199"},{"range":"74059","text":"66201"},{"range":"74060","text":"66199"},{"range":"74061","text":"66201"},{"range":"74062","text":"66199"},{"range":"74063","text":"66201"},{"range":"74064","text":"66199"},{"range":"74065","text":"66201"},{"range":"74066","text":"66199"},{"range":"74067","text":"66201"},{"range":"74068","text":"66199"},{"range":"74069","text":"66201"},{"range":"74070","text":"66199"},{"range":"74071","text":"66201"},{"range":"74072","text":"66199"},{"range":"74073","text":"66201"},"test double for next/image","test harness: intentionally writes to outer capture object from inside component",{"range":"74074","text":"66199"},{"range":"74075","text":"66201"},{"range":"74076","text":"66199"},{"range":"74077","text":"66201"},{"range":"74078","text":"66199"},{"range":"74079","text":"66201"},{"range":"74080","text":"66199"},{"range":"74081","text":"66201"},{"range":"74082","text":"66199"},{"range":"74083","text":"66201"},{"range":"74084","text":"66199"},{"range":"74085","text":"66201"},{"range":"74086","text":"66199"},{"range":"74087","text":"66201"},{"range":"74088","text":"66199"},{"range":"74089","text":"66201"},{"range":"74090","text":"66199"},{"range":"74091","text":"66201"},{"range":"74092","text":"66199"},{"range":"74093","text":"66201"},{"range":"74094","text":"66199"},{"range":"74095","text":"66201"},{"range":"74096","text":"66199"},{"range":"74097","text":"66201"},{"range":"74098","text":"66199"},{"range":"74099","text":"66201"},{"range":"74100","text":"66199"},{"range":"74101","text":"66201"},{"range":"74102","text":"66199"},{"range":"74103","text":"66201"},{"range":"74104","text":"66199"},{"range":"74105","text":"66201"},{"range":"74106","text":"66199"},{"range":"74107","text":"66201"},{"range":"74108","text":"66199"},{"range":"74109","text":"66201"},{"range":"74110","text":"66199"},{"range":"74111","text":"66201"},{"range":"74112","text":"66199"},{"range":"74113","text":"66201"},{"range":"74114","text":"66199"},{"range":"74115","text":"66201"},{"range":"74116","text":"66199"},{"range":"74117","text":"66201"},{"range":"74118","text":"66199"},{"range":"74119","text":"66201"},{"range":"74120","text":"66199"},{"range":"74121","text":"66201"},{"range":"74122","text":"66199"},{"range":"74123","text":"66201"},{"range":"74124","text":"66199"},{"range":"74125","text":"66201"},{"range":"74126","text":"66199"},{"range":"74127","text":"66201"},{"range":"74128","text":"66199"},{"range":"74129","text":"66201"},{"range":"74130","text":"66199"},{"range":"74131","text":"66201"},{"range":"74132","text":"66199"},{"range":"74133","text":"66201"},{"range":"74134","text":"66199"},{"range":"74135","text":"66201"},{"range":"74136","text":"66199"},{"range":"74137","text":"66201"},{"range":"74138","text":"66199"},{"range":"74139","text":"66201"},{"range":"74140","text":"66199"},{"range":"74141","text":"66201"},{"range":"74142","text":"66199"},{"range":"74143","text":"66201"},{"range":"74144","text":"66199"},{"range":"74145","text":"66201"},{"range":"74146","text":"66199"},{"range":"74147","text":"66201"},{"range":"74148","text":"66199"},{"range":"74149","text":"66201"},{"range":"74150","text":"66199"},{"range":"74151","text":"66201"},{"range":"74152","text":"66199"},{"range":"74153","text":"66201"},{"range":"74154","text":"66199"},{"range":"74155","text":"66201"},{"range":"74156","text":"66199"},{"range":"74157","text":"66201"},{"range":"74158","text":"66199"},{"range":"74159","text":"66201"},{"range":"74160","text":"66199"},{"range":"74161","text":"66201"},{"range":"74162","text":"66199"},{"range":"74163","text":"66201"},{"range":"74164","text":"66199"},{"range":"74165","text":"66201"},{"range":"74166","text":"66199"},{"range":"74167","text":"66201"},{"range":"74168","text":"66199"},{"range":"74169","text":"66201"},{"range":"74170","text":"66199"},{"range":"74171","text":"66201"},{"range":"74172","text":"66199"},{"range":"74173","text":"66201"},{"range":"74174","text":"66199"},{"range":"74175","text":"66201"},{"range":"74176","text":"66199"},{"range":"74177","text":"66201"},{"range":"74178","text":"66199"},{"range":"74179","text":"66201"},{"range":"74180","text":"66199"},{"range":"74181","text":"66201"},{"range":"74182","text":"66199"},{"range":"74183","text":"66201"},{"range":"74184","text":"66199"},{"range":"74185","text":"66201"},{"range":"74186","text":"66199"},{"range":"74187","text":"66201"},{"range":"74188","text":"66199"},{"range":"74189","text":"66201"},{"range":"74190","text":"66199"},{"range":"74191","text":"66201"},{"range":"74192","text":"66199"},{"range":"74193","text":"66201"},{"range":"74194","text":"66199"},{"range":"74195","text":"66201"},{"range":"74196","text":"66199"},{"range":"74197","text":"66201"},{"range":"74198","text":"66199"},{"range":"74199","text":"66201"},{"range":"74200","text":"66199"},{"range":"74201","text":"66201"},{"range":"74202","text":"66199"},{"range":"74203","text":"66201"},{"range":"74204","text":"66199"},{"range":"74205","text":"66201"},{"range":"74206","text":"66199"},{"range":"74207","text":"66201"},{"range":"74208","text":"66199"},{"range":"74209","text":"66201"},{"range":"74210","text":"66199"},{"range":"74211","text":"66201"},{"range":"74212","text":"66199"},{"range":"74213","text":"66201"},{"range":"74214","text":"66199"},{"range":"74215","text":"66201"},{"range":"74216","text":"66199"},{"range":"74217","text":"66201"},{"range":"74218","text":"66199"},{"range":"74219","text":"66201"},{"range":"74220","text":"66199"},{"range":"74221","text":"66201"},{"range":"74222","text":"66199"},{"range":"74223","text":"66201"},{"range":"74224","text":"66199"},{"range":"74225","text":"66201"},{"range":"74226","text":"66199"},{"range":"74227","text":"66201"},{"range":"74228","text":"66199"},{"range":"74229","text":"66201"},{"range":"74230","text":"66199"},{"range":"74231","text":"66201"},{"range":"74232","text":"66199"},{"range":"74233","text":"66201"},{"range":"74234","text":"66199"},{"range":"74235","text":"66201"},{"range":"74236","text":"66199"},{"range":"74237","text":"66201"},{"range":"74238","text":"66199"},{"range":"74239","text":"66201"},{"range":"74240","text":"66199"},{"range":"74241","text":"66201"},{"range":"74242","text":"66199"},{"range":"74243","text":"66201"},{"range":"74244","text":"66199"},{"range":"74245","text":"66201"},{"range":"74246","text":"66199"},{"range":"74247","text":"66201"},{"range":"74248","text":"66199"},{"range":"74249","text":"66201"},{"range":"74250","text":"66199"},{"range":"74251","text":"66201"},{"range":"74252","text":"66199"},{"range":"74253","text":"66201"},{"range":"74254","text":"66199"},{"range":"74255","text":"66201"},{"range":"74256","text":"66199"},{"range":"74257","text":"66201"},{"range":"74258","text":"66199"},{"range":"74259","text":"66201"},{"range":"74260","text":"66199"},{"range":"74261","text":"66201"},{"range":"74262","text":"66199"},{"range":"74263","text":"66201"},{"range":"74264","text":"66199"},{"range":"74265","text":"66201"},{"range":"74266","text":"66199"},{"range":"74267","text":"66201"},{"range":"74268","text":"66199"},{"range":"74269","text":"66201"},{"range":"74270","text":"66199"},{"range":"74271","text":"66201"},{"range":"74272","text":"66199"},{"range":"74273","text":"66201"},{"range":"74274","text":"66199"},{"range":"74275","text":"66201"},{"range":"74276","text":"66199"},{"range":"74277","text":"66201"},{"range":"74278","text":"66199"},{"range":"74279","text":"66201"},{"range":"74280","text":"66199"},{"range":"74281","text":"66201"},{"range":"74282","text":"66199"},{"range":"74283","text":"66201"},{"range":"74284","text":"66199"},{"range":"74285","text":"66201"},{"range":"74286","text":"66199"},{"range":"74287","text":"66201"},{"range":"74288","text":"66199"},{"range":"74289","text":"66201"},{"range":"74290","text":"66199"},{"range":"74291","text":"66201"},{"range":"74292","text":"66199"},{"range":"74293","text":"66201"},{"range":"74294","text":"66199"},{"range":"74295","text":"66201"},{"range":"74296","text":"66199"},{"range":"74297","text":"66201"},{"range":"74298","text":"66199"},{"range":"74299","text":"66201"},{"range":"74300","text":"66199"},{"range":"74301","text":"66201"},{"range":"74302","text":"66199"},{"range":"74303","text":"66201"},{"range":"74304","text":"66199"},{"range":"74305","text":"66201"},{"range":"74306","text":"66199"},{"range":"74307","text":"66201"},{"range":"74308","text":"66199"},{"range":"74309","text":"66201"},{"range":"74310","text":"66199"},{"range":"74311","text":"66201"},{"range":"74312","text":"66199"},{"range":"74313","text":"66201"},{"range":"74314","text":"66199"},{"range":"74315","text":"66201"},{"range":"74316","text":"66199"},{"range":"74317","text":"66201"},{"range":"74318","text":"66199"},{"range":"74319","text":"66201"},{"range":"74320","text":"66199"},{"range":"74321","text":"66201"},{"range":"74322","text":"66199"},{"range":"74323","text":"66201"},{"range":"74324","text":"66199"},{"range":"74325","text":"66201"},{"range":"74326","text":"66199"},{"range":"74327","text":"66201"},{"range":"74328","text":"66199"},{"range":"74329","text":"66201"},{"range":"74330","text":"66199"},{"range":"74331","text":"66201"},{"range":"74332","text":"66199"},{"range":"74333","text":"66201"},{"range":"74334","text":"66199"},{"range":"74335","text":"66201"},{"range":"74336","text":"66199"},{"range":"74337","text":"66201"},{"range":"74338","text":"66199"},{"range":"74339","text":"66201"},{"range":"74340","text":"66199"},{"range":"74341","text":"66201"},{"range":"74342","text":"66199"},{"range":"74343","text":"66201"},{"range":"74344","text":"66199"},{"range":"74345","text":"66201"},{"range":"74346","text":"66199"},{"range":"74347","text":"66201"},{"range":"74348","text":"66199"},{"range":"74349","text":"66201"},{"range":"74350","text":"66199"},{"range":"74351","text":"66201"},{"range":"74352","text":"66199"},{"range":"74353","text":"66201"},{"range":"74354","text":"66199"},{"range":"74355","text":"66201"},{"range":"74356","text":"66199"},{"range":"74357","text":"66201"},{"range":"74358","text":"66199"},{"range":"74359","text":"66201"},{"range":"74360","text":"66199"},{"range":"74361","text":"66201"},{"range":"74362","text":"66199"},{"range":"74363","text":"66201"},{"range":"74364","text":"66199"},{"range":"74365","text":"66201"},{"range":"74366","text":"66199"},{"range":"74367","text":"66201"},{"range":"74368","text":"66199"},{"range":"74369","text":"66201"},{"range":"74370","text":"66199"},{"range":"74371","text":"66201"},{"range":"74372","text":"66199"},{"range":"74373","text":"66201"},{"range":"74374","text":"66199"},{"range":"74375","text":"66201"},{"range":"74376","text":"66199"},{"range":"74377","text":"66201"},{"range":"74378","text":"66199"},{"range":"74379","text":"66201"},{"range":"74380","text":"66199"},{"range":"74381","text":"66201"},{"range":"74382","text":"66199"},{"range":"74383","text":"66201"},{"range":"74384","text":"66199"},{"range":"74385","text":"66201"},{"range":"74386","text":"66199"},{"range":"74387","text":"66201"},{"range":"74388","text":"66199"},{"range":"74389","text":"66201"},{"range":"74390","text":"66199"},{"range":"74391","text":"66201"},{"range":"74392","text":"66199"},{"range":"74393","text":"66201"},{"range":"74394","text":"66199"},{"range":"74395","text":"66201"},{"range":"74396","text":"66199"},{"range":"74397","text":"66201"},{"range":"74398","text":"66199"},{"range":"74399","text":"66201"},{"range":"74400","text":"66199"},{"range":"74401","text":"66201"},{"range":"74402","text":"66199"},{"range":"74403","text":"66201"},{"range":"74404","text":"66199"},{"range":"74405","text":"66201"},{"range":"74406","text":"66199"},{"range":"74407","text":"66201"},{"range":"74408","text":"66199"},{"range":"74409","text":"66201"},{"range":"74410","text":"66199"},{"range":"74411","text":"66201"},{"range":"74412","text":"66199"},{"range":"74413","text":"66201"},{"range":"74414","text":"66199"},{"range":"74415","text":"66201"},{"range":"74416","text":"66199"},{"range":"74417","text":"66201"},{"range":"74418","text":"66199"},{"range":"74419","text":"66201"},{"range":"74420","text":"66199"},{"range":"74421","text":"66201"},{"range":"74422","text":"66199"},{"range":"74423","text":"66201"},{"range":"74424","text":"66199"},{"range":"74425","text":"66201"},{"range":"74426","text":"66199"},{"range":"74427","text":"66201"},{"range":"74428","text":"66199"},{"range":"74429","text":"66201"},{"range":"74430","text":"66199"},{"range":"74431","text":"66201"},{"range":"74432","text":"66199"},{"range":"74433","text":"66201"},{"range":"74434","text":"66199"},{"range":"74435","text":"66201"},{"range":"74436","text":"66199"},{"range":"74437","text":"66201"},{"range":"74438","text":"66199"},{"range":"74439","text":"66201"},{"range":"74440","text":"66199"},{"range":"74441","text":"66201"},{"range":"74442","text":"66199"},{"range":"74443","text":"66201"},[11168,11171],"unknown",[11168,11171],"never",[15827,15830],[15827,15830],[8312,8315],[8312,8315],[8579,8582],[8579,8582],[9861,9864],[9861,9864],[9903,9906],[9903,9906],[9945,9948],[9945,9948],[11960,11963],[11960,11963],[13851,13854],[13851,13854],[14088,14091],[14088,14091],[16732,16735],[16732,16735],[17258,17261],[17258,17261],[17286,17289],[17286,17289],[17334,17337],[17334,17337],[16572,16575],[16572,16575],[17712,17715],[17712,17715],[1556,1559],[1556,1559],[1740,1743],[1740,1743],[4332,4335],[4332,4335],[4355,4358],[4355,4358],[5338,5341],[5338,5341],[5373,5376],[5373,5376],[5379,5382],[5379,5382],[10210,10213],[10210,10213],[11053,11056],[11053,11056],[11059,11062],[11059,11062],[11391,11394],[11391,11394],[12224,12227],[12224,12227],[13059,13062],[13059,13062],[13065,13068],[13065,13068],[12191,12194],[12191,12194],[12259,12262],[12259,12262],[692,695],[692,695],[1106,1109],[1106,1109],[1142,1145],[1142,1145],[1148,1151],[1148,1151],[2980,2983],[2980,2983],[3818,3821],[3818,3821],[3860,3863],[3860,3863],[1405,1408],[1405,1408],[1821,1824],[1821,1824],[1858,1861],[1858,1861],[1864,1867],[1864,1867],[8797,8800],[8797,8800],[8838,8841],[8838,8841],[8871,8874],[8871,8874],[8913,8916],[8913,8916],[8947,8950],[8947,8950],[8991,8994],[8991,8994],[9100,9103],[9100,9103],[9549,9552],[9549,9552],[9587,9590],[9587,9590],[9735,9738],[9735,9738],[15460,15463],[15460,15463],[5602,5605],[5602,5605],[5830,5833],[5830,5833],[7462,7465],[7462,7465],[3417,3420],[3417,3420],[2894,2897],[2894,2897],[2970,2973],[2970,2973],[2991,2994],[2991,2994],[5127,5130],[5127,5130],[5448,5451],[5448,5451],[5907,5910],[5907,5910],[6394,6397],[6394,6397],[19508,19511],[19508,19511],[19794,19797],[19794,19797],[20136,20139],[20136,20139],[20422,20425],[20422,20425],[20971,20974],[20971,20974],[21257,21260],[21257,21260],[21689,21692],[21689,21692],[21932,21935],[21932,21935],[22672,22675],[22672,22675],[22919,22922],[22919,22922],[23408,23411],[23408,23411],[23745,23748],[23745,23748],[24562,24565],[24562,24565],[25014,25017],[25014,25017],[26125,26128],[26125,26128],[26373,26376],[26373,26376],[26951,26954],[26951,26954],[27200,27203],[27200,27203],[31018,31021],[31018,31021],[31061,31064],[31061,31064],[32176,32179],[32176,32179],[33799,33802],[33799,33802],[34703,34706],[34703,34706],[41248,41251],[41248,41251],[41289,41292],[41289,41292],[42348,42351],[42348,42351],[45223,45226],[45223,45226],[6286,6289],[6286,6289],[271,274],[271,274],[3523,3526],[3523,3526],[3558,3561],[3558,3561],[3811,3814],[3811,3814],[4135,4138],[4135,4138],[2649,2652],[2649,2652],[661,664],[661,664],[1272,1275],[1272,1275],[1362,1365],[1362,1365],[36922,36925],[36922,36925],[37907,37910],[37907,37910],[41746,41749],[41746,41749],[739,742],[739,742],[1301,1304],[1301,1304],[1571,1574],[1571,1574],[5836,5839],[5836,5839],[5842,5845],[5842,5845],[9524,9527],[9524,9527],[14966,14969],[14966,14969],[20174,20177],[20174,20177],[20205,20208],[20205,20208],[20754,20757],[20754,20757],[21962,21965],[21962,21965],[21988,21991],[21988,21991],[24705,24708],[24705,24708],[25581,25584],[25581,25584],[25595,25598],[25595,25598],[26147,26150],[26147,26150],[26163,26166],[26163,26166],[26189,26192],[26189,26192],[26993,26996],[26993,26996],[27104,27107],[27104,27107],[521,524],[521,524],[4328,4331],[4328,4331],[4383,4386],[4383,4386],[562,565],[562,565],[2483,2486],[2483,2486],[3290,3293],[3290,3293],[4203,4206],[4203,4206],[6389,6392],[6389,6392],[6782,6785],[6782,6785],[9842,9845],[9842,9845],[9892,9895],[9892,9895],[10575,10578],[10575,10578],[12046,12049],[12046,12049],[12111,12114],[12111,12114],[13865,13868],[13865,13868],[14140,14143],[14140,14143],[16013,16016],[16013,16016],[17495,17498],[17495,17498],[19264,19267],[19264,19267],[20659,20662],[20659,20662],[22355,22358],[22355,22358],[22561,22564],[22561,22564],[25537,25540],[25537,25540],[25603,25606],[25603,25606],[26438,26441],[26438,26441],[3953,3956],[3953,3956],[1806,1809],[1806,1809],[2467,2470],[2467,2470],[2932,2935],[2932,2935],[3453,3456],[3453,3456],[291,294],[291,294],[880,883],[880,883],[2237,2240],[2237,2240],[3277,3280],[3277,3280],[5531,5534],[5531,5534],[8772,8775],[8772,8775],[9082,9085],[9082,9085],[9361,9364],[9361,9364],[11247,11250],[11247,11250],[1166,1169],[1166,1169],[4933,4936],[4933,4936],[6644,6647],[6644,6647],[267,270],[267,270],[307,310],[307,310],[748,751],[748,751],[910,913],[910,913],[1067,1070],[1067,1070],[6864,6917],"[versionInfo, platform]",[9568,9570],"[fetchData]",[1478,1495],"[jsonl, endpoint, onResult, t]",[18999,19001],"[LOCAL_PROVIDERS]",[2737,2757],"[isExpanded, loadSavedMappings, status]",[9467,9488],"[plans, primaryConnectionId, selectedConn]",[11296,11328],"[open, editPool, initialGroupId, editPoolExclusive, plans]",[11843,11867],"[open, editPool, groups, groupId]",[2169,2203],"[pools]",[5628,5664],"[availableModels, configState, configState.model, setConfigState]",[6234,6293],"[configState, reasoningSpec, reasoningSpec.show, setConfigState]",[11205,11380],"useCallback(() => {\n setResponseBody(\"\");\n setResponseStatus(null);\n setResponseDuration(null);\n setAudioUrl(null);\n setImageData(null);\n setTranscriptionText(null);\n })",[5807,5823],"[getUpstreamHeadersRecord, open, protocol]",[2225,2239],"[searchParams, setProviderDisplayMode]",[2696,2710],"[searchParams, setActiveCategory, setActiveServiceKind, setModelSearchQuery, setSearchQuery, setShowFreeOnly]",[1844,1846],"[L]",[2842,2844],"[customThemeColor]",[1297,1299],"[notify, t]",[3254,3267],"[load, providerKey]",[2042,2044],"[t]",[4278,4280],"[forceOpen, onOpenChange]",[1808,1810],"[defaultOpen, forceOpen, onOpenChange]",[18938,18940],"[onFirstOpen]",[13638,13640],[10875,10916],"[providers, activeSet, lastSet, errorSet]",[9256,9344],"[apiKey, effectiveWsUrl, channels, autoReconnect, connection.reconnectAttempt]",[1639,1647],"[isOpen, t]",[1742,1744],"[router]",[8959,8984],"[isOpen, activeProviders, fetchProviderModels]",[10822,10846],"[isOpen, level, levelId, resetFields, t]",[5651,5653],"[columnSortMap]",[5969,5977],"[columnSortMap, sortBy]",[19931,22976],"useCallback(async (logEntry) => {\n // Guard: if no valid id provided, close instead of opening an empty modal\n if (!logEntry?.id) {\n try {\n closeDetail();\n } catch {}\n return;\n }\n\n const requestToken = `${logEntry.id}:${Date.now()}:${Math.random()}`;\n detailRequestRef.current = requestToken;\n const isCurrentDetailRequest = () => detailRequestRef.current === requestToken;\n\n setSelectedLog(logEntry);\n try {\n const url = new URL(globalThis.location.href);\n url.searchParams.set(\"id\", logEntry.id);\n router.replace(url.pathname + url.search);\n } catch (e) {\n // ignore navigation errors\n }\n setDetailLoading(true);\n setDetailData(null);\n try {\n const res = await fetch(`/api/logs/${logEntry.id}`, { cache: \"no-store\" });\n if (res.ok) {\n const data = await res.json();\n if (!isCurrentDetailRequest()) return;\n const dataHasPipeline =\n data?.pipelinePayloads && Object.keys(data.pipelinePayloads || {}).length > 0;\n setDetailData((prev: { pipelinePayloads: any }) => ({\n ...prev,\n ...data,\n pipelinePayloads: dataHasPipeline ? data.pipelinePayloads : prev?.pipelinePayloads,\n }));\n // ensure the modal summary reflects the fetched call log summary\n if (data && typeof data === \"object\") {\n setSelectedLog((prev: any) => ({\n ...prev,\n ...data,\n active: data.active === true,\n }));\n }\n } else {\n // A deep-linked id can legitimately 404 while the request is still\n // finalizing. Keep the modal open and poll /api/logs/[id] instead of\n // falling back to an in-memory active-request endpoint.\n if (!isCurrentDetailRequest()) return;\n if (res.status === 404) {\n if (logEntry.pendingLookup || logEntry.active) {\n setSelectedLog((prev: { method: any; path: any }) => ({\n ...prev,\n id: logEntry.id,\n status: 0,\n method: prev?.method,\n path: prev?.path || \"\",\n }));\n setDetailData({ detailState: \"pending\" });\n return;\n }\n try {\n console.warn(\"Log not found:\", logEntry.id);\n } catch {}\n try {\n closeDetail();\n } catch {}\n return;\n }\n // other errors: show a minimal error indicator by setting detailData to an error object\n try {\n const body = await res.text().catch(() => null);\n if (!isCurrentDetailRequest()) return;\n setDetailData({ error: `Failed to fetch log (status ${res.status})`, body });\n } catch {}\n }\n } catch (error) {\n console.error(\"Failed to fetch log detail:\", error);\n } finally {\n if (isCurrentDetailRequest()) setDetailLoading(false);\n }\n })",[24185,24204],"[initialSelectedId, openDetail]",[27895,27930],"[closeDetail, currentLogIndex, openDetail, sortedLogsForNav]",[28368,28403],[11493,11556],"[activeHref, collapsed, pinnedSections, sidebarExpansionLoaded, visibleSections]",[301,304],[301,304],[556,559],[556,559],[939,942],[939,942],[1471,1474],[1471,1474],[1688,1691],[1688,1691],[1925,1928],[1925,1928],[2660,2663],[2660,2663],[3610,3613],[3610,3613],[3948,3951],[3948,3951],[4122,4125],[4122,4125],[4371,4374],[4371,4374],[4737,4740],[4737,4740],[4919,4922],[4919,4922],[5431,5434],[5431,5434],[6090,6093],[6090,6093],[6562,6565],[6562,6565],[7540,7543],[7540,7543],[7643,7646],[7643,7646],[8061,8064],[8061,8064],[11513,11516],[11513,11516],[2278,2281],[2278,2281],[4810,4813],[4810,4813],[2089,2092],[2089,2092],[4406,4409],[4406,4409],[4531,4534],[4531,4534],[4869,4872],[4869,4872],[7077,7080],[7077,7080],[7193,7196],[7193,7196],[1278,1281],[1278,1281],[5583,5586],[5583,5586],[2208,2211],[2208,2211],[2745,2748],[2745,2748],[2756,2759],[2756,2759],[2600,2603],[2600,2603],[2663,2666],[2663,2666],[3474,3477],[3474,3477],[3537,3540],[3537,3540],[4192,4195],[4192,4195],[5502,5505],[5502,5505],[6281,6284],[6281,6284],[6334,6337],[6334,6337],[7219,7222],[7219,7222],[7815,7818],[7815,7818],[8570,8573],[8570,8573],[9601,9604],[9601,9604],[10996,10999],[10996,10999],[11893,11896],[11893,11896],[13403,13406],[13403,13406],[13470,13473],[13470,13473],[13535,13538],[13535,13538],[15059,15062],[15059,15062],[15128,15131],[15128,15131],[15195,15198],[15195,15198],[16346,16349],[16346,16349],[17990,17993],[17990,17993],[18063,18066],[18063,18066],[2914,2917],[2914,2917],[4823,4826],[4823,4826],[4886,4889],[4886,4889],[4939,4942],[4939,4942],[4996,4999],[4996,4999],[5055,5058],[5055,5058],[5126,5129],[5126,5129],[5189,5192],[5189,5192],[5248,5251],[5248,5251],[5313,5316],[5313,5316],[5380,5383],[5380,5383],[5443,5446],[5443,5446],[7739,7742],[7739,7742],[8468,8471],[8468,8471],[8529,8532],[8529,8532],[8586,8589],[8586,8589],[8649,8652],[8649,8652],[8714,8717],[8714,8717],[11004,11007],[11004,11007],[11234,11237],[11234,11237],[13170,13173],[13170,13173],[13241,13244],[13241,13244],[13312,13315],[13312,13315],[13383,13386],[13383,13386],[13446,13449],[13446,13449],[13521,13524],[13521,13524],[13598,13601],[13598,13601],[13663,13666],[13663,13666],[15187,15190],[15187,15190],[15934,15937],[15934,15937],[16187,16190],[16187,16190],[16433,16436],[16433,16436],[16514,16517],[16514,16517],[16629,16632],[16629,16632],[18598,18601],[18598,18601],[18677,18680],[18677,18680],[18742,18745],[18742,18745],[18805,18808],[18805,18808],[19592,19595],[19592,19595],[2416,2419],[2416,2419],[14630,14633],[14630,14633],[15747,15750],[15747,15750],[17745,17748],[17745,17748],[29092,29095],[29092,29095],[30319,30322],[30319,30322],[31706,31709],[31706,31709],[33409,33412],[33409,33412],[33695,33698],[33695,33698],[34426,34429],[34426,34429],[35121,35124],[35121,35124],[37157,37160],[37157,37160],[38552,38555],[38552,38555],[39372,39375],[39372,39375],[40352,40355],[40352,40355],[42189,42192],[42189,42192],[43420,43423],[43420,43423],[45246,45249],[45246,45249],[46891,46894],[46891,46894],[48477,48480],[48477,48480],[2974,2977],[2974,2977],[9773,9776],[9773,9776],[12223,12226],[12223,12226],[13855,13858],[13855,13858],[15031,15034],[15031,15034],[16223,16226],[16223,16226],[21703,21706],[21703,21706],[32492,32495],[32492,32495],[34561,34564],[34561,34564],[2502,2505],[2502,2505],[2521,2524],[2521,2524],[2538,2541],[2538,2541],[2630,2633],[2630,2633],[4815,4818],[4815,4818],[6315,6318],[6315,6318],[8979,8982],[8979,8982],[9403,9406],[9403,9406],[10356,10359],[10356,10359],[10415,10418],[10415,10418],[4253,4256],[4253,4256],[4282,4285],[4282,4285],[4322,4325],[4322,4325],[4592,4595],[4592,4595],[4981,4984],[4981,4984],[5814,5817],[5814,5817],[5866,5869],[5866,5869],[5955,5958],[5955,5958],[6002,6005],[6002,6005],[6094,6097],[6094,6097],[7181,7184],[7181,7184],[7208,7211],[7208,7211],[7246,7249],[7246,7249],[7583,7586],[7583,7586],[8743,8746],[8743,8746],[8809,8812],[8809,8812],[11083,11086],[11083,11086],[11110,11113],[11110,11113],[11148,11151],[11148,11151],[12828,12831],[12828,12831],[13566,13569],[13566,13569],[13632,13635],[13632,13635],[2802,2805],[2802,2805],[2831,2834],[2831,2834],[2871,2874],[2871,2874],[3141,3144],[3141,3144],[3518,3521],[3518,3521],[4535,4538],[4535,4538],[5187,5190],[5187,5190],[5239,5242],[5239,5242],[5328,5331],[5328,5331],[5375,5378],[5375,5378],[5467,5470],[5467,5470],[8772,8775],[8772,8775],[8959,8962],[8959,8962],[8997,9000],[8997,9000],[9151,9154],[9151,9154],[9180,9183],[9180,9183],[9220,9223],[9220,9223],[9474,9477],[9474,9477],[9679,9682],[9679,9682],[9747,9750],[9747,9750],[13510,13513],[13510,13513],[15083,15086],[15083,15086],[15359,15362],[15359,15362],[15691,15694],[15691,15694],[15720,15723],[15720,15723],[15760,15763],[15760,15763],[16216,16219],[16216,16219],[16608,16611],[16608,16611],[18354,18357],[18354,18357],[5141,5144],[5141,5144],[5263,5266],[5263,5266],[5352,5355],[5352,5355],[5399,5402],[5399,5402],[4089,4092],[4089,4092],[4100,4103],[4100,4103],[470,473],[470,473],[1829,1832],[1829,1832],[3032,3035],[3032,3035],[4308,4311],[4308,4311],[5565,5568],[5565,5568],[6578,6581],[6578,6581],[7701,7704],[7701,7704],[8947,8950],[8947,8950],[10346,10349],[10346,10349],[11083,11086],[11083,11086],[11659,11662],[11659,11662],[13149,13152],[13149,13152],[14168,14171],[14168,14171],[15220,15223],[15220,15223],[16416,16419],[16416,16419],[17546,17549],[17546,17549],[18678,18681],[18678,18681],[19813,19816],[19813,19816],[19824,19827],[19824,19827],[1611,1614],[1611,1614],[5653,5656],[5653,5656],[7519,7522],[7519,7522],[9633,9636],[9633,9636],[10695,10698],[10695,10698],[11248,11251],[11248,11251],[12452,12455],[12452,12455],[2684,2687],[2684,2687],[2885,2888],[2885,2888],[1316,1319],[1316,1319],[4128,4131],[4128,4131],[5740,5743],[5740,5743],[6391,6394],[6391,6394],[1425,1428],[1425,1428],[1786,1789],[1786,1789],[1713,1716],[1713,1716],[1763,1766],[1763,1766],[3848,3851],[3848,3851],[3988,3991],[3988,3991],[4027,4030],[4027,4030],[4195,4198],[4195,4198],[4218,4221],[4218,4221],[4723,4726],[4723,4726],[4967,4970],[4967,4970],[5006,5009],[5006,5009],[5244,5247],[5244,5247],[5267,5270],[5267,5270],[5323,5326],[5323,5326],[5346,5349],[5346,5349],[5763,5766],[5763,5766],[1089,1092],[1089,1092],[1105,1108],[1105,1108],[1123,1126],[1123,1126],[1139,1142],[1139,1142],[7083,7086],[7083,7086],[8008,8011],[8008,8011],[10280,10283],[10280,10283],[16930,16933],[16930,16933],[17533,17536],[17533,17536],[18355,18358],[18355,18358],[18726,18729],[18726,18729],[21273,21276],[21273,21276],[9301,9304],[9301,9304],[2185,2188],[2185,2188],[2293,2296],[2293,2296],[3085,3088],[3085,3088],[3096,3099],[3096,3099],[4193,4196],[4193,4196],[5104,5107],[5104,5107],[5464,5467],[5464,5467],[5476,5479],[5476,5479],[6302,6305],[6302,6305],[2551,2554],[2551,2554],[3032,3035],[3032,3035],[3375,3378],[3375,3378],[4593,4596],[4593,4596],[5334,5337],[5334,5337],[5910,5913],[5910,5913],[6637,6640],[6637,6640],[7120,7123],[7120,7123],[8359,8362],[8359,8362],[3486,3489],[3486,3489],[4571,4574],[4571,4574],[5064,5067],[5064,5067],[6175,6178],[6175,6178],[6724,6727],[6724,6727],[6875,6878],[6875,6878],[7508,7511],[7508,7511],[8553,8556],[8553,8556],[9273,9276],[9273,9276],[9667,9670],[9667,9670],[10145,10148],[10145,10148],[10794,10797],[10794,10797],[11165,11168],[11165,11168],[11660,11663],[11660,11663],[12069,12072],[12069,12072],[12876,12879],[12876,12879],[13223,13226],[13223,13226],[13637,13640],[13637,13640],[14206,14209],[14206,14209],[8530,8533],[8530,8533],[12423,12426],[12423,12426],[12670,12673],[12670,12673],[1946,1949],[1946,1949],[4400,4403],[4400,4403],[5433,5436],[5433,5436],[7540,7543],[7540,7543],[9980,9983],[9980,9983],[10029,10032],[10029,10032],[10089,10092],[10089,10092],[10118,10121],[10118,10121],[10216,10219],[10216,10219],[11030,11033],[11030,11033],[11059,11062],[11059,11062],[17769,17772],[17769,17772],[24546,24549],[24546,24549],[26807,26810],[26807,26810],[1478,1481],[1478,1481],[1541,1544],[1541,1544],[1771,1774],[1771,1774],[1861,1864],[1861,1864],[2284,2287],[2284,2287],[3030,3033],[3030,3033],[3783,3786],[3783,3786],[4697,4700],[4697,4700],[5408,5411],[5408,5411],[6332,6335],[6332,6335],[844,847],[844,847],[2240,2243],[2240,2243],[1079,1082],[1079,1082],[1858,1861],[1858,1861],[2502,2505],[2502,2505],[2782,2785],[2782,2785],[3449,3452],[3449,3452],[3853,3856],[3853,3856],[5629,5632],[5629,5632],[6413,6416],[6413,6416],[7301,7304],[7301,7304],[7771,7774],[7771,7774],[1386,1389],[1386,1389],[3959,3962],[3959,3962],[4081,4084],[4081,4084],[2506,2509],[2506,2509],[1253,1256],[1253,1256],[2311,2314],[2311,2314],[3121,3124],[3121,3124],[5446,5449],[5446,5449],[6857,6860],[6857,6860],[7076,7079],[7076,7079],[7200,7203],[7200,7203],[7259,7262],[7259,7262],[7296,7299],[7296,7299],[7353,7356],[7353,7356],[7402,7405],[7402,7405],[7436,7439],[7436,7439],[7485,7488],[7485,7488],[7834,7837],[7834,7837],[3721,3724],[3721,3724],[10416,10419],[10416,10419],[1611,1614],[1611,1614],[1832,1835],[1832,1835],[2520,2523],[2520,2523],[2696,2699],[2696,2699],[1035,1038],[1035,1038],[1046,1049],[1046,1049],[2654,2657],[2654,2657],[3629,3632],[3629,3632],[4241,4244],[4241,4244],[2552,2555],[2552,2555],[3560,3563],[3560,3563],[4075,4078],[4075,4078],[4802,4805],[4802,4805],[628,631],[628,631],[8900,8903],[8900,8903],[9207,9210],[9207,9210],[4707,4710],[4707,4710],[1657,1660],[1657,1660],[2206,2209],[2206,2209],[3056,3059],[3056,3059],[3642,3645],[3642,3645],[4192,4195],[4192,4195],[4761,4764],[4761,4764],[5223,5226],[5223,5226],[5684,5687],[5684,5687],[1271,1274],[1271,1274],[465,468],[465,468],[801,804],[801,804],[3782,3785],[3782,3785],[9903,9906],[9903,9906],[10335,10338],[10335,10338],[12736,12739],[12736,12739],[16520,16523],[16520,16523],[18912,18915],[18912,18915],[19530,19533],[19530,19533],[712,715],[712,715],[1115,1118],[1115,1118],[4462,4465],[4462,4465],[7912,7915],[7912,7915],[8399,8402],[8399,8402],[12299,12302],[12299,12302],[18828,18831],[18828,18831],[19681,19684],[19681,19684],[20400,20403],[20400,20403],[580,583],[580,583],[979,982],[979,982],[1462,1465],[1462,1465],[1979,1982],[1979,1982],[5928,5931],[5928,5931],[6751,6754],[6751,6754],[3736,3739],[3736,3739],[3849,3852],[3849,3852],[5909,5912],[5909,5912],[6022,6025],[6022,6025],[7846,7849],[7846,7849],[8023,8026],[8023,8026],[8245,8248],[8245,8248],[14313,14316],[14313,14316],[14423,14426],[14423,14426],[1617,1620],[1617,1620],[1715,1718],[1715,1718],[2415,2418],[2415,2418],[2685,2688],[2685,2688],[3885,3888],[3885,3888],[1439,1442],[1439,1442],[1588,1591],[1588,1591],[2818,2821],[2818,2821],[2958,2961],[2958,2961],[3520,3523],[3520,3523],[3664,3667],[3664,3667],[4324,4327],[4324,4327],[4473,4476],[4473,4476],[5551,5554],[5551,5554],[5686,5689],[5686,5689],[6074,6077],[6074,6077],[3505,3508],[3505,3508],[1836,1839],[1836,1839],[2123,2126],[2123,2126],[2404,2407],[2404,2407],[2650,2653],[2650,2653],[2949,2952],[2949,2952],[3164,3167],[3164,3167],[3463,3466],[3463,3466],[3741,3744],[3741,3744],[3878,3881],[3878,3881],[4035,4038],[4035,4038],[4387,4390],[4387,4390],[2994,2997],[2994,2997],[3231,3234],[3231,3234],[3680,3683],[3680,3683],[3820,3823],[3820,3823],[4391,4394],[4391,4394],[4535,4538],[4535,4538],[5095,5098],[5095,5098],[5229,5232],[5229,5232],[5835,5838],[5835,5838],[5966,5969],[5966,5969],[6045,6048],[6045,6048],[6701,6704],[6701,6704],[6869,6872],[6869,6872],[7482,7485],[7482,7485],[7653,7656],[7653,7656],[5212,5215],[5212,5215],[869,872],[869,872],[1110,1113],[1110,1113],[2030,2033],[2030,2033],[2479,2482],[2479,2482],[3399,3402],[3399,3402],[3894,3897],[3894,3897],[4814,4817],[4814,4817],[5345,5348],[5345,5348],[6265,6268],[6265,6268],[7004,7007],[7004,7007],[8210,8213],[8210,8213],[8741,8744],[8741,8744],[9078,9081],[9078,9081],[9495,9498],[9495,9498],[10145,10148],[10145,10148],[10390,10393],[10390,10393],[11860,11863],[11860,11863],[12910,12913],[12910,12913],[13394,13397],[13394,13397],[14470,14473],[14470,14473],[17010,17013],[17010,17013],[1034,1037],[1034,1037],[1093,1096],[1093,1096],[1606,1609],[1606,1609],[2089,2092],[2089,2092],[2739,2742],[2739,2742],[3149,3152],[3149,3152],[3737,3740],[3737,3740],[5371,5374],[5371,5374],[5428,5431],[5428,5431],[5952,5955],[5952,5955],[6629,6632],[6629,6632],[7300,7303],[7300,7303],[7866,7869],[7866,7869],[7925,7928],[7925,7928],[8020,8023],[8020,8023],[8510,8513],[8510,8513],[8876,8879],[8876,8879],[9261,9264],[9261,9264],[9670,9673],[9670,9673],[9729,9732],[9729,9732],[10144,10147],[10144,10147],[10202,10205],[10202,10205],[10587,10590],[10587,10590],[11286,11289],[11286,11289],[11638,11641],[11638,11641],[12045,12048],[12045,12048],[12636,12639],[12636,12639],[13071,13074],[13071,13074],[13453,13456],[13453,13456],[13886,13889],[13886,13889],[14239,14242],[14239,14242],[15530,15533],[15530,15533],[20300,20303],[20300,20303],[20357,20360],[20357,20360],[21021,21024],[21021,21024],[21510,21513],[21510,21513],[21929,21932],[21929,21932],[22394,22397],[22394,22397],[22782,22785],[22782,22785],[22839,22842],[22839,22842],[22934,22937],[22934,22937],[23524,23527],[23524,23527],[24354,24357],[24354,24357],[24853,24856],[24853,24856],[25512,25515],[25512,25515],[26044,26047],[26044,26047],[26200,26203],[26200,26203],[26879,26882],[26879,26882],[9328,9331],[9328,9331],[15845,15848],[15845,15848],[28217,28220],[28217,28220],[33654,33657],[33654,33657],[33703,33706],[33703,33706],[33752,33755],[33752,33755],[34496,34499],[34496,34499],[1453,1456],[1453,1456],[1917,1920],[1917,1920],[1108,1111],[1108,1111],[1119,1122],[1119,1122],[2753,2756],[2753,2756],[4863,4866],[4863,4866],[5773,5776],[5773,5776],[6526,6529],[6526,6529],[7276,7279],[7276,7279],[7972,7975],[7972,7975],[10712,10715],[10712,10715],[11255,11258],[11255,11258],[9943,9946],[9943,9946],[10070,10073],[10070,10073],[10209,10212],[10209,10212],[10323,10326],[10323,10326],[10632,10635],[10632,10635],[1151,1154],[1151,1154],[2284,2287],[2284,2287],[4758,4761],[4758,4761],[4832,4835],[4832,4835],[4922,4925],[4922,4925],[5257,5260],[5257,5260],[5674,5677],[5674,5677],[5700,5703],[5700,5703],[5759,5762],[5759,5762],[5821,5824],[5821,5824],[5878,5881],[5878,5881],[5936,5939],[5936,5939],[6004,6007],[6004,6007],[8562,8565],[8562,8565],[8747,8750],[8747,8750],[9047,9050],[9047,9050],[9231,9234],[9231,9234],[14069,14072],[14069,14072],[14134,14137],[14134,14137],[14197,14200],[14197,14200],[14315,14318],[14315,14318],[15222,15225],[15222,15225],[15275,15278],[15275,15278],[16098,16101],[16098,16101],[16150,16153],[16150,16153],[16190,16193],[16190,16193],[16216,16219],[16216,16219],[16273,16276],[16273,16276],[16388,16391],[16388,16391],[16875,16878],[16875,16878],[17781,17784],[17781,17784],[17830,17833],[17830,17833],[17941,17944],[17941,17944],[19362,19365],[19362,19365],[19411,19414],[19411,19414],[19522,19525],[19522,19525],[20810,20813],[20810,20813],[20859,20862],[20859,20862],[20968,20971],[20968,20971],[22135,22138],[22135,22138],[22184,22187],[22184,22187],[22289,22292],[22289,22292],[23324,23327],[23324,23327],[23373,23376],[23373,23376],[23481,23484],[23481,23484],[1359,1362],[1359,1362],[5380,5383],[5380,5383],[5630,5633],[5630,5633],[5674,5677],[5674,5677],[5698,5701],[5698,5701],[598,601],[598,601],[2060,2063],[2060,2063],[2806,2809],[2806,2809],[2872,2875],[2872,2875],[1133,1136],[1133,1136],[1143,1146],[1143,1146],[1657,1660],[1657,1660],[3237,3240],[3237,3240],[3677,3680],[3677,3680],[4139,4142],[4139,4142],[4793,4796],[4793,4796],[5248,5251],[5248,5251],[5647,5650],[5647,5650],[5958,5961],[5958,5961],[6500,6503],[6500,6503],[6986,6989],[6986,6989],[7463,7466],[7463,7466],[7976,7979],[7976,7979],[8540,8543],[8540,8543],[9193,9196],[9193,9196],[9245,9248],[9245,9248],[9569,9572],[9569,9572],[9852,9855],[9852,9855],[10263,10266],[10263,10266],[10616,10619],[10616,10619],[10729,10732],[10729,10732],[10802,10805],[10802,10805],[10883,10886],[10883,10886],[11665,11668],[11665,11668],[12366,12369],[12366,12369],[13272,13275],[13272,13275],[14296,14299],[14296,14299],[14409,14412],[14409,14412],[15837,15840],[15837,15840],[15934,15937],[15934,15937],[1763,1766],[1763,1766],[2009,2012],[2009,2012],[4940,4943],[4940,4943],[5011,5014],[5011,5014],[5094,5097],[5094,5097],[5213,5216],[5213,5216],[5268,5271],[5268,5271],[5301,5304],[5301,5304],[5370,5373],[5370,5373],[5486,5489],[5486,5489],[5918,5921],[5918,5921],[5962,5965],[5962,5965],[8104,8107],[8104,8107],[8173,8176],[8173,8176],[8246,8249],[8246,8249],[8314,8317],[8314,8317],[8364,8367],[8364,8367],[8469,8472],[8469,8472],[8586,8589],[8586,8589],[9847,9850],[9847,9850],[9929,9932],[9929,9932],[10011,10014],[10011,10014],[10093,10096],[10093,10096],[10166,10169],[10166,10169],[11060,11063],[11060,11063],[11129,11132],[11129,11132],[11202,11205],[11202,11205],[11287,11290],[11287,11290],[12155,12158],[12155,12158],[12220,12223],[12220,12223],[12289,12292],[12289,12292],[12358,12361],[12358,12361],[12440,12443],[12440,12443],[12545,12548],[12545,12548],[19898,19901],[19898,19901],[22513,22516],[22513,22516],[27727,27730],[27727,27730],[29554,29557],[29554,29557],[39310,39313],[39310,39313],[4985,4988],[4985,4988],[5345,5348],[5345,5348],[6332,6335],[6332,6335],[6767,6770],[6767,6770],[8947,8950],[8947,8950],[9626,9629],[9626,9629],[341,344],[341,344],[2824,2827],[2824,2827],[2849,2852],[2849,2852],[2860,2863],[2860,2863],[4424,4427],[4424,4427],[4945,4948],[4945,4948],[5369,5372],[5369,5372],[6776,6779],[6776,6779],[6801,6804],[6801,6804],[6812,6815],[6812,6815],[4014,4017],[4014,4017],[5356,5359],[5356,5359],[6404,6407],[6404,6407],[7033,7036],[7033,7036],[7168,7171],[7168,7171],[7662,7665],[7662,7665],[8712,8715],[8712,8715],[8927,8930],[8927,8930],[8940,8943],[8940,8943],[10142,10145],[10142,10145],[2875,2878],[2875,2878],[4047,4050],[4047,4050],[4498,4501],[4498,4501],[4968,4971],[4968,4971],[7095,7098],[7095,7098],[9432,9435],[9432,9435],[9489,9492],[9489,9492],[10216,10219],[10216,10219],[10992,10995],[10992,10995],[11939,11942],[11939,11942],[12488,12491],[12488,12491],[12856,12859],[12856,12859],[15975,15978],[15975,15978],[1655,1658],[1655,1658],[2671,2674],[2671,2674],[2274,2277],[2274,2277],[2852,2855],[2852,2855],[3663,3666],[3663,3666],[5308,5311],[5308,5311],[5786,5789],[5786,5789],[6805,6808],[6805,6808],[8443,8446],[8443,8446],[9752,9755],[9752,9755],[10526,10529],[10526,10529],[11178,11181],[11178,11181],[11792,11795],[11792,11795],[12592,12595],[12592,12595],[13780,13783],[13780,13783],[15541,15544],[15541,15544],[16569,16572],[16569,16572],[5122,5125],[5122,5125],[7880,7883],[7880,7883],[8998,9001],[8998,9001],[9931,9934],[9931,9934],[3864,3867],[3864,3867],[5516,5519],[5516,5519],[1593,1596],[1593,1596],[3678,3681],[3678,3681],[4852,4855],[4852,4855],[4875,4878],[4875,4878],[9626,9629],[9626,9629],[9653,9656],[9653,9656],[11005,11008],[11005,11008],[12507,12510],[12507,12510],[13274,13277],[13274,13277],[13672,13675],[13672,13675],[13740,13743],[13740,13743],[15246,15249],[15246,15249],[16985,16988],[16985,16988],[41151,41154],[41151,41154],[44799,44802],[44799,44802],[47110,47113],[47110,47113],[53601,53604],[53601,53604],[54809,54812],[54809,54812],[56621,56624],[56621,56624],[59678,59681],[59678,59681],[60284,60287],[60284,60287],[62527,62530],[62527,62530],[62639,62642],[62639,62642],[62723,62726],[62723,62726],[62821,62824],[62821,62824],[62926,62929],[62926,62929],[64111,64114],[64111,64114],[64225,64228],[64225,64228],[64334,64337],[64334,64337],[64500,64503],[64500,64503],[64569,64572],[64569,64572],[64740,64743],[64740,64743],[65590,65593],[65590,65593],[66739,66742],[66739,66742],[67395,67398],[67395,67398],[69778,69781],[69778,69781],[75407,75410],[75407,75410],[75519,75522],[75519,75522],[2008,2011],[2008,2011],[4693,4696],[4693,4696],[4979,4982],[4979,4982],[5896,5899],[5896,5899],[7095,7098],[7095,7098],[8477,8480],[8477,8480],[354,357],[354,357],[1471,1474],[1471,1474],[2158,2161],[2158,2161],[5316,5319],[5316,5319],[5379,5382],[5379,5382],[5051,5054],[5051,5054],[6375,6378],[6375,6378],[6444,6447],[6444,6447],[9408,9411],[9408,9411],[11658,11661],[11658,11661],[11812,11815],[11812,11815],[11892,11895],[11892,11895],[11962,11965],[11962,11965],[12009,12012],[12009,12012],[12371,12374],[12371,12374],[12442,12445],[12442,12445],[12487,12490],[12487,12490],[12526,12529],[12526,12529],[12583,12586],[12583,12586],[12631,12634],[12631,12634],[12722,12725],[12722,12725],[13920,13923],[13920,13923],[14044,14047],[14044,14047],[14121,14124],[14121,14124],[14203,14206],[14203,14206],[14273,14276],[14273,14276],[15167,15170],[15167,15170],[15241,15244],[15241,15244],[15846,15849],[15846,15849],[15911,15914],[15911,15914],[17249,17252],[17249,17252],[17323,17326],[17323,17326],[1252,1255],[1252,1255],[3027,3030],[3027,3030],[3080,3083],[3080,3083],[4189,4192],[4189,4192],[1385,1388],[1385,1388],[1782,1785],[1782,1785],[2070,2073],[2070,2073],[2087,2090],[2087,2090],[2704,2707],[2704,2707],[2840,2843],[2840,2843],[4584,4587],[4584,4587],[5168,5171],[5168,5171],[5304,5307],[5304,5307],[6459,6462],[6459,6462],[7663,7666],[7663,7666],[1527,1530],[1527,1530],[1761,1764],[1761,1764],[2018,2021],[2018,2021],[2155,2158],[2155,2158],[2271,2274],[2271,2274],[2448,2451],[2448,2451],[2483,2486],[2483,2486],[3342,3345],[3342,3345],[3507,3510],[3507,3510],[3922,3925],[3922,3925],[4082,4085],[4082,4085],[4556,4559],[4556,4559],[4683,4686],[4683,4686],[4718,4721],[4718,4721],[5208,5211],[5208,5211],[5243,5246],[5243,5246],[2313,2316],[2313,2316],[2496,2499],[2496,2499],[2637,2640],[2637,2640],[2702,2705],[2702,2705],[3037,3040],[3037,3040],[3227,3230],[3227,3230],[3414,3417],[3414,3417],[3723,3726],[3723,3726],[3957,3960],[3957,3960],[4363,4366],[4363,4366],[4551,4554],[4551,4554],[5030,5033],[5030,5033],[5213,5216],[5213,5216],[5542,5545],[5542,5545],[5739,5742],[5739,5742],[1162,1165],[1162,1165],[1197,1200],[1197,1200],[1565,1568],[1565,1568],[1676,1679],[1676,1679],[1896,1899],[1896,1899],[1989,1992],[1989,1992],[2144,2147],[2144,2147],[2179,2182],[2179,2182],[2712,2715],[2712,2715],[2876,2879],[2876,2879],[2911,2914],[2911,2914],[3355,3358],[3355,3358],[3390,3393],[3390,3393],[4061,4064],[4061,4064],[4075,4078],[4075,4078],[4200,4203],[4200,4203],[1332,1335],[1332,1335],[1601,1604],[1601,1604],[1972,1975],[1972,1975],[2240,2243],[2240,2243],[2655,2658],[2655,2658],[2747,2750],[2747,2750],[2897,2900],[2897,2900],[3176,3179],[3176,3179],[3582,3585],[3582,3585],[3824,3827],[3824,3827],[4482,4485],[4482,4485],[4613,4616],[4613,4616],[4997,5000],[4997,5000],[5271,5274],[5271,5274],[5363,5366],[5363,5366],[5513,5516],[5513,5516],[5885,5888],[5885,5888],[1433,1436],[1433,1436],[1669,1672],[1669,1672],[2090,2093],[2090,2093],[2501,2504],[2501,2504],[2778,2781],[2778,2781],[2894,2897],[2894,2897],[3030,3033],[3030,3033],[3297,3300],[3297,3300],[3668,3671],[3668,3671],[3761,3764],[3761,3764],[3872,3875],[3872,3875],[3907,3910],[3907,3910],[4182,4185],[4182,4185],[4275,4278],[4275,4278],[4386,4389],[4386,4389],[4421,4424],[4421,4424],[4916,4919],[4916,4919],[4951,4954],[4951,4954],[633,636],[633,636],[749,752],[749,752],[1174,1177],[1174,1177],[1209,1212],[1209,1212],[1751,1754],[1751,1754],[1844,1847],[1844,1847],[1978,1981],[1978,1981],[2013,2016],[2013,2016],[2599,2602],[2599,2602],[2692,2695],[2692,2695],[2826,2829],[2826,2829],[2861,2864],[2861,2864],[3445,3448],[3445,3448],[3689,3692],[3689,3692],[3724,3727],[3724,3727],[3888,3891],[3888,3891],[518,521],[518,521],[847,850],[847,850],[1248,1251],[1248,1251],[1576,1579],[1576,1579],[1878,1881],[1878,1881],[2207,2210],[2207,2210],[2493,2496],[2493,2496],[2678,2681],[2678,2681],[2748,2751],[2748,2751],[3072,3075],[3072,3075],[3268,3271],[3268,3271],[1027,1030],[1027,1030],[1120,1123],[1120,1123],[1272,1275],[1272,1275],[1435,1438],[1435,1438],[1638,1641],[1638,1641],[1731,1734],[1731,1734],[1864,1867],[1864,1867],[2084,2087],[2084,2087],[2687,2690],[2687,2690],[2780,2783],[2780,2783],[2913,2916],[2913,2916],[3121,3124],[3121,3124],[3564,3567],[3564,3567],[3743,3746],[3743,3746],[4166,4169],[4166,4169],[4201,4204],[4201,4204],[4419,4422],[4419,4422],[4535,4538],[4535,4538],[4728,4731],[4728,4731],[4763,4766],[4763,4766],[5368,5371],[5368,5371],[5403,5406],[5403,5406],[6881,6884],[6881,6884],[7044,7047],[7044,7047],[7547,7550],[7547,7550],[7640,7643],[7640,7643],[7769,7772],[7769,7772],[7968,7971],[7968,7971],[8234,8237],[8234,8237],[8327,8330],[8327,8330],[8645,8648],[8645,8648],[8841,8844],[8841,8844],[1219,1222],[1219,1222],[1254,1257],[1254,1257],[1548,1551],[1548,1551],[1668,1671],[1668,1671],[1869,1872],[1869,1872],[1904,1907],[1904,1907],[2306,2309],[2306,2309],[2399,2402],[2399,2402],[2552,2555],[2552,2555],[2587,2590],[2587,2590],[2930,2933],[2930,2933],[3023,3026],[3023,3026],[3180,3183],[3180,3183],[3215,3218],[3215,3218],[3696,3699],[3696,3699],[3865,3868],[3865,3868],[3900,3903],[3900,3903],[4379,4382],[4379,4382],[4414,4417],[4414,4417],[4229,4232],[4229,4232],[4617,4620],[4617,4620],[2472,2475],[2472,2475],[2759,2762],[2759,2762],[3022,3025],[3022,3025],[3307,3310],[3307,3310],[3729,3732],[3729,3732],[4010,4013],[4010,4013],[4154,4157],[4154,4157],[4339,4342],[4339,4342],[4618,4621],[4618,4621],[4762,4765],[4762,4765],[4941,4944],[4941,4944],[5228,5231],[5228,5231],[5618,5621],[5618,5621],[5924,5927],[5924,5927],[6275,6278],[6275,6278],[6558,6561],[6558,6561],[1663,1666],[1663,1666],[1825,1828],[1825,1828],[2220,2223],[2220,2223],[2393,2396],[2393,2396],[2661,2664],[2661,2664],[2777,2780],[2777,2780],[2919,2922],[2919,2922],[3105,3108],[3105,3108],[3591,3594],[3591,3594],[3785,3788],[3785,3788],[4218,4221],[4218,4221],[4377,4380],[4377,4380],[4752,4755],[4752,4755],[4919,4922],[4919,4922],[5366,5369],[5366,5369],[5535,5538],[5535,5538],[5715,5718],[5715,5718],[5808,5811],[5808,5811],[5926,5929],[5926,5929],[6122,6125],[6122,6125],[6588,6591],[6588,6591],[6802,6805],[6802,6805],[10092,10095],[10092,10095],[1241,1244],[1241,1244],[1276,1279],[1276,1279],[1640,1643],[1640,1643],[1749,1752],[1749,1752],[2121,2124],[2121,2124],[2156,2159],[2156,2159],[2648,2651],[2648,2651],[2662,2665],[2662,2665],[2697,2700],[2697,2700],[3005,3008],[3005,3008],[3137,3140],[3137,3140],[3172,3175],[3172,3175],[6724,6727],[6724,6727],[13144,13147],[13144,13147],[4608,4611],[4608,4611],[1005,1008],[1005,1008],[1121,1124],[1121,1124],[1288,1291],[1288,1291],[1369,1372],[1369,1372],[1792,1795],[1792,1795],[1885,1888],[1885,1888],[2015,2018],[2015,2018],[2050,2053],[2050,2053],[2593,2596],[2593,2596],[2628,2631],[2628,2631],[3162,3165],[3162,3165],[3322,3325],[3322,3325],[3841,3844],[3841,3844],[3940,3943],[3940,3943],[4391,4394],[4391,4394],[4426,4429],[4426,4429],[1425,1428],[1425,1428],[1613,1616],[1613,1616],[2071,2074],[2071,2074],[2266,2269],[2266,2269],[2864,2867],[2864,2867],[2956,2959],[2956,2959],[3133,3136],[3133,3136],[3318,3321],[3318,3321],[3924,3927],[3924,3927],[4092,4095],[4092,4095],[4529,4532],[4529,4532],[4694,4697],[4694,4697],[5085,5088],[5085,5088],[5245,5248],[5245,5248],[5485,5488],[5485,5488],[5577,5580],[5577,5580],[5697,5700],[5697,5700],[5871,5874],[5871,5874],[1169,1172],[1169,1172],[1204,1207],[1204,1207],[1580,1583],[1580,1583],[1677,1680],[1677,1680],[1893,1896],[1893,1896],[1986,1989],[1986,1989],[2138,2141],[2138,2141],[2173,2176],[2173,2176],[2698,2701],[2698,2701],[2790,2793],[2790,2793],[2989,2992],[2989,2992],[3024,3027],[3024,3027],[3500,3503],[3500,3503],[3632,3635],[3632,3635],[3667,3670],[3667,3670],[3952,3955],[3952,3955],[4045,4048],[4045,4048],[4192,4195],[4192,4195],[4227,4230],[4227,4230],[1639,1642],[1639,1642],[1796,1799],[1796,1799],[1969,1972],[1969,1972],[2343,2346],[2343,2346],[2508,2511],[2508,2511],[2813,2816],[2813,2816],[2940,2943],[2940,2943],[3148,3151],[3148,3151],[3547,3550],[3547,3550],[3674,3677],[3674,3677],[3918,3921],[3918,3921],[4316,4319],[4316,4319],[4453,4456],[4453,4456],[4648,4651],[4648,4651],[5108,5111],[5108,5111],[5324,5327],[5324,5327],[5906,5909],[5906,5909],[6075,6078],[6075,6078],[630,633],[630,633],[723,726],[723,726],[873,876],[873,876],[908,911],[908,911],[1234,1237],[1234,1237],[1327,1330],[1327,1330],[1461,1464],[1461,1464],[1496,1499],[1496,1499],[1939,1942],[1939,1942],[2032,2035],[2032,2035],[2197,2200],[2197,2200],[2232,2235],[2232,2235],[2714,2717],[2714,2717],[2807,2810],[2807,2810],[2962,2965],[2962,2965],[2997,3000],[2997,3000],[3432,3435],[3432,3435],[3548,3551],[3548,3551],[3718,3721],[3718,3721],[3753,3756],[3753,3756],[4320,4323],[4320,4323],[4355,4358],[4355,4358],[1104,1107],[1104,1107],[1139,1142],[1139,1142],[1358,1361],[1358,1361],[1474,1477],[1474,1477],[1638,1641],[1638,1641],[1673,1676],[1673,1676],[1438,1441],[1438,1441],[1594,1597],[1594,1597],[1999,2002],[1999,2002],[2175,2178],[2175,2178],[2555,2558],[2555,2558],[2720,2723],[2720,2723],[3089,3092],[3089,3092],[3221,3224],[3221,3224],[3423,3426],[3423,3426],[3703,3706],[3703,3706],[3889,3892],[3889,3892],[3938,3941],[3938,3941],[4109,4112],[4109,4112],[4347,4350],[4347,4350],[4799,4802],[4799,4802],[4956,4959],[4956,4959],[5148,5151],[5148,5151],[5570,5573],[5570,5573],[5840,5843],[5840,5843],[5922,5925],[5922,5925],[1060,1063],[1060,1063],[1152,1155],[1152,1155],[1364,1367],[1364,1367],[1544,1547],[1544,1547],[2031,2034],[2031,2034],[2235,2238],[2235,2238],[2731,2734],[2731,2734],[2766,2769],[2766,2769],[3173,3176],[3173,3176],[3208,3211],[3208,3211],[3419,3422],[3419,3422],[3539,3542],[3539,3542],[3736,3739],[3736,3739],[3771,3774],[3771,3774],[4309,4312],[4309,4312],[4344,4347],[4344,4347],[2404,2407],[2404,2407],[4094,4097],[4094,4097],[4816,4819],[4816,4819],[6386,6389],[6386,6389],[6945,6948],[6945,6948],[8122,8125],[8122,8125],[2755,2758],[2755,2758],[4576,4579],[4576,4579],[4971,4974],[4971,4974],[5335,5338],[5335,5338],[1658,1661],[1658,1661],[1859,1862],[1859,1862],[2034,2037],[2034,2037],[2097,2100],[2097,2100],[2333,2336],[2333,2336],[2534,2537],[2534,2537],[2708,2711],[2708,2711],[2927,2930],[2927,2930],[3127,3130],[3127,3130],[3499,3502],[3499,3502],[3707,3710],[3707,3710],[4051,4054],[4051,4054],[4259,4262],[4259,4262],[4620,4623],[4620,4623],[4821,4824],[4821,4824],[9054,9057],[9054,9057],[9395,9398],[9395,9398],[10154,10157],[10154,10157],[10393,10396],[10393,10396],[10468,10471],[10468,10471],[1190,1193],[1190,1193],[1225,1228],[1225,1228],[1636,1639],[1636,1639],[1671,1674],[1671,1674],[2064,2067],[2064,2067],[2099,2102],[2099,2102],[2503,2506],[2503,2506],[2538,2541],[2538,2541],[2776,2779],[2776,2779],[2896,2899],[2896,2899],[3071,3074],[3071,3074],[3106,3109],[3106,3109],[3519,3522],[3519,3522],[3612,3615],[3612,3615],[3742,3745],[3742,3745],[3777,3780],[3777,3780],[1597,1600],[1597,1600],[850,853],[850,853],[885,888],[885,888],[1404,1407],[1404,1407],[1439,1442],[1439,1442],[1763,1766],[1763,1766],[1897,1900],[1897,1900],[1932,1935],[1932,1935],[2326,2329],[2326,2329],[2460,2463],[2460,2463],[2495,2498],[2495,2498],[2957,2960],[2957,2960],[2992,2995],[2992,2995],[2525,2528],[2525,2528],[2807,2810],[2807,2810],[3086,3089],[3086,3089],[3358,3361],[3358,3361],[3814,3817],[3814,3817],[4103,4106],[4103,4106],[4588,4591],[4588,4591],[4879,4882],[4879,4882],[5181,5184],[5181,5184],[5471,5474],[5471,5474],[5932,5935],[5932,5935],[6011,6014],[6011,6014],[6285,6288],[6285,6288],[1817,1820],[1817,1820],[1973,1976],[1973,1976],[2386,2389],[2386,2389],[2545,2548],[2545,2548],[2886,2889],[2886,2889],[3050,3053],[3050,3053],[3332,3335],[3332,3335],[3424,3427],[3424,3427],[3542,3545],[3542,3545],[3712,3715],[3712,3715],[4139,4142],[4139,4142],[4232,4235],[4232,4235],[4366,4369],[4366,4369],[4559,4562],[4559,4562],[5067,5070],[5067,5070],[5288,5291],[5288,5291],[5794,5797],[5794,5797],[6009,6012],[6009,6012],[6366,6369],[6366,6369],[6459,6462],[6459,6462],[6599,6602],[6599,6602],[6849,6852],[6849,6852],[1757,1760],[1757,1760],[2010,2013],[2010,2013],[2286,2289],[2286,2289],[2554,2557],[2554,2557],[2813,2816],[2813,2816],[3066,3069],[3066,3069],[3611,3614],[3611,3614],[3868,3871],[3868,3871],[4251,4254],[4251,4254],[4541,4544],[4541,4544],[4863,4866],[4863,4866],[4987,4990],[4987,4990],[5264,5267],[5264,5267],[1008,1011],[1008,1011],[1124,1127],[1124,1127],[1281,1284],[1281,1284],[1316,1319],[1316,1319],[1746,1749],[1746,1749],[1838,1841],[1838,1841],[1992,1995],[1992,1995],[2027,2030],[2027,2030],[2561,2564],[2561,2564],[2596,2599],[2596,2599],[3015,3018],[3015,3018],[3050,3053],[3050,3053],[3443,3446],[3443,3446],[3478,3481],[3478,3481],[3679,3682],[3679,3682],[3772,3775],[3772,3775],[3921,3924],[3921,3924],[3956,3959],[3956,3959],[4415,4418],[4415,4418],[4561,4564],[4561,4564],[4596,4599],[4596,4599],[786,789],[786,789],[821,824],[821,824],[1015,1018],[1015,1018],[1108,1111],[1108,1111],[1256,1259],[1256,1259],[1291,1294],[1291,1294],[1754,1757],[1754,1757],[1888,1891],[1888,1891],[1923,1926],[1923,1926],[2213,2216],[2213,2216],[2329,2332],[2329,2332],[2486,2489],[2486,2489],[2521,2524],[2521,2524],[3114,3117],[3114,3117],[3149,3152],[3149,3152],[3566,3569],[3566,3569],[3601,3604],[3601,3604],[1369,1372],[1369,1372],[1404,1407],[1404,1407],[1860,1863],[1860,1863],[1895,1898],[1895,1898],[2347,2350],[2347,2350],[2382,2385],[2382,2385],[1046,1049],[1046,1049],[1138,1141],[1138,1141],[1315,1318],[1315,1318],[1350,1353],[1350,1353],[1700,1703],[1700,1703],[1793,1796],[1793,1796],[1960,1963],[1960,1963],[1995,1998],[1995,1998],[2437,2440],[2437,2440],[2530,2533],[2530,2533],[2670,2673],[2670,2673],[2705,2708],[2705,2708],[3343,3346],[3343,3346],[3378,3381],[3378,3381],[3799,3802],[3799,3802],[3917,3920],[3917,3920],[3413,3416],[3413,3416],[3661,3664],[3661,3664],[3982,3985],[3982,3985],[4207,4210],[4207,4210],[4534,4537],[4534,4537],[4759,4762],[4759,4762],[5068,5071],[5068,5071],[5304,5307],[5304,5307],[5572,5575],[5572,5575],[5806,5809],[5806,5809],[6187,6190],[6187,6190],[6427,6430],[6427,6430],[6764,6767],[6764,6767],[6956,6959],[6956,6959],[7211,7214],[7211,7214],[7319,7322],[7319,7322],[7369,7372],[7369,7372],[1511,1514],[1511,1514],[1673,1676],[1673,1676],[2061,2064],[2061,2064],[2231,2234],[2231,2234],[2490,2493],[2490,2493],[2583,2586],[2583,2586],[2706,2709],[2706,2709],[3027,3030],[3027,3030],[3507,3510],[3507,3510],[3847,3850],[3847,3850],[4128,4131],[4128,4131],[4244,4247],[4244,4247],[4390,4393],[4390,4393],[4570,4573],[4570,4573],[4958,4961],[4958,4961],[5090,5093],[5090,5093],[5297,5300],[5297,5300],[5564,5567],[5564,5567],[5680,5683],[5680,5683],[5851,5854],[5851,5854],[6041,6044],[6041,6044],[6968,6971],[6968,6971],[7039,7042],[7039,7042],[1785,1788],[1785,1788],[4756,4759],[4756,4759],[1151,1154],[1151,1154],[2410,2413],[2410,2413],[3339,3342],[3339,3342],[1577,1580],[1577,1580],[2135,2138],[2135,2138],[2894,2897],[2894,2897],[5729,5732],[5729,5732],[6269,6272],[6269,6272],[9492,9495],[9492,9495],[4336,4339],[4336,4339],[4381,4384],[4381,4384],[4435,4438],[4435,4438],[4491,4494],[4491,4494],[5058,5061],[5058,5061],[5097,5100],[5097,5100],[5153,5156],[5153,5156],[2507,2510],[2507,2510],[2640,2643],[2640,2643],[2795,2798],[2795,2798],[2938,2941],[2938,2941],[2971,2974],[2971,2974],[3020,3023],[3020,3023],[3895,3898],[3895,3898],[3943,3946],[3943,3946],[4106,4109],[4106,4109],[4186,4189],[4186,4189],[4269,4272],[4269,4272],[4364,4367],[4364,4367],[4562,4565],[4562,4565],[4671,4674],[4671,4674],[4751,4754],[4751,4754],[4834,4837],[4834,4837],[1852,1855],[1852,1855],[3133,3136],[3133,3136],[6678,6681],[6678,6681],[7577,7580],[7577,7580],[8678,8681],[8678,8681],[10132,10135],[10132,10135],[4190,4193],[4190,4193],[6556,6559],[6556,6559],[6720,6723],[6720,6723],[7229,7232],[7229,7232],[8340,8343],[8340,8343],[739,742],[739,742],[7855,7858],[7855,7858],[3387,3390],[3387,3390],[6816,6819],[6816,6819],[9103,9106],[9103,9106],[2652,2655],[2652,2655],[2945,2948],[2945,2948],[4222,4225],[4222,4225],[4190,4193],[4190,4193],[4249,4252],[4249,4252],[4286,4289],[4286,4289],[4377,4380],[4377,4380],[4684,4687],[4684,4687],[5260,5263],[5260,5263],[5956,5959],[5956,5959],[6773,6776],[6773,6776],[6848,6851],[6848,6851],[7392,7395],[7392,7395],[7951,7954],[7951,7954],[9087,9090],[9087,9090],[9161,9164],[9161,9164],[12691,12694],[12691,12694],[13722,13725],[13722,13725],[14780,14783],[14780,14783],[14842,14845],[14842,14845],[14904,14907],[14904,14907],[2382,2385],[2382,2385],[3096,3099],[3096,3099],[3604,3607],[3604,3607],[4247,4250],[4247,4250],[4923,4926],[4923,4926],[5131,5134],[5131,5134],[5670,5673],[5670,5673],[6543,6546],[6543,6546],[7567,7570],[7567,7570],[7627,7630],[7627,7630],[2127,2130],[2127,2130],[2166,2169],[2166,2169],[2176,2179],[2176,2179],[2243,2246],[2243,2246],[2253,2256],[2253,2256],[2321,2324],[2321,2324],[2331,2334],[2331,2334],[2400,2403],[2400,2403],[2410,2413],[2410,2413],[2509,2512],[2509,2512],[3401,3404],[3401,3404],[4209,4212],[4209,4212],[4667,4670],[4667,4670],[8467,8470],[8467,8470],[8689,8692],[8689,8692],[8704,8707],[8704,8707],[9592,9595],[9592,9595],[9628,9631],[9628,9631],[10218,10221],[10218,10221],[10233,10236],[10233,10236],[10247,10250],[10247,10250],[13206,13209],[13206,13209],[13567,13570],[13567,13570],[13582,13585],[13582,13585],[13596,13599],[13596,13599],[14268,14271],[14268,14271],[15205,15208],[15205,15208],[15220,15223],[15220,15223],[15502,15505],[15502,15505],[15772,15775],[15772,15775],[16192,16195],[16192,16195],[16207,16210],[16207,16210],[16483,16486],[16483,16486],[18208,18211],[18208,18211],[18614,18617],[18614,18617],[18629,18632],[18629,18632],[18823,18826],[18823,18826],[19094,19097],[19094,19097],[19437,19440],[19437,19440],[19452,19455],[19452,19455],[19646,19649],[19646,19649],[19922,19925],[19922,19925],[20132,20135],[20132,20135],[20147,20150],[20147,20150],[20327,20330],[20327,20330],[20514,20517],[20514,20517],[21077,21080],[21077,21080],[21092,21095],[21092,21095],[21286,21289],[21286,21289],[22280,22283],[22280,22283],[22423,22426],[22423,22426],[22438,22441],[22438,22441],[22639,22642],[22639,22642],[23059,23062],[23059,23062],[23170,23173],[23170,23173],[23185,23188],[23185,23188],[23365,23368],[23365,23368],[23562,23565],[23562,23565],[23785,23788],[23785,23788],[23800,23803],[23800,23803],[24006,24009],[24006,24009],[24257,24260],[24257,24260],[24512,24515],[24512,24515],[24527,24530],[24527,24530],[24877,24880],[24877,24880],[25450,25453],[25450,25453],[26046,26049],[26046,26049],[26061,26064],[26061,26064],[26074,26077],[26074,26077],[26408,26411],[26408,26411],[27564,27567],[27564,27567],[27579,27582],[27579,27582],[27788,27791],[27788,27791],[27864,27867],[27864,27867],[30791,30794],[30791,30794],[31137,31140],[31137,31140],[31152,31155],[31152,31155],[31346,31349],[31346,31349],[31599,31602],[31599,31602],[32494,32497],[32494,32497],[32509,32512],[32509,32512],[32703,32706],[32703,32706],[34274,34277],[34274,34277],[34842,34845],[34842,34845],[34933,34936],[34933,34936],[35209,35212],[35209,35212],[35224,35227],[35224,35227],[35718,35721],[35718,35721],[36472,36475],[36472,36475],[36718,36721],[36718,36721],[36998,37001],[36998,37001],[37013,37016],[37013,37016],[37655,37658],[37655,37658],[38236,38239],[38236,38239],[38251,38254],[38251,38254],[38709,38712],[38709,38712],[38785,38788],[38785,38788],[39518,39521],[39518,39521],[39594,39597],[39594,39597],[40392,40395],[40392,40395],[40468,40471],[40468,40471],[40960,40963],[40960,40963],[41224,41227],[41224,41227],[41239,41242],[41239,41242],[41733,41736],[41733,41736],[42337,42340],[42337,42340],[42352,42355],[42352,42355],[42897,42900],[42897,42900],[42973,42976],[42973,42976],[43260,43263],[43260,43263],[43567,43570],[43567,43570],[43582,43585],[43582,43585],[44062,44065],[44062,44065],[44138,44141],[44138,44141],[44502,44505],[44502,44505],[45076,45079],[45076,45079],[45091,45094],[45091,45094],[45390,45393],[45390,45393],[45700,45703],[45700,45703],[46325,46328],[46325,46328],[46340,46343],[46340,46343],[46639,46642],[46639,46642],[47065,47068],[47065,47068],[47429,47432],[47429,47432],[47444,47447],[47444,47447],[47736,47739],[47736,47739],[47812,47815],[47812,47815],[48078,48081],[48078,48081],[48486,48489],[48486,48489],[48501,48504],[48501,48504],[48514,48517],[48514,48517],[49183,49186],[49183,49186],[49259,49262],[49259,49262],[49537,49540],[49537,49540],[49769,49772],[49769,49772],[49784,49787],[49784,49787],[50337,50340],[50337,50340],[50637,50640],[50637,50640],[50878,50881],[50878,50881],[50893,50896],[50893,50896],[51528,51531],[51528,51531],[51604,51607],[51604,51607],[51939,51942],[51939,51942],[52228,52231],[52228,52231],[52243,52246],[52243,52246],[52437,52440],[52437,52440],[52881,52884],[52881,52884],[53152,53155],[53152,53155],[53167,53170],[53167,53170],[53347,53350],[53347,53350],[53608,53611],[53608,53611],[54025,54028],[54025,54028],[54040,54043],[54040,54043],[54318,54321],[54318,54321],[55087,55090],[55087,55090],[55363,55366],[55363,55366],[55378,55381],[55378,55381],[55558,55561],[55558,55561],[55799,55802],[55799,55802],[56055,56058],[56055,56058],[56070,56073],[56070,56073],[56250,56253],[56250,56253],[56623,56626],[56623,56626],[56951,56954],[56951,56954],[56966,56969],[56966,56969],[57146,57149],[57146,57149],[58236,58239],[58236,58239],[58979,58982],[58979,58982],[58994,58997],[58994,58997],[59174,59177],[59174,59177],[62492,62495],[62492,62495],[62916,62919],[62916,62919],[62931,62934],[62931,62934],[63111,63114],[63111,63114],[64534,64537],[64534,64537],[64765,64768],[64765,64768],[65665,65668],[65665,65668],[66165,66168],[66165,66168],[66180,66183],[66180,66183],[66360,66363],[66360,66363],[66908,66911],[66908,66911],[67337,67340],[67337,67340],[67352,67355],[67352,67355],[67532,67535],[67532,67535],[68143,68146],[68143,68146],[68253,68256],[68253,68256],[68268,68271],[68268,68271],[68455,68458],[68455,68458],[68628,68631],[68628,68631],[68739,68742],[68739,68742],[68754,68757],[68754,68757],[68939,68942],[68939,68942],[69552,69555],[69552,69555],[69628,69631],[69628,69631],[70407,70410],[70407,70410],[70726,70729],[70726,70729],[71209,71212],[71209,71212],[71224,71227],[71224,71227],[71404,71407],[71404,71407],[73297,73300],[73297,73300],[73312,73315],[73312,73315],[73325,73328],[73325,73328],[73577,73580],[73577,73580],[74063,74066],[74063,74066],[74340,74343],[74340,74343],[74355,74358],[74355,74358],[74535,74538],[74535,74538],[74791,74794],[74791,74794],[75086,75089],[75086,75089],[75101,75104],[75101,75104],[75281,75284],[75281,75284],[75864,75867],[75864,75867],[75990,75993],[75990,75993],[76762,76765],[76762,76765],[77197,77200],[77197,77200],[77212,77215],[77212,77215],[77479,77482],[77479,77482],[77946,77949],[77946,77949],[78248,78251],[78248,78251],[78263,78266],[78263,78266],[78430,78433],[78430,78433],[78822,78825],[78822,78825],[79195,79198],[79195,79198],[79210,79213],[79210,79213],[79390,79393],[79390,79393],[79606,79609],[79606,79609],[80079,80082],[80079,80082],[80094,80097],[80094,80097],[80261,80264],[80261,80264],[80878,80881],[80878,80881],[81365,81368],[81365,81368],[81380,81383],[81380,81383],[81951,81954],[81951,81954],[82027,82030],[82027,82030],[83210,83213],[83210,83213],[84361,84364],[84361,84364],[85241,85244],[85241,85244],[85974,85977],[85974,85977],[86177,86180],[86177,86180],[86974,86977],[86974,86977],[87239,87242],[87239,87242],[87570,87573],[87570,87573],[87585,87588],[87585,87588],[87852,87855],[87852,87855],[88086,88089],[88086,88089],[88412,88415],[88412,88415],[88427,88430],[88427,88430],[88949,88952],[88949,88952],[89724,89727],[89724,89727],[89800,89803],[89800,89803],[90703,90706],[90703,90706],[90779,90782],[90779,90782],[91084,91087],[91084,91087],[91358,91361],[91358,91361],[91373,91376],[91373,91376],[92067,92070],[92067,92070],[92143,92146],[92143,92146],[92580,92583],[92580,92583],[93123,93126],[93123,93126],[93138,93141],[93138,93141],[93730,93733],[93730,93733],[93806,93809],[93806,93809],[94099,94102],[94099,94102],[94358,94361],[94358,94361],[94373,94376],[94373,94376],[94828,94831],[94828,94831],[94904,94907],[94904,94907],[3739,3742],[3739,3742],[1364,1367],[1364,1367],[1374,1377],[1374,1377],[1436,1439],[1436,1439],[1446,1449],[1446,1449],[1509,1512],[1509,1512],[1519,1522],[1519,1522],[1583,1586],[1583,1586],[1593,1596],[1593,1596],[1896,1899],[1896,1899],[5073,5076],[5073,5076],[8018,8021],[8018,8021],[11006,11009],[11006,11009],[1263,1266],[1263,1266],[1302,1305],[1302,1305],[1312,1315],[1312,1315],[1379,1382],[1379,1382],[1389,1392],[1389,1392],[1457,1460],[1457,1460],[1467,1470],[1467,1470],[1536,1539],[1536,1539],[1546,1549],[1546,1549],[1645,1648],[1645,1648],[2470,2473],[2470,2473],[3597,3600],[3597,3600],[4127,4130],[4127,4130],[4248,4251],[4248,4251],[5537,5540],[5537,5540],[6162,6165],[6162,6165],[6283,6286],[6283,6286],[1417,1420],[1417,1420],[1456,1459],[1456,1459],[1466,1469],[1466,1469],[1533,1536],[1533,1536],[1543,1546],[1543,1546],[1611,1614],[1611,1614],[1621,1624],[1621,1624],[1690,1693],[1690,1693],[1700,1703],[1700,1703],[1799,1802],[1799,1802],[2443,2446],[2443,2446],[3748,3751],[3748,3751],[4533,4536],[4533,4536],[5369,5372],[5369,5372],[6111,6114],[6111,6114],[7518,7521],[7518,7521],[8479,8482],[8479,8482],[9245,9248],[9245,9248],[10093,10096],[10093,10096],[11068,11071],[11068,11071],[11890,11893],[11890,11893],[13256,13259],[13256,13259],[14412,14415],[14412,14415],[15690,15693],[15690,15693],[16957,16960],[16957,16960],[17985,17988],[17985,17988],[19398,19401],[19398,19401],[20364,20367],[20364,20367],[21299,21302],[21299,21302],[22370,22373],[22370,22373],[23971,23974],[23971,23974],[24699,24702],[24699,24702],[26166,26169],[26166,26169],[1069,1072],[1069,1072],[1108,1111],[1108,1111],[1118,1121],[1118,1121],[1185,1188],[1185,1188],[1195,1198],[1195,1198],[1263,1266],[1263,1266],[1273,1276],[1273,1276],[1342,1345],[1342,1345],[1352,1355],[1352,1355],[14973,14976],[14973,14976],[15317,15320],[15317,15320],[16224,16227],[16224,16227],[16462,16465],[16462,16465],[17230,17233],[17230,17233],[17600,17603],[17600,17603],[18532,18535],[18532,18535],[18887,18890],[18887,18890],[2631,2634],[2631,2634],[2878,2881],[2878,2881],[3889,3892],[3889,3892],[5350,5353],[5350,5353],[6402,6405],[6402,6405],[7139,7142],[7139,7142],[8910,8913],[8910,8913],[10460,10463],[10460,10463],[11560,11563],[11560,11563],[13522,13525],[13522,13525],[1784,1787],[1784,1787],[2706,2709],[2706,2709],[3601,3604],[3601,3604],[4453,4456],[4453,4456],[913,916],[913,916],[1442,1445],[1442,1445],[1453,1456],[1453,1456],[2009,2012],[2009,2012],[7147,7150],[7147,7150],[7243,7246],[7243,7246],[7341,7344],[7341,7344],[7455,7458],[7455,7458],[7569,7572],[7569,7572],[1212,1215],[1212,1215],[1930,1933],[1930,1933],[3084,3087],[3084,3087],[2533,2536],[2533,2536],[2705,2708],[2705,2708],[2823,2826],[2823,2826],[3005,3008],[3005,3008],[3190,3193],[3190,3193],[3393,3396],[3393,3396],[3741,3744],[3741,3744],[3949,3952],[3949,3952],[4077,4080],[4077,4080],[4265,4268],[4265,4268],[4922,4925],[4922,4925],[5331,5334],[5331,5334],[5504,5507],[5504,5507],[5786,5789],[5786,5789],[6158,6161],[6158,6161],[6974,6977],[6974,6977],[1695,1698],[1695,1698],[3552,3555],[3552,3555],[4048,4051],[4048,4051],[4751,4754],[4751,4754],[4975,4978],[4975,4978],[4989,4992],[4989,4992],[5904,5907],[5904,5907],[5927,5930],[5927,5930],[6063,6066],[6063,6066],[6936,6939],[6936,6939],[6964,6967],[6964,6967],[7709,7712],[7709,7712],[11872,11875],[11872,11875],[11891,11894],[11891,11894],[1029,1032],[1029,1032],[1756,1759],[1756,1759],[2732,2735],[2732,2735],[2814,2817],[2814,2817],[2844,2847],[2844,2847],[2040,2043],[2040,2043],[3225,3228],[3225,3228],[4206,4209],[4206,4209],[5519,5522],[5519,5522],[1031,1034],[1031,1034],[2662,2665],[2662,2665],[1347,1350],[1347,1350],[4964,4967],[4964,4967],[5555,5558],[5555,5558],[6046,6049],[6046,6049],[6506,6509],[6506,6509],[7092,7095],[7092,7095],[7510,7513],[7510,7513],[14266,14269],[14266,14269],[14546,14549],[14546,14549],[690,693],[690,693],[694,697],[694,697],[684,687],[684,687],[667,670],[667,670],[1725,1728],[1725,1728],[3680,3683],[3680,3683],[4142,4145],[4142,4145],[4975,4978],[4975,4978],[5055,5058],[5055,5058],[5135,5138],[5135,5138],[5502,5505],[5502,5505],[5572,5575],[5572,5575],[397,400],[397,400],[446,449],[446,449],[517,520],[517,520],[2623,2626],[2623,2626],[5217,5220],[5217,5220],[2560,2563],[2560,2563],[2599,2602],[2599,2602],[2617,2620],[2617,2620],[2749,2752],[2749,2752],[2768,2771],[2768,2771],[2949,2952],[2949,2952],[2978,2981],[2978,2981],[809,812],[809,812],[858,861],[858,861],[929,932],[929,932],[2047,2050],[2047,2050],[1411,1414],[1411,1414],[5228,5231],[5228,5231],[5273,5276],[5273,5276],[5352,5355],[5352,5355],[1864,1867],[1864,1867],[6953,6956],[6953,6956],[6998,7001],[6998,7001],[7368,7371],[7368,7371],[11525,11528],[11525,11528],[1882,1885],[1882,1885],[2816,2819],[2816,2819],[2916,2919],[2916,2919],[3029,3032],[3029,3032],[3907,3910],[3907,3910],[4007,4010],[4007,4010],[4117,4120],[4117,4120],[4237,4240],[4237,4240],[4355,4358],[4355,4358],[4522,4525],[4522,4525],[6760,6763],[6760,6763],[6890,6893],[6890,6893],[9229,9232],[9229,9232],[9329,9332],[9329,9332],[9439,9442],[9439,9442],[9559,9562],[9559,9562],[9677,9680],[9677,9680],[9844,9847],[9844,9847],[10175,10178],[10175,10178],[10275,10278],[10275,10278],[10385,10388],[10385,10388],[10505,10508],[10505,10508],[10623,10626],[10623,10626],[11168,11171],[11168,11171],[11930,11933],[11930,11933],[12105,12108],[12105,12108],[12117,12120],[12117,12120],[13167,13170],[13167,13170],[13299,13302],[13299,13302],[13557,13560],[13557,13560],[2550,2553],[2550,2553],[2958,2961],[2958,2961],[3165,3168],[3165,3168],[3265,3268],[3265,3268],[3590,3593],[3590,3593],[3797,3800],[3797,3800],[3897,3900],[3897,3900],[696,699],[696,699],[689,692],[689,692],[1162,1165],[1162,1165],[1312,1315],[1312,1315],[7485,7488],[7485,7488],[7673,7676],[7673,7676],[12372,12375],[12372,12375],[23137,23140],[23137,23140],[25517,25520],[25517,25520],[27532,27535],[27532,27535],[31341,31344],[31341,31344],[33684,33687],[33684,33687],[35780,35783],[35780,35783],[38211,38214],[38211,38214],[674,677],[674,677],[667,670],[667,670],[3006,3009],[3006,3009],[455,458],[455,458],[504,507],[504,507],[575,578],[575,578],[1392,1395],[1392,1395],[1463,1466],[1463,1466],[788,791],[788,791],[993,996],[993,996],[676,679],[676,679],[5064,5067],[5064,5067],[6969,6972],[6969,6972],[7198,7201],[7198,7201],[8197,8200],[8197,8200],[9382,9385],[9382,9385],[9397,9400],[9397,9400],[9502,9505],[9502,9505],[9584,9587],[9584,9587],[9671,9674],[9671,9674],[10451,10454],[10451,10454],[10637,10640],[10637,10640],[10911,10914],[10911,10914],[11042,11045],[11042,11045],[11410,11413],[11410,11413],[11495,11498],[11495,11498],[11797,11800],[11797,11800],[11880,11883],[11880,11883],[737,740],[737,740],[4406,4409],[4406,4409],[4479,4482],[4479,4482],[4718,4721],[4718,4721],[8107,8110],[8107,8110],[8458,8461],[8458,8461],[971,974],[971,974],[1041,1044],[1041,1044],[973,976],[973,976],[1902,1905],[1902,1905],[2781,2784],[2781,2784],[4358,4361],[4358,4361],[4861,4864],[4861,4864],[5190,5193],[5190,5193],[5644,5647],[5644,5647],[6029,6032],[6029,6032],[6478,6481],[6478,6481],[670,673],[670,673],[929,932],[929,932],[15393,15396],[15393,15396],[16124,16127],[16124,16127],[16545,16548],[16545,16548],[16722,16725],[16722,16725],[16877,16880],[16877,16880],[17045,17048],[17045,17048],[17195,17198],[17195,17198],[17733,17736],[17733,17736],[18078,18081],[18078,18081],[18093,18096],[18093,18096],[18326,18329],[18326,18329],[18932,18935],[18932,18935],[19157,19160],[19157,19160],[19317,19320],[19317,19320],[20438,20441],[20438,20441],[20587,20590],[20587,20590],[20659,20662],[20659,20662],[20977,20980],[20977,20980],[21085,21088],[21085,21088],[461,464],[461,464],[510,513],[510,513],[581,584],[581,584],[1464,1467],[1464,1467],[1726,1729],[1726,1729],[1772,1775],[1772,1775],[1814,1817],[1814,1817],[2291,2294],[2291,2294],[2493,2496],[2493,2496],[2557,2560],[2557,2560],[3322,3325],[3322,3325],[3386,3389],[3386,3389],[4357,4360],[4357,4360],[4416,4419],[4416,4419],[4440,4443],[4440,4443],[5334,5337],[5334,5337],[1100,1103],[1100,1103],[2306,2309],[2306,2309],[3329,3332],[3329,3332],[4282,4285],[4282,4285],[3844,3847],[3844,3847],[4334,4337],[4334,4337],[4674,4677],[4674,4677],[5092,5095],[5092,5095],[1507,1510],[1507,1510],[771,774],[771,774],[3042,3045],[3042,3045],[3241,3244],[3241,3244],[725,728],[725,728],[684,687],[684,687],[1468,1471],[1468,1471],[2131,2134],[2131,2134],[2823,2826],[2823,2826],[4978,4981],[4978,4981],[5485,5488],[5485,5488],[5796,5799],[5796,5799],[6400,6403],[6400,6403],[6968,6971],[6968,6971],[15609,15612],[15609,15612],[15669,15672],[15669,15672],[2479,2482],[2479,2482],[828,831],[828,831],[1507,1510],[1507,1510],[2154,2157],[2154,2157],[3096,3099],[3096,3099],[4059,4062],[4059,4062],[4676,4679],[4676,4679],[5360,5363],[5360,5363],[6223,6226],[6223,6226],[1226,1229],[1226,1229],[2274,2277],[2274,2277],[7331,7334],[7331,7334],[2213,2216],[2213,2216],[2707,2710],[2707,2710],[3234,3237],[3234,3237],[4060,4063],[4060,4063],[4630,4633],[4630,4633],[5068,5071],[5068,5071],[5649,5652],[5649,5652],[6140,6143],[6140,6143],[11222,11225],[11222,11225],[11654,11657],[11654,11657],[12200,12203],[12200,12203],[12718,12721],[12718,12721],[13656,13659],[13656,13659],[14100,14103],[14100,14103],[14204,14207],[14204,14207],[14745,14748],[14745,14748],[15234,15237],[15234,15237],[18777,18780],[18777,18780],[19379,19382],[19379,19382],[274,277],[274,277],[1486,1489],[1486,1489],[1509,1512],[1509,1512],[4970,4973],[4970,4973],[5234,5237],[5234,5237],[5501,5504],[5501,5504],[6644,6647],[6644,6647],[6703,6706],[6703,6706],[6923,6926],[6923,6926],[3005,3008],[3005,3008],[3038,3041],[3038,3041],[3831,3834],[3831,3834],[3842,3845],[3842,3845],[25948,25951],[25948,25951],[25976,25979],[25976,25979],[29974,29977],[29974,29977],[30052,30055],[30052,30055],[30188,30191],[30188,30191],[30266,30269],[30266,30269],[30329,30332],[30329,30332],[30402,30405],[30402,30405],[30475,30478],[30475,30478],[30549,30552],[30549,30552],[31043,31046],[31043,31046],[31114,31117],[31114,31117],[31917,31920],[31917,31920],[31999,32002],[31999,32002],[32250,32253],[32250,32253],[33923,33926],[33923,33926],[33997,34000],[33997,34000],[34445,34448],[34445,34448],[34509,34512],[34509,34512],[34580,34583],[34580,34583],[34820,34823],[34820,34823],[35049,35052],[35049,35052],[35267,35270],[35267,35270],[35435,35438],[35435,35438],[36336,36339],[36336,36339],[36397,36400],[36397,36400],[37447,37450],[37447,37450],[38048,38051],[38048,38051],[38751,38754],[38751,38754],[39648,39651],[39648,39651],[40382,40385],[40382,40385],[40942,40945],[40942,40945],[40980,40983],[40980,40983],[41006,41009],[41006,41009],[41043,41046],[41043,41046],[41073,41076],[41073,41076],[41473,41476],[41473,41476],[41531,41534],[41531,41534],[41593,41596],[41593,41596],[47188,47191],[47188,47191],[47226,47229],[47226,47229],[47295,47298],[47295,47298],[915,918],[915,918],[1003,1006],[1003,1006],[1017,1020],[1017,1020],[1249,1252],[1249,1252],[1262,1265],[1262,1265],[8021,8024],[8021,8024],[8114,8117],[8114,8117],[2679,2682],[2679,2682],[4605,4608],[4605,4608],[7098,7101],[7098,7101],[8584,8587],[8584,8587],[2700,2703],[2700,2703],[4584,4587],[4584,4587],[2274,2277],[2274,2277],[2542,2545],[2542,2545],[3264,3267],[3264,3267],[3532,3535],[3532,3535],[467,470],[467,470],[2216,2219],[2216,2219],[2227,2230],[2227,2230],[2613,2616],[2613,2616],[2926,2929],[2926,2929],[3922,3925],[3922,3925],[4131,4134],[4131,4134],[4142,4145],[4142,4145],[4423,4426],[4423,4426],[4781,4784],[4781,4784],[5396,5399],[5396,5399],[5407,5410],[5407,5410],[5688,5691],[5688,5691],[5960,5963],[5960,5963],[6392,6395],[6392,6395],[6403,6406],[6403,6406],[6684,6687],[6684,6687],[6956,6959],[6956,6959],[7629,7632],[7629,7632],[8056,8059],[8056,8059],[8342,8345],[8342,8345],[8400,8403],[8400,8403],[8770,8773],[8770,8773],[8908,8911],[8908,8911],[9198,9201],[9198,9201],[9348,9351],[9348,9351],[9715,9718],[9715,9718],[10037,10040],[10037,10040],[10322,10325],[10322,10325],[10678,10681],[10678,10681],[10689,10692],[10689,10692],[10970,10973],[10970,10973],[11240,11243],[11240,11243],[11527,11530],[11527,11530],[11767,11770],[11767,11770],[12582,12585],[12582,12585],[14380,14383],[14380,14383],[14391,14394],[14391,14394],[14672,14675],[14672,14675],[14941,14944],[14941,14944],[2091,2094],[2091,2094],[2128,2131],[2128,2131],[2149,2152],[2149,2152],[2213,2216],[2213,2216],[2234,2237],[2234,2237],[2958,2961],[2958,2961],[3008,3011],[3008,3011],[275,278],[275,278],[4577,4580],[4577,4580],[4595,4598],[4595,4598],[5019,5022],[5019,5022],[5037,5040],[5037,5040],[1897,1900],[1897,1900],[5009,5012],[5009,5012],[5897,5900],[5897,5900],[5916,5919],[5916,5919],[8893,8896],[8893,8896],[9011,9014],[9011,9014],[9178,9181],[9178,9181],[10831,10834],[10831,10834],[11501,11504],[11501,11504],[11649,11652],[11649,11652],[14906,14909],[14906,14909],[15638,15641],[15638,15641],[16303,16306],[16303,16306],[16987,16990],[16987,16990],[17561,17564],[17561,17564],[18009,18012],[18009,18012],[18529,18532],[18529,18532],[19093,19096],[19093,19096],[19833,19836],[19833,19836],[20550,20553],[20550,20553],[740,743],[740,743],[916,919],[916,919],[2199,2202],[2199,2202],[2273,2276],[2273,2276],[817,820],[817,820],[893,896],[893,896],[1469,1472],[1469,1472],[827,830],[827,830],[852,855],[852,855],[1270,1273],[1270,1273],[1817,1820],[1817,1820],[2679,2682],[2679,2682],[3359,3362],[3359,3362],[4329,4332],[4329,4332],[6061,6064],[6061,6064],[8467,8470],[8467,8470],[10171,10174],[10171,10174],[1557,1560],[1557,1560],[1966,1969],[1966,1969],[2382,2385],[2382,2385],[2826,2829],[2826,2829],[3256,3259],[3256,3259],[3314,3317],[3314,3317],[3925,3928],[3925,3928],[4338,4341],[4338,4341],[4721,4724],[4721,4724],[1761,1764],[1761,1764],[1931,1934],[1931,1934],[2110,2113],[2110,2113],[3445,3448],[3445,3448],[4531,4534],[4531,4534],[4589,4592],[4589,4592],[2100,2103],[2100,2103],[3680,3683],[3680,3683],[7071,7074],[7071,7074],[7139,7142],[7139,7142],[7658,7661],[7658,7661],[7726,7729],[7726,7729],[8239,8242],[8239,8242],[8315,8318],[8315,8318],[8375,8378],[8375,8378],[8902,8905],[8902,8905],[8916,8919],[8916,8919],[11470,11473],[11470,11473],[11484,11487],[11484,11487],[13257,13260],[13257,13260],[13271,13274],[13271,13274],[19751,19754],[19751,19754],[19765,19768],[19765,19768],[22164,22167],[22164,22167],[22194,22197],[22194,22197],[22679,22682],[22679,22682],[23076,23079],[23076,23079],[8952,8955],[8952,8955],[10052,10055],[10052,10055],[14387,14390],[14387,14390],[3424,3427],[3424,3427],[4688,4691],[4688,4691],[5654,5657],[5654,5657],[6913,6916],[6913,6916],[7903,7906],[7903,7906],[8917,8920],[8917,8920],[10260,10263],[10260,10263],[11755,11758],[11755,11758],[13882,13885],[13882,13885],[15696,15699],[15696,15699],[17527,17530],[17527,17530],[19645,19648],[19645,19648],[21400,21403],[21400,21403],[24901,24904],[24901,24904],[26653,26656],[26653,26656],[28662,28665],[28662,28665],[30349,30352],[30349,30352],[31924,31927],[31924,31927],[32935,32938],[32935,32938],[33828,33831],[33828,33831],[61229,61232],[61229,61232],[72001,72004],[72001,72004],[72657,72660],[72657,72660],[73688,73691],[73688,73691],[79940,79943],[79940,79943],[743,746],[743,746],[1496,1499],[1496,1499],[1854,1857],[1854,1857],[1912,1915],[1912,1915],[1784,1787],[1784,1787],[2322,2325],[2322,2325],[2915,2918],[2915,2918],[1423,1426],[1423,1426],[8096,8099],[8096,8099],[1203,1206],[1203,1206],[4100,4103],[4100,4103],[4191,4194],[4191,4194],[4283,4286],[4283,4286],[4384,4387],[4384,4387],[4475,4478],[4475,4478],[4571,4574],[4571,4574],[5324,5327],[5324,5327],[6037,6040],[6037,6040],[7224,7227],[7224,7227],[7317,7320],[7317,7320],[7642,7645],[7642,7645],[7734,7737],[7734,7737],[1303,1306],[1303,1306],[1884,1887],[1884,1887],[2452,2455],[2452,2455],[3066,3069],[3066,3069],[3616,3619],[3616,3619],[4196,4199],[4196,4199],[4859,4862],[4859,4862],[5729,5732],[5729,5732],[6481,6484],[6481,6484],[7244,7247],[7244,7247],[2903,2906],[2903,2906],[3745,3748],[3745,3748],[3769,3772],[3769,3772],[4582,4585],[4582,4585],[833,836],[833,836],[1169,1172],[1169,1172],[3237,3240],[3237,3240],[4011,4014],[4011,4014],[993,996],[993,996],[1932,1935],[1932,1935],[2513,2516],[2513,2516],[740,743],[740,743],[694,697],[694,697],[1580,1583],[1580,1583],[1224,1227],[1224,1227],[1492,1495],[1492,1495],[1686,1689],[1686,1689],[1874,1877],[1874,1877],[2181,2184],[2181,2184],[2764,2767],[2764,2767],[3364,3367],[3364,3367],[3567,3570],[3567,3570],[3812,3815],[3812,3815],[4124,4127],[4124,4127],[4168,4171],[4168,4171],[4502,4505],[4502,4505],[4825,4828],[4825,4828],[5156,5159],[5156,5159],[5310,5313],[5310,5313],[5371,5374],[5371,5374],[5900,5903],[5900,5903],[6511,6514],[6511,6514],[6693,6696],[6693,6696],[7105,7108],[7105,7108],[7315,7318],[7315,7318],[7392,7395],[7392,7395],[7613,7616],[7613,7616],[7679,7682],[7679,7682],[8027,8030],[8027,8030],[8475,8478],[8475,8478],[9888,9891],[9888,9891],[10197,10200],[10197,10200],[10667,10670],[10667,10670],[10765,10768],[10765,10768],[11060,11063],[11060,11063],[11100,11103],[11100,11103],[11200,11203],[11200,11203],[11420,11423],[11420,11423],[11467,11470],[11467,11470],[11788,11791],[11788,11791],[12349,12352],[12349,12352],[12571,12574],[12571,12574],[12911,12914],[12911,12914],[13233,13236],[13233,13236],[13364,13367],[13364,13367],[13607,13610],[13607,13610],[13882,13885],[13882,13885],[14362,14365],[14362,14365],[14748,14751],[14748,14751],[14879,14882],[14879,14882],[15294,15297],[15294,15297],[15616,15619],[15616,15619],[15747,15750],[15747,15750],[16009,16012],[16009,16012],[16257,16260],[16257,16260],[16388,16391],[16388,16391],[16647,16650],[16647,16650],[16881,16884],[16881,16884],[17013,17016],[17013,17016],[17257,17260],[17257,17260],[17329,17332],[17329,17332],[17576,17579],[17576,17579],[564,567],[564,567],[603,606],[603,606],[617,620],[617,620],[1381,1384],[1381,1384],[2836,2839],[2836,2839],[3617,3620],[3617,3620],[1640,1643],[1640,1643],[2339,2342],[2339,2342],[3175,3178],[3175,3178],[3238,3241],[3238,3241],[3897,3900],[3897,3900],[4542,4545],[4542,4545],[2657,2660],[2657,2660],[3276,3279],[3276,3279],[4149,4152],[4149,4152],[4749,4752],[4749,4752],[1219,1222],[1219,1222],[1238,1241],[1238,1241],[4034,4037],[4034,4037],[4955,4958],[4955,4958],[3535,3538],[3535,3538],[5001,5004],[5001,5004],[6074,6077],[6074,6077],[7704,7707],[7704,7707],[9041,9044],[9041,9044],[10364,10367],[10364,10367],[11870,11873],[11870,11873],[13652,13655],[13652,13655],[15596,15599],[15596,15599],[17238,17241],[17238,17241],[19632,19635],[19632,19635],[21753,21756],[21753,21756],[24104,24107],[24104,24107],[26801,26804],[26801,26804],[28826,28829],[28826,28829],[30976,30979],[30976,30979],[790,793],[790,793],[2828,2831],[2828,2831],[2891,2894],[2891,2894],[4297,4300],[4297,4300],[3326,3329],[3326,3329],[4335,4338],[4335,4338],[6191,6194],[6191,6194],[6552,6555],[6552,6555],[7119,7122],[7119,7122],[8066,8069],[8066,8069],[8276,8279],[8276,8279],[8517,8520],[8517,8520],[8723,8726],[8723,8726],[9789,9792],[9789,9792],[10112,10115],[10112,10115],[10149,10152],[10149,10152],[10467,10470],[10467,10470],[10840,10843],[10840,10843],[11036,11039],[11036,11039],[13092,13095],[13092,13095],[15032,15035],[15032,15035],[15242,15245],[15242,15245],[15978,15981],[15978,15981],[17630,17633],[17630,17633],[19220,19223],[19220,19223],[19964,19967],[19964,19967],[20668,20671],[20668,20671],[21666,21669],[21666,21669],[22771,22774],[22771,22774],[23924,23927],[23924,23927],[26160,26163],[26160,26163],[26674,26677],[26674,26677],[26698,26701],[26698,26701],[27489,27492],[27489,27492],[28311,28314],[28311,28314],[28629,28632],[28629,28632],[29254,29257],[29254,29257],[29586,29589],[29586,29589],[31459,31462],[31459,31462],[31793,31796],[31793,31796],[32119,32122],[32119,32122],[32910,32913],[32910,32913],[33260,33263],[33260,33263],[34096,34099],[34096,34099],[34256,34259],[34256,34259],[34325,34328],[34325,34328],[34394,34397],[34394,34397],[34487,34490],[34487,34490],[34563,34566],[34563,34566],[34636,34639],[34636,34639],[34714,34717],[34714,34717],[35026,35029],[35026,35029],[35574,35577],[35574,35577],[36967,36970],[36967,36970],[38102,38105],[38102,38105],[38240,38243],[38240,38243],[38315,38318],[38315,38318],[38357,38360],[38357,38360],[38406,38409],[38406,38409],[38444,38447],[38444,38447],[38504,38507],[38504,38507],[38563,38566],[38563,38566],[38614,38617],[38614,38617],[38704,38707],[38704,38707],[39553,39556],[39553,39556],[41429,41432],[41429,41432],[43184,43187],[43184,43187],[43874,43877],[43874,43877],[45746,45749],[45746,45749],[47256,47259],[47256,47259],[48250,48253],[48250,48253],[49537,49540],[49537,49540],[50675,50678],[50675,50678],[51428,51431],[51428,51431],[52641,52644],[52641,52644],[52970,52973],[52970,52973],[53725,53728],[53725,53728],[53927,53930],[53927,53930],[55045,55048],[55045,55048],[55906,55909],[55906,55909],[55956,55959],[55956,55959],[56850,56853],[56850,56853],[56900,56903],[56900,56903],[3370,3373],[3370,3373],[3424,3427],[3424,3427],[1302,1305],[1302,1305],[1340,1343],[1340,1343],[1354,1357],[1354,1357],[2118,2121],[2118,2121],[2494,2497],[2494,2497],[2848,2851],[2848,2851],[5208,5211],[5208,5211],[2967,2970],[2967,2970],[3262,3265],[3262,3265],[9048,9051],[9048,9051],[9282,9285],[9282,9285],[9347,9350],[9347,9350],[2507,2510],[2507,2510],[4463,4466],[4463,4466],[19159,19162],[19159,19162],[19903,19906],[19903,19906],[4764,4767],[4764,4767],[2927,2930],[2927,2930],[3682,3685],[3682,3685],[4050,4053],[4050,4053],[4400,4403],[4400,4403],[4637,4640],[4637,4640],[4675,4678],[4675,4678],[4689,4692],[4689,4692],[6532,6535],[6532,6535],[722,725],[722,725],[1399,1402],[1399,1402],[2119,2122],[2119,2122],[2638,2641],[2638,2641],[2393,2396],[2393,2396],[384,387],[384,387],[469,472],[469,472],[775,778],[775,778],[1761,1764],[1761,1764],[2949,2952],[2949,2952],[3025,3028],[3025,3028],[3116,3119],[3116,3119],[3258,3261],[3258,3261],[366,369],[366,369],[2595,2598],[2595,2598],[2646,2649],[2646,2649],[3190,3193],[3190,3193],[3241,3244],[3241,3244],[4160,4163],[4160,4163],[4211,4214],[4211,4214],[1513,1516],[1513,1516],[2664,2667],[2664,2667],[3218,3221],[3218,3221],[4439,4442],[4439,4442],[5497,5500],[5497,5500],[7154,7157],[7154,7157],[8525,8528],[8525,8528],[7162,7165],[7162,7165],[2526,2529],[2526,2529],[4174,4177],[4174,4177],[4221,4224],[4221,4224],[4531,4534],[4531,4534],[945,948],[945,948],[1813,1816],[1813,1816],[2625,2628],[2625,2628],[3335,3338],[3335,3338],[2104,2107],[2104,2107],[2873,2876],[2873,2876],[2936,2939],[2936,2939],[3001,3004],[3001,3004],[4351,4354],[4351,4354],[5383,5386],[5383,5386],[5448,5451],[5448,5451],[2113,2116],[2113,2116],[2273,2276],[2273,2276],[2972,2975],[2972,2975],[4915,4918],[4915,4918],[2244,2247],[2244,2247],[3126,3129],[3126,3129],[3337,3340],[3337,3340],[3365,3368],[3365,3368],[4328,4331],[4328,4331],[4484,4487],[4484,4487],[4531,4534],[4531,4534],[3266,3269],[3266,3269],[3326,3329],[3326,3329],[3401,3404],[3401,3404],[3449,3452],[3449,3452],[4420,4423],[4420,4423],[4483,4486],[4483,4486],[4812,4815],[4812,4815],[12688,12691],[12688,12691],[12751,12754],[12751,12754],[12794,12797],[12794,12797],[12820,12823],[12820,12823],[12877,12880],[12877,12880],[12908,12911],[12908,12911],[13008,13011],[13008,13011],[13085,13088],[13085,13088],[13123,13126],[13123,13126],[13171,13174],[13171,13174],[13185,13188],[13185,13188],[13240,13243],[13240,13243],[13304,13307],[13304,13307],[7894,7897],[7894,7897],[2710,2713],[2710,2713],[2856,2859],[2856,2859],[3076,3079],[3076,3079],[4035,4038],[4035,4038],[4181,4184],[4181,4184],[4384,4387],[4384,4387],[5054,5057],[5054,5057],[5172,5175],[5172,5175],[5779,5782],[5779,5782],[13725,13728],[13725,13728],[603,606],[603,606],[950,953],[950,953],[1340,1343],[1340,1343],[257,260],[257,260],[8648,8651],[8648,8651],[9751,9754],[9751,9754],[948,951],[948,951],[707,710],[707,710],[2297,2300],[2297,2300],[3098,3101],[3098,3101],[3220,3223],[3220,3223],[4079,4082],[4079,4082],[4202,4205],[4202,4205],[779,782],[779,782],[2834,2837],[2834,2837],[5123,5126],[5123,5126],[6468,6471],[6468,6471],[755,758],[755,758],[1375,1378],[1375,1378],[2263,2266],[2263,2266],[5159,5162],[5159,5162],[5714,5717],[5714,5717],[6504,6507],[6504,6507],[7132,7135],[7132,7135],[4045,4048],[4045,4048],[4375,4378],[4375,4378],[4932,4935],[4932,4935],[8384,8387],[8384,8387],[9255,9258],[9255,9258],[10430,10433],[10430,10433],[11463,11466],[11463,11466],[12174,12177],[12174,12177],[13303,13306],[13303,13306],[14928,14931],[14928,14931],[15618,15621],[15618,15621],[16357,16360],[16357,16360],[16898,16901],[16898,16901],[18297,18300],[18297,18300],[18427,18430],[18427,18430],[19202,19205],[19202,19205],[20148,20151],[20148,20151],[21506,21509],[21506,21509],[21561,21564],[21561,21564],[23222,23225],[23222,23225],[23277,23280],[23277,23280],[24162,24165],[24162,24165],[24591,24594],[24591,24594],[25327,25330],[25327,25330],[26076,26079],[26076,26079],[26861,26864],[26861,26864],[27473,27476],[27473,27476],[28588,28591],[28588,28591],[29204,29207],[29204,29207],[30042,30045],[30042,30045],[31035,31038],[31035,31038],[31940,31943],[31940,31943],[33127,33130],[33127,33130],[36088,36091],[36088,36091],[39220,39223],[39220,39223],[40542,40545],[40542,40545],[42518,42521],[42518,42521],[44621,44624],[44621,44624],[45457,45460],[45457,45460],[46029,46032],[46029,46032],[46611,46614],[46611,46614],[47168,47171],[47168,47171],[48225,48228],[48225,48228],[49397,49400],[49397,49400],[50618,50621],[50618,50621],[51862,51865],[51862,51865],[53904,53907],[53904,53907],[55640,55643],[55640,55643],[57059,57062],[57059,57062],[58241,58244],[58241,58244],[59086,59089],[59086,59089],[59781,59784],[59781,59784],[60995,60998],[60995,60998],[62474,62477],[62474,62477],[1723,1726],[1723,1726],[2566,2569],[2566,2569],[4041,4044],[4041,4044],[4124,4127],[4124,4127],[4657,4660],[4657,4660],[5084,5087],[5084,5087],[5559,5562],[5559,5562],[6116,6119],[6116,6119],[6587,6590],[6587,6590],[2445,2448],[2445,2448],[3148,3151],[3148,3151],[3201,3204],[3201,3204],[4066,4069],[4066,4069],[4895,4898],[4895,4898],[5479,5482],[5479,5482],[6238,6241],[6238,6241],[6837,6840],[6837,6840],[7552,7555],[7552,7555],[8366,8369],[8366,8369],[9007,9010],[9007,9010],[10341,10344],[10341,10344],[11583,11586],[11583,11586],[1060,1063],[1060,1063],[1213,1216],[1213,1216],[1224,1227],[1224,1227],[2193,2196],[2193,2196],[3124,3127],[3124,3127],[3717,3720],[3717,3720],[4240,4243],[4240,4243],[8369,8372],[8369,8372],[4458,4461],[4458,4461],[6787,6790],[6787,6790],[8535,8538],[8535,8538],[10443,10446],[10443,10446],[13032,13035],[13032,13035],[15782,15785],[15782,15785],[4430,4433],[4430,4433],[4888,4891],[4888,4891],[5386,5389],[5386,5389],[5774,5777],[5774,5777],[6617,6620],[6617,6620],[6628,6631],[6628,6631],[477,480],[477,480],[9414,9417],[9414,9417],[11066,11069],[11066,11069],[11284,11287],[11284,11287],[12695,12698],[12695,12698],[1803,1806],[1803,1806],[3859,3862],[3859,3862],[8943,8946],[8943,8946],[10066,10069],[10066,10069],[560,563],[560,563],[645,648],[645,648],[842,845],[842,845],[858,861],[858,861],[893,896],[893,896],[909,912],[909,912],[949,952],[949,952],[1085,1088],[1085,1088],[6420,6423],[6420,6423],[7348,7351],[7348,7351],[4202,4205],[4202,4205],[3112,3115],[3112,3115],[5297,5300],[5297,5300],[5522,5525],[5522,5525],[5881,5884],[5881,5884],[6556,6559],[6556,6559],[7291,7294],[7291,7294],[8431,8434],[8431,8434],[11721,11724],[11721,11724],[13325,13328],[13325,13328],[13997,14000],[13997,14000],[14454,14457],[14454,14457],[15824,15827],[15824,15827],[17357,17360],[17357,17360],[18010,18013],[18010,18013],[18937,18940],[18937,18940],[19863,19866],[19863,19866],[20306,20309],[20306,20309],[20550,20553],[20550,20553],[23235,23238],[23235,23238],[23908,23911],[23908,23911],[25137,25140],[25137,25140],[25689,25692],[25689,25692],[5346,5349],[5346,5349],[1656,1659],[1656,1659],[1692,1695],[1692,1695],[1713,1716],[1713,1716],[2319,2322],[2319,2322],[4376,4379],[4376,4379],[4891,4894],[4891,4894],[4990,4993],[4990,4993],[5028,5031],[5028,5031],[5080,5083],[5080,5083],[5134,5137],[5134,5137],[5770,5773],[5770,5773],[6082,6085],[6082,6085],[6120,6123],[6120,6123],[6172,6175],[6172,6175],[6226,6229],[6226,6229],[7208,7211],[7208,7211],[7277,7280],[7277,7280],[7747,7750],[7747,7750],[8413,8416],[8413,8416],[9122,9125],[9122,9125],[9817,9820],[9817,9820],[10969,10972],[10969,10972],[11020,11023],[11020,11023],[11082,11085],[11082,11085],[11617,11620],[11617,11620],[11794,11797],[11794,11797],[11863,11866],[11863,11866],[11915,11918],[11915,11918],[12731,12734],[12731,12734],[12845,12848],[12845,12848],[13039,13042],[13039,13042],[13140,13143],[13140,13143],[13257,13260],[13257,13260],[13327,13330],[13327,13330],[13452,13455],[13452,13455],[13645,13648],[13645,13648],[13713,13716],[13713,13716],[13831,13834],[13831,13834],[13932,13935],[13932,13935],[15549,15552],[15549,15552],[15740,15743],[15740,15743],[15935,15938],[15935,15938],[16005,16008],[16005,16008],[16118,16121],[16118,16121],[16388,16391],[16388,16391],[16456,16459],[16456,16459],[16567,16570],[16567,16570],[16667,16670],[16667,16670],[17085,17088],[17085,17088],[17234,17237],[17234,17237],[17272,17275],[17272,17275],[17326,17329],[17326,17329],[17385,17388],[17385,17388],[17439,17442],[17439,17442],[2305,2308],[2305,2308],[2364,2367],[2364,2367],[3433,3436],[3433,3436],[8552,8555],[8552,8555],[12437,12440],[12437,12440],[12552,12555],[12552,12555],[925,928],[925,928],[1637,1640],[1637,1640],[3368,3371],[3368,3371],[1797,1800],[1797,1800],[1890,1893],[1890,1893],[2130,2133],[2130,2133],[2165,2168],[2165,2168],[2299,2302],[2299,2302],[2333,2336],[2333,2336],[438,441],[438,441],[519,522],[519,522],[3044,3047],[3044,3047],[3895,3898],[3895,3898],[1328,1331],[1328,1331],[1276,1279],[1276,1279],[4080,4083],[4080,4083],[1274,1277],[1274,1277],[1620,1623],[1620,1623],[2263,2266],[2263,2266],[1296,1299],[1296,1299],[2241,2244],[2241,2244],[2280,2283],[2280,2283],[2999,3002],[2999,3002],[3038,3041],[3038,3041],[3928,3931],[3928,3931],[3967,3970],[3967,3970],[4810,4813],[4810,4813],[4849,4852],[4849,4852],[1295,1298],[1295,1298],[836,839],[836,839],[855,858],[855,858],[2956,2959],[2956,2959],[4103,4106],[4103,4106],[807,810],[807,810],[1936,1939],[1936,1939],[1365,1368],[1365,1368],[1372,1375],[1372,1375],[3561,3564],[3561,3564],[4854,4857],[4854,4857],[6472,6475],[6472,6475],[4010,4013],[4010,4013],[4059,4062],[4059,4062],[4187,4190],[4187,4190],[4344,4347],[4344,4347],[4386,4389],[4386,4389],[4505,4508],[4505,4508],[4673,4676],[4673,4676],[4712,4715],[4712,4715],[2251,2254],[2251,2254],[2343,2346],[2343,2346],[2404,2407],[2404,2407],[3008,3011],[3008,3011],[3069,3072],[3069,3072],[3657,3660],[3657,3660],[3718,3721],[3718,3721],[4050,4053],[4050,4053],[4919,4922],[4919,4922],[4970,4973],[4970,4973],[3165,3168],[3165,3168],[3221,3224],[3221,3224],[3280,3283],[3280,3283],[3310,3313],[3310,3313],[3433,3436],[3433,3436],[3501,3504],[3501,3504],[3530,3533],[3530,3533],[3620,3623],[3620,3623],[4126,4129],[4126,4129],[4207,4210],[4207,4210],[4700,4703],[4700,4703],[4727,4730],[4727,4730],[4775,4778],[4775,4778],[5333,5336],[5333,5336],[5360,5363],[5360,5363],[5446,5449],[5446,5449],[5880,5883],[5880,5883],[6480,6483],[6480,6483],[6554,6557],[6554,6557],[6647,6650],[6647,6650],[7190,7193],[7190,7193],[7271,7274],[7271,7274],[7843,7846],[7843,7846],[8293,8296],[8293,8296],[8374,8377],[8374,8377],[8964,8967],[8964,8967],[9048,9051],[9048,9051],[9146,9149],[9146,9149],[9281,9284],[9281,9284],[9899,9902],[9899,9902],[10948,10951],[10948,10951],[11003,11006],[11003,11006],[11064,11067],[11064,11067],[11112,11115],[11112,11115],[11137,11140],[11137,11140],[11189,11192],[11189,11192],[11214,11217],[11214,11217],[11271,11274],[11271,11274],[11296,11299],[11296,11299],[11371,11374],[11371,11374],[11431,11434],[11431,11434],[11445,11448],[11445,11448],[11498,11501],[11498,11501],[11578,11581],[11578,11581],[11945,11948],[11945,11948],[12750,12753],[12750,12753],[13732,13735],[13732,13735],[13788,13791],[13788,13791],[13806,13809],[13806,13809],[13876,13879],[13876,13879],[13953,13956],[13953,13956],[14019,14022],[14019,14022],[14062,14065],[14062,14065],[14087,14090],[14087,14090],[14146,14149],[14146,14149],[14226,14229],[14226,14229],[14314,14317],[14314,14317],[15958,15961],[15958,15961],[16046,16049],[16046,16049],[16445,16448],[16445,16448],[16530,16533],[16530,16533],[16874,16877],[16874,16877],[16963,16966],[16963,16966],[17709,17712],[17709,17712],[17782,17785],[17782,17785],[17862,17865],[17862,17865],[18298,18301],[18298,18301],[18383,18386],[18383,18386],[19433,19436],[19433,19436],[20206,20209],[20206,20209],[20866,20869],[20866,20869],[22647,22650],[22647,22650],[23711,23714],[23711,23714],[24701,24704],[24701,24704],[25735,25738],[25735,25738],[26305,26308],[26305,26308],[26739,26742],[26739,26742],[27188,27191],[27188,27191],[27652,27655],[27652,27655],[28157,28160],[28157,28160],[28550,28553],[28550,28553],[28926,28929],[28926,28929],[29316,29319],[29316,29319],[1129,1132],[1129,1132],[1144,1147],[1144,1147],[1961,1964],[1961,1964],[1976,1979],[1976,1979],[6966,6969],[6966,6969],[6977,6980],[6977,6980],[821,824],[821,824],[1294,1297],[1294,1297],[1880,1883],[1880,1883],[2464,2467],[2464,2467],[2514,2517],[2514,2517],[2566,2569],[2566,2569],[2628,2631],[2628,2631],[2952,2955],[2952,2955],[3004,3007],[3004,3007],[3066,3069],[3066,3069],[3396,3399],[3396,3399],[3448,3451],[3448,3451],[3506,3509],[3506,3509],[7375,7378],[7375,7378],[8101,8104],[8101,8104],[8787,8790],[8787,8790],[9386,9389],[9386,9389],[10037,10040],[10037,10040],[10732,10735],[10732,10735],[10758,10761],[10758,10761],[11309,11312],[11309,11312],[11335,11338],[11335,11338],[11660,11663],[11660,11663],[11993,11996],[11993,11996],[12327,12330],[12327,12330],[13088,13091],[13088,13091],[13419,13422],[13419,13422],[13787,13790],[13787,13790],[14225,14228],[14225,14228],[15027,15030],[15027,15030],[15572,15575],[15572,15575],[15621,15624],[15621,15624],[16125,16128],[16125,16128],[16925,16928],[16925,16928],[17202,17205],[17202,17205],[5531,5534],[5531,5534],[5919,5922],[5919,5922],[5984,5987],[5984,5987],[6035,6038],[6035,6038],[7501,7504],[7501,7504],[10818,10821],[10818,10821],[10882,10885],[10882,10885],[10937,10940],[10937,10940],[10994,10997],[10994,10997],[11055,11058],[11055,11058],[11111,11114],[11111,11114],[11170,11173],[11170,11173],[11247,11250],[11247,11250],[11346,11349],[11346,11349],[11399,11402],[11399,11402],[11474,11477],[11474,11477],[11537,11540],[11537,11540],[14660,14663],[14660,14663],[14724,14727],[14724,14727],[14784,14787],[14784,14787],[14852,14855],[14852,14855],[14916,14919],[14916,14919],[16551,16554],[16551,16554],[17227,17230],[17227,17230],[17290,17293],[17290,17293],[18168,18171],[18168,18171],[18545,18548],[18545,18548],[19606,19609],[19606,19609],[20694,20697],[20694,20697],[22197,22200],[22197,22200],[24365,24368],[24365,24368],[24428,24431],[24428,24431],[24485,24488],[24485,24488],[24532,24535],[24532,24535],[24589,24592],[24589,24592],[24648,24651],[24648,24651],[24719,24722],[24719,24722],[24782,24785],[24782,24785],[24835,24838],[24835,24838],[24900,24903],[24900,24903],[24967,24970],[24967,24970],[25030,25033],[25030,25033],[26861,26864],[26861,26864],[27563,27566],[27563,27566],[27636,27639],[27636,27639],[27699,27702],[27699,27702],[29492,29495],[29492,29495],[29559,29562],[29559,29562],[32125,32128],[32125,32128],[32925,32928],[32925,32928],[33496,33499],[33496,33499],[34779,34782],[34779,34782],[35917,35920],[35917,35920],[36588,36591],[36588,36591],[37893,37896],[37893,37896],[40226,40229],[40226,40229],[42961,42964],[42961,42964],[1524,1527],[1524,1527],[1564,1567],[1564,1567],[1585,1588],[1585,1588],[1622,1625],[1622,1625],[1643,1646],[1643,1646],[2222,2225],[2222,2225],[2283,2286],[2283,2286],[2331,2334],[2331,2334],[2909,2912],[2909,2912],[710,713],[710,713],[741,744],[741,744],[769,772],[769,772],[818,821],[818,821],[846,849],[846,849],[1089,1092],[1089,1092],[1117,1120],[1117,1120],[1171,1174],[1171,1174],[2186,2189],[2186,2189],[2488,2491],[2488,2491],[2733,2736],[2733,2736],[3033,3036],[3033,3036],[1494,1497],[1494,1497],[3161,3164],[3161,3164],[7459,7462],[7459,7462],[9486,9489],[9486,9489],[10949,10952],[10949,10952],[12517,12520],[12517,12520],[13931,13934],[13931,13934],[976,979],[976,979],[1508,1511],[1508,1511],[2041,2044],[2041,2044],[2325,2328],[2325,2328],[2587,2590],[2587,2590],[1335,1338],[1335,1338],[3168,3171],[3168,3171],[1736,1739],[1736,1739],[1971,1974],[1971,1974],[2538,2541],[2538,2541],[3615,3618],[3615,3618],[4478,4481],[4478,4481],[5427,5430],[5427,5430],[6426,6429],[6426,6429],[7128,7131],[7128,7131],[7826,7829],[7826,7829],[8620,8623],[8620,8623],[9466,9469],[9466,9469],[507,510],[507,510],[547,550],[547,550],[685,688],[685,688],[1969,1972],[1969,1972],[2098,2101],[2098,2101],[2122,2125],[2122,2125],[2819,2822],[2819,2822],[2866,2869],[2866,2869],[2887,2890],[2887,2890],[2923,2926],[2923,2926],[2948,2951],[2948,2951],[3506,3509],[3506,3509],[3565,3568],[3565,3568],[3613,3616],[3613,3616],[841,844],[841,844],[1183,1186],[1183,1186],[1247,1250],[1247,1250],[1708,1711],[1708,1711],[2498,2501],[2498,2501],[2640,2643],[2640,2643],[2894,2897],[2894,2897],[3072,3075],[3072,3075],[3921,3924],[3921,3924],[4723,4726],[4723,4726],[5111,5114],[5111,5114],[3901,3904],[3901,3904],[2499,2502],[2499,2502],[2005,2008],[2005,2008],[2642,2645],[2642,2645],[3186,3189],[3186,3189],[3390,3393],[3390,3393],[3765,3768],[3765,3768],[5242,5245],[5242,5245],[5295,5298],[5295,5298],[5352,5355],[5352,5355],[5542,5545],[5542,5545],[3958,3961],[3958,3961],[4772,4775],[4772,4775],[5659,5662],[5659,5662],[6163,6166],[6163,6166],[7148,7151],[7148,7151],[8643,8646],[8643,8646],[9482,9485],[9482,9485],[1017,1020],[1017,1020],[1170,1173],[1170,1173],[9848,9851],[9848,9851],[10653,10656],[10653,10656],[11624,11627],[11624,11627],[13024,13027],[13024,13027],[15459,15462],[15459,15462],[15681,15684],[15681,15684],[18058,18061],[18058,18061],[22324,22327],[22324,22327],[24196,24199],[24196,24199],[24846,24849],[24846,24849],[25396,25399],[25396,25399],[25464,25467],[25464,25467],[1309,1312],[1309,1312],[1862,1865],[1862,1865],[2228,2231],[2228,2231],[38667,38670],[38667,38670],[38720,38723],[38720,38723],[38780,38783],[38780,38783],[38855,38858],[38855,38858],[38930,38933],[38930,38933],[58227,58230],[58227,58230],[58280,58283],[58280,58283],[58336,58339],[58336,58339],[58415,58418],[58415,58418],[59659,59662],[59659,59662],[59724,59727],[59724,59727],[59812,59815],[59812,59815],[59895,59898],[59895,59898],[60038,60041],[60038,60041],[5954,5957],[5954,5957],[6987,6990],[6987,6990],[7605,7608],[7605,7608],[8241,8244],[8241,8244],[9003,9006],[9003,9006],[9562,9565],[9562,9565],[11830,11833],[11830,11833],[12496,12499],[12496,12499],[13322,13325],[13322,13325],[14169,14172],[14169,14172],[15981,15984],[15981,15984],[16733,16736],[16733,16736],[17894,17897],[17894,17897],[18264,18267],[18264,18267],[18676,18679],[18676,18679],[19097,19100],[19097,19100],[19922,19925],[19922,19925],[20657,20660],[20657,20660],[3049,3052],[3049,3052],[3402,3405],[3402,3405],[3115,3118],[3115,3118],[3560,3563],[3560,3563],[4224,4227],[4224,4227],[4611,4614],[4611,4614],[5543,5546],[5543,5546],[1012,1015],[1012,1015],[1661,1664],[1661,1664],[1712,1715],[1712,1715],[1738,1741],[1738,1741],[5196,5199],[5196,5199],[1402,1405],[1402,1405],[2333,2336],[2333,2336],[2363,2366],[2363,2366],[4041,4044],[4041,4044],[4068,4071],[4068,4071],[3224,3227],[3224,3227],[1080,1083],[1080,1083],[1011,1014],[1011,1014],[1032,1035],[1032,1035],[1068,1071],[1068,1071],[1003,1006],[1003,1006],[7178,7181],[7178,7181],[7450,7453],[7450,7453],[9789,9792],[9789,9792],[10064,10067],[10064,10067],[11800,11803],[11800,11803],[12021,12024],[12021,12024],[14576,14579],[14576,14579],[16931,16934],[16931,16934],[19643,19646],[19643,19646],[1230,1233],[1230,1233],[8788,8791],[8788,8791],[9013,9016],[9013,9016],[11147,11150],[11147,11150],[11423,11426],[11423,11426],[12069,12072],[12069,12072],[13375,13378],[13375,13378],[15224,15227],[15224,15227],[16916,16919],[16916,16919],[17106,17109],[17106,17109],[17196,17199],[17196,17199],[1952,1955],[1952,1955],[2121,2124],[2121,2124],[5178,5181],[5178,5181],[7056,7059],[7056,7059],[8087,8090],[8087,8090],[9545,9548],[9545,9548],[10477,10480],[10477,10480],[13002,13005],[13002,13005],[14104,14107],[14104,14107],[15175,15178],[15175,15178],[16264,16267],[16264,16267],[18066,18069],[18066,18069],[19147,19150],[19147,19150],[20990,20993],[20990,20993],[22062,22065],[22062,22065],[43360,43363],[43360,43363],[43434,43437],[43434,43437],[1595,1598],[1595,1598],[1643,1646],[1643,1646],[1665,1668],[1665,1668],[1714,1717],[1714,1717],[1736,1739],[1736,1739],[1798,1801],[1798,1801],[2120,2123],[2120,2123],[2682,2685],[2682,2685],[2709,2712],[2709,2712],[2726,2729],[2726,2729],[2779,2782],[2779,2782],[2834,2837],[2834,2837],[1621,1624],[1621,1624],[1771,1774],[1771,1774],[1782,1785],[1782,1785],[9196,9199],[9196,9199],[9289,9292],[9289,9292],[9374,9377],[9374,9377],[9385,9388],[9385,9388],[7003,7006],[7003,7006],[7545,7548],[7545,7548],[8505,8508],[8505,8508],[8571,8574],[8571,8574],[8641,8644],[8641,8644],[7458,7461],[7458,7461],[8763,8766],[8763,8766],[10333,10336],[10333,10336],[11466,11469],[11466,11469],[1728,1731],[1728,1731],[1773,1776],[1773,1776],[2458,2461],[2458,2461],[4317,4320],[4317,4320],[4383,4386],[4383,4386],[4856,4859],[4856,4859],[4906,4909],[4906,4909],[5636,5639],[5636,5639],[5686,5689],[5686,5689],[6101,6104],[6101,6104],[6151,6154],[6151,6154],[7319,7322],[7319,7322],[7369,7372],[7369,7372],[8216,8219],[8216,8219],[8266,8269],[8266,8269],[9002,9005],[9002,9005],[9049,9052],[9049,9052],[9568,9571],[9568,9571],[9615,9618],[9615,9618],[9981,9984],[9981,9984],[11759,11762],[11759,11762],[3038,3041],[3038,3041],[3132,3135],[3132,3135],[3312,3315],[3312,3315],[3532,3535],[3532,3535],[3922,3925],[3922,3925],[7469,7472],[7469,7472],[7593,7596],[7593,7596],[7758,7761],[7758,7761],[7877,7880],[7877,7880],[7974,7977],[7974,7977],[10416,10419],[10416,10419],[11383,11386],[11383,11386],[13418,13421],[13418,13421],[14013,14016],[14013,14016],[15686,15689],[15686,15689],[1446,1449],[1446,1449],[2456,2459],[2456,2459],[2487,2490],[2487,2490],[2509,2512],[2509,2512],[2541,2544],[2541,2544],[2563,2566],[2563,2566],[2627,2630],[2627,2630],[2695,2698],[2695,2698],[2770,2773],[2770,2773],[2839,2842],[2839,2842],[2894,2897],[2894,2897],[2965,2968],[2965,2968],[3030,3033],[3030,3033],[3096,3099],[3096,3099],[3156,3159],[3156,3159],[3210,3213],[3210,3213],[3264,3267],[3264,3267],[3320,3323],[3320,3323],[3369,3372],[3369,3372],[3417,3420],[3417,3420],[3467,3470],[3467,3470],[3979,3982],[3979,3982],[4010,4013],[4010,4013],[4197,4200],[4197,4200],[4408,4411],[4408,4411],[4492,4495],[4492,4495],[1355,1358],[1355,1358],[2012,2015],[2012,2015],[2038,2041],[2038,2041],[2258,2261],[2258,2261],[2284,2287],[2284,2287],[2944,2947],[2944,2947],[2996,2999],[2996,2999],[3054,3057],[3054,3057],[3113,3116],[3113,3116],[3139,3142],[3139,3142],[3732,3735],[3732,3735],[4372,4375],[4372,4375],[9826,9829],[9826,9829],[9885,9888],[9885,9888],[11847,11850],[11847,11850],[11902,11905],[11902,11905],[11948,11951],[11948,11951],[11994,11997],[11994,11997],[12069,12072],[12069,12072],[12891,12894],[12891,12894],[13088,13091],[13088,13091],[13174,13177],[13174,13177],[13224,13227],[13224,13227],[13280,13283],[13280,13283],[13943,13946],[13943,13946],[14742,14745],[14742,14745],[15251,15254],[15251,15254],[15922,15925],[15922,15925],[15995,15998],[15995,15998],[16040,16043],[16040,16043],[16563,16566],[16563,16566],[17356,17359],[17356,17359],[17378,17381],[17378,17381],[17430,17433],[17430,17433],[17452,17455],[17452,17455],[17521,17524],[17521,17524],[17582,17585],[17582,17585],[17917,17920],[17917,17920],[17979,17982],[17979,17982],[18400,18403],[18400,18403],[18771,18774],[18771,18774],[19346,19349],[19346,19349],[19523,19526],[19523,19526],[19584,19587],[19584,19587],[20462,20465],[20462,20465],[20543,20546],[20543,20546],[21272,21275],[21272,21275],[21327,21330],[21327,21330],[21427,21430],[21427,21430],[21543,21546],[21543,21546],[21925,21928],[21925,21928],[21947,21950],[21947,21950],[22004,22007],[22004,22007],[22059,22062],[22059,22062],[22424,22427],[22424,22427],[22480,22483],[22480,22483],[22843,22846],[22843,22846],[22865,22868],[22865,22868],[22922,22925],[22922,22925],[22977,22980],[22977,22980],[26377,26380],[26377,26380],[27523,27526],[27523,27526],[28098,28101],[28098,28101],[29539,29542],[29539,29542],[31352,31355],[31352,31355],[32492,32495],[32492,32495],[33971,33974],[33971,33974],[34032,34035],[34032,34035],[34090,34093],[34090,34093],[34173,34176],[34173,34176],[34923,34926],[34923,34926],[35215,35218],[35215,35218],[35797,35800],[35797,35800],[36431,36434],[36431,36434],[37638,37641],[37638,37641],[38175,38178],[38175,38178],[11229,11232],[11229,11232],[11975,11978],[11975,11978],[13087,13090],[13087,13090],[13171,13174],[13171,13174],[13255,13258],[13255,13258],[13337,13340],[13337,13340],[15207,15210],[15207,15210],[15414,15417],[15414,15417],[16036,16039],[16036,16039],[16941,16944],[16941,16944],[17499,17502],[17499,17502],[17539,17542],[17539,17542],[17940,17943],[17940,17943],[18632,18635],[18632,18635],[19537,19540],[19537,19540],[20145,20148],[20145,20148],[21279,21282],[21279,21282],[24046,24049],[24046,24049],[25674,25677],[25674,25677],[27083,27086],[27083,27086],[28501,28504],[28501,28504],[28923,28926],[28923,28926],[29009,29012],[29009,29012],[29071,29074],[29071,29074],[29131,29134],[29131,29134],[29195,29198],[29195,29198],[29996,29999],[29996,29999],[31175,31178],[31175,31178],[31224,31227],[31224,31227],[32892,32895],[32892,32895],[32928,32931],[32928,32931],[33151,33154],[33151,33154],[33236,33239],[33236,33239],[33300,33303],[33300,33303],[33714,33717],[33714,33717],[33750,33753],[33750,33753],[33832,33835],[33832,33835],[33917,33920],[33917,33920],[33981,33984],[33981,33984],[34635,34638],[34635,34638],[34795,34798],[34795,34798],[34945,34948],[34945,34948],[35044,35047],[35044,35047],[35680,35683],[35680,35683],[36071,36074],[36071,36074],[36526,36529],[36526,36529],[36652,36655],[36652,36655],[36972,36975],[36972,36975],[37106,37109],[37106,37109],[37163,37166],[37163,37166],[37535,37538],[37535,37538],[37709,37712],[37709,37712],[37774,37777],[37774,37777],[38377,38380],[38377,38380],[39125,39128],[39125,39128],[39968,39971],[39968,39971],[40894,40897],[40894,40897],[40986,40989],[40986,40989],[41240,41243],[41240,41243],[41945,41948],[41945,41948],[42473,42476],[42473,42476],[42539,42542],[42539,42542],[42559,42562],[42559,42562],[48056,48059],[48056,48059],[50809,50812],[50809,50812],[51128,51131],[51128,51131],[51176,51179],[51176,51179],[53205,53208],[53205,53208],[54427,54430],[54427,54430],[54888,54891],[54888,54891],[55346,55349],[55346,55349],[55956,55959],[55956,55959],[56810,56813],[56810,56813],[57357,57360],[57357,57360],[3279,3282],[3279,3282],[4440,4443],[4440,4443],[5039,5042],[5039,5042],[5647,5650],[5647,5650],[6676,6679],[6676,6679],[6814,6817],[6814,6817],[14473,14476],[14473,14476],[15454,15457],[15454,15457],[16065,16068],[16065,16068],[17418,17421],[17418,17421],[24991,24994],[24991,24994],[28197,28200],[28197,28200],[28374,28377],[28374,28377],[29706,29709],[29706,29709],[29820,29823],[29820,29823],[30003,30006],[30003,30006],[30145,30148],[30145,30148],[2053,2056],[2053,2056],[2139,2142],[2139,2142],[2564,2567],[2564,2567],[2647,2650],[2647,2650],[3039,3042],[3039,3042],[3089,3092],[3089,3092],[993,996],[993,996],[1081,1084],[1081,1084],[1116,1119],[1116,1119],[1243,1246],[1243,1246],[1872,1875],[1872,1875],[2033,2036],[2033,2036],[1520,1523],[1520,1523],[1563,1566],[1563,1566],[1585,1588],[1585,1588],[1632,1635],[1632,1635],[1654,1657],[1654,1657],[1730,1733],[1730,1733],[1815,1818],[1815,1818],[1894,1897],[1894,1897],[1974,1977],[1974,1977],[2001,2004],[2001,2004],[2129,2132],[2129,2132],[2205,2208],[2205,2208],[2667,2670],[2667,2670],[2712,2715],[2712,2715],[2731,2734],[2731,2734],[2784,2787],[2784,2787],[2850,2853],[2850,2853],[1066,1069],[1066,1069],[1112,1115],[1112,1115],[1134,1137],[1134,1137],[1181,1184],[1181,1184],[1203,1206],[1203,1206],[1262,1265],[1262,1265],[1313,1316],[1313,1316],[1383,1386],[1383,1386],[1464,1467],[1464,1467],[1517,1520],[1517,1520],[1543,1546],[1543,1546],[2733,2736],[2733,2736],[2777,2780],[2777,2780],[2829,2832],[2829,2832],[2845,2848],[2845,2848],[2910,2913],[2910,2913],[2929,2932],[2929,2932],[3003,3006],[3003,3006],[3088,3091],[3088,3091],[3115,3118],[3115,3118],[3212,3215],[3212,3215],[3311,3314],[3311,3314],[3338,3341],[3338,3341],[3447,3450],[3447,3450],[3534,3537],[3534,3537],[3561,3564],[3561,3564],[3606,3609],[3606,3609],[3628,3631],[3628,3631],[3696,3699],[3696,3699],[3752,3755],[3752,3755],[3799,3802],[3799,3802],[3821,3824],[3821,3824],[3877,3880],[3877,3880],[3955,3958],[3955,3958],[4322,4325],[4322,4325],[4366,4369],[4366,4369],[4425,4428],[4425,4428],[4476,4479],[4476,4479],[4540,4543],[4540,4543],[5502,5505],[5502,5505],[6343,6346],[6343,6346],[10714,10717],[10714,10717],[11673,11676],[11673,11676],[12099,12102],[12099,12102],[13064,13067],[13064,13067],[13186,13189],[13186,13189],[13357,13360],[13357,13360],[13943,13946],[13943,13946],[14287,14290],[14287,14290],[14658,14661],[14658,14661],[15017,15020],[15017,15020],[15158,15161],[15158,15161],[15277,15280],[15277,15280],[16022,16025],[16022,16025],[16385,16388],[16385,16388],[19538,19541],[19538,19541],[20481,20484],[20481,20484],[20844,20847],[20844,20847],[21594,21597],[21594,21597],[21719,21722],[21719,21722],[25256,25259],[25256,25259],[26412,26415],[26412,26415],[27396,27399],[27396,27399],[28208,28211],[28208,28211],[28367,28370],[28367,28370],[29760,29763],[29760,29763],[30094,30097],[30094,30097],[31109,31112],[31109,31112],[31455,31458],[31455,31458],[33184,33187],[33184,33187],[34094,34097],[34094,34097],[34834,34837],[34834,34837],[34920,34923],[34920,34923],[36397,36400],[36397,36400],[37104,37107],[37104,37107],[11699,11702],[11699,11702],[11735,11738],[11735,11738],[11757,11760],[11757,11760],[11794,11797],[11794,11797],[11816,11819],[11816,11819],[11877,11880],[11877,11880],[11945,11948],[11945,11948],[12002,12005],[12002,12005],[12067,12070],[12067,12070],[12128,12131],[12128,12131],[12177,12180],[12177,12180],[12203,12206],[12203,12206],[12273,12276],[12273,12276],[12334,12337],[12334,12337],[1625,1628],[1625,1628],[1671,1674],[1671,1674],[1694,1697],[1694,1697],[2943,2946],[2943,2946],[2989,2992],[2989,2992],[3012,3015],[3012,3015],[4275,4278],[4275,4278],[4321,4324],[4321,4324],[4344,4347],[4344,4347],[5286,5289],[5286,5289],[6193,6196],[6193,6196],[6744,6747],[6744,6747],[8887,8890],[8887,8890],[8901,8904],[8901,8904],[8907,8910],[8907,8910],[8928,8931],[8928,8931],[2153,2156],[2153,2156],[2383,2386],[2383,2386],[2420,2423],[2420,2423],[2900,2903],[2900,2903],[2937,2940],[2937,2940],[4012,4015],[4012,4015],[4205,4208],[4205,4208],[4468,4471],[4468,4471],[4505,4508],[4505,4508],[868,871],[868,871],[1184,1187],[1184,1187],[1397,1400],[1397,1400],[1424,1427],[1424,1427],[1594,1597],[1594,1597],[1772,1775],[1772,1775],[1953,1956],[1953,1956],[2076,2079],[2076,2079],[2278,2281],[2278,2281],[2421,2424],[2421,2424],[2654,2657],[2654,2657],[6815,6818],[6815,6818],[7060,7063],[7060,7063],[7299,7302],[7299,7302],[7379,7382],[7379,7382],[7543,7546],[7543,7546],[7273,7276],[7273,7276],[7379,7382],[7379,7382],[7403,7406],[7403,7406],[7509,7512],[7509,7512],[7533,7536],[7533,7536],[10041,10044],[10041,10044],[10253,10256],[10253,10256],[10307,10310],[10307,10310],[10356,10359],[10356,10359],[10401,10404],[10401,10404],[10445,10448],[10445,10448],[10494,10497],[10494,10497],[10542,10545],[10542,10545],[10596,10599],[10596,10599],[10652,10655],[10652,10655],[10706,10709],[10706,10709],[10761,10764],[10761,10764],[11197,11200],[11197,11200],[11852,11855],[11852,11855],[11947,11950],[11947,11950],[12860,12863],[12860,12863],[12955,12958],[12955,12958],[514,517],[514,517],[617,620],[617,620],[642,645],[642,645],[1391,1394],[1391,1394],[1946,1949],[1946,1949],[3464,3467],[3464,3467],[3650,3653],[3650,3653],[4490,4493],[4490,4493],[5032,5035],[5032,5035],[5789,5792],[5789,5792],[7049,7052],[7049,7052],[8579,8582],[8579,8582],[10025,10028],[10025,10028],[11736,11739],[11736,11739],[12382,12385],[12382,12385],[13391,13394],[13391,13394],[15872,15875],[15872,15875],[16560,16563],[16560,16563],[17546,17549],[17546,17549],[18608,18611],[18608,18611],[19125,19128],[19125,19128],[19784,19787],[19784,19787],[20485,20488],[20485,20488],[20806,20809],[20806,20809],[21242,21245],[21242,21245],[23987,23990],[23987,23990],[24705,24708],[24705,24708],[25079,25082],[25079,25082],[25423,25426],[25423,25426],[25785,25788],[25785,25788],[26327,26330],[26327,26330],[26727,26730],[26727,26730],[27260,27263],[27260,27263],[27657,27660],[27657,27660],[28683,28686],[28683,28686],[29015,29018],[29015,29018],[29462,29465],[29462,29465],[29651,29654],[29651,29654],[30003,30006],[30003,30006],[31344,31347],[31344,31347],[32134,32137],[32134,32137],[32869,32872],[32869,32872],[33966,33969],[33966,33969],[34515,34518],[34515,34518],[34911,34914],[34911,34914],[34990,34993],[34990,34993],[36229,36232],[36229,36232],[37033,37036],[37033,37036],[37477,37480],[37477,37480],[38063,38066],[38063,38066],[43273,43276],[43273,43276],[43971,43974],[43971,43974],[44889,44892],[44889,44892],[45128,45131],[45128,45131],[45337,45340],[45337,45340],[45597,45600],[45597,45600],[45880,45883],[45880,45883],[46589,46592],[46589,46592],[47247,47250],[47247,47250],[1269,1272],[1269,1272],[2013,2016],[2013,2016],[1909,1912],[1909,1912],[2373,2376],[2373,2376],[2921,2924],[2921,2924],[3355,3358],[3355,3358],[1666,1669],[1666,1669],[1659,1662],[1659,1662],[1913,1916],[1913,1916],[3301,3304],[3301,3304],[3741,3744],[3741,3744],[892,895],[892,895],[1042,1045],[1042,1045],[1081,1084],[1081,1084],[3947,3950],[3947,3950],[4115,4118],[4115,4118],[4821,4824],[4821,4824],[4873,4876],[4873,4876],[5664,5667],[5664,5667],[6689,6692],[6689,6692],[6890,6893],[6890,6893],[7644,7647],[7644,7647],[8767,8770],[8767,8770],[8939,8942],[8939,8942],[10246,10249],[10246,10249],[11581,11584],[11581,11584],[11625,11628],[11625,11628],[12748,12751],[12748,12751],[12800,12803],[12800,12803],[14194,14197],[14194,14197],[14246,14249],[14246,14249],[14352,14355],[14352,14355],[14476,14479],[14476,14479],[15779,15782],[15779,15782],[17421,17424],[17421,17424],[17539,17542],[17539,17542],[17615,17618],[17615,17618],[18410,18413],[18410,18413],[18543,18546],[18543,18546],[19472,19475],[19472,19475],[19602,19605],[19602,19605],[20519,20522],[20519,20522],[21905,21908],[21905,21908],[22208,22211],[22208,22211],[22936,22939],[22936,22939],[22988,22991],[22988,22991],[23757,23760],[23757,23760],[24536,24539],[24536,24539],[24590,24593],[24590,24593],[26067,26070],[26067,26070],[26232,26235],[26232,26235],[26423,26426],[26423,26426],[26549,26552],[26549,26552],[27209,27212],[27209,27212],[27416,27419],[27416,27419],[27636,27639],[27636,27639],[27842,27845],[27842,27845],[27943,27946],[27943,27946],[29398,29401],[29398,29401],[29963,29966],[29963,29966],[30927,30930],[30927,30930],[31057,31060],[31057,31060],[31748,31751],[31748,31751],[31804,31807],[31804,31807],[32687,32690],[32687,32690],[32969,32972],[32969,32972],[33645,33648],[33645,33648],[34099,34102],[34099,34102],[34869,34872],[34869,34872],[35351,35354],[35351,35354],[36416,36419],[36416,36419],[37170,37173],[37170,37173],[37695,37698],[37695,37698],[38561,38564],[38561,38564],[40970,40973],[40970,40973],[42404,42407],[42404,42407],[43688,43691],[43688,43691],[44729,44732],[44729,44732],[45663,45666],[45663,45666],[2017,2020],[2017,2020],[9366,9369],[9366,9369],[1866,1869],[1866,1869],[1940,1943],[1940,1943],[975,978],[975,978],[1005,1008],[1005,1008],[1060,1063],[1060,1063],[1200,1203],[1200,1203],[1594,1597],[1594,1597]] \ No newline at end of file diff --git a/.fakebin-9475/npm b/.fakebin-9475/npm deleted file mode 100755 index 9422990b9c..0000000000 --- a/.fakebin-9475/npm +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash -if [ "$1" = "view" ]; then echo "3.8.99"; exit 0; fi -if [ "$1" = "install" ]; then echo "added 1 package"; exit 0; fi -exit 0 diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 9a80160f26..c4584a1499 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -10,7 +10,7 @@ ## Validation Choose the change type and focused loop from the -[Contribution Golden Path](../docs/dev/CONTRIBUTION_GOLDEN_PATH.md). The full unit suite, +[Contribution Golden Path](../docs/ops/CONTRIBUTION_GOLDEN_PATH.md). The full unit suite, Vitest, the 60% coverage gate, and the production build all run in CI on this PR (#8329): - [ ] Change type: provider / routing / UI / i18n / CLI / DB / build-deploy / other diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 2ae73d9711..38b1ede96e 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -275,15 +275,22 @@ jobs: # arrives in 7.1, so typescript-eslint / type-coverage / Stryker stay on 6.x # (the hybrid is the officially documented pattern). Isolated npx on purpose: # installing an alias package could collide node_modules/.bin/tsc with 6.x. - # Promote to the blocking gate after ~1 week of parity with the step above. + # The full result stays advisory while #8484 has a backlog. The blocking + # base-relative ratchet immediately below rejects only diagnostics added by + # the PR, so existing release debt does not block unrelated work. - name: Typecheck (core) — TS7 native shadow (advisory) continue-on-error: true run: | RC=0 START=$(date +%s) - npx -y -p typescript@7 tsc --pretty false -p tsconfig.typecheck-core.json || RC=$? + npm exec --yes --package=typescript@7.0.2 -- tsc --pretty false -p tsconfig.typecheck-core.json || RC=$? echo "[ts7-shadow] exit=$RC elapsed=$(( $(date +%s) - START ))s — the 6.x step above stays authoritative" exit $RC + - name: Typecheck (core) — TS7 zero-new-diagnostics ratchet + if: ${{ github.event_name == 'pull_request' }} + env: + TS7_BASE_REF: ${{ github.event.pull_request.base.sha }} + run: npm run check:ts7-diagnostics-ratchet -- --base-ref "$TS7_BASE_REF" # TIA: build the impact map at runtime (gitignored, ~21MB) and run only the # unit tests impacted by this PR's changed files. On hub/unmapped changes the # selector returns __RUN_ALL__ — full-suite authority is the parallel diff --git a/.gitignore b/.gitignore index e3c17b29d0..345762d7e3 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,7 @@ _tasks/ .logs/** .tests/** .coverage/** -coverage/ +/coverage/ .dist/** .next/** .build/** @@ -44,6 +44,7 @@ memory-bank/ # Root-level underscore-prefixed directories (private/draft — never commit) /_*/ +/_* # Draft features documentation (internal only) docs/new-features/ @@ -57,10 +58,6 @@ node_modules/ *.map .DS_Store -# Obsidian sync plugin — committed for community distribution -!obsidian-plugin/ -obsidian-plugin/node_modules/ - # Serena AI assistant config (local-only tool, not project code) .serena/ @@ -74,6 +71,7 @@ yarn-error.log* .env* !.env.example !.env.homolog.example +!.env.devin-bridge.example # Provider API keys (never commit) *.api-key .nvidia-api-key @@ -86,7 +84,7 @@ yarn-error.log* next-env.d.ts # data and logs -data/ +/data/ .data/ logs/* test_output.log @@ -108,7 +106,7 @@ open-sse/test/* test-results/ playwright-report/ blob-report/ -cloud/ +/cloud/ .tmp/ # Security Analysis (standalone project with own git) @@ -159,6 +157,7 @@ vscode-extension/ # Empty/dangling files typescript +/MAX # Gemini Antigravity agent data .gemini/ @@ -174,7 +173,6 @@ config/quality/test-impact-map.json # GitNexus local index .gitnexus .worktrees -bin/omniroute.mjs # Consistent with .dockerignore / .npmignore .omc/ @@ -203,13 +201,16 @@ scripts/i18n/_pending-keys.json .claude/worktrees/ .codegraph/ +# Test executable shims belong in the OS temporary directory, not the repository root +/.fakebin-*/ + # Fumadocs generated source .source/ # AI agent local settings and configs .agents/ .antigravitycli/ -.claude/ +/.claude/ # PR Reviews and local feedback files pr_reviews*.json @@ -262,10 +263,13 @@ _artifacts/ # release-green artifacts # ESLint file cache (npm run lint --cache / complexity ratchets) .eslintcache .eslintcache-complexity +/.eslintcache-* # CI/local quality artifacts (eslint-results.json, quality-ratchet.md, etc.) .artifacts/ +/perf-audit*.md +/quality-ratchet/ # Homologation E2E suite (npm run homolog) — real-environment credentials + report output .env.homolog diff --git a/.npmignore b/.npmignore index ab2b7c1e44..96d4c898d6 100644 --- a/.npmignore +++ b/.npmignore @@ -94,6 +94,10 @@ vscode-extension/ /_*/ # Consistent with .gitignore and .dockerignore +.claude/ +.fakebin-* +.eslintcache* +_tasks/ .DS_Store .idea/ .config/ diff --git a/AGENTS.md b/AGENTS.md index 9d29c93258..9279079fa0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -46,7 +46,7 @@ Repository map and Reference Documentation sections below. ## Project at a Glance -**OmniRoute** — unified AI proxy/router. One endpoint, 291 LLM providers, auto-fallback. +**OmniRoute** — unified AI proxy/router. One endpoint, 338 LLM providers, auto-fallback. | Layer | Location | Purpose | | ------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -56,9 +56,9 @@ Repository map and Reference Documentation sections below. | Translators | `open-sse/translator/` | Format conversion (OpenAI↔Claude↔Gemini) | | Transformer | `open-sse/transformer/` | Responses API ↔ Chat Completions | | Services | `open-sse/services/` | Combo routing, rate limits, caching, etc | -| Database | `src/lib/db/` | SQLite domain modules (130 migrations) | +| Database | `src/lib/db/` | SQLite domain modules (144 migrations) | | Domain/Policy | `src/domain/` | Policy engine, cost rules, fallback logic | -| MCP Server | `open-sse/mcp-server/` | 105 tools (42 base + memory/skill/agentSkill/pool/notion/obsidian/gamification/plugin modules), 3 transports (stdio / SSE / Streamable HTTP), 31 scopes | +| MCP Server | `open-sse/mcp-server/` | 105 tools (43 base + memory/skill/agentSkill/pool/notion/obsidian/gamification/plugin modules), 3 transports (stdio / SSE / Streamable HTTP), 31 scopes | | A2A Server | `src/lib/a2a/` | JSON-RPC 2.0 agent protocol | | Skills | `src/lib/skills/` | Extensible skill framework | | Memory | `src/lib/memory/` | Persistent conversational memory | @@ -83,7 +83,7 @@ Client → /v1/chat/completions (Next.js route) API routes follow a consistent pattern: `Route → CORS preflight → Zod body validation → Optional auth (extractApiKey/isValidApiKey) → API key policy enforcement → Handler delegation (open-sse)`. No global Next.js middleware — interception is route-specific. -**Combo routing** (`open-sse/services/combo.ts`): 19 public strategies (priority, weighted, fill-first, round-robin, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline). Each target calls `handleSingleModel()` which wraps `handleChatCore()` with per-target error handling and circuit breaker checks. The `fusion` strategy is the exception: it fans out to a panel of models in parallel, then a judge model synthesizes one final answer (`open-sse/services/fusion.ts`). See `docs/routing/AUTO-COMBO.md` for the 13-factor Auto-Combo scoring + the full strategy table and `docs/architecture/RESILIENCE_GUIDE.md` for the 3 resilience layers. +**Combo routing** (`open-sse/services/combo.ts`): 19 public strategies (priority, weighted, fill-first, round-robin, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline). Each target calls `handleSingleModel()` which wraps `handleChatCore()` with per-target error handling and circuit breaker checks. The `fusion` strategy is the exception: it fans out to a panel of models in parallel, then a judge model synthesizes one final answer (`open-sse/services/fusion.ts`). See `docs/routing/AUTO-COMBO.md` for the 14-factor Auto-Combo scoring + the full strategy table and `docs/architecture/RESILIENCE_GUIDE.md` for the 3 resilience layers. --- @@ -247,17 +247,26 @@ Read the nearest `AGENTS.md` and the linked deep-dive before making a non-trivia ## File placement & repo-root hygiene - **Test files**: ALL unit tests, integration tests, ecosystem tests, or Vitest files MUST strictly be placed within the `tests/` directory (e.g., `tests/unit/`, `tests/integration/`). NEVER create test files in the project root (`/`). -- **Scripts and utilities**: ALL maintenance, debugging, generation, or experimental scripts (`.cjs`, `.mjs`, `.js`, `.ts`) MUST be placed strictly inside one of the `scripts/` subfolders (`build/`, `dev/`, `check/`, `docs/`, `i18n/`, `ad-hoc/`). One-shot or experimental code goes under `scripts/ad-hoc/`. NEVER dump loose scripts in the project root (`/`) or the top-level `scripts/` folder. +- **Scripts and utilities**: ALL maintenance, debugging, generation, or experimental scripts (`.cjs`, `.mjs`, `.js`, `.ts`) MUST be placed strictly inside one of the `scripts/` subfolders (`build/`, `dev/`, `check/`, `docs/`, `i18n/`, `ad-hoc/`, `quality/`, `release/`, `ci/`, `ops/`, `perf/`, `research/`, `sre/`, `vps/`, `homolog/`, `raycast/`, `skills/`, `test/`, `cli/`, `compression/`, `compression-eval/`, `devin-bridge/`, `docker/`, `features/`, `router-eval/`). One-shot or experimental code goes under `scripts/ad-hoc/`. NEVER dump loose scripts in the project root (`/`) or the top-level `scripts/` folder. **The project root MUST ONLY contain:** - Configuration files (`vitest.config.ts`, `next.config.mjs`, `eslint.config.mjs`, `tsconfig*.json`, `playwright.config.ts`, `prettier.config.mjs`, `postcss.config.mjs`, `sonar-project.properties`, `fly.toml`, `docker-compose*.yml`, `Dockerfile`) - Dependency files (`package.json`, `package-lock.json`) -- Documentation files (`README.md`, `CHANGELOG.md`, `LICENSE`, `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, `CONTRIBUTING.md`, `SECURITY.md`, `CODE_OF_CONDUCT.md`, `llm.txt`, `Tuto_Qdrant.md`) +- Documentation files (`README.md`, `CHANGELOG.md`, `ROADMAP.md`, `LICENSE`, `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, `CONTRIBUTING.md`, `SECURITY.md`, `CODE_OF_CONDUCT.md`, `llm.txt`, `Tuto_Qdrant.md`) - CI/CD files and ignore definitions (`.gitignore`, `.dockerignore`, `.npmignore`, `.npmrc`, `.node-version`, `.nvmrc`, `.env.example`) When creating _any_ validation tests or one-off logic scripts, default to `scripts/ad-hoc/` or `tests/unit/` according to your goals. Do not pollute the `/` root context. +- **Root `_*` paths are private and NEVER tracked** (`_tasks/`, `_references/`, `_mono_repo/`, + `_ideia/`, `_cache/` and any future `_`): they live on disk only, are gitignored by the + anchored patterns `/_*/` + `/_*`, and some are full git repositories of their own (`_tasks` → + private remote `_tasks_omniroute`). Never `git add` anything inside them (a plain `add` is + already blocked by the ignore; never use `-f`), and never "clean them up" from the main repo — + untracking is done with `git rm --cached` so the disk content stays. The + `check:tracked-artifacts` gate (pre-commit + CI) fails on ANY tracked root path starting with + `_`, present or future. See Hard Rule #23 for the `_tasks` specifics. + --- ## Key Conventions @@ -291,7 +300,7 @@ When creating _any_ validation tests or one-off logic scripts, default to `scrip - Encrypt credentials at rest (AES-256-GCM); never log SQLite encryption keys - Sanitize user HTML with DOMPurify - Upstream header denylist: `src/shared/constants/upstreamHeaders.ts` — keep sanitize, Zod schemas, and unit tests aligned when editing -- **Public upstream credentials** (Gemini/Antigravity/Windsurf-style OAuth client_id/secret + Firebase Web keys extracted from public CLIs): **MUST** be embedded via `resolvePublicCred()` from `open-sse/utils/publicCreds.ts` — **never** as string literals. See `docs/security/PUBLIC_CREDS.md` for the mandatory pattern. +- **Public upstream credentials** (for example, OAuth client_id/secret values or Firebase Web keys extracted from public CLIs): **MUST** be embedded via `resolvePublicCred()` from `open-sse/utils/publicCreds.ts` — **never** as string literals. See `docs/security/PUBLIC_CREDS.md` for the mandatory pattern. - **Error responses** (HTTP / SSE / executor / MCP handler): **MUST** route through `buildErrorBody()` or `sanitizeErrorMessage()` from `open-sse/utils/error.ts` — **never** put raw `err.stack` or `err.message` in a response body. See `docs/security/ERROR_SANITIZATION.md`. - **Shell commands built from variables**: when calling `exec()`/`spawn()` with a script that needs runtime values, pass them via the `env` option (shell-escaped automatically) — **never** string-interpolate untrusted/external paths into the script body. Reference: `src/mitm/cert/install.ts::updateNssDatabases`. - **Secure-by-default libraries** ([tldrsec/awesome-secure-defaults](https://github.com/tldrsec/awesome-secure-defaults)): prefer Helmet.js, DOMPurify, ssrf-req-filter, safe-regex, Google Tink over custom implementations whenever adding new security-sensitive surfaces. @@ -395,7 +404,7 @@ For any non-trivial change, read the matching deep-dive first: | Repo navigation | `docs/architecture/REPOSITORY_MAP.md` | | Architecture | `docs/architecture/ARCHITECTURE.md` | | Engineering reference | `docs/architecture/CODEBASE_DOCUMENTATION.md` | -| Auto-Combo (13-factor scoring, 19 strategies) | `docs/routing/AUTO-COMBO.md` | +| Auto-Combo (14-factor scoring, 19 strategies) | `docs/routing/AUTO-COMBO.md` | | Resilience (3 mechanisms) | `docs/architecture/RESILIENCE_GUIDE.md` | | Reasoning replay | `docs/routing/REASONING_REPLAY.md` | | Skills framework | `docs/frameworks/SKILLS.md` | @@ -419,7 +428,7 @@ For any non-trivial change, read the matching deep-dive first: | Electron desktop app | `docs/guides/ELECTRON_GUIDE.md` | | Release flow | `docs/ops/RELEASE_CHECKLIST.md` | | Embedded services | `docs/frameworks/EMBEDDED-SERVICES.md` | -| Quality gates (~48 scripts, allowlist policy) | `docs/architecture/QUALITY_GATES.md` | +| Quality gates (~80 scripts, allowlist policy) | `docs/architecture/QUALITY_GATES.md` | --- @@ -611,7 +620,7 @@ focused checks, and use a Conventional Commit message (for example, `docs: slim ## Quality Gates & Ratchets -OmniRoute has **~48 quality-gate scripts** (`scripts/check/` + `scripts/quality/`) wired +OmniRoute has **~80 quality-gate scripts** (`scripts/check/` + `scripts/quality/`) wired across **9 gate-running jobs** in `.github/workflows/ci.yml` (`lint`, `quality-gate`, `quality-extended`, `docs-sync-strict`, `i18n-ui-coverage`, `i18n`, `pr-test-policy`, `test-vitest`, `sonarqube`), plus the `quality.yml` fast-gates job (PR→`release/**`) and @@ -662,6 +671,18 @@ the stale-enforcement added in Fase 6A.3. 22. **Cross-session safety — this repo is worked by MANY parallel sessions/agents at once; never step on another's in-flight work.** Two absolute bans, both recurring incidents (this rule exists because they keep happening): - **(a) Never `git stash` / `git stash pop` — ANYWHERE in this repo, including inside an isolated worktree, and including inside any subagent you dispatch.** `git stash` operates on the **shared repository object store**, not the per-worktree working tree — so a stash pushed or popped in one session can silently clobber or resurrect another parallel session's uncommitted changes. This is not hypothetical: 2026-07-02 a `#5923` quotaCache change leaked into the unrelated `#2296` worktree via a global `stash pop`, and the same class reincided through a **subagent**. To compare working changes against a base ref **without** stashing, use `git show :` or `git diff -- `; to confirm a typecheck/lint error is pre-existing on the base, inspect the base ref directly (`git show origin/release/vX.Y.Z:`) — never stash your tree away to "get it clean". **Put this ban verbatim in the prompt of every subagent that touches git** (agents don't inherit this file's context — the recurrence was a subagent). - **(b) Never merge, push, rebase, or force-push a PR / branch / worktree that another session is actively working.** An open PR whose head is a live fix worktree in `.claude/worktrees/` you did **not** create (e.g. `fix-5852`/`fix-5923` carrying fresh commits, even when they share your `diegosouzapw` identity), or any branch another session owns, is **off-limits — HOLD**, and let the owning session merge it. **Before** merging or pushing to any PR you did not create _this_ session, run `git worktree list` to check for a matching in-flight worktree and re-check `gh pr view --json state,headRefOid`. Only the owning session merges its own in-flight PR; mid-flight merges race the owner and re-trigger the exact commit/CHANGELOG races Rule #19 and Rule #21 guard against. (Reinforces Rule #19.) +23. **`_tasks/` é INTOCÁVEL como estrutura — append/edit-only.** É um repositório git SEPARADO + (remote privado `diegosouzapw/_tasks_omniroute`) montado como diretório real na raiz do + checkout principal. Regras absolutas: (a) NUNCA mover, renomear, deletar, esvaziar ou + transformar `_tasks` em symlink; sessões só podem CRIAR ou EDITAR arquivos dentro dele; + (b) NUNCA rastrear `_tasks` (nem como symlink) no repo principal — o blob rastreado foi a + causa-raiz de DOIS wipes (2026-08-08 e 2026-08-10: `git reset --hard` materializou o + symlink rastreado por cima do diretório real e o git apagou todo o conteúdo ignorado sem + aviso); (c) após qualquer escrita relevante, `git -C _tasks add -A && git -C _tasks commit + && git -C _tasks push` — o push frequente é o backup real; (d) repetir esta proibição + VERBATIM no prompt de todo subagente que toque git; (e) se `_tasks` aparecer como symlink + quebrado, NÃO commitar nada — restaurar do remote e avisar o operador. O gate + `check:tracked-artifacts` (pre-commit + CI) bloqueia `_tasks` rastreado em qualquer forma. --- diff --git a/CLAUDE.md b/CLAUDE.md index 102ecd1378..0e02a4aa1f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -3,7 +3,7 @@ @AGENTS.md **All project rules live in [`AGENTS.md`](AGENTS.md)** — the single source of truth for every AI -assistant (architecture, conventions, testing, quality gates, git workflow, the 22 Hard Rules, +assistant (architecture, conventions, testing, quality gates, git workflow, the 23 Hard Rules, PII learnings). Read it in full; do not re-add project rules here. Everything below applies ONLY to Claude Code — operational refinements of rules already defined in `AGENTS.md`. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 564aedadfa..325b2b4f9a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,7 +3,7 @@ Thank you for your interest in contributing! This guide covers everything you need to get started. For the official per-change workflow, start with the -[Contribution Golden Path](docs/dev/CONTRIBUTION_GOLDEN_PATH.md). It maps provider, routing, +[Contribution Golden Path](docs/ops/CONTRIBUTION_GOLDEN_PATH.md). It maps provider, routing, UI/UX, i18n, CLI, database, and build/deploy changes to their contracts, focused tests, CI coverage, and reconciliation steps. @@ -210,7 +210,7 @@ Coverage notes: ### Pull Request Requirements Before opening a PR, use the -[Contribution Golden Path](docs/dev/CONTRIBUTION_GOLDEN_PATH.md) to run the focused loop for +[Contribution Golden Path](docs/ops/CONTRIBUTION_GOLDEN_PATH.md) to run the focused loop for what you changed. The full unit suite (4 CI shards), Vitest, the **60%+** coverage gate, and the production build are CI's responsibility — running them locally adds no signal the PR checks will not already give you, and on smaller machines it can saturate the host (#8084): diff --git a/Dockerfile b/Dockerfile index 62aef90240..ddcb04975b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,14 +15,46 @@ RUN --mount=type=cache,id=apt-cache,target=/var/cache/apt,sharing=locked \ && apt-get install -y --no-install-recommends libsecret-1-0 ca-certificates \ && rm -rf /var/lib/apt/lists/* -# Refresh the globally-installed npm so its *bundled* node_modules (undici, tar) -# ship the patched versions. These are npm's own internals — not application -# dependencies (our app already resolves undici@8.5.0 / tar@7.5.16, both fixed) — -# but the container scanner flags the stale copies under -# /usr/local/lib/node_modules/npm/node_modules. npm is not invoked at runtime in -# the runner stages, so this is hygiene, not an exploitable runtime path. -RUN npm install -g npm@latest \ - && npm cache clean --force +# npm's *bundled* node_modules (brace-expansion, ip-address, tar, undici) are +# npm's own internals — not application dependencies (the app resolves its own, +# already-fixed copies) — but the container scanner reads them off +# /usr/local/lib/node_modules/npm/node_modules and reports 9 HIGH/MEDIUM CVEs. +# +# Refreshing npm does NOT fix them. Measured on npm@12.0.2 (2026-08-12, latest): +# brace-expansion 5.0.7 (needs >= 5.0.9) CVE-2026-69152, CVE-2026-14257 +# ip-address 10.2.0 (needs >= 10.3.1) CVE-2026-69192/-69198/-54272 +# tar 7.5.19 (needs >= 7.5.21) GHSA-r292-9mhp-454m +# undici 6.27.0 (needs >= 6.28.0) CVE-2026-16729/-16728/-15157 +# No published npm release carries patched copies, so `npm install -g npm@latest` +# alone was pure build time for zero CVEs — it is kept only to land on a known, +# current npm tree, and the patched copies are overlaid on top below. +# +# Deleting npm from the runner stages is NOT an option: the application shells +# out to npm at runtime (src/lib/services/installers/utils.ts::runNpm for the +# embedded services, src/lib/system/{autoUpdate,globalPackagePath}.ts, +# src/app/api/system/version). The previous version of this comment claimed the +# opposite; it was wrong. +# +# The overlay is semver-compatible with the ranges npm's own tree declares +# (minimatch → brace-expansion ^5.0.5, socks → ip-address ^10.1.1, node-gyp → +# tar ^7.5.4 and undici ^6.25.0 — hence undici stays on the 6.x line, NOT 8.x). +# --install-strategy=nested makes each replacement self-contained, so it cannot +# perturb the versions the rest of npm's flat tree resolves. +RUN set -eux; \ + npm install -g npm@latest; \ + npm install --prefix /tmp/npm-cve-patch --no-audit --no-fund --ignore-scripts \ + --install-strategy=nested \ + brace-expansion@5.0.9 ip-address@10.5.0 tar@7.5.22 undici@6.28.0; \ + for pkg in brace-expansion ip-address tar undici; do \ + test -d "/usr/local/lib/node_modules/npm/node_modules/$pkg"; \ + rm -rf "/usr/local/lib/node_modules/npm/node_modules/$pkg"; \ + cp -R "/tmp/npm-cve-patch/node_modules/$pkg" \ + "/usr/local/lib/node_modules/npm/node_modules/$pkg"; \ + done; \ + rm -rf /tmp/npm-cve-patch; \ + node -e "for (const p of ['brace-expansion','ip-address','tar','undici']) console.log(p, require('/usr/local/lib/node_modules/npm/node_modules/'+p+'/package.json').version);"; \ + npm --version; \ + npm cache clean --force # ── Builder ──────────────────────────────────────────────────────────────── FROM base AS builder diff --git a/GEMINI.md b/GEMINI.md index 7c33fee37b..1653d5ce88 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -1,7 +1,7 @@ # GEMINI.md > **Single source of truth:** all project rules for AI assistants live in -> [`AGENTS.md`](AGENTS.md). Read it in full before any change — it contains the 22 Hard Rules, +> [`AGENTS.md`](AGENTS.md). Read it in full before any change — it contains the 23 Hard Rules, > quality gates, code conventions, file-placement / repo-root hygiene rules, the repository map > and the local development access notes that used to live in this file. diff --git a/MAX b/MAX deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/README.md b/README.md index 9aa175ff43..71bace7268 100644 --- a/README.md +++ b/README.md @@ -7,19 +7,19 @@ # 🚀 OmniRoute — The Free AI Gateway -OmniRoute — Never stop coding. Every AI tool → 291 providers — 90+ free — through one endpoint. Claude Code, Codex, Cursor, Cline, Copilot & Antigravity into FREE Claude / GPT / Gemini with auto-fallback. RTK + Caveman stacked compression saves 15–95% tokens (~89% avg) — never hit limits. 291 AI providers · 90+ free tiers · ~1.53B free tokens/mo · 19 routing strategies · $0 to start. +OmniRoute — Never stop coding. Every AI tool → 338 providers — 90+ free — through one endpoint. Claude Code, Codex, Cursor, Cline, Copilot & Antigravity into FREE Claude / GPT / Gemini with auto-fallback. RTK + Caveman stacked compression saves 15–95% tokens (~89% avg) — never hit limits. 338 AI providers · 90+ free tiers · ~1.51B free tokens/mo · 19 routing strategies · $0 to start.
-## 💰 ~1.53B Free Tokens / Month +## 💰 ~1.51B Free Tokens / Month
-> Stacking free tiers by hand is painful — dozens of SDKs, dozens of rate limits, and no idea how much you actually have. OmniRoute aggregates the **documented** free tiers of **43 provider pools / 516 models** into one honest number and shows it live on the dashboard (`/dashboard/free-tiers`). +> Stacking free tiers by hand is painful — dozens of SDKs, dozens of rate limits, and no idea how much you actually have. OmniRoute aggregates the **documented** free tiers of **42 provider pools / 495 models** into one honest number and shows it live on the dashboard (`/dashboard/free-tiers`). -OmniRoute free-tier budget card: ~1.53B free tokens per month steady, up to ~2.15B in the first month with signup credits, from the documented free tiers of 43 provider pools / 516 models behind one endpoint. Honest pool-deduped math — each shared pool counted once (counting every rate limit 24/7 would read ~10B; not published), 15 providers ToS-flagged so you decide. Budget bar of the countable free pools with per-model grid (Mistral Large 3 1B, GPT-4o mini 150M, Gemini 2.5 Flash 60M … Claude Sonnet 4.5 25K), one-time first-month signup credits (vertex 300M, agentrouter 200M, predibase 25M, together 25M, glm-cn 20M, doubao 15M, ai21 10M, longcat 10M, deepseek 5M, hyperbolic 5M, nscale 5M), plus permanently-free no-token-cap providers (SiliconFlow, Z.AI GLM-Flash, Kilo, OpenCode Zen, baidu …) and a $10 OpenRouter top-up unlocking +24M/mo — surfaced separately so they never inflate the headline. Live used/remaining on /dashboard/free-tiers. +OmniRoute free-tier budget card: ~1.51B free tokens per month steady, up to ~2.13B in the first month with signup credits, from the documented free tiers of 42 provider pools / 495 models behind one endpoint. Honest pool-deduped math — each shared pool counted once (counting every rate limit 24/7 would read ~10B; not published), 15 providers ToS-flagged so you decide. Budget bar of the countable free pools with per-model grid (Mistral Large 3 1B, GPT-4o mini 150M, Gemini 2.5 Flash 60M … Claude Sonnet 4.5 25K), one-time first-month signup credits (vertex 300M, agentrouter 200M, predibase 25M, together 25M, glm-cn 20M, doubao 15M, ai21 10M, longcat 10M, deepseek 5M, hyperbolic 5M, nscale 5M), plus permanently-free no-token-cap providers (SiliconFlow, Z.AI GLM-Flash, Kilo, OpenCode Zen, baidu …) and a $10 OpenRouter top-up unlocking +24M/mo — surfaced separately so they never inflate the headline. Live used/remaining on /dashboard/free-tiers. > Animated summary of the live `/dashboard/free-tiers` page. Full methodology (pool dedupe, credit tiers, provider terms): **[docs/reference/FREE_TIERS.md](docs/reference/FREE_TIERS.md)**. > @@ -38,6 +38,7 @@ [![Stars](https://img.shields.io/github/stars/diegosouzapw/OmniRoute?style=social)](https://github.com/diegosouzapw/OmniRoute)
diegosouzapw%2FOmniRoute | Trendshift [![Star History Rank](https://api.star-history.com/badge?repo=diegosouzapw/OmniRoute&theme=dark)](https://www.star-history.com/diegosouzapw/omniroute) +[![olud.ai](https://olud.ai/badge.php?tool=diegosouzapw-omniroute)](https://olud.ai/project/diegosouzapw-omniroute.html) ### 💬 Join the community @@ -56,6 +57,25 @@
+## 📈 The Gateway Keeps Growing + +
+ +| | v3.8.49 | **v3.8.50** | `v3.8.51+` | +| ------------------------- | :-----: | :---------: | :---------: | +| 🌐 Providers | 291 | **338** | more queued | +| 🧠 Documented models | 500+ | **1200+** | — | +| 🖼️ Modality Bridge | — | 🆕 vision | video | +| 📡 Radar free catalog | — | — | 🔭 next | +| ⚖️ Quota-aware scheduling | — | — | 🔭 next | +| 📊 Quota telemetry | — | — | 🔭 next | + +**→ [Roadmap](ROADMAP.md) — riding the rail to `v3.9.0 LTS`** + +
+ +
+ ## 🧩 Available [![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute) @@ -81,7 +101,7 @@ ⚙️ Features 🎯 Combos - 🌐 Providers + 🌐 Providers 🔌 CLI & MCP @@ -190,7 +210,7 @@ curl http://localhost:20128/v1/chat/completions \ -The Promise — One endpoint. 291 providers. Never stop building — OmniRoute picks the cheapest one that works. Six pillars: Never hit limits (auto-fallback across 291 providers in milliseconds, zero downtime) · Save up to 95% tokens (RTK + Caveman stacked compression cuts 15–95%, ~89% avg on tool-heavy sessions) · $0 to start (90+ free tiers, 40+ free forever — no card needed) · Every tool works (33 coding agents through one config) · One endpoint (OpenAI ↔ Claude ↔ Gemini ↔ Responses API at /v1) · Production-grade (circuit breakers, TLS stealth, MCP 105 tools, A2A, memory, guardrails, evals — 25,000+ tests). +The Promise — One endpoint. 338 providers. Never stop building — OmniRoute picks the cheapest one that works. Six pillars: Never hit limits (auto-fallback across 338 providers in milliseconds, zero downtime) · Save up to 95% tokens (RTK + Caveman stacked compression cuts 15–95%, ~89% avg on tool-heavy sessions) · $0 to start (90+ free tiers, 40+ free forever — no card needed) · Every tool works (33 coding agents through one config) · One endpoint (OpenAI ↔ Claude ↔ Gemini ↔ Responses API at /v1) · Production-grade (circuit breakers, TLS stealth, MCP 105 tools, A2A, memory, guardrails, evals — 25,000+ tests).

@@ -218,7 +238,7 @@ curl http://localhost:20128/v1/chat/completions \

- + Kimi K3 — Open Frontier Intelligence · 2.8T parameters · 1M-token context

@@ -228,7 +248,7 @@ curl http://localhost:20128/v1/chat/completions \ - + @@ -423,7 +443,7 @@ All **19** strategies — mix & match per combo step:
- + Kimi (Moonshot AI) @@ -409,7 +429,7 @@ All **19** strategies — mix & match per combo step:
17 auto12-factor live scoring across every connection 🤖14-factor live scoring across every connection 🤖
18
-The Auto-Combo engine scores every candidate on **12 factors** (health, quota, cost, latency, success rate, freshness…) — see [`docs/routing/AUTO-COMBO.md`](docs/routing/AUTO-COMBO.md). +The Auto-Combo engine scores every candidate on **14 factors** (health, quota, cost, latency, success rate, freshness…) — see [`docs/routing/AUTO-COMBO.md`](docs/routing/AUTO-COMBO.md). ## @@ -441,7 +461,7 @@ All **19** strategies — mix & match per combo step: -What sets OmniRoute apart — comparison table vs 9router, OpenRouter, CLIProxyAPI and LiteLLM across 13 capabilities. OmniRoute: 291 providers, 90+ free providers built-in, 19 routing strategies, 12-engine token compression, built-in MCP server with 105 tools, A2A agent protocol, persistent memory, guardrails, cloud agents, TLS fingerprint stealth, Desktop/Termux/PWA, 43 i18n UI locales, 100% MIT self-hosted. OmniRoute is the only one with the full set; competitors show a mix of checks, partials and crosses. Verified from each project's docs. +What sets OmniRoute apart — comparison table vs 9router, OpenRouter, CLIProxyAPI and LiteLLM across 13 capabilities. OmniRoute: 338 providers, 90+ free providers built-in, 19 routing strategies, 12-engine token compression, built-in MCP server with 105 tools, A2A agent protocol, persistent memory, guardrails, cloud agents, TLS fingerprint stealth, Desktop/Termux/PWA, 43 i18n UI locales, 100% MIT self-hosted. OmniRoute is the only one with the full set; competitors show a mix of checks, partials and crosses. Verified from each project's docs. 📊 Full methodology & per-feature detail vs 9router, OpenRouter, CLIProxyAPI & LiteLLM → [`docs/comparison/OMNIROUTE_VS_ALTERNATIVES.md`](docs/comparison/OMNIROUTE_VS_ALTERNATIVES.md) @@ -499,8 +519,11 @@ Pix copia-e-cola: -> Recent highlights from **v3.8.20 → v3.8.49**. Full history in [`CHANGELOG.md`](CHANGELOG.md). +> Recent highlights from **v3.8.20 → v3.8.50**. Full history in [`CHANGELOG.md`](CHANGELOG.md). +- **🎛️ OmniConductor** — inbound A2A delegation to your agent fleet, Conductor skills on the Agent Card, and a dashboard panel with Faro push-to-talk voice chat. → [A2A Server](docs/frameworks/A2A-SERVER.md) +- **🛂 Adaptive admission & overload protection** — heavyweight chat requests queue instead of 503ing, with atomic RPM rolling leases per connection. → [Resilience Guide](docs/architecture/RESILIENCE_GUIDE.md) +- **🗂️ Canonical `/v1/models` ordering** — one contiguous provider-grouped block per provider (combos pinned first), stable across every catalog source. → [API Reference](docs/reference/API_REFERENCE.md) - **🗜️ Compression hardening** — default-on inflation guard, Caveman packs for DE / FR / JA + Chinese (wényán), RTK filters for Gradle & .NET. → [Compression](docs/compression/COMPRESSION_ENGINES.md) - **💸 Honest flat-rate cost** — subscription / coding-plan providers read **$0** in cost analytics; budget, quota & routing keep estimating. → [API Reference](docs/reference/API_REFERENCE.md) - **⚖️ Quota-Share routing** — split a shared account's quota fairly across pooled keys, work-conserving so idle slices are lent out. → [Resilience Guide](docs/architecture/RESILIENCE_GUIDE.md) @@ -515,7 +538,7 @@ Pix copia-e-cola: - **🖼️ New endpoints** — `/v1/ocr` (Mistral OCR) and `/v1/audio/translations` (Whisper-style) round out the media surface. → [API Reference](docs/reference/API_REFERENCE.md) - **🎨 Image / video / audio generation** — one API for media: xAI Grok Imagine & Novita AI video, ComfyUI, Freepik, Adobe Firefly, Microsoft Designer, Google Imagen, Segmind, EdgeTTS. → [API Reference](docs/reference/API_REFERENCE.md) - **🌍 Deployment & ops** — reverse-proxy `basePath`, browser-language auto-detect, per-key device tracking, root-less MITM trust, zh-TW localization. → [Environment](docs/reference/ENVIRONMENT.md) -- **🤝 More providers & agents** — Cursor Cloud Agent, Grok Build (xAI) with browser + OAuth login, Ollama first-class card, Claude Opus 5 & Sonnet 5, Kimi official partnership (Code/Web/Moonshot), Zed, Requesty, SenseNova, Yuanbao, Agnes AI… and a refreshed **291-provider catalog**. → [Providers](docs/reference/PROVIDER_REFERENCE.md) +- **🤝 More providers & agents** — Cursor Cloud Agent, Grok Build (xAI) with browser + OAuth login, Ollama first-class card, Claude Opus 5 & Sonnet 5, Kimi official partnership (Code/Web/Moonshot), Zed, Requesty, SenseNova, Yuanbao, Agnes AI… and a refreshed **338-provider catalog**. → [Providers](docs/reference/PROVIDER_REFERENCE.md) - **📡 Routing transparency** — every response carries an `X-OmniRoute-Decision` header naming the strategy/provider/latency that served it, a new `cache-optimized` combo strategy + Auto-Combo `cacheAffinity` factor route repeat requests back to the connection holding the cached prefix, and a read-only `/v1/auto-combo/{channel}/candidates` endpoint exposes an `auto/*` channel's live candidate pool. → [Auto-Combo](docs/routing/AUTO-COMBO.md) - **⚡ Local performance & infra** — one-click local Redis, Cloudflare Workers / Deno Deploy relay deployers, Bifrost & Mux as supervised embedded services. → [Embedded Services](docs/frameworks/EMBEDDED-SERVICES.md) @@ -576,11 +599,11 @@ Pix copia-e-cola:
-## 🌐 291 AI Providers — 90+ Free +## 🌐 338 AI Providers — 90+ Free
-> The most complete catalog of any open-source router: **291 providers**, **90+ with a free tier**, **40+ free forever**. +> The most complete catalog of any open-source router: **338 providers**, **90+ with a free tier**, **40+ free forever**.
@@ -844,7 +867,7 @@ npm install -g omniroute omniroute ``` -> 💡 See `npm warn ERESOLVE` or peer-dep warnings? [They're harmless](docs/getting-started/TROUBLESHOOTING.md#npm-install-warnings-eresolve--peer--deprecated). +> 💡 See `npm warn ERESOLVE` or peer-dep warnings? [They're harmless](docs/guides/TROUBLESHOOTING.md#npm-install-warnings-eresolve--peer--deprecated). Dashboard at `http://localhost:20128` · API at `http://localhost:20128/v1`. @@ -896,7 +919,7 @@ docker run -d --name omniroute --restart unless-stopped --stop-timeout 40 \ > `diegosouzapw/omniroute:next-web` follow the current default `release/v*` > branch. These mutable tags are intended only for testing unreleased fixes and > are **not supported for production**. See -> [Docker Release Channels](docs/guides/DOCKER_RELEASE_CHANNELS.md). +> [Docker Release Channels](docs/guides/DOCKER_GUIDE.md#release-channels). **🛠️ From source** @@ -1038,7 +1061,7 @@ same process on one port, so there is no separate CLI-only package today. RuntimeNode.js 22.x / 24.x LTS — >=22.22.2 <23 || >=24.0.0 <27 LanguageTypeScript 6.0 — 100% TypeScript across src/ and open-sse/ (zero any in core since v2.0) FrameworkNext.js 16 + React 19 + Tailwind CSS 4 - Databasebetter-sqlite3 (SQLite, WAL journaling) + LowDB (JSON legacy) — 95 domain modules, 110 migrations + Databasebetter-sqlite3 (SQLite, WAL journaling) + LowDB (JSON legacy) — 95 domain modules, 144 migrations MemorySQLite FTS5 full-text + int8-quantized vector embeddings, typed decay SchemasZod 4 — MCP tool I/O validation + API contracts ProtocolsMCP (stdio / HTTP / SSE) + A2A v0.3 (JSON-RPC 2.0 + SSE) @@ -1099,9 +1122,9 @@ same process on one port, so there is no separate CLI-only package today. Compression Rules FormatJSON rule-pack schemas for Caveman and RTK filters Compression Language PacksLanguage detection and Caveman rule-pack authoring Resilience GuideCircuit breakers, cooldowns, queue, anti-thundering herd, TLS spoofing - Auto-Combo Engine12-factor scoring, mode packs, self-healing + Auto-Combo Engine14-factor scoring, mode packs, self-healing Proxy Guide3-level proxy system, 1proxy marketplace, registry CRUD - Free Tiers25+ free API providers consolidated directory + Free Tiers90+ free providers consolidated directory (42 documented token pools / 495 models) Features GalleryVisual dashboard tour with screenshots Codebase DocumentationBeginner-friendly codebase walkthrough @@ -1112,7 +1135,7 @@ same process on one port, so there is no separate CLI-only package today. DocumentDescription API ReferenceAll endpoints with examples OpenAPI SpecOpenAPI 3.0 specification - MCP Server104 MCP tools, IDE configs, Python/TS/Go clients + MCP Server105 MCP tools, IDE configs, Python/TS/Go clients MCP Server GuideMCP installation, transports, and tool reference A2A ServerJSON-RPC 2.0 protocol, skills, streaming, task mgmt A2A Server GuideA2A agent card, tasks, skills, and streaming @@ -1126,7 +1149,7 @@ same process on one port, so there is no separate CLI-only package today. Branching & Release ModelWhere PRs target (release/*), what main and tags mean ChangelogFull per-version release history Security PolicyVulnerability reporting and security practices - i18n Guide40+ language support, translation workflow, RTL + i18n Guide43-language support, translation workflow, RTL Release ChecklistPre-release validation steps Coverage PlanTest coverage strategy and 25,000+ test suite @@ -1269,7 +1292,7 @@ A heartfelt thank-you to the people who fund OmniRoute out of their own pocket
-## 👥 500+ Contributors +## 👥 320+ Contributors
diff --git a/docs/ROADMAP.md b/ROADMAP.md similarity index 98% rename from docs/ROADMAP.md rename to ROADMAP.md index 120376fabb..b79606a883 100644 --- a/docs/ROADMAP.md +++ b/ROADMAP.md @@ -7,7 +7,7 @@ lastUpdated: 2026-08-06 # OmniRoute Roadmap > Version-gated, not date-gated: each milestone ships when its quality gates pass. -> Current line: **v3.8.x** (this branch). Last updated: 2026-07-23. +> Current line: **v3.8.x** (this branch). Last updated: 2026-08-06. OmniRoute is heading from a monolithic router to a **modular AI platform**: a lightweight core engine, a typed SDK, and everything else as installable modules and plugins. The path diff --git a/SECURITY.md b/SECURITY.md index 3499ef2ac2..0dadb47aec 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -42,7 +42,7 @@ Request → CORS → Authz pipeline (classify → policies → enforce) | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | **Dashboard Login** | Password-based auth with JWT tokens (HttpOnly cookies) | | **API Key Auth** | HMAC-signed keys with CRC validation | -| **OAuth 2.0 + PKCE** | 13 providers (Claude, Codex, GitHub, Cursor, Antigravity, Gemini, Kimi Coding, Kilo Code, Cline, Kiro, Qoder, Windsurf, GitLab Duo) | +| **OAuth 2.0 + PKCE** | Provider-specific browser/device OAuth uses PKCE where supported; import-only Devin credentials are handled separately. | | **Token Refresh** | Automatic OAuth token refresh before expiry | | **Secure Cookies** | `AUTH_COOKIE_SECURE=true` for HTTPS environments | | **Authz Pipeline** | Route classification (PUBLIC / CLIENT_API / MANAGEMENT) — see `docs/architecture/AUTHZ_GUIDE.md` | diff --git a/_references/_sistemas_cli/01-relatorio-pesquisa-clis-omniroute.md b/_references/_sistemas_cli/01-relatorio-pesquisa-clis-omniroute.md deleted file mode 100644 index 450ff31530..0000000000 --- a/_references/_sistemas_cli/01-relatorio-pesquisa-clis-omniroute.md +++ /dev/null @@ -1,296 +0,0 @@ -# Relatorio de pesquisa: repositorios de CLI integraveis com OmniRoute - -> **Status final (2026-08-03):** este documento preserva o inventário inicial. A pesquisa foi concluída para `104/104` casos. Para resultados por projeto, use `04-tracker-integracoes-clis.md`; para o fechamento executivo e a estratégia de publicação, use `06-relatorio-final-104-clis-e-estrategia-prs.md`. - -**Data da pesquisa:** 2026-08-01 -**Escopo:** agentes de codigo de terminal, CLIs de LLM, runtimes de agentes e harnesses que possam consumir um endpoint HTTP compativel com OpenAI, Anthropic ou Gemini, ou que possam ser adaptados por provider/plugin/ACP/MITM. -**Fonte local principal:** `_tasks/hands-off/2026-08-01_release-v3.8.50_v3.8.50_sess-e1846bc2/handoff.md` -**Fontes externas principais:** GitHub Search/API, READMEs dos repositorios e a lista publica `bradAGI/awesome-cli-coding-agents` (atualizada em 2026-07-29). - -## 1. Resumo executivo - -O OmniRoute ja possui uma integracao funcional com o jcode e um catalogo local de ferramentas CLI. O proximo ganho de maior valor e transformar o OmniRoute em um endpoint reconhecido pelos principais agentes de terminal, priorizando configuracao nativa e PR upstream quando o projeto aceitar contribuicoes. - -A pesquisa encontrou: - -- **33 entradas de ferramentas no registro local `CLI_TOOLS`**, contando o registro extraido de Grok Build em `src/shared/constants/cliToolsGrokBuild.ts`, incluindo Claude Code, Codex CLI, Cline, Kilo, Continue, OpenCode, Aider, jcode, Smelt, Pi, Crush, Goose, Open Interpreter, OpenClaw, Hermes Agent, Letta CLI e outros. -- **Mais de 90 projetos publicos** no inventario externo consultado, entre agentes de codigo, CLIs generalistas, forks, runtimes e orquestradores. -- **Candidatos com evidencia forte de endpoint customizavel:** Gemini CLI, Claw Code, Plandex, MiMo Code, Trae Agent, Kimi CLI, Every Code, Open Codex, VT Code, OpenHands CLI, gptme, Nanocoder, RA.Aid, CoreCoder, Grok CLI, Gitlawb Zero, DeepSeek Reasonix, KlaatCode, CodeMini, DvalinCode, Coro Code, Mini-Kode, Late CLI, Agentty, Aizen, Minacode, YottaCode, aichat, ShellGPT, Mistral Vibe, OpenSquilla, Kode CLI e outros. -- **Candidatos que exigem pesquisa confirmatoria:** projetos com README generico, configuracao recente, repositorio ambiguo, binario fechado ou sem evidencia textual suficiente de `base_url`/provider. -- **Candidatos que podem ser integrados por outros caminhos:** ACP, MCP, wrapper/launcher, provider adapter, proxy MITM ou apenas documentacao; eles nao devem ser classificados automaticamente como OpenAI-compatible. - -Conclusao: devemos pesquisar e tentar todos os candidatos tecnicamente viaveis, mas separar claramente `suporte no catalogo OmniRoute`, `configuracao generica`, `adaptacao upstream publicada` e `PR/issue aceita`. O tracker acompanha essas dimensoes separadamente. - -## 2. Metodo e limites - -### 2.1 Como a busca foi feita - -1. Leitura integral do handoff do caso jcode para capturar o padrao de integracao, validacao, publicacao e as restricoes de worktree. -2. Inspecao do catalogo local em `src/shared/constants/cliTools.ts`, da documentacao de CLI e do fluxo de setup em `docs/guides/CLI-INTEGRATIONS.md`. -3. Consulta do GitHub Search/API para resolver o repositorio canonico de cada nome, evitando homonimos. -4. Leitura de README/raw quando disponivel, procurando sinais como `base_url`, `baseURL`, `OPENAI_BASE_URL`, `OPENAI_API_BASE`, `LLM_BASE_URL`, `provider`, `gateway`, `model provider`, `Anthropic` e `Gemini`. -5. Consulta da lista `https://github.com/bradAGI/awesome-cli-coding-agents`, que serve como descoberta ampla, nao como prova de compatibilidade. -6. Classificacao por adocao, manutencao, licenca, evidencia de endpoint, maturidade, potencial de PR e utilidade para o ecossistema OmniRoute. - -### 2.2 O que ainda nao foi afirmado - -- Nao foi feita implementacao ou abertura de PR/issue para os candidatos abaixo; o unico caso publicado nesta sessao anterior e o jcode. -- A presenca da palavra `provider` no README nao prova que uma URL arbitraria funciona em runtime. -- Estrelas e datas sao snapshots aproximados obtidos em 2026-08-01 e podem mudar. -- Repositorios fechados ou com EULA entram no inventario para avaliacao de configuracao, mas nao implicam possibilidade de fork ou PR. -- Cada task de integracao precisa repetir a pesquisa no upstream antes de editar codigo. - -## 3. Baseline do OmniRoute - -### 3.1 Superficie que o OmniRoute oferece - -- Endpoint OpenAI em `/v1`. -- Superficie Anthropic na raiz, usada por clientes que esperam `/v1/messages` a partir do `ANTHROPIC_BASE_URL`. -- Superficie Gemini em `/v1beta`. -- Catalogo de modelos consultavel pelos comandos de setup quando o cliente suporta descoberta. -- Chave via `OMNIROUTE_API_KEY` ou chave selecionada no dashboard. -- Traducao entre formatos, streaming SSE, tool calling, fallback, combos, custos e politicas de autenticacao. -- Modos de consumo: configuracao de ambiente, arquivo nativo do cliente, provider customizado, ACP/MCP e MITM. - -### 3.2 Catalogo local ja registrado - -Fonte: `src/shared/constants/cliTools.ts` e `src/shared/constants/cliToolsGrokBuild.ts`. - -**Codigo/CLI:** Claude Code, OpenAI Codex CLI, Factory Droid, OpenClaw, Cursor, Cline, Kilo Code, Continue, Antigravity, GitHub Copilot CLI, OpenCode, Kiro, Qwen Code, Aider, ForgeCode, Cursor Agent CLI, Roo Code, jcode, DeepSeek TUI, CodeWhale, Smelt, Pi, Crush. - -**Agentes:** Hermes, Hermes Agent, Goose, Open Interpreter, Oh My Pi, Letta CLI, Warp AI, Agent Deck. - -Os documentos do catalogo tambem mantem um backlog MITM para ferramentas sem base URL, como Windsurf, Amp, Amazon Q/Kiro CLI e Cowork. Esses casos devem permanecer separados de uma integracao direta. - -### 3.3 Caso jcode (referencia validada) - -- Upstream: `https://github.com/1jehuang/jcode` -- Mecanismo: perfil OpenAI-compatible dirigido por metadados; nao foi criado um plugin de runtime. -- Branch: `feat/omniroute-provider` -- Commit: `ee4f904e6` -- PR no fork: `https://github.com/diegosouzapw/jcode/pull/1` -- Issue no upstream: `https://github.com/1jehuang/jcode/issues/704` -- Diff: 6 arquivos, `+56/-3`. -- Validacao: `cargo check --workspace` limpo; 205 testes passaram e uma falha foi preexistente/ambiental. -- Estado: aguardando mantenedor; o upstream nao aceita PR de forks externos, por isso a issue e o artefato oficial. -- Pendencia prometida: adicionar no README do OmniRoute a secao "Tools & repositories that work with OmniRoute". - -Licao: o trabalho deve comecar descobrindo o mecanismo real de providers do upstream. Nem todos os clientes precisam de mudanca no OmniRoute; alguns precisam somente de um perfil local, e outros exigirao um adaptador especifico. - -## 4. Candidatos prioritarios com evidencia concreta - -As evidencias abaixo sao sinais de README/configuracao observados na pesquisa inicial. A task individual deve abrir o arquivo exato, confirmar a versao atual e executar um smoke test. - -| Projeto | Repositorio | Evidencia inicial | Rota provavel | -|---|---|---|---| -| Gemini CLI | `google-gemini/gemini-cli` | `GOOGLE_GEMINI_BASE_URL` | configuracao direta; possivel PR/documentacao | -| Claw Code | `ultraworkers/claw-code` | `OPENAI_BASE_URL`, provider compativel | configuracao direta ou provider | -| Plandex | `plandex-ai/plandex` | providers customizados com `baseUrl` | provider/preset | -| MiMo Code | `XiaomiMiMo/MiMo-Code` | `@ai-sdk/openai-compatible` e `baseURL` | provider customizado | -| Trae Agent | `bytedance/trae-agent` | `model_providers` e `base_url` | provider/config | -| Kimi CLI | `MoonshotAI/kimi-cli` | modos `openai_legacy`, `openai_responses`, `anthropic` e `base_url` | provider nativo/config | -| Every Code | `just-every/code` | fork Codex com providers OpenAI/Claude/Gemini | perfil/provider | -| Open Codex | `ymichael/open-codex` | multi-provider e OpenAI-compatible | fork/provider | -| VT Code | `vinhnx/vtcode` | `custom_providers[].base_url`, failover | provider customizado | -| OpenHands CLI | `OpenHands/OpenHands-CLI` | `LLM_BASE_URL` | configuracao direta | -| gptme | `gptme/gptme` | `OPENAI_BASE_URL` e providers | configuracao direta | -| Nanocoder | `Nano-Collective/nanocoder` | qualquer API OpenAI-compatible | configuracao direta | -| RA.Aid | `ai-christianson/RA.Aid` | `OPENAI_API_BASE` | configuracao direta | -| CoreCoder | `he-yufeng/CoreCoder` | `OPENAI_BASE_URL` | configuracao direta | -| Grok CLI | `superagent-ai/grok-cli` | `GROK_BASE_URL`/`baseURL` | configuracao direta | -| Gitlawb Zero | `Gitlawb/zero` | provider `custom-openai-compatible`, `--base-url` | provider/flag | -| DeepSeek Reasonix | `esengine/DeepSeek-Reasonix` | provider compativel e endpoint | confirmar configuracao | -| KlaatCode | `KlaatAI/klaatcode` | `customModels` OpenAI-compatible | configuracao JSON | -| CodeMini CLI | `havingautism/Codemini-CLI` | `gateway.base_url` | gateway/config | -| Zot | `patriceckhart/zot` | `--base-url` e provider custom em `models.json` | flag/config | -| Pool | `poolsideai/pool` | `POOLSIDE_STANDALONE_BASE_URL`; licenca proprietaria | configuracao, sem PR assumido | -| Octomind | `Muvon/octomind` | `_API_URL`/`LOCAL_API_URL` | provider/env | -| Coro Code | `Blushyes/coro-code` | `OPENAI_BASE_URL` | configuracao direta | -| Mini-Kode | `minmaxflow/mini-kode` | `MINIKODE_BASE_URL` | configuracao direta | -| Late CLI | `mlhher/late-cli` | `OPENAI_BASE_URL`/`api-url` | env/flag | -| Agentty | `1ay1/agentty` | modelo agnostico e endpoints compativeis | confirmar arquivo de config | -| Aizen | `aizen-stack/aizen` | CLI Rust OpenAI-compatible; `AIZEN_BASE_URL` | configuracao direta | -| Clif-Code | `DLhugly/Clif-Code` | OpenRouter/OpenAI/Anthropic/Ollama | provider/config | -| Minacode | `hit9/minacode` | provider e compatibilidade no README | confirmar URL | -| YottaCode | `yottadynamics/yottacode` | modelo escolhido, gateway/provider | confirmar config | -| aichat | `sigoden/aichat` | providers OpenAI/Claude/Gemini e compatibilidade | `models.yaml`/provider | -| ShellGPT | `TheR1D/shell_gpt` | `API_BASE_URL` | env/config | -| Mistral Vibe | `mistralai/mistral-vibe` | `base_url`, API base e provider | config/env | -| OpenSquilla | `opensquilla/opensquilla` | 20+ providers e gateway | provider/config | -| Kode CLI | `shareAI-lab/Kode-cli` | provider, endpoint e Anthropic/OpenAI/Gemini | config | -| Crush | `charmbracelet/crush` | `base_url`, provider compativel | ja catalogado no OmniRoute; validar upstream | -| Hermes Agent | `NousResearch/hermes-agent` | endpoint/gateway e 300+ modelos | ja catalogado; validar modo de endpoint | -| OpenClaw | `openclaw/openclaw` | providers, gateway e endpoints | ja catalogado; validar configuracao atual | - -## 5. Inventario amplo localizado - -### 5.1 Agentes de terminal e coding CLIs - -Os projetos desta tabela foram encontrados na lista curada ou no GitHub Search. `Pesquisa` indica o proximo gate; nao significa que a integracao ja esta pronta. - -| Projeto | Repositorio | Licenca/sinal publico | Situacao inicial | -|---|---|---|---| -| OpenCode | `anomalyco/opencode` | multi-provider, 75+ providers | ja suportado; acompanhar provider/plugin | -| Codex CLI | `openai/codex` | Apache-2.0, provider configuravel | ja suportado | -| OpenHands principal | `All-Hands-AI/OpenHands` | OSS, CLI e web | pesquisar CLI e `LLM_BASE_URL` | -| Pi | `badlogic/pi-mono` | harness multi-provider | ja suportado; confirmar repo atual | -| Open Interpreter | `OpenInterpreter/open-interpreter` | Apache-2.0, `--api_base` | ja suportado | -| Cline | `cline/cline` | Apache-2.0, base URL/gateway | ja suportado | -| Goose | `aaif-goose/goose` | Apache-2.0, providers | ja suportado | -| Aider | `Aider-AI/aider` | Apache-2.0, Anthropic/OpenAI | ja suportado | -| Continue | `continuedev/continue` | Apache-2.0, multi-model | ja suportado | -| Deep Agents Code | `langchain-ai/deepagents` | MIT, tool-calling LLM | pesquisar pacote `deepagents-code` | -| Crush | `charmbracelet/crush` | provider/base URL | ja suportado | -| Kilo Code | `Kilo-Org/kilocode` | MIT, providers | ja suportado | -| Qwen Code | `QwenLM/qwen-code` | Apache-2.0, providers | ja suportado | -| Roo Code | `RooCodeInc/Roo-Code` | Apache-2.0 | ja catalogado; validar CLI | -| Grok Build | `xai-org/grok-build` | Apache-2.0, provider | ja suportado | -| Oh My Pi | `can1357/oh-my-pi` | provider custom em YAML | ja suportado | -| SWE-agent | `SWE-agent/SWE-agent` | MIT | pesquisar backend e base URL | -| Smol Developer | `smol-ai/developer` | embeddable agent | adapter/SDK, nao necessariamente CLI | -| Claude Engineer | `Doriandarko/claude-engineer` | CLI Claude | pesquisar provider | -| Claurst | `Kuberwastaken/claurst` | GPL-3.0, provider | confirmar endpoint e politica de fork | -| Free Code | `paoloanzn/free-code` | fork de Claude Code | pesquisar licenca e endpoint | -| Codebuff | `CodebuffAI/codebuff` | multi-agent CLI | pesquisar provider | -| ForgeCode | `antinomyhq/forge` | 300+ modelos | ja suportado | -| OpenSquilla | `opensquilla/opensquilla` | Apache-2.0, gateway | candidato forte | -| Kode CLI | `shareAI-lab/Kode-cli` | Apache-2.0, endpoint | candidato forte | -| Devon | `entropy-research/Devon` | pair programmer TUI | pesquisar backend | -| AutoCodeRover | `AutoCodeRoverSG/auto-code-rover` | agente de issues | pesquisar configuracao de modelos | -| Letta Code | `letta-ai/letta-code` | Apache-2.0, model-agnostic | pesquisar API base | -| CodeMachine CLI | `moazbuilds/CodeMachine-CLI` | multi-agent local | pesquisar provider | -| Codel | `semanser/codel` | AGPL-3.0, Docker/web UI | confirmar servidor OpenAI e restricoes AGPL | -| Agentless | `OpenAutoCoder/Agentless` | workflow sem loop persistente | pesquisar entrada de modelo | -| Amazon Q Developer CLI | `aws/amazon-q-developer-cli` | Apache-2.0 | provavelmente auth/ecossistema AWS; pesquisar | -| Neovate Code | `neovateai/neovate-code` | MIT, plugin/multi-provider | candidato forte | -| Groq Code CLI | `build-with-groq/groq-code-cli` | multi-model | pesquisar endpoint | -| Dexto | `truffle-ai/dexto` | CLI/web/API, subagentes | pesquisar provider | -| claw-code-agent | `HarnessLab/claw-code-agent` | Python, sem dependencias | confirmar endpoint | -| g3 | `dhanji/g3` | Rust, provider abstraction | confirmar licenca e URL | -| Coro Code | `Blushyes/coro-code` | base URL/OpenAI | candidato | -| Mini-Kode | `minmaxflow/mini-kode` | MIT, referencia educacional | candidato | -| zot | `patriceckhart/zot` | MIT, TUI/JSON/RPC | candidato | -| agentty | `1ay1/agentty` | MIT, ACP e multi-provider | candidato | -| nori-cli | `tilework-tech/nori-cli` | multi-provider sobre Codex | pesquisar base URL | -| cursor-agent clone | `civai-technologies/cursor-agent` | OpenAI/Claude/Ollama | pesquisar maturidade e licenca | -| DvalinCode | `arthurpanhku/dvalincode` | MIT, OpenAI-compatible | candidato | -| OpenHarness | `zhijiewong/openharness` | Apache-2.0, any LLM | candidato | -| Octomind | `Muvon/octomind` | Apache-2.0, 13+ providers | candidato | -| Codex Infinity | `lee101/codex-infinity` | fork Codex | pesquisar endpoint | -| San | `genai-io/san` | Apache-2.0, provider-neutral | pesquisar endpoint | -| Waveloom | `Menfre01/waveloom` | Apache-2.0, DeepSeek-focused | pesquisar provider | -| picocode | `jondot/picocode` | Rust, multi-LLM | pesquisar provider | -| QQCode | `qnguyen3/qqcode` | Rust, skills | pesquisar provider | -| Keen Code | `mochow13/keen-code` | MIT, 9+ providers | pesquisar provider | -| Smelt | `leonardcser/smelt` | MIT, OpenAI-compatible | ja suportado | -| Grinta | `josephsenior/Grinta-Coding-Agent` | MIT, Python | pesquisar provider | -| Zap | `zap-coding-agent/zap-coding-agent` | MIT, MCP, local/OpenAI | pesquisar endpoint | -| Binharic | `CogitatorTech/binharic-cli` | multi-provider | pesquisar endpoint | -| Darce | `AmerSarhan/darce-cli` | MIT, multi-model | pesquisar endpoint | -| CLAII | `agencyswarm/CLAII` | multi-agent/MCP | pesquisar endpoint | - -### 5.2 Agentes generalistas e ecossistema OpenClaw - -Estes podem consumir OmniRoute como backend, mas a task deve confirmar se a interface de configuracao e realmente uma CLI de codigo ou apenas um gateway de agente. - -| Projeto | Repositorio | Possivel caminho | -|---|---|---| -| OpenClaw | `openclaw/openclaw` | provider/gateway; ja catalogado | -| nanobot | `HKUDS/nanobot` | provider OpenAI-compatible | -| ZeroClaw | `zeroclaw-labs/zeroclaw` | trait de provider | -| NanoClaw | `gavrielc/nanoclaw` | Anthropic SDK; pesquisar base | -| PicoClaw | `sipeed/picoclaw` | provider/config | -| IronClaw | `nearai/ironclaw` | provider Rust | -| NullClaw | `nullclaw/nullclaw` | 23+ providers | -| Clawith | `dataelement/Clawith` | gateway/teams | -| claw0 | `shareAI-lab/claw0` | tutorial/runtime; pesquisa de viabilidade | -| Moltis | `moltis-org/moltis` | provider Rust | -| GitClaw | `open-gitagent/gitclaw` | agente Git-native; pesquisar | -| LionClaw | `moshthepitt/lionclaw` | CLI local; pesquisar | -| Aizen | `aizen-stack/aizen` | OpenAI-compatible | -| aichat | `sigoden/aichat` | provider/model YAML | -| ShellGPT | `TheR1D/shell_gpt` | `API_BASE_URL` | -| gptme | `gptme/gptme` | `OPENAI_BASE_URL` | - -### 5.3 Orquestradores, wrappers e ferramentas adjacentes - -Nao sao todos alvos de um provider OmniRoute. Devem ser avaliados para launcher, ACP, MCP, observabilidade ou configuracao de seus agentes filhos. - -| Projeto | Repositorio | Tipo de integracao a investigar | -|---|---|---| -| Agent Deck | `asheshgoplani/agent-deck` | config dos CLIs filhos; ja catalogado | -| VibePod | `VibePod/vibepod-cli` | wrapper Docker e metricas | -| zeroshot | `the-open-engine/zeroshot` | launcher/worktrees | -| Fractal | `plasma-ai/fractal` | orquestrador de CLIs | -| Bernstein | `chernistry/bernstein` | orquestrador/verificador | -| Traycer | `traycerai/traycer` | CLI custom e agentes filhos | -| h5i | `h5i-dev/h5i` | execucao paralela | -| OMK | `dmae97/open-multi-agent-kit` | control plane/provider-neutral | -| kodo | `ikamensh/kodo` | orquestrador | -| ORCH | `oxgeneral/ORCH` | fila de tarefas | -| LoopTroop | `LoopTroop-ai/LoopTroop` | orchestration sobre OpenCode | -| Galley | `shinpr/galley` | worktree/PR handoff | -| Relay | `jcast90/relay` | MCP/orquestracao | -| sage | `youwangd/SageCLI` | runtime-agnostic | -| 5dive | `5dive-ai/5dive` | agentes em servidor | -| agx | `ramarlina/agx` | checkpoints e agentes | -| claude-code-router | `musistudio/claude-code-router` | proxy/roteamento; possivel upstream consumidor | -| cc-router | `finch-xu/cc-router` | proxy Anthropic multi-provider | -| OneCLI | `onecli/onecli` | broker de credenciais, nao agente | -| agent-browser | `vercel-labs/agent-browser` | ferramenta MCP/plugin | -| OpenWork | `different-ai/openwork` | desktop sobre OpenCode | -| Mistral Vibe | `mistralai/mistral-vibe` | provider/base URL | -| Junie CLI | `junie.jetbrains.com` | fechado; configuracao BYOK a confirmar | -| Pool | `poolsideai/pool` | binario/EULA; sem PR presumido | - -## 6. Evidencias tecnicas e mapeamento para OmniRoute - -### 6.1 Padroes de endpoint encontrados - -| Padrao observado | Exemplos | Acao OmniRoute | -|---|---|---| -| `OPENAI_BASE_URL`/`OPENAI_API_BASE` | Claw Code, RA.Aid, CoreCoder, Coro Code | fornecer root ou `/v1` conforme o cliente; testar append de path | -| `base_url`/`baseURL` em provider | Plandex, MiMo Code, Trae Agent, VT Code, KlaatCode | gerar bloco de provider e modelo | -| `LLM_BASE_URL` | OpenHands CLI | configurar surface OpenAI e validar streaming/tool calling | -| `GOOGLE_GEMINI_BASE_URL` | Gemini CLI | usar superficie `/v1beta`/Gemini; confirmar formato esperado | -| `GROK_BASE_URL` | Grok CLI | decidir se o cliente fala xAI ou OpenAI; testar traducoes | -| `--base-url` | Gitlawb Zero, Zot, jcode | launcher ou perfil persistido | -| `API_BASE_URL` | ShellGPT | config/env direta | -| `_API_URL`/gateway | Octomind, Pool, OpenSquilla | provider selecionavel; testar cada preset | -| ACP/MCP sem URL direta | Agentty, Kimi CLI, Goose, OpenCode | avaliar se OmniRoute deve ser provider ou backend ACP | -| endpoint nao customizavel | Cursor desktop, Antigravity, Kiro, Windsurf, Amp | somente MITM/guide; nao prometer integracao direta | - -### 6.2 Superficies e riscos de protocolo - -- **`/v1` duplicado:** alguns clientes recebem a raiz e acrescentam `/v1/chat/completions`; outros exigem a URL final com `/v1`. Cada task deve registrar o resultado real. -- **Chat Completions vs Responses:** forks do Codex e clientes modernos podem usar Responses; testar ambas quando o cliente permitir. -- **Anthropic:** clientes que mandam `/v1/messages` esperam `ANTHROPIC_BASE_URL` sem `/v1` no valor. A traducao Anthropic do OmniRoute deve ser validada com streaming e tool use. -- **Gemini:** Gemini CLI pode esperar uma base Gemini nativa, nao somente OpenAI-compatible; validar `generateContent`, streaming e headers. -- **Tool calling:** o agente pode exigir nomes/ids de ferramenta estaveis, JSON estrito, `tool_choice` ou blocos de pensamento especificos. -- **Descoberta de modelos:** `/v1/models` pode ser obrigatorio, opcional ou inexistente. O setup precisa aceitar `--model` fixo quando a descoberta nao for suportada. -- **Autenticacao:** alguns projetos leem somente env, outros gravam tokens em arquivo/keyring e alguns usam OAuth proprietario. Nunca reutilizar credenciais de um upstream sem verificar escopo. -- **Streaming e retry:** SSE, timeouts, abort signals e re-tentativas podem divergir do cliente. Validar uma chamada longa e uma falha de provider. -- **Licenca:** GPL/AGPL, EULA e repositorios sem SPDX exigem decisao de distribuicao antes de enviar patch. - -## 7. Riscos de pesquisa e integracao - -1. **Homonomimos e clones:** usar sempre URL canonica, organizacao, release e README do repositorio correto. -2. **Repositorios que mudam rapidamente:** congelar commit/versao no relatorio da task e repetir a consulta no dia da implementacao. -3. **README divergente do codigo:** procurar schema, parser de config, testes e comando de execucao; README sozinho e evidencia Tier 1. -4. **Clientes fechados:** registrar como `needs-mitm` ou `config-only`, nunca como PR upstream. -5. **Forks com historia de origem controversa:** avaliar politica, licenca e aceite de contribuicoes antes de reproduzir componentes. -6. **Segredos no ambiente:** limpar `OMNIROUTE_API_KEY` e chaves de teste quando a suite assume ambiente sem credencial, como ocorreu no jcode. -7. **Mudancas no checkout:** usar worktree em `.claude/worktrees/` por projeto; nao editar o checkout compartilhado do OmniRoute nem usar `git stash`. - -## 8. Recomendacao - -Executar primeiro os lotes P0/P1 do documento de prioridade. Cada lote pode ter ate tres subagentes, um repositorio por worktree. O agente principal deve revisar a pesquisa, o smoke test e a licenca antes de permitir implementacao. O resultado de cada caso deve atualizar o tracker com commit, PR/issue, validacao e status upstream, sem preencher campos externos por suposicao. - -## 9. Referencias - -- OmniRoute CLI catalogo: `src/shared/constants/cliTools.ts` -- OmniRoute CLI reference: `docs/reference/CLI-TOOLS.md` -- OmniRoute setup guide: `docs/guides/CLI-INTEGRATIONS.md` -- Handoff jcode: `_tasks/hands-off/2026-08-01_release-v3.8.50_v3.8.50_sess-e1846bc2/handoff.md` -- Inventario curado: `https://github.com/bradAGI/awesome-cli-coding-agents` -- GitHub Search API: `https://api.github.com/search/repositories` diff --git a/_references/_sistemas_cli/02-prioridade-integracoes-clis.md b/_references/_sistemas_cli/02-prioridade-integracoes-clis.md deleted file mode 100644 index 9db4ca246c..0000000000 --- a/_references/_sistemas_cli/02-prioridade-integracoes-clis.md +++ /dev/null @@ -1,167 +0,0 @@ -# Prioridade de integracoes de CLIs com OmniRoute - -> **Status final (2026-08-03):** esta é a priorização inicial que orientou a execução. Todos os `104/104` casos já foram pesquisados. A classificação final está no tracker `04`; a estratégia revisada de contribuição está no relatório `06`. - -**Snapshot:** 2026-08-01 -**Objetivo:** ordenar do melhor para o pior todos os projetos tecnicamente candidatos a consumir OmniRoute, sem remover projetos pequenos. A ordem e uma fila de pesquisa/execucao; ela nao e promessa de que todo upstream aceitara um PR. - -## Como ler a prioridade - -- **P0:** ja esta no catalogo OmniRoute ou tem evidencia muito forte de endpoint customizavel; executar/consolidar primeiro. -- **P1:** forte candidato novo, com provider/base URL evidente e bom retorno para o ecossistema. -- **P2:** tecnicamente promissor, mas requer confirmacao de protocolo, config, maturidade ou licenca. -- **P3:** possivel via ACP/MCP/wrapper/launcher, ou com menor adocao; pesquisar depois dos P0-P2. -- **P4:** cliente fechado, EULA, MITM ou pesquisa exploratoria; manter no inventario, mas nao bloquear os demais. - -Os fatores usados foram: evidencia de endpoint arbitrario, adocao/atividade, facilidade de teste, compatibilidade OpenAI/Anthropic/Gemini, maturidade, licenca, chance de PR upstream, valor para usuarios OmniRoute e risco de protocolo. - -## A. Catalogo OmniRoute ja existente - -Estas entradas ja aparecem no registro local. A prioridade aqui significa consolidar documentacao, smoke tests, detector/configurador e eventual upstream nominal; nao significa recriar uma integracao que ja existe. - -| Ordem | Projeto | Repositorio/documentacao | Estado local | Proximo foco | -|---:|---|---|---|---| -| A1 | Claude Code | `anthropics/claude-code` | catalogado; Anthropic base URL | manter compatibilidade Anthropic, streaming e tools | -| A2 | Codex CLI | `openai/codex` | catalogado; OpenAI-compatible | Responses, profiles e `/v1` | -| A3 | OpenCode | `anomalyco/opencode` | catalogado; provider | provider nativo/plugin e model discovery | -| A4 | Cline | `cline/cline` | catalogado; base URL | validar CLI/extension e append de `/v1` | -| A5 | Goose | `aaif-goose/goose` | catalogado; `OPENAI_HOST` | validar schema atual e ACP | -| A6 | Aider | `Aider-AI/aider` | catalogado; `OPENAI_API_BASE` | LiteLLM path, tools e custo | -| A7 | Continue | `continuedev/continue` | catalogado; provider OpenAI | CLI e config YAML atual | -| A8 | Kilo Code | `Kilo-Org/kilocode` | catalogado; custom URL | CLI, extension e auth | -| A9 | Roo Code | `RooCodeInc/Roo-Code` | catalogado; custom URL | CLI/headless e provider | -| A10 | Qwen Code | `QwenLM/qwen-code` | catalogado; `modelProviders` | V4 schema, Responses e env | -| A11 | Open Interpreter | `OpenInterpreter/open-interpreter` | catalogado; `--api_base` | streaming e tool execution | -| A12 | OpenClaw | `openclaw/openclaw` | catalogado; gateway/provider | config atual e segurança | -| A13 | Hermes Agent | `NousResearch/hermes-agent` | catalogado; provider/gateway | endpoint custom e modelos | -| A14 | Hermes | `NousResearch/hermes-agent` | catalogado/dual entry | distinguir CLI e agente | -| A15 | Oh My Pi | `can1357/oh-my-pi` | catalogado; YAML provider | auto-discovery e tool calling | -| A16 | Pi | `badlogic/pi-mono` | catalogado; provider | confirmar repositorio/CLI atual | -| A17 | Crush | `charmbracelet/crush` | catalogado; `base_url` | config TOML/JSON atual | -| A18 | Smelt | `leonardcser/smelt` | catalogado; OpenAI-compatible | headless e subagents | -| A19 | ForgeCode | `antinomyhq/forge` | catalogado; multi-provider | base URL e custom agents | -| A20 | jcode | `1jehuang/jcode` | integrado e proposto upstream | aguardar issue #704; manter README OmniRoute | -| A21 | DeepSeek TUI | `hunterbown/deepseek-tui` | catalogado legado | confirmar sucessor CodeWhale | -| A22 | CodeWhale | `Hmbown/CodeWhale` | catalogado | config primaria e legado | -| A23 | Grok Build | `xai-org/grok-build` | catalogado; `~/.grok/config.toml` | provider OmniRoute e modelos | -| A24 | Cursor Agent CLI | `cursor.com/cli` | catalogado parcial | confirmar limites de endpoint | -| A25 | Factory Droid | `Factory-AI/factory` | catalogado parcial | BYOK e endpoint suportado | -| A26 | GitHub Copilot CLI | `github/copilot-cli` | catalogado | provider base URL atual | -| A27 | Letta CLI | `letta-ai/letta-code` | catalogado | config pi-ai/local mode | -| A28 | Warp AI | `warpdotdev/Warp` | catalogado parcial | somente BYOK/desktop | -| A29 | Agent Deck | `asheshgoplani/agent-deck` | catalogado | agentes filhos e ACP | -| A30 | Antigravity | produto Google | MITM backlog | nao tratar como endpoint direto | -| A31 | Kiro AI | produto AWS | MITM backlog | auth/SSO e MITM | -| A32 | Cursor desktop | produto Anysphere | cloud/MITM | manter separado do Cursor CLI | - -## B. Novos candidatos em ordem de execucao - -| Ordem | Prioridade | Projeto | Repositorio | Evidencia inicial | Rota esperada | -|---:|:---:|---|---|---|---| -| 1 | P0 | Gemini CLI | `google-gemini/gemini-cli` | `GOOGLE_GEMINI_BASE_URL` | config direta/Gemini | -| 2 | P0 | Claw Code | `ultraworkers/claw-code` | `OPENAI_BASE_URL`, provider | OpenAI-compatible | -| 3 | P0 | Plandex | `plandex-ai/plandex` | provider com `baseUrl` | preset/provider | -| 4 | P0 | MiMo Code | `XiaomiMiMo/MiMo-Code` | `@ai-sdk/openai-compatible`, `baseURL` | provider | -| 5 | P0 | Trae Agent | `bytedance/trae-agent` | `model_providers`, `base_url` | provider/config | -| 6 | P0 | Kimi CLI | `MoonshotAI/kimi-cli` | OpenAI legacy/Responses/Anthropic, `base_url` | provider nativo | -| 7 | P0 | Every Code | `just-every/code` | fork Codex, OpenAI/Claude/Gemini | profile/provider | -| 8 | P0 | Open Codex | `ymichael/open-codex` | OpenAI/Gemini/OpenRouter/Ollama | profile/provider | -| 9 | P0 | VT Code | `vinhnx/vtcode` | `custom_providers[].base_url` | provider/failover | -| 10 | P0 | OpenHands CLI | `OpenHands/OpenHands-CLI` | `LLM_BASE_URL` | config direta | -| 11 | P0 | gptme | `gptme/gptme` | `OPENAI_BASE_URL` | config direta | -| 12 | P0 | Nanocoder | `Nano-Collective/nanocoder` | qualquer OpenAI-compatible | config direta | -| 13 | P0 | RA.Aid | `ai-christianson/RA.Aid` | `OPENAI_API_BASE` | config direta | -| 14 | P0 | CoreCoder | `he-yufeng/CoreCoder` | `OPENAI_BASE_URL` | config direta | -| 15 | P1 | Grok CLI | `superagent-ai/grok-cli` | `GROK_BASE_URL`/`baseURL` | config direta | -| 16 | P1 | Gitlawb Zero | `Gitlawb/zero` | `custom-openai-compatible`, `--base-url` | provider/flag | -| 17 | P1 | DeepSeek Reasonix | `esengine/DeepSeek-Reasonix` | endpoint/provider compativel | provider | -| 18 | P1 | KlaatCode | `KlaatAI/klaatcode` | `customModels` OpenAI-compatible | config | -| 19 | P1 | CodeMini CLI | `havingautism/Codemini-CLI` | `gateway.base_url` | gateway | -| 20 | P1 | Zot | `patriceckhart/zot` | `--base-url`, `models.json` | flag/config | -| 21 | P1 | Octomind | `Muvon/octomind` | provider URL envs | provider/env | -| 22 | P1 | DvalinCode | `arthurpanhku/dvalincode` | qualquer OpenAI-compatible | config direta | -| 23 | P1 | Coro Code | `Blushyes/coro-code` | `OPENAI_BASE_URL` | env | -| 24 | P1 | Mini-Kode | `minmaxflow/mini-kode` | `MINIKODE_BASE_URL` | env | -| 25 | P1 | Late CLI | `mlhher/late-cli` | `OPENAI_BASE_URL`, `api-url` | env/flag | -| 26 | P1 | Agentty | `1ay1/agentty` | provider-agnostic, ACP | config/ACP | -| 27 | P1 | Aizen | `aizen-stack/aizen` | Rust OpenAI-compatible, `AIZEN_BASE_URL` | config | -| 28 | P1 | Clif-Code | `DLhugly/Clif-Code` | OpenAI/Anthropic/Ollama | provider | -| 29 | P1 | Minacode | `hit9/minacode` | provider/compatibilidade | confirmar URL | -| 30 | P1 | YottaCode | `yottadynamics/yottacode` | modelo escolhido/gateway | provider | -| 31 | P1 | aichat | `sigoden/aichat` | OpenAI/Claude/Gemini | models YAML | -| 32 | P1 | ShellGPT | `TheR1D/shell_gpt` | `API_BASE_URL` | env | -| 33 | P1 | Mistral Vibe | `mistralai/mistral-vibe` | `base_url`, API base | config | -| 34 | P1 | OpenSquilla | `opensquilla/opensquilla` | gateway, 20+ providers | provider | -| 35 | P1 | Kode CLI | `shareAI-lab/Kode-cli` | endpoint/Anthropic/OpenAI/Gemini | config | -| 36 | P1 | Neovate Code | `neovateai/neovate-code` | plugin/multi-provider | plugin/provider | -| 37 | P1 | Deep Agents Code | `langchain-ai/deepagents` | qualquer tool-calling LLM | provider SDK | -| 38 | P1 | Kode fork/variants | `shareAI-lab/Kode-cli` | multi-provider | confirmar upstream | -| 39 | P1 | OpenHands principal | `All-Hands-AI/OpenHands` | CLI/web; pesquisar LLM base | config/CLI | -| 40 | P1 | SWE-agent | `SWE-agent/SWE-agent` | agente de issues | backend/provider | -| 41 | P1 | AutoCodeRover | `AutoCodeRoverSG/auto-code-rover` | agente de patches | backend/provider | -| 42 | P2 | Claurst | `Kuberwastaken/claurst` | provider/Anthropic | config; licenca GPL | -| 43 | P2 | Codebuff | `CodebuffAI/codebuff` | multi-agent CLI | provider | -| 44 | P2 | Devon | `entropy-research/Devon` | TUI pair programmer | backend | -| 45 | P2 | Letta Code | `letta-ai/letta-code` | model-agnostic | provider | -| 46 | P2 | CodeMachine CLI | `moazbuilds/CodeMachine-CLI` | multi-agent local | provider | -| 47 | P2 | Groq Code CLI | `build-with-groq/groq-code-cli` | multi-model | endpoint | -| 48 | P2 | Dexto | `truffle-ai/dexto` | CLI/web/API | provider | -| 49 | P2 | claw-code-agent | `HarnessLab/claw-code-agent` | endpoint/gateway | provider | -| 50 | P2 | g3 | `dhanji/g3` | Rust provider abstraction | provider | -| 51 | P2 | San | `genai-io/san` | provider-neutral | provider | -| 52 | P2 | Waveloom | `Menfre01/waveloom` | DeepSeek/provider | endpoint | -| 53 | P2 | picocode | `jondot/picocode` | multi-LLM | config | -| 54 | P2 | QQCode | `qnguyen3/qqcode` | skills, Rust | config | -| 55 | P2 | Keen Code | `mochow13/keen-code` | 9+ providers | config | -| 56 | P2 | Grinta | `josephsenior/Grinta-Coding-Agent` | provider-agnostic | config | -| 57 | P2 | Zap | `zap-coding-agent/zap-coding-agent` | Claude/Gemini/OpenAI/LM Studio | provider | -| 58 | P2 | Binharic | `CogitatorTech/binharic-cli` | multi-provider | config | -| 59 | P2 | Darce | `AmerSarhan/darce-cli` | multi-model/streaming | config | -| 60 | P2 | CLAII | `agencyswarm/CLAII` | multi-agent/MCP | provider | -| 61 | P2 | nori-cli | `tilework-tech/nori-cli` | multi-provider sobre Codex | config | -| 62 | P2 | cursor-agent clone | `civai-technologies/cursor-agent` | Claude/OpenAI/Ollama | provider | -| 63 | P2 | Free Code | `paoloanzn/free-code` | fork Claude Code | licenca/config | -| 64 | P2 | Claude Engineer | `Doriandarko/claude-engineer` | CLI Claude | provider | -| 65 | P2 | Smol Developer | `smol-ai/developer` | agent embutivel | SDK/adaptador | -| 66 | P2 | Agentless | `OpenAutoCoder/Agentless` | workflow sem loop | entrada de modelo | -| 67 | P2 | Amazon Q Developer CLI | `aws/amazon-q-developer-cli` | CLI AWS | auth/provider | -| 68 | P2 | nanobot | `HKUDS/nanobot` | OpenClaw rewrite | provider | -| 69 | P2 | ZeroClaw | `zeroclaw-labs/zeroclaw` | providers pluggable | provider | -| 70 | P2 | NanoClaw | `gavrielc/nanoclaw` | Anthropic SDK | base URL | -| 71 | P2 | PicoClaw | `sipeed/picoclaw` | provider/config | provider | -| 72 | P2 | IronClaw | `nearai/ironclaw` | provider Rust | provider | -| 73 | P2 | NullClaw | `nullclaw/nullclaw` | 23+ providers | provider | -| 74 | P2 | Moltis | `moltis-org/moltis` | Rust agent | provider | -| 75 | P2 | GitClaw | `open-gitagent/gitclaw` | Git-native agent | provider | -| 76 | P2 | LionClaw | `moshthepitt/lionclaw` | CLI local | provider | -| 77 | P3 | VibePod | `VibePod/vibepod-cli` | wrapper Docker | launcher | -| 78 | P3 | zeroshot | `the-open-engine/zeroshot` | worktrees/orchestration | launcher | -| 79 | P3 | Fractal | `plasma-ai/fractal` | orquestra CLIs | launcher | -| 80 | P3 | Bernstein | `chernistry/bernstein` | executa/verifica agentes | launcher | -| 81 | P3 | Traycer | `traycerai/traycer` | agentes paralelos | launcher | -| 82 | P3 | h5i | `h5i-dev/h5i` | sandbox e peer review | launcher | -| 83 | P3 | OMK | `dmae97/open-multi-agent-kit` | control plane | ACP/MCP | -| 84 | P3 | kodo | `ikamensh/kodo` | orquestrador | launcher | -| 85 | P3 | ORCH | `oxgeneral/ORCH` | fila de tarefas | launcher | -| 86 | P3 | LoopTroop | `LoopTroop-ai/LoopTroop` | orquestrador OpenCode | launcher | -| 87 | P3 | Galley | `shinpr/galley` | worktree/PR | launcher | -| 88 | P3 | Relay | `jcast90/relay` | MCP/orquestracao | MCP | -| 89 | P3 | SageCLI | `youwangd/SageCLI` | runtime-agnostic | launcher/ACP | -| 90 | P3 | 5dive | `5dive-ai/5dive` | agentes em servidor | launcher | -| 91 | P3 | agx | `ramarlina/agx` | checkpoints | launcher | -| 92 | P3 | claude-code-router | `musistudio/claude-code-router` | proxy multi-provider | integrar como consumidor/proxy | -| 93 | P3 | cc-router | `finch-xu/cc-router` | proxy Anthropic | interoperabilidade | -| 94 | P3 | OneCLI | `onecli/onecli` | broker de credenciais | seguranca/integ. adjacente | -| 95 | P3 | agent-browser | `vercel-labs/agent-browser` | ferramenta para agentes | MCP/plugin | -| 96 | P3 | OpenWork | `different-ai/openwork` | desktop sobre OpenCode | config do agente filho | -| 97 | P4 | Pool | `poolsideai/pool` | `POOLSIDE_STANDALONE_BASE_URL`; EULA | config sem PR presumido | -| 98 | P4 | Junie CLI | `junie.jetbrains.com` | fechado/EAP | BYOK/endpoint a confirmar | -| 99 | P4 | Cursor desktop | `Anysphere` | cloud endpoint | MITM/guide | -| 100 | P4 | Windsurf | produto Codeium | sem base URL geral | MITM | -| 101 | P4 | Amp | `sourcegraph.com/amp` | fechado | MITM/sem PR | -| 102 | P4 | Amazon Q/Kiro CLI | AWS | SSO/ecossistema AWS | MITM/adapter | -| 103 | P4 | Cowork | produto Anthropic | endpoint opaco | MITM | - -## C. Regra de promocao/rebaixamento - -Um projeto sobe de prioridade quando a pesquisa individual confirma: configuracao documentada, teste local com OmniRoute, licenca permissiva e contribuicao aceita. Desce quando: a URL e fixa, o endpoint e somente SaaS, o README nao corresponde ao codigo, a autenticacao e inseparavel do provedor, ou a licenca/EULA impede redistribuicao. Nenhum projeto e marcado como impossivel sem registrar a evidencia no tracker. diff --git a/_references/_sistemas_cli/03-plano-integracao-em-lotes.md b/_references/_sistemas_cli/03-plano-integracao-em-lotes.md deleted file mode 100644 index 80d4a02c97..0000000000 --- a/_references/_sistemas_cli/03-plano-integracao-em-lotes.md +++ /dev/null @@ -1,314 +0,0 @@ -# Plano executavel de integracao de CLIs - -> **Status final (2026-08-03):** a fase de pesquisa foi concluída em lotes de até três worktrees/agentes, cobrindo `104/104` casos. Este documento continua válido como processo operacional para implementação/publicação. Consulte `06-relatorio-final-104-clis-e-estrategia-prs.md` para o resultado final. - -**Data:** 2026-08-01 -**Objetivo:** pesquisar, integrar, validar e publicar suporte ao OmniRoute em todos os projetos tecnicamente possiveis, mantendo uma fila que permite ate tres subagentes simultaneos. - -O ciclo especifico de preparacao, revisao, envio e acompanhamento das contribuicoes upstream esta -em `05-plano-publicacao-prs-upstream.md`. - -## 1. Principios operacionais - -- Um repositorio por subagente e por worktree. -- No maximo tres tasks de repositorios em execucao ao mesmo tempo. -- Cada task pesquisa o upstream novamente antes de editar; o relatorio inicial e somente contexto. -- O agente principal revisa licenca, arquitetura, smoke test e diff antes do proximo lote. -- Nao usar checkout compartilhado para desenvolvimento e nao usar `git stash`/`git pop`. -- Usar worktrees em `.claude/worktrees/` e branches especificas. -- Nao inventar PR, issue, commit ou aceite de mantenedor. -- Nao adicionar trailers ou rodapes de IA em commits/PRs. - -## 2. Fases obrigatorias por projeto - -### Fase 0 - Preparacao da task - -Criar uma task com nome do projeto, URL canonica, prioridade, evidencia inicial, estado no catalogo OmniRoute e objetivo de integrar. Definir a worktree e o agente responsavel. - -### Fase 1 - Pesquisa individual fresca - -O agente deve verificar no upstream atual: - -- arquitetura de providers e ponto de entrada do CLI; -- arquivo/schema de configuracao e suporte a `base_url`, `baseURL`, `OPENAI_BASE_URL`, `OPENAI_API_BASE`, `LLM_BASE_URL` ou equivalente; -- protocolo real (Chat Completions, Responses, Anthropic Messages, Gemini, ACP, MCP ou outro); -- descoberta de modelos e necessidade de `/v1/models`; -- autenticacao, keyring, OAuth e variaveis de ambiente; -- streaming, tool calling, reasoning e limites conhecidos; -- politica de contribuicao, licenca e se PR de fork externo e aceito; -- atividade, releases, issues/PRs sobre providers customizados ou endpoints locais; -- comandos de build, lint, teste e smoke test; -- possibilidade de fork/PR, issue de proposta, documentacao ou apenas wrapper/MITM. - -Registrar commit/release pesquisado e links de evidencia. - -### Fase 2 - Gate de viabilidade - -Classificar exatamente um caminho inicial: - -`viable-direct` (somente configuracao), `viable-upstream` (mudanca no upstream), `viable-acp`, `viable-mcp`, `needs-wrapper`, `needs-mitm`, `config-only`, `blocked` ou `research-more`. - -Nao implementar antes de haver uma conclusao de viabilidade e uma razao verificavel. - -### Fase 3 - Baseline e TDD - -- Executar a suite recomendada pelo upstream antes das mudancas. -- Registrar falhas preexistentes, dependencias ausentes e comandos exatos. -- Limpar `OMNIROUTE_API_KEY` e demais credenciais quando os testes pressupuserem ambiente sem chaves. -- Adicionar primeiro um teste de configuracao, endpoint e selecao de modelo que falhe sem a integracao. - -### Fase 4 - Implementacao minima - -Implementar apenas o necessario para o caso pesquisado: - -- perfil/preset `omniroute` ou provider custom; -- base URL correta (raiz, `/v1` ou `/v1beta` conforme o cliente); -- chave via ambiente ou mecanismo seguro do cliente; -- modelo fixo ou descoberta de modelos; -- selecao/login/report se o CLI tiver esses fluxos; -- documentacao de uso e limites; -- testes de config e chamada. - -Se o upstream nao aceitar mudanca, preparar wrapper/launcher ou documentacao local e registrar a limitacao. - -### Fase 5 - Validacao funcional - -Executar, conforme o protocolo: - -- build, lint, typecheck e testes do upstream; -- smoke request com OmniRoute; -- streaming SSE e encerramento por abort; -- tool calling e JSON de argumentos; -- `/v1/models` ou equivalente; -- Chat Completions, Responses, Anthropic Messages e Gemini `generateContent` quando aplicavel; -- fallback/erro, timeout, retry e modelo inexistente; -- teste com chave limpa e teste com `OMNIROUTE_API_KEY` real fora dos logs. - -### Fase 6 - Publicacao upstream - -- Criar fork somente quando permitido e branch especifica. -- Abrir PR upstream se contribuicoes externas forem aceitas. -- Se PR externo for bloqueado, abrir issue com proposta, patch/referencia e smoke test. -- Se o projeto for fechado/EULA, registrar config manual ou issue de produto; nao criar PR ficticio. -- Atualizar o tracker com URL, commit, estado e resposta do mantenedor. - -### Fase 7 - Catalogo e integracao OmniRoute - -Quando houver valor para usuarios OmniRoute: - -- criar worktree propria do OmniRoute; -- atualizar `src/shared/constants/cliTools.ts` ou `src/shared/constants/cliToolsGrokBuild.ts`; -- atualizar detector em `src/lib/cli-helper/tool-detector.ts` se necessario; -- adicionar gerador/configurador e rota de settings somente se o caso exigir; -- adicionar testes do catalogo, detector, settings, `baseUrlSupport` e `/v1`; -- atualizar `docs/reference/CLI-TOOLS.md`, `docs/guides/CLI-INTEGRATIONS.md` e README quando apropriado; -- atualizar o tracker com a integracao local e evidencias. - -### Fase 8 - Fechamento - -Registrar commit, branch, PR/issue, testes, limitacoes, status do upstream, status do catalogo OmniRoute e proximo passo. O agente principal faz uma revisao final de seguranca, licenca e factualidade. - -## 3. Lotes de ate tres subagentes - -O lote e uma unidade operacional. A fila abaixo e ordenada pelo documento `02-prioridade-integracoes-clis.md`; cada linha representa uma task individual. - -### Lote 0 - consolidacao do caso de referencia - -- `CLI-000` - jcode - manter a issue #704, validar resposta do mantenedor e concluir a secao do README OmniRoute. - -### Lote P0.1 - -- `CLI-001` - Gemini CLI - integrar provider/base URL Gemini. -- `CLI-002` - Claw Code - integrar `OPENAI_BASE_URL`/provider OmniRoute. -- `CLI-003` - Plandex - integrar provider custom com `baseUrl`. - -### Lote P0.2 - -- `CLI-004` - MiMo Code - integrar provider OpenAI-compatible. -- `CLI-005` - Trae Agent - integrar `model_providers` e `base_url`. -- `CLI-006` - Kimi CLI - integrar modos OpenAI/Responses/Anthropic. - -### Lote P0.3 - -- `CLI-007` - Every Code - integrar perfil derivado do Codex. -- `CLI-008` - Open Codex - integrar provider multi-modelo. -- `CLI-009` - VT Code - integrar `custom_providers` e failover. - -### Lote P0.4 - -- `CLI-010` - OpenHands CLI - integrar `LLM_BASE_URL`. -- `CLI-011` - gptme - integrar `OPENAI_BASE_URL`. -- `CLI-012` - Nanocoder - integrar API OpenAI-compatible. - -### Lote P0.5 - -- `CLI-013` - RA.Aid - integrar `OPENAI_API_BASE`. -- `CLI-014` - CoreCoder - integrar `OPENAI_BASE_URL`. -- `CLI-015` - Grok CLI - integrar `GROK_BASE_URL`. - -### Lote P1.1 - -- `CLI-016` - Gitlawb Zero - integrar provider custom e `--base-url`. -- `CLI-017` - DeepSeek Reasonix - confirmar e integrar endpoint. -- `CLI-018` - KlaatCode - integrar `customModels`. - -### Lote P1.2 - -- `CLI-019` - CodeMini CLI - integrar `gateway.base_url`. -- `CLI-020` - Zot - integrar flag/config `--base-url`. -- `CLI-021` - Octomind - integrar provider URL envs. - -### Lote P1.3 - -- `CLI-022` - DvalinCode - integrar OpenAI-compatible. -- `CLI-023` - Coro Code - integrar `OPENAI_BASE_URL`. -- `CLI-024` - Mini-Kode - integrar `MINIKODE_BASE_URL`. - -### Lote P1.4 - -- `CLI-025` - Late CLI - integrar `OPENAI_BASE_URL`/`api-url`. -- `CLI-026` - Agentty - integrar provider e/ou ACP. -- `CLI-027` - Aizen - integrar `AIZEN_BASE_URL`. - -### Lote P1.5 - -- `CLI-028` - Clif-Code - integrar providers OpenAI/Anthropic/Ollama. -- `CLI-029` - Minacode - confirmar provider e integrar URL. -- `CLI-030` - YottaCode - integrar gateway/provider. - -### Lote P1.6 - -- `CLI-031` - aichat - integrar models YAML/provider. -- `CLI-032` - ShellGPT - integrar `API_BASE_URL`. -- `CLI-033` - Mistral Vibe - integrar base URL/provider. - -### Lote P1.7 - -- `CLI-034` - OpenSquilla - integrar gateway/provider. -- `CLI-035` - Kode CLI - integrar endpoint multi-provider. -- `CLI-036` - Neovate Code - integrar plugin/provider. - -### Lote P1.8 - -- `CLI-037` - Deep Agents Code - integrar provider do pacote CLI. -- `CLI-038` - OpenHands principal - integrar CLI/config. -- `CLI-039` - SWE-agent - integrar backend/provider. - -### Lote P1.9 - -- `CLI-040` - AutoCodeRover - integrar backend/provider. -- `CLI-041` - Claurst - integrar provider, respeitando GPL. -- `CLI-042` - Codebuff - integrar provider. - -### Lote P2.1 - -- `CLI-043` - Devon - integrar backend. -- `CLI-044` - Letta Code - integrar provider. -- `CLI-045` - CodeMachine CLI - integrar provider. - -### Lote P2.2 - -- `CLI-046` - Groq Code CLI - integrar endpoint. -- `CLI-047` - Dexto - integrar provider. -- `CLI-048` - claw-code-agent - integrar endpoint. - -### Lote P2.3 - -- `CLI-049` - g3 - integrar provider Rust. -- `CLI-050` - San - integrar provider-neutral. -- `CLI-051` - Waveloom - integrar provider/endpoint. - -### Lote P2.4 - -- `CLI-052` - picocode - integrar multi-LLM. -- `CLI-053` - QQCode - integrar config. -- `CLI-054` - Keen Code - integrar provider. - -### Lote P2.5 - -- `CLI-055` - Grinta - integrar provider. -- `CLI-056` - Zap - integrar Claude/Gemini/OpenAI. -- `CLI-057` - Binharic - integrar multi-provider. - -### Lote P2.6 - -- `CLI-058` - Darce - integrar multi-modelo. -- `CLI-059` - CLAII - integrar provider/MCP. -- `CLI-060` - nori-cli - integrar provider baseado em Codex. - -### Lote P2.7 - -- `CLI-061` - cursor-agent clone - integrar provider. -- `CLI-062` - Free Code - pesquisar licenca e integrar se viavel. -- `CLI-063` - Claude Engineer - integrar provider. - -### Lote P2.8 - -- `CLI-064` - Smol Developer - integrar SDK/adaptador. -- `CLI-065` - Agentless - integrar entrada de modelo. -- `CLI-066` - Amazon Q Developer CLI - pesquisar auth/provider. - -### Lote P2.9 - -- `CLI-067` - nanobot - integrar provider OpenClaw-compatible. -- `CLI-068` - ZeroClaw - integrar trait de provider. -- `CLI-069` - NanoClaw - confirmar base Anthropic. - -### Lote P2.10 - -- `CLI-070` - PicoClaw - integrar provider/config. -- `CLI-071` - IronClaw - integrar provider Rust. -- `CLI-072` - NullClaw - integrar provider. - -### Lote P2.11 - -- `CLI-073` - Moltis - integrar provider Rust. -- `CLI-074` - GitClaw - integrar provider Git-native. -- `CLI-075` - LionClaw - integrar provider CLI. - -### Lote P3.1 - wrappers e orquestradores - -- `CLI-076` - VibePod; `CLI-077` - zeroshot; `CLI-078` - Fractal. - -### Lote P3.2 - -- `CLI-079` - Bernstein; `CLI-080` - Traycer; `CLI-081` - h5i. - -### Lote P3.3 - -- `CLI-082` - OMK; `CLI-083` - kodo; `CLI-084` - ORCH. - -### Lote P3.4 - -- `CLI-085` - LoopTroop; `CLI-086` - Galley; `CLI-087` - Relay. - -### Lote P3.5 - -- `CLI-088` - SageCLI; `CLI-089` - 5dive; `CLI-090` - agx. - -### Lote P3.6 - -- `CLI-091` - claude-code-router; `CLI-092` - cc-router; `CLI-093` - OneCLI. - -### Lote P3.7 - -- `CLI-094` - agent-browser; `CLI-095` - OpenWork; `CLI-096` - Agent Deck (revisao de agente filho). - -### Lote P4 - fechados/MITM - -- `CLI-097` - Pool; `CLI-098` - Junie CLI; `CLI-099` - Cursor desktop. -- `CLI-100` - Windsurf; `CLI-101` - Amp; `CLI-102` - Amazon Q/Kiro CLI; `CLI-103` - Cowork. - -## 4. Criterio para iniciar o lote seguinte - -O lote seguinte pode iniciar quando os tres agentes do lote atual tiverem: pesquisa upstream anexada, gate de viabilidade preenchido, baseline registrado, resultado de smoke test ou bloqueio reproduzivel, e tracker atualizado. Uma falha de um agente nao deve paralisar os outros dois; o agente principal deve marcar `blocked` ou `research-more` com evidencia e seguir a fila. - -## 5. Entregaveis de cada task - -1. Nota de pesquisa fresca com commit/release e links. -2. Classificacao de viabilidade. -3. Diff minimo ou conclusao documentada de que nao ha diff necessario. -4. Testes e comandos executados, incluindo falhas preexistentes. -5. PR/issue upstream ou justificativa de config-only/MITM. -6. Entrada no catalogo OmniRoute quando aplicavel. -7. Atualizacao do tracker `04-tracker-integracoes-clis.md`. diff --git a/_references/_sistemas_cli/04-tracker-integracoes-clis.md b/_references/_sistemas_cli/04-tracker-integracoes-clis.md deleted file mode 100644 index 1b253d1ca8..0000000000 --- a/_references/_sistemas_cli/04-tracker-integracoes-clis.md +++ /dev/null @@ -1,144 +0,0 @@ -# Tracker de integracoes de CLIs com OmniRoute - -**Status final da pesquisa:** `104/104` concluídos (`100%`), `0` casos `not-started`. Este é o registro individual autoritativo. O relatório executivo está em `06-relatorio-final-104-clis-e-estrategia-prs.md`. - -**Snapshot inicial:** 2026-08-01 -**Legenda de status:** `not-started`, `researching`, `research-more`, `viable-direct`, `viable-upstream`, `viable-acp`, `viable-mcp`, `needs-wrapper`, `needs-mitm`, `blocked`, `implementing`, `validating`, `published-pr`, `published-issue`, `awaiting-maintainer`, `accepted`, `rejected`, `integrated`. - -Os campos externos (`branch`, `commit`, `PR`, `issue`) ficam como `—` ate haver evidencia real. “Catalogo OmniRoute” significa entrada local, nao necessariamente suporte upstream publicado. - -| ID | Prio | Projeto | Repositorio | Pesquisa | Tipo | Upstream | Branch | Commit | PR | Issue | Catalogo OmniRoute | Observacoes/proximo passo | -|---|:---:|---|---|---|---|---|---|---|---|---|---|---| -| CLI-000 | P0 | jcode | `1jehuang/jcode` | concluida | `viable-upstream` | `awaiting-maintainer` | `feat/omniroute-provider` | `ee4f904e6` | [fork PR](https://github.com/diegosouzapw/jcode/pull/1) | [upstream #704](https://github.com/1jehuang/jcode/issues/704) | integrated | acompanhar mantenedor e concluir secao do README | - -## Caso publicado: jcode - -| Campo | Valor | -|---|---| -| Projeto | jcode | -| Repositorio | `https://github.com/1jehuang/jcode` | -| Status geral | `awaiting-maintainer` | -| Tipo | `viable-upstream`; perfil OpenAI-compatible dirigido por metadados | -| Branch | `feat/omniroute-provider` | -| Commit | `ee4f904e6` | -| PR | `https://github.com/diegosouzapw/jcode/pull/1` (fork de referencia) | -| Issue | `https://github.com/1jehuang/jcode/issues/704` | -| Catalogo OmniRoute | `integrated` / entrada existente | -| Validacao | `cargo check --workspace` limpo; 205 testes passaram; 1 falha preexistente/ambiental | -| Diff | 6 arquivos, `+56/-3` | -| Proximo passo | acompanhar issue #704 e criar secao de README do OmniRoute | - -## Tabela principal - -| ID | Prio | Projeto | Repositorio | Pesquisa | Tipo | Upstream | Branch | Commit | PR | Issue | Catalogo OmniRoute | Observacoes/proximo passo | -|---|:---:|---|---|---|---|---|---|---|---|---|---|---| -| CLI-001 | P0 | Gemini CLI | `google-gemini/gemini-cli` | concluida | `pr-generic` | `published-issue` | `fix/omniroute-gateway-auth` | `8138105c38cc1637fe9e8a9bd520eb835f1620e6` | — | [upstream #27550](https://github.com/google-gemini/gemini-cli/issues/27550#issuecomment-5152312278) | not-in-catalog | regression `AuthType.GATEWAY`; patch +26; auth 10/10, non-interactive 17/17, content generator 55/55, Gemini `/v1beta` stream/tools smoke verde; aguardar `help wanted` antes de terceira PR | -| CLI-002 | P0 | Claw Code | `ultraworkers/claw-code` | concluida | `pr-docs` | `published-issue` | `docs/omniroute-setup` | `de857038b2f9ff9b319132e2241549e86215c351` | — | [upstream #3283](https://github.com/ultraworkers/claw-code/issues/3283) | not-in-catalog | generic OpenAI Chat Completions; docs +37; 1.415 testes, fmt, docs/release checks e clippy oficial verdes; fork bloqueado pelo GitHub, issue-first; smoke OmniRoute parcial/timeout; chave do smoke deve ser rotacionada | -| CLI-003 | P0 | Plandex | `plandex-ai/plandex` | concluida | `pr-docs` | `published-pr` | `feat/omniroute-provider-docs` | `f8f0694bdf7d1cb6e65a1f1c5bc39f84921a4507` | [upstream #359](https://github.com/plandex-ai/plandex/pull/359) | — | not-in-catalog | custom provider OpenAI-compatible ja existia; docs com `/v1`, `OMNIROUTE_API_KEY`, Docker reachability e model mapping; Go indisponivel; Docusaurus build verde; acompanhar mantenedor | -| CLI-004 | P0 | MiMo Code | `XiaomiMiMo/MiMo-Code` | concluida | `config-only` | not-applicable | `research/omniroute-mimo-code` | — | — | — | not-in-catalog | SHA `ce124cb`; provider customizado `@ai-sdk/openai-compatible` já suporta `baseURL`, `apiKey` e modelo; 116 testes focados + typecheck verdes; smoke CLI inconclusivo por travamento ambiental; sem PR artificial | -| CLI-005 | P0 | Trae Agent | `bytedance/trae-agent` | concluida | `pr-docs` | `published-pr` | `research/omniroute-trae-agent` | `4801e48b69d7583300eb86ec5c69235506d7f205` | [upstream #449](https://github.com/bytedance/trae-agent/pull/449) | — | not-in-catalog | README +39; `provider: openai` + mapping `base_url=/v1`; `/v1/responses`, `/v1/models`, Bearer, tools e limitação sem streaming; 62 testes/17 skips, pre-commit e mocks verdes; CLA pendente | -| CLI-006 | P0 | Kimi CLI | `MoonshotAI/kimi-cli` | concluida | `pr-docs` | `published-issue` | `research/omniroute-kimi-cli` | `a2f62bf6108a6954e798db992411aa06670e224f` | — | [upstream #2576](https://github.com/MoonshotAI/kimi-cli/issues/2576) | not-in-catalog | docs EN/ZH +63; `openai_legacy` `/v1`, chave via `OPENAI_API_KEY`, modelo manual; Responses/Anthropic alternativos; 47 testes e VitePress verdes; aguardar direção do mantenedor antes da PR | -| CLI-007 | P0 | Every Code | `just-every/code` | concluida | `pr-docs` / `config-only` | `published-pr` | `feat/omniroute-integration` | `8fbc8dab5fb76bf05535055801af0c3ccfea6f3b` | [upstream #614](https://github.com/just-every/code/pull/614) | — | not-in-catalog | PR documental aberta e mergeable; release `v0.6.162`; `./build-fast.sh` baseline/pós-patch verdes; smoke mock Responses/SSE/tools verde; acompanhar CI/mantenedor | -| CLI-008 | P0 | Open Codex | `ymichael/open-codex` | concluida | `pr-generic` / `issue-first` | `published-issue` | `feat/omniroute-integration` | `f25de99f991c0e4d9d6ae2811d307cdbff92f869` | — | [upstream #4](https://github.com/ymichael/open-codex/issues/4#issuecomment-5152804104) | not-in-catalog | patch genérico pronto localmente; issue-first por firewall de container e PR #19 fechada; 132 testes, typecheck/build/format verdes; lint bloqueado por ambiente; aguardar mantenedor antes de PR | -| CLI-009 | P0 | VT Code | `vinhnx/vtcode` | concluida | `pr-docs` / `config-only` | `published-pr` | `feat/omniroute-integration` | `256682d10c72f3e6e145d852b6d9d53f5c471988` | [upstream #717](https://github.com/vinhnx/VTCode/pull/717) | — | not-in-catalog | PR documental aberta e mergeable; release `0.141.10`; custom provider `/v1`, Bearer, `auto`, discovery manual, streaming/tools; 10 testes config verdes; nextest/docs checks bloqueados por ambiente; acompanhar CI/mantenedor | -| CLI-010 | P0 | OpenHands CLI | `OpenHands/OpenHands-CLI` | concluida | `config-only` | not-applicable | `feat/omniroute-openhands-cli-integration` | — | — | — | not-in-catalog | SHA `2df8a283`; `LLM_BASE_URL=/v1`, `LLM_API_KEY`, modelo obrigatório `openai/auto`, Chat Completions/SSE/tools; 63 testes focados e mock verdes; sem PR artificial | -| CLI-011 | P0 | gptme | `gptme/gptme` | concluida | `config-only` | not-applicable | `feat/omniroute-gptme-integration` | — | — | — | not-in-catalog | SHA `7fe250529`; provider TOML nomeado, `/v1/chat/completions`, `/v1/models`, Bearer, streaming/tools; compileall verde, pytest bloqueado por deps; docs genericas ja cobrem | -| CLI-012 | P0 | Nanocoder | `Nano-Collective/nanocoder` | concluida | `config-only` | not-applicable | `feat/omniroute-nanocoder-integration` | — | — | — | not-in-catalog | SHA `becae998`; `createOpenAICompatible`, `/v1/models`, streaming/native tools + XML/JSON fallback; types/format/lint/build verdes; suite ampla com falhas preexistentes; sem PR artificial | -| CLI-013 | P0 | RA.Aid | `ai-christianson/RA.Aid` | concluida | `config-only` | not-applicable | `feat/omniroute-ra-aid-integration` | — | — | — | not-in-catalog | SHA `e71bb83`; provider `openai-compatible`, `/v1/chat/completions`, Bearer, modelo explicito/`auto`, function tools; 762 testes + 62 focados e smoke verdes; sem Responses/stream HTTP garantido; Aider exige config separada; sem PR artificial | -| CLI-014 | P0 | CoreCoder | `he-yufeng/CoreCoder` | concluida | `pr-docs` / `config-only` | `published-pr` | `feat/omniroute-integration` | `f4d2851649e5dda20738c313a8a94337b24eeb9d` | [upstream #20](https://github.com/he-yufeng/CoreCoder/pull/20) | — | not-in-catalog | PR documental aberta, nao draft e mergeable; `/v1/chat/completions`, Bearer, `auto`, streaming/native tools; 86 testes, compileall, build, twine e smoke verdes; Ruff mantem 41 falhas preexistentes; acompanhar CI/mantenedor | -| CLI-015 | P1 | Grok CLI | `superagent-ai/grok-cli` | concluida | `config-only` | not-applicable | `feat/omniroute-grok-cli-integration` | — | — | — | not-in-catalog | SHA `fb97af8`; `GROK_BASE_URL`/`--base-url`, Chat Completions/SSE, Bearer, `auto` e tools confirmados; 47/48 suites e 246 testes no gate isolado, 6 arquivos/39 testes focados verdes; Node não carrega `bun:sqlite`; Responses/search/STT/Batch/midia não garantidos; monitorar PRs #290/#349 | -| CLI-016 | P1 | Gitlawb Zero | `Gitlawb/zero` | concluida | `config-only` | not-applicable | `feat/omniroute-gitlawb-zero-integration` | — | — | — | not-in-catalog | SHA `8e266797`; release `v0.6.0`; provider custom `/v1`, Bearer, `auto`, Chat/SSE/tools, usage e `/v1/models` confirmados; Go test/vet/fmt e smoke verdes; release build bloqueado por falta de espaco; politica exige issue aprovada; sem contribuicao nominal artificial | -| CLI-017 | P1 | DeepSeek Reasonix | `esengine/DeepSeek-Reasonix` | concluida | `config-only` | not-applicable | `feat/omniroute-deepseek-reasonix-integration` | — | — | — | not-in-catalog | SHA `1c62489d`; release `v1.19.1`; `kind=openai`, `/v1/chat/completions`, Bearer, `auto`, SSE/tools, `/v1/models` e reasoning confirmados; suite completa, vet, fmt, build e smoke verdes apos remover env SSH do runner; sem PR/issue redundante | -| CLI-018 | P1 | KlaatCode | `KlaatAI/klaatcode` | concluida | `config-only` | not-applicable | `feat/omniroute-klaatcode-integration` | — | — | — | not-in-catalog | SHA `0d20f24a`; release `V2.4.0`; `customModels` com `/v1`, Bearer, `auto`, Chat/SSE/tools confirmados; 316 testes, 33 fixtures e build verdes; typecheck local divergiu do CI verde; custom endpoint e apenas TUI; divergencia de metadata de licenca registrada; sem contribuicao nominal artificial | -| CLI-019 | P1 | CodeMini CLI | `havingautism/Codemini-CLI` | concluida | `config-only` | not-applicable | `feat/omniroute-codemini-cli-integration` | — | — | — | not-in-catalog | SHA `a3764b21`; package `0.8.3`; gateway `/v1`, Bearer persistido, `auto`, Chat/SSE/usage/tools e tool round trip confirmados; `/models` e probe, nao picker; 122/123 testes, 10 focados e pack-imports verdes; sem PR nominal redundante | -| CLI-020 | P1 | Zot | `patriceckhart/zot` | concluida | `config-only` | not-applicable | `feat/omniroute-zot-integration` | — | — | — | not-in-catalog | SHA `f3d8eb66`; release `v0.3.29`; custom provider `omniroute` em `models.json`, `/v1`, Bearer, `auto`, Chat/SSE/tools/reasoning opt-in e cache usage confirmados; `--base-url` e so override; PR #36 ja cita OmniRoute; race suite/build/vet/fmt verdes | -| CLI-021 | P1 | Octomind | `Muvon/octomind` | concluida | `config-only` | not-applicable | `feat/omniroute-octomind-integration` | — | — | — | not-in-catalog | SHA `65ab1db1`; release `0.39.0`; provider `local:auto` usa endpoint completo `/v1/chat/completions`, Bearer opcional, Chat JSON buffered, tools/reasoning/usage; sem SSE/Responses/discovery; fmt/fetch e smokes com/sem auth verdes; suite ampla nao executada por disco/contencao | -| CLI-022 | P1 | DvalinCode | `arthurpanhku/dvalincode` | concluida | `config-only` | not-applicable | `feat/omniroute-dvalincode-integration` | — | — | — | not-in-catalog | SHA `7d42664a`; release `v0.14.1`; provider OpenAI-compatible custom com `/v1`, Bearer via env, `auto`, Chat/SSE/usage/tools e tool round trip confirmados; `provider test` bloqueado por trusted presets; issues #109/#118/#135 ja cobrem melhorias genericas; sem PR nominal | -| CLI-023 | P1 | Coro Code | `Blushyes/coro-code` | concluida | `config-only` | not-applicable | `feat/omniroute-coro-code-integration` | — | — | — | not-in-catalog | SHA `679c57af`; release `v0.0.8`; `OPENAI_BASE_URL=/v1`, Bearer, `auto`, Chat JSON e function tools/tool loop confirmados; streaming existe mas nao e usado pelo agente; sem Responses/discovery; `cargo check`/fmt bloqueados por drift preexistente; risco de LICENSE ausente; sem PR nominal | -| CLI-024 | P1 | Mini-Kode | `minmaxflow/mini-kode` | concluida | `config-only` | not-applicable | `feat/omniroute-mini-kode-integration` | — | — | — | not-in-catalog | SHA `4e7f9767`; release/tag npm `0.2.3`; provider custom por `MINIKODE_BASE_URL=/v1`, Bearer, `auto`, Chat/SSE e tools/tool loop confirmados; sem Responses/discovery/reasoning dedicado; sem PR nominal redundante | -| CLI-025 | P1 | Late CLI | `mlhher/late-cli` | concluida | `config-only` | not-applicable | `feat/omniroute-late-cli-integration` | — | — | — | not-in-catalog | SHA `26814e62`; release `v1.4.2`; `OPENAI_BASE_URL=/v1`, Bearer, `auto`, Chat/SSE/usage/reasoning_content/tools e tool round trip confirmados; probes `/props`/`/v1/models` nao sao picker; BSL 1.1/CLA; sem PR nominal | -| CLI-026 | P1 | Agentty | `1ay1/agentty` | concluida | `config-only` | not-applicable | `feat/omniroute-agentty-integration` | — | — | — | not-in-catalog | SHA `e947b26c`; release `v0.2.10`; custom host `127.0.0.1:20128`, Bearer, Chat/SSE/tools e `/v1/models` confirmados; Responses/reasoning/tool round trip dinamico nao confirmados; MIT; sem PR nominal | -| CLI-027 | P1 | Aizen | `aizen-stack/aizen` | concluida | `config-only` | not-applicable | `feat/omniroute-aizen-integration` | — | — | — | not-in-catalog | SHA `3d8ae0f6`; release `v0.5.4`; `AIZEN_BASE_URL=/v1`, Bearer, `auto`/modelo literal, Chat/SSE/reasoning_content e `/v1/models`; tools confirmadas estaticamente, sem smoke dinamico; PolyForm Noncommercial/CLA; sem PR nominal | -| CLI-028 | P1 | Clif-Code | `DLhugly/Clif-Code` | concluida | `config-only` | not-applicable | `feat/omniroute-clif-code-integration` | — | — | — | not-in-catalog | SHA `282a787a`; release `v1.72.0`; `CLIFCODE_API_URL=/v1`, Bearer, `auto`, Chat/SSE/usage/tools e tool loop confirmados por fonte; smoke bloqueado por binario ausente; sem Responses/reasoning; licença proprietária conflitante com FSL declarada exige revisão jurídica; sem PR nominal | -| CLI-029 | P1 | Minacode | `hit9/minacode` | concluida | `config-only` | not-applicable | `feat/omniroute-minacode-integration` | — | — | — | not-in-catalog | SHA `d4ea4a97`; release `v0.18.1`; TOML custom `/v1`, key obrigatória, `auto`, Chat/Responses/Anthropic, SSE/tools/reasoning/discovery confirmados; smoke de protocolo Chat+Responses+models e compileall verdes; CI remoto verde; sem PR nominal | -| CLI-030 | P1 | YottaCode | `yottadynamics/yottacode` | concluida | `config-only` | not-applicable | `feat/omniroute-yottacode-integration` | — | — | — | not-in-catalog | SHA `039f61ce`; release `v0.3.1`; provider `openai-compatible`, `/v1`, Bearer, `/v1/models`, Chat/SSE/tools/reasoning parsing confirmados; smoke oficial com mock passou; Go 1.26 nao instalado e gates completos nao executados por espaco; sem PR nominal | -| CLI-031 | P1 | aichat | `sigoden/aichat` | concluida | `config-only` | not-applicable | `feat/omniroute-aichat-integration` | — | — | — | not-in-catalog | SHA `82976d3`; package/release `v0.30.0`; provider `openai-compatible` com base `/v1`, Bearer opcional e modelo `auto`; Chat stream/JSON, reasoning e tool round-trip confirmados; Responses ausente (#1431); limites de tool SSE ja cobertos por #1454/#1495 e PR #1496; sem publicacao nominal | -| CLI-032 | P1 | ShellGPT | `TheR1D/shell_gpt` | concluida | `config-only` | not-applicable | `feat/omniroute-shellgpt-integration` | — | — | — | not-in-catalog | SHA `a082bd53`; release `1.5.1`; `API_BASE_URL=/v1`, `OPENAI_API_KEY`, `DEFAULT_MODEL=auto` e `USE_LITELLM=false`; smoke real confirmou env e `.sgptrc`, Chat/SSE e Bearer; issue #718 nao reproduz no HEAD; CI baseline vermelho por temperatura default independente; sem publicacao nominal | -| CLI-033 | P1 | Mistral Vibe | `mistralai/mistral-vibe` | concluida | `config-only` | not-applicable | `feat/omniroute-mistral-vibe-integration` | — | — | — | not-in-catalog | SHA/release `99a6efa9` / `v2.23.2`; `GenericBackend` custom com base `/v1`, Bearer, Chat/SSE, usage, tools e reasoning; smoke do binario oficial verde; #790 cobre somente discovery `/v1/models`; upstream nao aceita contribuicoes de codigo no momento; sem publicacao | -| CLI-034 | P1 | OpenSquilla | `opensquilla/opensquilla` | concluida | `config-only` | not-applicable | `feat/omniroute-opensquilla-integration` | — | — | — | not-in-catalog | `custom` com `/v1`, Bearer opcional, Chat/SSE, tools, reasoning recebido, usage e `/v1/models`; smoke provider-level verde; monitorar issue #912 do probe custom; sem publicacao nominal | -| CLI-035 | P1 | Kode CLI | `shareAI-lab/Kode-cli` | concluida | `config-only` | not-applicable | `feat/omniroute-kode-cli-integration` | — | — | — | not-in-catalog | `custom-openai` com `/v1`, discovery `/v1/models`, fallback manual, Bearer, Chat/SSE, tools/tool round-trip e persistencia; smoke runtime bloqueado por Bun/artefato ausente; CI baseline vermelho por formatacao; sem publicacao nominal | -| CLI-036 | P1 | Neovate Code | `neovateai/neovate-code` | concluida | `config-only` | not-applicable | `feat/omniroute-neovate-code-integration` | — | — | — | not-in-catalog | provider JSON custom normalizado para OpenAI-compatible, `/v1`, Bearer, Chat/SSE, tools/tool round-trip; model catalog declarado (sem discovery); smoke do pacote publicado verde; sem publicacao nominal | -| CLI-037 | P1 | Deep Agents Code | `langchain-ai/deepagents` | concluida | `config-only` | not-applicable | `feat/omniroute-deepagents-code-integration` | — | — | — | not-in-catalog | SHA `46ee772b4`; `deepagents-code==0.1.51`; provider `openai`, base OmniRoute `/v1`, model `openai:auto`; Responses e default, Chat usa `use_responses_api=false`; smoke de config verde, sem HTTP/runtime por deps e disco; #3973/#3287 ja cobrem os pontos genericos; sem publicacao nominal | -| CLI-038 | P1 | OpenHands principal | `OpenHands/OpenHands` | concluida | `config-only` | not-applicable | `feat/omniroute-openhands-main-integration` | — | — | — | not-in-catalog | SHA `1708efc44`; Agent Canvas `1.8.0`; `openai/auto` + base `/v1` + API key + `api_mode=chat`; LiteLLM envia `model=auto`, Chat/SSE/tools estruturais; sem discovery generico `/v1/models`; PRs OmniRoute [#15189](https://github.com/OpenHands/OpenHands/pull/15189)/[#15211](https://github.com/OpenHands/OpenHands/pull/15211) fechadas sem merge; sem nova publicacao | -| CLI-039 | P1 | SWE-agent | `SWE-agent/SWE-agent` | concluida | `config-only` | not-applicable | `feat/omniroute-swe-agent-integration` | — | — | — | not-in-catalog | SHA `3ea751c08`; release `v1.1.0`; LiteLLM com `openai/`, `api_base=/v1` e chave por env; Chat/tools/tool round-trip e batch confirmados por fonte; reasoning parcial; smoke HTTP bloqueado por deps ausentes; sem publicacao nominal | -| CLI-040 | P1 | AutoCodeRover | `AutoCodeRoverSG/auto-code-rover` | concluida | `pr-generic` | `validating` | `feat/omniroute-auto-code-rover-integration` | — | — | — | not-in-catalog | SHA `585d3e639`; patch local sem commit em 4 arquivos corrige `litellm-generic-openai/auto`, base `/v1`, precedencia da chave e pricing desconhecido; 9 testes focados com stubs, tracer source-only, compileall e diff-check verdes; sem HTTP real; licenca SONAR Source-Available exige gate juridico antes de publicar | -| CLI-041 | P2 | Claurst | `Kuberwastaken/claurst` | concluida | `config-only` | not-applicable | `feat/omniroute-claurst-integration` | — | — | — | not-in-catalog | SHA `595b0ebe3`; `custom-openai` com settings persistidos, base `/v1`, `CUSTOM_OPENAI_API_KEY`, modelo `auto`, Chat/SSE/tools e `/v1/models`; CI upstream verde; sem build/smoke local e sem publicacao nominal; monitorar PR #365 sem duplicar | -| CLI-042 | P2 | Codebuff | `CodebuffAI/codebuff` | concluida | `blocked` / `issue-first` | `blocked` | `feat/omniroute-codebuff-integration` | — | — | — | not-in-catalog | SHA `195b9bef6`; main nao expoe base/chave/provider custom na CLI/SDK; PR upstream existente [#693](https://github.com/CodebuffAI/codebuff/pull/693) cobre a lacuna, observada OPEN/CONFLICTING/DIRTY; nao criar patch concorrente; acompanhar #693 e validar apos merge/port | -| CLI-043 | P2 | Devon | `entropy-research/Devon` | concluida | `pr-generic` | validating | `feat/omniroute-devon-integration` | — | — | [upstream #100](https://github.com/entropy-research/Devon/issues/100) | not-in-catalog | SHA `8f68f1d74`; diff local genérico em 5 arquivos, sem commit; reprodução literal DeepSeek/OpenRouter e resume corrigidos; 9 testes focados, compileall e diff-check verdes; Standards/Spec aprovados; aguardar autorização antes de fork/push/PR | -| CLI-044 | P2 | Letta Code | `letta-ai/letta-code` | concluida | `config-only` | not-applicable | `feat/omniroute-letta-code-integration` | — | — | — | integrated | SHA `09aff1bb4`; já coberta pelo provider local `lmstudio` (`lmstudio_openai`), discovery `/api/v0/models`→`/v1/models`, Chat/SSE/tools; 8 testes OmniRoute verdes; sem PR nominal | -| CLI-045 | P2 | CodeMachine CLI | `moazbuilds/CodeMachine-CLI` | concluida | `config-only` | not-applicable | `feat/omniroute-codemachine-cli-integration` | — | — | — | not-in-catalog | SHA `572def63e`; integração indireta por OpenCode custom `@ai-sdk/openai-compatible`, base `/v1`, chave por env e `omniroute/auto`; provider/model reconhecidos no smoke de config; alternativa Claude Code; sem PR nominal | -| CLI-046 | P2 | Groq Code CLI | `build-with-groq/groq-code-cli` | concluida | `pr-generic` | `awaiting-maintainer` | `feat/omniroute-groq-code-cli-integration` | — | — | — | not-in-catalog | SHA `a303eb4be`; `groq-sdk@0.27.0` fixa `/openai/v1/chat/completions`, logo não há config-only para OmniRoute; mock confirmou path/Bearer; PR existente [#7](https://github.com/build-with-groq/groq-code-cli/pull/7) é a duplicata natural, mas precisa distinguir Groq-compatible de OpenAI-compatible; 17 testes oficiais + 5 testes de contexto, build e mock verdes; clone limpo, sem patch/publicação | -| CLI-047 | P2 | Dexto | `truffle-ai/dexto` | concluida | `config-only` | `not-applicable` | `feat/omniroute-dexto-integration` | — | — | — | not-in-catalog | SHA `4108a9c73`; provider `openai-compatible` nativo exige `baseURL`, aceita modelo arbitrário, Bearer opcional, Chat/SSE/tools e reasoning effort; receita `/v1` + `auto`; 175 testes focados e builds llm/core verdes; TS2741 em chatgpt-oauth é baseline; ELv2; sem PR/issue nominal | -| CLI-048 | P2 | claw-code-agent | `HarnessLab/claw-code-agent` | concluida | `config-only` | `not-applicable` | `feat/omniroute-claw-code-agent-integration` | — | — | — | not-in-catalog | SHA `167571da8`; `OPENAI_BASE_URL=http://127.0.0.1:20128/v1`, Bearer, model manual/`auto`, Chat/SSE/tools/usage confirmados; smoke `MOCK_SMOKE_OK`, 80 testes focados; sem discovery/Responses API; licença não identificada (`license: null`); sem PR/issue | -| CLI-049 | P2 | g3 | `dhanji/g3` | concluida | `pr-generic` | `validating` | `feat/omniroute-g3-integration` | — | — | [upstream #70](https://github.com/dhanji/g3/issues/70) | not-in-catalog | SHA `0ddb052d2`; diff local provider-neutral em `provider_registration.rs`, 1 arquivo `+25/-1`, corrige registro `custom`→`custom.default`; `cargo check -p g3-config`, 6 testes config e diff-check verdes; teste focal escrito mas build bloqueado em `x11.pc`; manifesto declara MIT sem arquivo LICENSE; Standards/Spec centrais aprovados; sem publicação | -| CLI-050 | P2 | San | `genai-io/san` | concluida | `config-only` | `not-applicable` | `feat/omniroute-san-integration` | — | — | — | not-in-catalog | SHA `e45ec0ef7`; Apache-2.0/release v1.22.1; provider Custom com base `/v1`, Bearer, `/models`, Chat/SSE/tools/tool result e reasoning best-effort; smoke HTTP de dois turnos e gates Go focados verdes; sem provider nominal ou publicação | -| CLI-051 | P2 | Waveloom | `Menfre01/waveloom` | concluida | `config-only` | `not-applicable` | `feat/omniroute-waveloom-integration` | — | — | — | not-in-catalog | SHA `293d5cd11`; Apache-2.0/release v0.5.1; adapter OpenAI com `/v1`, Bearer, `/models`, SSE, 14 tools, tool-result round-trip e sessões; smoke do binário oficial verde e CI remoto do HEAD verde; reasoning/cache avançados não são projetados; sem publicação | -| CLI-052 | P2 | picocode | `jondot/picocode` | concluida | `config-only` | `not-applicable` | `feat/omniroute-picocode-integration` | — | — | — | not-in-catalog | SHA `064a2a6ea`; MIT/release v0.6.0; Rig 0.28 lê `OPENAI_BASE_URL` e usa Responses `/v1/responses`; smoke confirmou Bearer, `auto`, 11 tools e function_call_output; 7 testes/doc-tests verdes; fmt/clippy só baseline; sem PR/issue | -| CLI-053 | P2 | QQCode | `qnguyen3/qqcode` | concluida | `config-only` | `not-applicable` | `feat/omniroute-qqcode-integration` | — | — | — | not-in-catalog | SHA `be6a96ce7`; Apache-2.0/release v1.2.0; provider arbitrário + `GENERIC`/OpenAI com base `/v1`; smoke confirmou JSON/SSE, Bearer, extra_body, reasoning e tool-result; backend 20/20, ACP 13+1 skip, observer 11/11, compileall/helps verdes; sem PR/issue | -| CLI-054 | P2 | Keen Code | `mochow13/keen-code` | concluida | `config-only` | `not-applicable` | `feat/omniroute-keen-code-integration` | — | — | — | not-in-catalog | SHA `ee2eaf0f4`; MIT/release v0.40.0; receita manual `openai-compatible` + `/v1` + Bearer + model arbitrário; smoke oficial confirmou Chat/SSE, tools/tool-result, usage e reasoning replay; provider oculto apenas no picker; CI remoto verde; sem PR/issue | -| CLI-055 | P2 | Grinta | `josephsenior/Grinta-Coding-Agent` | concluida | `config-only` | `not-applicable` | `feat/omniroute-grinta-integration` | — | — | — | not-in-catalog | SHA `df7437524`; provider OpenAI-compatible com `LLM_API_KEY`, model `auto`, base `/v1`; smoke Chat/SSE/tools/tool-result/reasoning/usage/cache verde; 183 testes focados, compileall e Ruff verdes; sem PR/issue nominal | -| CLI-056 | P2 | Zap | `zap-coding-agent/zap-coding-agent` | concluida | `config-only` | `not-applicable` | `feat/omniroute-zap-integration` | — | — | — | not-in-catalog | SHA `f0203f872`; provider arbitrário `kind=openai`, base `/v1`, Bearer, discovery `/models`, Chat JSON/SSE, tools/tool-result, reasoning e usage confirmados; cargo check + 16 testes/gates focados verdes; issue #2 confirma arquitetura; sem PR nominal | -| CLI-057 | P2 | Binharic | `CogitatorTech/binharic-cli` | concluida | `pr-generic` | `validating` | `feat/omniroute-binharic-integration` | — | — | — | not-in-catalog | SHA `52ccca70b`; patch sem commit em `provider.ts` + teste: aplica `baseURL` ao OpenAI/Anthropic e usa Chat Completions para base customizada; RED→GREEN, 14 focal, 88 arquivos/774 testes, typecheck/build e smoke wire verdes; lint upstream bloqueado; sem publicação | -| CLI-058 | P2 | Darce | `AmerSarhan/darce-cli` | concluida | `config-only` | `not-applicable` | `feat/omniroute-darce-integration` | — | — | — | not-in-catalog | SHA `1b90c379a`; MIT declarada no package/npm sem arquivo LICENSE; `DARCE_API_BASE` raiz sem `/v1`, `DARCE_API_KEY`, `DARCE_MODEL=auto`; smoke PTY do binário confirmou 2 Chat/SSE, 7 tools, tool-result e Bearer; 106 testes/build verdes; sem MCP/ACP/A2A; sem PR/issue | -| CLI-059 | P2 | CLAII | `agencyswarm/CLAII` | concluida | `pr-generic` | `blocked` | `feat/omniroute-claii-integration` | — | — | — | not-in-catalog | SHA `89d42311b`; patch sem commit em README/config/providers/test: `CLAII_API_KEY`, `CLAII_BASE_URL` origem sem `/v1beta`, model runtime e reject explícito; 4 wire/loop + 10 calculator + pip install + smoke CLI verdes; unittest discover falha só baseline `calculator`/`pkg`; sem MCP/ACP/A2A; **All Rights Reserved**, não publicar sem autorização jurídica | -| CLI-060 | P2 | nori-cli | `tilework-tech/nori-cli` | concluida | `config-only` | `not-applicable` | `feat/omniroute-nori-cli-integration` | — | — | — | not-in-catalog | SHA `829ecf3fd`; Apache-2.0/v0.24.0; Nori custom ACP → OpenCode `opencode-ai@1.18.11` → OmniRoute `/v1`; MCP separado por `/api/mcp/stream` ou stdio; 5 testes focados, cargo build nori e smoke ACP Nori→OpenCode verdes; sem patch/publicação | -| CLI-061 | P2 | cursor-agent clone | `civai-technologies/cursor-agent` | concluida | `config-only` | `not-applicable` | `feat/omniroute-cursor-agent-clone-integration` | — | — | — | not-in-catalog | SHA `d21a8f3d4`; MIT/v0.1.39; SDK OpenAI usa base `/v1`, Anthropic usa raiz; smokes de 2 turnos/tools verdes; factory rejeita `auto` puro; 23 testes, mypy/build verdes; sem patch/publicação | -| CLI-062 | P2 | Free Code | `freecodexyz/free-code` | concluida | `config-only` | `blocked` | `feat/omniroute-free-code-integration` | — | — | [upstream #20](https://github.com/freecodexyz/free-code/issues/20) | not-in-catalog | SHA `6b25ab68b`; URL antiga `paoloanzn/free-code` redireciona; base Anthropic raiz, `model=auto`, stream/tools/MCP; build verde; sem LICENSE/campo license e código atribuído à Anthropic, não publicar | -| CLI-063 | P2 | Claude Engineer | `Doriandarko/claude-engineer` | concluida | `config-only` / `pr-generic` | `blocked` | `feat/omniroute-claude-engineer-integration` | — | [upstream #250](https://github.com/Doriandarko/claude-engineer/pull/250) | [upstream #116](https://github.com/Doriandarko/claude-engineer/issues/116) | not-in-catalog | SHA `0a9e4b309`; v3 funciona por base Anthropic raiz com modelo fixo; #250 já adiciona `ANTHROPIC_MODEL`; arquivo LICENSE ausente apesar de declaração MIT; sem patch concorrente/publicação | -| CLI-064 | P2 | Smol Developer | `smol-ai/developer` | concluida | `config-only` | `not-applicable` | `feat/omniroute-smol-developer-integration` | — | — | — | not-in-catalog | SHA `a6747d1a6`; `OPENAI_API_BASE=/v1`, `auto`, 3 Chat calls, SSE/function calling e Agent Protocol validados; gates de runtime verdes, build metadata preexistente; sem patch/publicação | -| CLI-065 | P2 | Agentless | `OpenAutoCoder/Agentless` | concluida | `config-only` | `not-applicable` | `feat/omniroute-agentless-integration` | — | — | — | not-in-catalog | SHA `5ce5888b9`; OpenAI chat + embeddings funcionam com bases distintas; Anthropic normal/cache histórico validados; DeepSeek fixa host; pre-commit/compileall verdes; sem patch/publicação | -| CLI-066 | P2 | Amazon Q Developer CLI | `aws/amazon-q-developer-cli` | concluida | `viable-mcp` / `needs-wrapper` | `not-applicable` | `feat/omniroute-amazon-q-developer-cli-integration` | — | — | — | not-in-catalog | SHA `15cc8f3cd`; modelo usa AWS JSON/EventStream Bearer/SigV4 e não `/v1`; MCP stdio imediato, HTTP legado com ressalva; upstream issue-first/manutenção crítica; sem patch/publicação | -| CLI-067 | P2 | nanobot | `HKUDS/nanobot` | concluida | `config-only` | `not-applicable` | `feat/omniroute-nanobot-integration` | — | — | — | not-in-catalog | HEAD `44b7e1bf4`; provider dinâmico OpenAI-compatible com base `/api/v1` e modelo `omniroute/auto`; Chat/SSE/tools/reasoning/usage/images/discovery e retry validados; 424 testes + Ruff; sem PR nominal | -| CLI-068 | P2 | ZeroClaw | `zeroclaw-labs/zeroclaw` | concluida | `config-only` | `not-applicable` | `feat/omniroute-zeroclaw-integration` | — | — | — | not-in-catalog | HEAD `4770420ab`; `custom.omniroute`, base `/v1`, Bearer, `auto`, Chat/Responses e tools nativas opt-in; 1.173 unit + 1 integração, fmt/config/smoke verdes; sem PR nominal | -| CLI-069 | P2 | NanoClaw | `gavrielc/nanoclaw` | concluida | `config-only` | `not-applicable` | `feat/omniroute-nanoclaw-integration` | — | — | — | not-in-catalog | HEAD `dfac7e0af`; provider Claude existente aponta para raiz Anthropic OmniRoute e OneCLI guarda a chave; baseline e 49 testes OmniRoute verdes; Codex #3155/#1984 e OpenCode #2985 ficam como follow-ups; sem PR | -| CLI-070 | P2 | PicoClaw | `sipeed/picoclaw` | concluida | `config-only` | `not-applicable` | `feat/omniroute-picoclaw-integration` | — | — | — | not-in-catalog | HEAD `49183d7`, `/api/v1`, `openai/auto` → `auto`; Chat/SSE/tools/usage/images/discovery; Go ausente, testes locais não executados; issue router #3298; sem publicação | -| CLI-071 | P2 | IronClaw | `nearai/ironclaw` | concluida | `config-only` | `not-applicable` | `feat/omniroute-ironclaw-integration` | — | — | — | not-in-catalog | HEAD `4b71aaae`; `openai_compatible` `/api/v1`, Chat/SSE/tools/images/discovery; 889+5 testes e fmt verdes; reasoning #3673; sem publicação | -| CLI-072 | P2 | NullClaw | `nullclaw/nullclaw` | concluida | `config-only` | `not-applicable` | `feat/omniroute-nullclaw-integration` | — | — | — | not-in-catalog | HEAD `d8a802fd`; custom `/api/v1`, Chat/Responses/Anthropic, tools/streaming/usage/images; Zig ausente, CI run 30788444193 verde; sem publicação | -| CLI-073 | P2 | Moltis | `moltis-org/moltis` | concluida | `config-only` | `not-applicable` | `feat/omniroute-moltis-integration` | — | — | — | not-in-catalog | HEAD `678d407`; `custom-omniroute`, `/api/v1`, `auto`, Chat/SSE/tools/reasoning/usage/images; 401 testes + fmt verdes; MCP/ACP separados; sem publicação | -| CLI-074 | P2 | GitClaw | `open-gitagent/gitclaw` | concluida | `config-only` | `not-applicable` | `feat/omniroute-gitclaw-integration` | — | — | — | not-in-catalog | GitAgent HEAD `d3e25d7`; base `/api/v1`, `omniroute:auto`, Chat/SSE/tools/images; build + 65 testes + smoke verdes; reasoning=false no descriptor; sem publicação | -| CLI-075 | P2 | LionClaw | `moshthepitt/lionclaw` | concluida | `patch-required` / `issue-first` | `awaiting-maintainer` | `feat/omniroute-lionclaw-integration` | — | — | — | not-in-catalog | HEAD `cb59b23d`; Codex app-server não projeta config.toml/secret para runtime confinado; patch seguro necessário, alinhado à #157; gates locais bloqueados por uv/podman; CI verde; sem publicação | -| CLI-076 | P3 | VibePod | `VibePod/vibepod-cli` | concluida | `config-only` | `not-applicable` | `feat/omniroute-vibepod-integration` | — | — | — | not-in-catalog | Claude Code via `/api`, container usa `host.docker.internal`; Codex não injeta chave; compileall verde, pytest bloqueado por typer; sem publicação | -| CLI-077 | P3 | zeroshot | `the-open-engine/zeroshot` | concluida | `config-only` | `not-applicable` | `feat/omniroute-zeroshot-integration` | — | — | — | not-in-catalog | Gateway OpenAI `/api/v1`, `auto`, tools fail-closed; 22 testes + build verdes; sem streaming JSON/reasoning/MCP no gateway; sem publicação | -| CLI-078 | P3 | Fractal | `plasma-ai/fractal` | concluida | `config-only` / `needs-wrapper` | `awaiting-maintainer` | `feat/omniroute-fractal-integration` | — | — | — | not-in-catalog | Codex Responses por node `CODEX_HOME`; caveat tmux quente não encaminha `OMNIROUTE_API_KEY`; fix genérico recomendado, sem PR | -| CLI-079 | P3 | Bernstein | `chernistry/bernstein` | concluida | `config-only` | `not-applicable` | `feat/omniroute-bernstein-integration` | — | — | — | not-in-catalog | Canonical `sipyourdrink-ltd/bernstein`; openai_agents `/api/v1`, auto, api_key_env allowlisted; testes bloqueados por openai ausente; sem publicação | -| CLI-080 | P3 | Traycer | `traycerai/traycer` | concluida | `config-only` indireto | `not-applicable` | `feat/omniroute-traycer-integration` | — | — | — | not-in-catalog | Harness OpenCode + provider `@ai-sdk/openai-compatible`, `/api/v1`, `omniroute/auto`; host central fechado; sem publicação | -| CLI-081 | P3 | h5i | `h5i-dev/h5i` | concluida | `patch-required` | `awaiting-maintainer` | `feat/omniroute-h5i-integration` | — | — | — | not-in-catalog | Auth proxy/egress Codex fixos em OpenAI anulam base custom; patch seguro/policy-pinned necessário; CI externa verde; sem publicação | -| CLI-082 | P3 | OMK | `dmae97/open-multi-agent-kit` | concluida | `viable-mcp` | `not-applicable` | `feat/omniroute-omk-integration` | — | — | — | not-in-catalog | pesquisa concluída neste lote; controle multiagente, MCP é caminho primário; sem provider nominal | -| CLI-083 | P3 | kodo | `ikamensh/kodo` | concluida | `config-only` indireto | `not-applicable` | `feat/omniroute-kodo-integration` | — | — | — | not-in-catalog | pesquisa concluída neste lote; orquestrador/agent child, propagar env/base/model ao agente filho | -| CLI-084 | P3 | ORCH | `oxgeneral/ORCH` | concluida | `needs-wrapper` | `awaiting-maintainer` | `feat/omniroute-orch-integration` | — | — | — | not-in-catalog | pesquisa concluída neste lote; fila/controle sem provider LLM direto, wrapper/adaptador necessário | -| CLI-085 | P3 | LoopTroop | `LoopTroop-ai/LoopTroop` | concluida | `config-only` indireto | `not-applicable` | `feat/omniroute-looptroop-integration` | — | — | — | not-in-catalog | HEAD `cbfc81c5`; OpenCode recebe provider `@ai-sdk/openai-compatible`, `/api/v1`, `omniroute/auto`; 16 testes verdes; sem publicação | -| CLI-086 | P3 | Galley | `shinpr/galley` | concluida | `patch-required` | `awaiting-maintainer` | `feat/omniroute-galley-integration` | — | — | — | not-in-catalog | HEAD `6bcc593d`; registry/transports fechados, requer transport OpenAI-compatible para executor e supervisor; Go ausente; sem publicação | -| CLI-087 | P3 | Relay | `jcast90/relay` | concluida | `config-only` | `not-applicable` | `feat/omniroute-relay-integration` | — | — | — | not-in-catalog | HEAD `7bd5a2f6`; provider profile Codex com `OPENAI_BASE_URL`, key ref e modelo; smoke Responses obrigatório; MCP separado; sem publicação | -| CLI-088 | P3 | SageCLI | `youwangd/SageCLI` | concluida | `config-only` indireto | `not-applicable` | `feat/omniroute-sagecli-integration` | — | — | — | not-in-catalog | HEAD `c167712d`; Codex runtime, base/key configuradas fora do Sage; env plaintext caveat; 45 testes verdes; sem publicação | -| CLI-089 | P3 | 5dive | `5dive-ai/5dive` | concluida | `patch-required` | `awaiting-maintainer` | `feat/omniroute-5dive-integration` | — | — | — | not-in-catalog | HEAD `b64b6dac`; provider/base maps fechados; patch OpenAI-compatible genérico; 50 testes focados verdes; sem publicação | -| CLI-090 | P3 | agx | `ramarlina/agx` | concluida | `config-only` indireto | `not-applicable` | `feat/omniroute-agx-integration` | — | — | — | not-in-catalog | HEAD `e674cec1`; Codex herda base/key/model; smoke Responses e governança `--full-auto`; Jest ausente; sem publicação | -| CLI-091 | P3 | claude-code-router | `musistudio/claude-code-router` | concluida | `config-only` | `not-applicable` | `feat/omniroute-claude-code-router-integration` | — | — | — | not-in-catalog | HEAD `bc8a8e62`; provider custom OpenAI/Anthropic/Gemini, Chat/Responses; smoke por protocolo; sem publicação | -| CLI-092 | P3 | cc-router | `finch-xu/cc-router` | concluida | `config-only` | `not-applicable` | `feat/omniroute-cc-router-integration` | — | — | — | not-in-catalog | HEAD `c4c7579`; custom Responses/Chat com base/path/header, SSE/tools/reasoning; cargo bloqueado por glib; sem publicação | -| CLI-093 | P3 | OneCLI | `onecli/onecli` | concluida | `config-only` | `not-applicable` | `feat/omniroute-onecli-integration` | — | — | — | not-in-catalog | HEAD `84ccaf74`; MITM credential gateway, generic host injection; MCP separado; sem publicação | -| CLI-094 | P3 | agent-browser | `vercel-labs/agent-browser` | concluida | `config-only` | `not-applicable` | `feat/omniroute-agent-browser-integration` | — | — | — | not-in-catalog | HEAD `01c1147d`; chat usa gateway Chat/SSE/tools com env key/model; base precisa validar sufixo `/v1` para não duplicar path; cargo test exit 0; sem publicação | -| CLI-095 | P3 | OpenWork | `different-ai/openwork` | concluida | `config-only` indireto | `not-applicable` | `feat/omniroute-openwork-integration` | — | — | — | not-in-catalog | HEAD `ecb7a5f0`; OpenCode custom provider `/api/v1`, auth gerenciada; sem testes/deps; sem publicação | -| CLI-096 | P3 | Agent Deck review | `asheshgoplani/agent-deck` | concluida | `config-only` indireto | `not-applicable` | `feat/omniroute-agent-deck-review` | — | — | — | integrated | HEAD `46300807`; env/model propagados a Codex/OpenCode; Go ausente; sem publicação | -| CLI-097 | P4 | Pool | `poolsideai/pool` | concluida | `config-only` | `not-applicable` | `feat/omniroute-pool-integration` | — | — | — | not-in-catalog | HEAD `a6fe0ca1`; `pool exec --api-url` OpenAI-compatible, sandbox required, MCP/ACP separado; EULA; sem publicação | -| CLI-098 | P4 | Junie CLI | `junie.jetbrains.com` | concluida | `config-only` | `not-applicable` | `feat/omniroute-junie-integration` | — | — | — | not-in-catalog | HEAD `d2701be6`; custom profile OpenAICompletion/Responses com baseUrl full e env ref; runtime proprietário/EAP; sem publicação | -| CLI-099 | P4 | Cursor desktop | Anysphere | concluida | `config-only` limitado | `awaiting-maintainer` | `feat/omniroute-cursor-desktop-integration` | — | — | — | integrated | disclosure-only; BYO key/chat panel; Composer/Tab nativos; privado/MITM proibido; sem publicação | -| CLI-100 | P4 | Windsurf | Codeium | concluida | `blocked-closed` / MCP-only | `awaiting-maintainer` | `feat/omniroute-windsurf-integration` | — | — | — | not-in-catalog | sem upstream/base custom; BYOK Anthropic específico; MCP separado; MITM proibido; sem publicação | -| CLI-101 | P4 | Amp | Sourcegraph | concluida | `config-only` parcial / Enterprise-gated | `awaiting-maintainer` | `feat/omniroute-amp-integration` | — | — | — | not-in-catalog | CLI fechada/Amp Server; confirmar provider custom com suporte; MCP viável; sem publicação | -| CLI-102 | P4 | Amazon Q/Kiro CLI | AWS | concluida | `patch-required` legado / `blocked-closed` Kiro | `awaiting-maintainer` | `feat/omniroute-amazon-q-integration` | — | — | — | integrated | Q usa AWS EventStream/SigV4; Kiro fechado sem base custom; MCP-only seguro; sem publicação | -| CLI-103 | P4 | Cowork | Anthropic | concluida | `blocked-closed` / MCP-only | `not-applicable` | — | — | — | — | not-in-catalog | inferência gerida pela Anthropic sem BYOK/base custom; Custom Connector MCP remoto; MITM proibido; sem publicação | - -## Como atualizar - -Ao terminar uma fase, alterar somente os campos comprovados e deixar os demais como `—`. Para uma integracao concluida, registrar: versao/commit pesquisado, mecanismo, arquivos modificados, testes, branch, commit, URL de PR/issue e resposta do mantenedor. Se o caso for apenas configuracao, registrar o comando/config real e marcar `config-only` ou `viable-direct`, sem criar uma PR artificial. - -Antes de publicar uma contribuicao, aplicar o gate e o checklist de -`05-plano-publicacao-prs-upstream.md`. diff --git a/_references/_sistemas_cli/05-plano-publicacao-prs-upstream.md b/_references/_sistemas_cli/05-plano-publicacao-prs-upstream.md deleted file mode 100644 index 44c1715662..0000000000 --- a/_references/_sistemas_cli/05-plano-publicacao-prs-upstream.md +++ /dev/null @@ -1,659 +0,0 @@ -# Plano de publicacao de integracoes OmniRoute nos repositorios upstream - -> **Status da campanha de pesquisa:** `104/104` casos concluídos. Este plano continua sendo o procedimento de execução e publicação. A matriz final, inclusive os casos em que PR é inadequada ou impossível, está em `06-relatorio-final-104-clis-e-estrategia-prs.md`. - -**Data:** 2026-08-01 -**Escopo:** transformar a fila `CLI-000` a `CLI-103` em contribuicoes upstream verificadas, -publicando PR, issue, guia de configuracao, adaptador ou conclusao de bloqueio conforme o mecanismo -real de cada projeto. -**Documentos-base:** `01-relatorio-pesquisa-clis-omniroute.md`, -`02-prioridade-integracoes-clis.md`, `03-plano-integracao-em-lotes.md` e -`04-tracker-integracoes-clis.md`. - -## 1. Resultado esperado - -Para cada repositorio pesquisado, a campanha deve produzir exatamente um resultado principal: - -1. **PR upstream de integracao nominal:** adiciona provider/preset `omniroute`, configuracao, - documentacao e testes quando isso combina com a arquitetura do projeto. -2. **PR upstream de compatibilidade generica:** melhora suporte a endpoint customizado sem acoplar - o projeto ao nome OmniRoute, acompanhado de documentacao comprovando o uso com OmniRoute. -3. **PR somente de documentacao:** registra uma configuracao funcional quando o codigo ja suporta - OmniRoute e o upstream aceita guias de terceiros. -4. **Issue-first:** solicita decisao de arquitetura ou permissao antes do patch quando a politica do - repositorio, o desenho de providers ou o tamanho da mudanca exigirem alinhamento. -5. **Configuracao sem PR:** documenta no OmniRoute um fluxo que ja funciona e para o qual uma mudanca - upstream seria redundante ou rejeitada pela politica do projeto. -6. **Adaptador ACP/MCP/wrapper:** contribui no ponto de extensao correto quando o projeto nao consome - diretamente APIs de modelos. -7. **MITM, produto fechado ou bloqueado:** registra evidencia e nao fabrica uma contribuicao que o - upstream nao pode receber. - -O objetivo e tentar integrar todos os casos tecnicamente possiveis. O objetivo nao e abrir uma PR em -todo repositorio independentemente da arquitetura, licenca ou politica de contribuicao. - -## 2. Regras da campanha - -- Trabalhar em lotes de no maximo tres repositorios, com um subagente por repositorio. -- Usar uma worktree isolada por repositorio dentro de `.claude/worktrees/`. -- Nao editar implementacoes no checkout compartilhado. -- Nao usar `git stash` ou `git pop`. -- Fazer pesquisa fresca no commit atual do upstream antes de criar branch ou editar arquivos. -- Ler `README`, `CONTRIBUTING`, templates de issue/PR, `SECURITY`, licenca e instrucoes locais de - agentes antes da implementacao. -- Procurar issues e PRs abertas/fechadas sobre custom provider, base URL, OpenAI-compatible, - Anthropic-compatible, Gemini endpoint, proxy, gateway e OmniRoute antes de propor uma mudanca. -- Registrar a base pesquisada por commit SHA ou release. Nao usar apenas `main` como evidencia. -- Executar baseline antes da mudanca e distinguir falhas preexistentes de regressao. -- Nunca expor `OMNIROUTE_API_KEY` ou qualquer outra credencial em comandos publicados, fixtures, - logs, commits, screenshots, PRs ou issues. -- Nao inserir trailers, assinaturas ou rodapes de IA em commits, PRs ou issues. -- Nao afirmar que uma integracao funciona sem um teste reproduzivel ou uma limitacao explicitamente - registrada. -- Nao inventar fork, branch, commit, PR, issue, CI ou resposta de mantenedor. -- Atualizar `04-tracker-integracoes-clis.md` ao concluir cada fase material. - -## 3. Unidade de trabalho por repositorio - -Cada item `CLI-NNN` deve possuir uma task individual. A task e o pacote de contexto entregue ao -subagente e o registro que permite retomar o trabalho sem repetir ou perder evidencias. - -### 3.1 Cabecalho obrigatorio da task - -```md -# CLI-NNN - - integracao OmniRoute upstream - -- Repositorio canonico: -- Prioridade/lote: -- Estado no catalogo OmniRoute: -- Evidencia inicial: -- Worktree: -- Branch planejada: -- Commit/release pesquisado: — -- Responsavel: -- Estado: researching -``` - -### 3.2 Pesquisa obrigatoria dentro da task - -O subagente deve responder, com links e caminhos de codigo: - -1. Qual e o repositorio canonico, commit/release atual, licenca e nivel de atividade? -2. Contribuicoes de forks externos sao aceitas? Ha CLA, DCO, sign-off ou issue previa obrigatoria? -3. Qual e a arquitetura de providers e qual e o menor ponto de extensao? -4. O cliente usa Chat Completions, Responses, Anthropic Messages, Gemini, ACP, MCP ou protocolo - proprietario? -5. A base URL esperada e raiz, `/v1`, `/v1beta` ou uma URL completa por operacao? -6. O cliente acrescenta algum sufixo automaticamente? Pode duplicar `/v1` ou `/v1beta`? -7. Como a autenticacao e resolvida: variavel de ambiente, arquivo, keyring, OAuth ou header custom? -8. Como os modelos sao definidos ou descobertos? O cliente chama um endpoint de modelos? -9. Streaming, tool calling, reasoning, imagens e cancelamento funcionam pelo caminho escolhido? -10. Ja existe issue, PR, discussao ou documentacao para endpoints customizados ou OmniRoute? -11. Quais comandos oficiais executam install, format, lint, typecheck, build e testes? -12. Qual contribuicao agrega valor real: codigo nominal, compatibilidade generica, docs, issue, - wrapper, MCP/ACP, somente configuracao ou nenhum patch? - -### 3.3 Gate de contribuicao - -Antes de editar, preencher uma decisao: - -| Decisao | Quando usar | Saida esperada | -|---|---|---| -| `pr-provider` | O upstream possui catalogo/presets de providers | Provider/preset OmniRoute, docs e testes | -| `pr-generic` | Falta uma capacidade generica necessaria, como base URL customizavel | Patch generico, docs e teste com OmniRoute | -| `pr-docs` | O codigo ja funciona e o upstream aceita guias de integracao | Guia minimo e validado | -| `issue-first` | Mudanca arquitetural, politica incerta ou mantenedor exige proposta | Issue com evidencia e desenho do patch | -| `config-only` | Tudo funciona por configuracao e um PR seria redundante | Guia no OmniRoute e smoke test | -| `adapter-acp` | ACP e o ponto real de integracao | Adaptador/registro ACP e testes | -| `adapter-mcp` | MCP e o ponto real de integracao | Config/servidor MCP e testes | -| `wrapper` | O projeto apenas lanca outro agente | Wrapper/env forwarding e teste do filho | -| `needs-mitm` | Endpoint fechado ou fixo | Pesquisa/guia MITM separado; sem PR artificial | -| `blocked` | Licenca, politica, build ou protocolo impedem progresso | Evidencia reproduzivel e proximo desbloqueio | - -O gate deve incluir a alternativa rejeitada. Exemplo: `pr-provider` escolhido porque o repositorio -mantem presets nomeados; `pr-docs` rejeitado porque a configuracao exigiria cinco campos internos e -nao seria uma experiencia suportada. - -## 4. Ciclo completo da PR - -### Fase PR-0 - Preparar o contexto - -- Reservar o item no tracker e marcar pesquisa em andamento. -- Confirmar que nenhum outro agente esta trabalhando no mesmo repositorio. -- Resolver o repositorio canonico, fork existente e permissao de contribuicao. -- Criar a task individual com a evidencia inicial marcada como hipotese. -- Criar a worktree isolada somente depois de confirmar o upstream correto. - -### Fase PR-1 - Pesquisar upstream e contribuicoes existentes - -- Ler integralmente as regras do repositorio aplicaveis aos arquivos que podem mudar. -- Mapear provider registry, configuracao, transporte HTTP, auth, modelo, streaming e ferramentas. -- Pesquisar issues/PRs por termos de compatibilidade e pelo nome OmniRoute. -- Registrar commit/release, caminhos e links de evidencia na task. -- Escolher o gate de contribuicao da secao 3.3. - -### Fase PR-2 - Baseline reproduzivel - -- Instalar dependencias de acordo com o upstream. -- Rodar format check, lint, typecheck/build e testes relevantes antes do patch. -- Rodar um smoke test do caminho existente, mesmo que ele falhe por falta da integracao. -- Limpar chaves do ambiente nos testes que validem o comportamento sem credenciais. -- Registrar comando, codigo de saida, testes aprovados e falhas preexistentes. -- Se o projeto nao puder ser construido, tentar o ambiente documentado e registrar o bloqueio; nao - declarar regressao nem compatibilidade com base apenas na leitura do README. - -### Fase PR-3 - Desenhar o menor patch aceitavel - -A ordem de preferencia e: - -1. Reusar a abstracao de provider ja existente. -2. Adicionar metadados/preset antes de criar codigo especial. -3. Reusar cliente OpenAI/Anthropic/Gemini ja presente. -4. Adicionar capacidade generica quando ela beneficiar outros gateways e for coerente com o projeto. -5. Criar executor/adapter dedicado somente quando o protocolo realmente divergir. - -O patch normalmente deve cobrir: - -- identificador e nome de exibicao `omniroute`, se presets nomeados forem aceitos; -- base URL correta e sem dupla concatenacao de versao; -- chave obtida de ambiente ou storage seguro; -- configuracao/descoberta de modelo; -- headers estritamente necessarios; -- streaming e tool calling preservados; -- mensagens de erro sem expor segredo; -- documentacao curta e executavel; -- testes unitarios/integracao alinhados ao padrao upstream. - -Nao adicionar telemetria, dependencia, fluxo de login ou codigo de rede novo quando o provider -generico existente ja resolve o caso. - -### Fase PR-4 - Implementar com teste primeiro - -- Criar teste que demonstre a ausencia do preset, config ou comportamento requerido. -- Confirmar a falha pelo motivo esperado. -- Implementar o menor patch. -- Fazer o teste passar e executar testes adjacentes. -- Refatorar apenas o necessario para manter o padrao do upstream. -- Formatar somente os arquivos tocados, salvo exigencia contraria do repositorio. - -Para PR somente de documentacao, substituir o teste vermelho por uma validacao real dos comandos e -do arquivo de configuracao documentado. Nao sintetizar exemplos que nao foram executados. - -### Fase PR-5 - Validar contra OmniRoute - -Escolher a matriz compativel com o cliente: - -| Superficie | Base inicial esperada | Validacoes minimas | -|---|---|---| -| OpenAI Chat Completions | confirmar se o cliente espera raiz ou `/v1` | chamada simples, stream, tool call, erro de modelo | -| OpenAI Responses | confirmar regra de concatenacao do cliente | resposta simples, stream/eventos, tool call | -| Anthropic Messages | normalmente base antes de `/v1/messages`; confirmar no codigo | mensagem, stream, tools, headers de versao | -| Gemini | normalmente base antes das operacoes `v1beta`; confirmar no codigo | generateContent, streamGenerateContent, tools | -| ACP | endpoint/transport definido pelo protocolo | discovery, sessao, request e cancelamento | -| MCP | stdio, SSE ou Streamable HTTP conforme suporte | inicializacao, listagem e invocacao de ferramenta | - -Registrar no resultado quais linhas da matriz foram executadas, omitidas ou bloqueadas. Um smoke -test simples nao deve ser apresentado como prova de tool calling ou streaming. - -### Fase PR-6 - Revisar o diff antes de publicar - -O agente responsavel faz uma auto-revisao e o agente principal verifica: - -- aderencia a `CONTRIBUTING` e instrucoes locais; -- escopo minimo e ausencia de refactor oportunista; -- testes cobrindo config, URL, auth sem segredo e modelo; -- documentacao consistente com o codigo executado; -- ausencia de arquivos gerados, caches, logs ou credenciais; -- licenca e atribuicao preservadas; -- branch baseada no upstream atual; -- commits pequenos e com mensagem no estilo do projeto; -- ausencia de trailers ou texto de IA; -- `git diff --check` e gates oficiais limpos, ou falhas preexistentes documentadas. - -Uma PR nao deve ser publicada enquanto houver alteracao sem explicacao, teste essencial faltando ou -duvida material sobre a politica do upstream. - -### Fase PR-7 - Preparar a publicacao - -- Confirmar fork e remotes sem sobrescrever branches existentes. -- Atualizar a branch sobre o ponto exigido pelo upstream usando operacao nao destrutiva. -- Enviar a branch ao fork somente depois da revisao. -- Criar PR contra a branch correta do repositorio canonico. -- Se a contribuicao externa estiver bloqueada, abrir issue-first e anexar o commit/patch de - referencia somente quando isso for permitido. -- Registrar URLs reais no tracker imediatamente apos a publicacao. - -Convencoes de branch sugeridas, sujeitas ao padrao de cada upstream: - -- `feat/omniroute-provider` para provider/preset nominal; -- `feat/custom-base-url` para capacidade generica; -- `docs/omniroute-setup` para documentacao validada; -- `fix/custom-endpoint-versioning` para correcao de raiz versus `/v1`/`/v1beta`. - -### Fase PR-8 - Corpo da PR - -Usar o template oficial do repositorio quando existir. Na ausencia de template, adaptar: - -```md -## Why - -Explain the user problem and the existing extension point. Avoid marketing claims. - -## What changed - -- Add or enable the smallest provider/configuration path required. -- Document the verified setup. -- Cover URL, authentication and model selection behavior with tests. - -## Verification - -- `` -- `` -- `` - -## Compatibility notes - -- API surface: `` -- Base URL rule: `` -- Streaming: `` -- Tool calling: `` - -## Scope - -No unrelated refactors or credential changes. -``` - -O titulo deve descrever a mudanca, nao a campanha. Exemplos de formato, sujeitos ao estilo do -upstream: `Add OmniRoute provider preset`, `Support configurable OpenAI-compatible base URLs` ou -`Document OmniRoute as a custom endpoint`. - -### Fase PR-9 - Issue-first ou fallback - -Quando uma PR direta nao for apropriada, a issue deve conter: - -- problema reproduzivel e publico afetado; -- ponto de extensao encontrado no codigo; -- proposta minima; -- compatibilidade esperada e protocolo; -- evidencia de teste ou prototipo; -- pergunta objetiva ao mantenedor; -- link para patch de referencia apenas se permitido. - -Nao abrir simultaneamente issue e PR sem necessidade. Se o template exigir issue previa, esperar a -decisao ou seguir a politica declarada. - -### Fase PR-10 - Acompanhar ate a decisao - -Depois da publicacao: - -- observar CI e checks obrigatorios; -- responder perguntas tecnicas com evidencia; -- corrigir somente o escopo da contribuicao ou pedidos claros do mantenedor; -- reexecutar testes depois de cada mudanca; -- registrar novos commits, revisoes e estado no tracker; -- marcar `accepted` somente depois de merge/aceite comprovado; -- marcar `rejected` com o motivo fornecido pelo upstream; -- se a PR ficar inativa, registrar `awaiting-maintainer`, sem declarar abandono prematuramente; -- manter o guia/catalogo OmniRoute coerente com o estado real do upstream. - -O acompanhamento pode usar a skill `babysit` individualmente para uma PR aberta. Como essa skill -acompanha uma unica PR, nunca agrupar tres PRs em uma mesma execucao dela. - -### Fase PR-11 - Fechar a task - -Uma task individual termina com: - -- pesquisa fresca e gate registrados; -- diff, configuracao ou bloqueio documentado; -- baseline e validacao final comparados; -- branch/commit reais, quando criados; -- PR/issue reais, quando publicados; -- status no catalogo OmniRoute; -- limitacoes e proximo passo; -- linha correspondente no tracker atualizada. - -## 5. Estrategia de paralelizacao - -### 5.1 Papeis por lote - -- **Subagente A:** primeiro repositorio do lote; dono exclusivo da worktree e do diff upstream. -- **Subagente B:** segundo repositorio do lote; dono exclusivo da worktree e do diff upstream. -- **Subagente C:** terceiro repositorio do lote; dono exclusivo da worktree e do diff upstream. -- **Agente principal:** coordena o tracker, revisa gates/diffs, impede duplicacao e autoriza a - publicacao depois das evidencias. - -Todos os agentes devem ser avisados de que nao estao sozinhos no workspace e nao podem reverter ou -sobrescrever mudancas de outros agentes. - -### 5.2 Barreira do lote - -O lote seguinte pode comecar quando os tres itens atuais tiverem, no minimo: - -1. commit/release upstream pesquisado; -2. gate de contribuicao definido; -3. baseline registrado; -4. patch validado, configuracao comprovada ou bloqueio reproduzivel; -5. decisao de publicacao tomada; -6. tracker atualizado. - -A espera por resposta de mantenedor nao bloqueia o lote seguinte. Depois de uma PR/issue publicada, -o item passa para acompanhamento e libera o slot de implementacao. - -### 5.3 Limite de trabalho em progresso - -- No maximo tres pesquisas/implementacoes ativas. -- Publicacoes aguardando mantenedor nao contam como slot de implementacao, mas ficam no tracker. -- No maximo uma task ativa por repositorio, inclusive forks ou variantes do mesmo upstream. -- Se dois itens resolverem o mesmo repositorio, consolidar a pesquisa e decidir se ha uma ou duas - contribuicoes antes de abrir branches. - -## 6. Fila de publicacao - -A ordem detalhada continua sendo a do `03-plano-integracao-em-lotes.md`. Esta secao define o objetivo -de publicacao de cada onda; a pesquisa individual pode promover, rebaixar ou mudar o tipo de -contribuicao. - -### Onda 0 - referencia e infraestrutura da campanha - -- `CLI-000` jcode: acompanhar issue upstream e PR de referencia; concluir a secao prometida no - README do OmniRoute. -- Preparar o modelo de task individual e aplicar o mesmo tracker a todos os novos repositorios. - -### Onda 1 - P0.1 a P0.5 - -- `CLI-001` Gemini CLI: confirmar se o endpoint Gemini customizado pede apenas docs/config ou um - preset nominal. -- `CLI-002` Claw Code: confirmar provider OpenAI-compatible e propor preset/docs minimos. -- `CLI-003` Plandex: confirmar o registro de providers customizados e propor provider/preset. -- `CLI-004` MiMo Code: confirmar o adapter OpenAI-compatible e propor configuracao/provider. -- `CLI-005` Trae Agent: confirmar `model_providers` e propor entrada OmniRoute/documentacao. -- `CLI-006` Kimi CLI: escolher uma superficie suportada e evitar um patch que misture tres - protocolos sem testes. -- `CLI-007` Every Code: reutilizar a arquitetura herdada do Codex quando ainda aplicavel. -- `CLI-008` Open Codex: confirmar upstream canonico e propor provider multi-modelo. -- `CLI-009` VT Code: validar provider customizado, modelo e failover. -- `CLI-010` OpenHands CLI: verificar se `LLM_BASE_URL` torna o caso docs/config-only. -- `CLI-011` gptme: verificar se `OPENAI_BASE_URL` torna o caso docs/config-only. -- `CLI-012` Nanocoder: confirmar compatibilidade de tool calling e decidir preset versus docs. -- `CLI-013` RA.Aid: verificar se `OPENAI_API_BASE` torna o caso docs/config-only. -- `CLI-014` CoreCoder: verificar se `OPENAI_BASE_URL` torna o caso docs/config-only. -- `CLI-015` Grok CLI: confirmar se o endpoint e genericamente configuravel ou preso ao protocolo - Grok antes de propor patch. - -### Onda 2 - P1.1 a P1.9 - -- `CLI-016` Gitlawb Zero: provider custom/flag; preferir docs ou preset pequeno. -- `CLI-017` DeepSeek Reasonix: confirmar repositorio, atividade e endpoint antes de qualquer PR. -- `CLI-018` KlaatCode: integrar via `customModels` ou preset se o catalogo aceitar nomes. -- `CLI-019` CodeMini CLI: validar `gateway.base_url` e sua regra de versao. -- `CLI-020` Zot: validar `--base-url` e `models.json`; docs-first se ja suficiente. -- `CLI-021` Octomind: confirmar variaveis de URL por provider e propor configuracao minima. -- `CLI-022` DvalinCode: confirmar o cliente OpenAI-compatible e testes disponiveis. -- `CLI-023` Coro Code: confirmar `OPENAI_BASE_URL`; docs-first se nao houver lacuna de codigo. -- `CLI-024` Mini-Kode: confirmar `MINIKODE_BASE_URL`; docs-first se nao houver lacuna de codigo. -- `CLI-025` Late CLI: testar ambiente e flag `api-url`; corrigir precedencia apenas se necessario. -- `CLI-026` Agentty: escolher entre provider direto e ACP conforme a arquitetura atual. -- `CLI-027` Aizen: validar `AIZEN_BASE_URL` e propor docs/preset. -- `CLI-028` Clif-Code: selecionar um unico protocolo principal para a primeira contribuicao. -- `CLI-029` Minacode: pesquisa confirmatoria antes de definir o tipo de PR. -- `CLI-030` YottaCode: confirmar gateway/provider e selecao de modelo. -- `CLI-031` aichat: integrar via configuracao de modelos ou provider nominal, conforme a politica. -- `CLI-032` ShellGPT: validar `API_BASE_URL` e decidir docs/config-only. -- `CLI-033` Mistral Vibe: confirmar base URL customizada e separar suporte generico de marca. -- `CLI-034` OpenSquilla: localizar o registro de gateways e propor provider/preset. -- `CLI-035` Kode CLI: escolher OpenAI, Anthropic ou Gemini com base na implementacao mais nativa. -- `CLI-036` Neovate Code: preferir plugin/provider oficial ao patch no core, se existir. -- `CLI-037` Deep Agents Code: contribuir no pacote CLI/provider correto, nao apenas no SDK generico. -- `CLI-038` OpenHands principal: evitar duplicar `CLI-010`; consolidar se ambos apontarem para o - mesmo mecanismo e upstream. -- `CLI-039` SWE-agent: confirmar backend de modelos e interface publica suportada. -- `CLI-040` AutoCodeRover: confirmar backend e propor config/provider minimo. -- `CLI-041` Claurst: revisar GPL e politica antes de redistribuir qualquer adaptacao. -- `CLI-042` Codebuff: confirmar se o provider e extensivel e se contribuicoes externas sao aceitas. - -### Onda 3 - P2.1 a P2.11 - -- `CLI-043` Devon, `CLI-044` Letta Code e `CLI-045` CodeMachine CLI: pesquisar backend real; - revisar a entrada local ja existente de Letta antes de nova PR. -- `CLI-046` Groq Code CLI, `CLI-047` Dexto e `CLI-048` claw-code-agent: confirmar endpoints, - protocolos e maturidade antes do patch. -- `CLI-049` g3, `CLI-050` San e `CLI-051` Waveloom: localizar a abstracao de provider e preferir - implementacao generica. -- `CLI-052` picocode, `CLI-053` QQCode e `CLI-054` Keen Code: validar configuracao multi-modelo e - documentar o caminho minimo. -- `CLI-055` Grinta, `CLI-056` Zap e `CLI-057` Binharic: escolher o provider compativel com melhor - cobertura de streaming/tools. -- `CLI-058` Darce, `CLI-059` CLAII e `CLI-060` nori-cli: separar integracao de modelo de MCP e de - codigo herdado do Codex. - -Resultado P2.6: - -- `CLI-058` Darce: `config-only`, sem PR necessária; usar `DARCE_API_BASE` na raiz e `DARCE_MODEL`. -- `CLI-059` CLAII: patch genérico local validado, mas publicação bloqueada pela declaração upstream - `All Rights Reserved`/ausência de licença OSS; só reconsiderar com autorização jurídica explícita. -- `CLI-060` nori-cli: `config-only` via agente ACP customizado OpenCode; não alterar backend Codex; - MCP deve ser configurado uma vez, em Nori ou OpenCode, para evitar duplicação de tools. -- `CLI-061` cursor-agent clone, `CLI-062` Free Code e `CLI-063` Claude Engineer: revisar origem, - licenca e politica do fork antes de publicar. - -Lote P2.7 reservado em 2026-08-02, na branch-base local `release/v3.8.50` em -`35405be6020696a7c66158ea7a25f06d61ff88ff`. Os três upstreams foram clonados em worktrees -separadas, indexados e delegados. Nenhuma publicação está autorizada; patches só podem surgir após -prova RED→GREEN e permanecem sem commit até revisão central. - -Resultado P2.7: - -- `CLI-061` cursor-agent clone: `config-only`; OpenAI usa base com `/v1`, Anthropic usa raiz sem - `/v1`; tools/tool-result foram comprovados nos dois protocolos. O factory rejeita `auto` puro, - mas isso não impede uso com modelos reconhecíveis ou classes diretas. Sem PR. -- `CLI-062` Free Code: `config-only` com `ANTHROPIC_BASE_URL` na raiz e `model=auto`; stream, - tools/tool-result e MCP nativo foram comprovados. O repo canônico agora é `freecodexyz/free-code`, - mas não há licença e o README atribui o código à Anthropic; publicação bloqueada. -- `CLI-063` Claude Engineer: endpoint/chave funcionam como `config-only` com modelo fixo. A lacuna - de `ANTHROPIC_MODEL` já está coberta pela PR #250; não criar patch concorrente. Arquivo de licença - segue ausente apesar da issue #116, portanto publicação permanece bloqueada. -- `CLI-064` Smol Developer, `CLI-065` Agentless e `CLI-066` Amazon Q Developer CLI: decidir entre - SDK/adaptador, config de modelo ou bloqueio por autenticacao. - -Lote P2.8 iniciado em 2026-08-02 na branch-base local `release/v3.8.50`, SHA -`35405be6020696a7c66158ea7a25f06d61ff88ff`, com clones limpos e separados. Smol Developer será -testado primeiro como integração do SDK OpenAI legado; Agentless será avaliado por backend -OpenAI/Anthropic/DeepSeek; Amazon Q Developer CLI será tratado como protocolo AWS próprio, com MCP -avaliado separadamente. Não criar adaptador grande para Amazon Q nem qualquer publicação antes de -issue-first/coordenação exigida por `CONTRIBUTING.md`. Estado inicial: nenhum commit, fork, push, -PR, issue ou Discussion. - -Resultado P2.8: - -- `CLI-064` Smol Developer: `config-only`; `OPENAI_API_BASE` com `/v1` e `model=auto` passaram no - CLI, biblioteca e Agent Protocol histórico. Não há lacuna provider-specific e a PR #134 já cobre - uma expansão LiteLLM. Sem publicação. -- `CLI-065` Agentless: `config-only` pelo backend OpenAI, incluindo embeddings. Anthropic normal - também funciona; cache/tools exige SDK histórico e DeepSeek possui host fixo, mas essas melhorias - não são necessárias para integrar o projeto e propostas LiteLLM anteriores foram fechadas. Sem - publicação. -- `CLI-066` Amazon Q Developer CLI: MCP stdio é a integração direta; o backend de modelo fala AWS - JSON/EventStream e precisa de wrapper/backend novo. O upstream está em manutenção crítica e exige - issue-first; não preparar PR nominal ou adaptador surpresa. Sem publicação. - -Estado final P2.8: commits `0`, pushes `0`, forks `0`, PRs `0`, issues `0`, Discussions `0`. -Próxima fila: P2.9 (`CLI-067` nanobot, `CLI-068` ZeroClaw, `CLI-069` NanoClaw), usando no máximo -três worktrees/agentes e repetindo a pesquisa individual antes de qualquer patch. - -Lote P2.9 iniciado em 2026-08-03 sobre a branch-base local `release/v3.8.50`, SHA -`84b1e5e12f238269e698f400766230f985f4a07b`. O checkout principal já continha uma alteração do -operador em `CLAUDE.md`, preservada fora do escopo. As worktrees foram recriadas e os upstreams -foram clonados nos HEADs `44b7e1bf4` (nanobot), `4770420ab` (ZeroClaw) e `dfac7e0af` (NanoClaw). -Os três índices Codebase Memory moderate estão ready, sem skipped, e a pesquisa foi delegada a um -agente por repositório. Nenhuma publicação está autorizada; o estado inicial continua: commits `0`, -pushes `0`, forks `0`, PRs `0`, issues `0`, Discussions `0`. - -- `CLI-067` nanobot, `CLI-068` ZeroClaw e `CLI-069` NanoClaw: validar providers OpenClaw/Anthropic - e evitar assumir que todos aceitam a mesma base URL. - -Resultado P2.9: - -- `CLI-067` nanobot: `config-only` pelo provider dinâmico OpenAI-compatible. A base correta inclui - `/api/v1`; `omniroute/auto` seleciona o provider custom e envia `auto` no wire. Chat, SSE, tools, - reasoning, usage, imagens, discovery e retry foram validados. Sem publicação upstream. -- `CLI-068` ZeroClaw: `config-only` pela família `custom`, com `uri=/v1`, modelo `auto`, wire Chat e - `native_tools=true`. Responses é opt-in. Suite de provider, config, fmt e smoke HTTP passaram. - Sem provider nominal ou publicação upstream. -- `CLI-069` NanoClaw: `config-only` pelo provider Claude existente, apontando a raiz Anthropic do - OmniRoute sem `/v1/messages` e usando OneCLI para a credencial. Codex e OpenCode têm bloqueios - upstream reproduzidos (#3155/#1984/#2985) e ficam fora do caminho de produção atual. - -Estado final P2.9: commits `0`, pushes `0`, forks `0`, PRs `0`, issues `0`, Discussions `0`. -Progresso da pesquisa: `70/104` (`67,3%`); pendentes: `34/104` (`32,7%`). Próxima fila: P2.10 -(`CLI-070` PicoClaw, `CLI-071` IronClaw, `CLI-072` NullClaw). -- `CLI-070` PicoClaw, `CLI-071` IronClaw e `CLI-072` NullClaw: localizar traits/registries e propor - um provider pequeno com testes. -- `CLI-073` Moltis, `CLI-074` GitClaw e `CLI-075` LionClaw: confirmar atividade, provider e comandos - de validacao antes da publicacao. - -### Onda 4 - P3, integracoes indiretas - -- `CLI-076`, `CLI-077`, `CLI-078`, `CLI-079`, `CLI-080` e `CLI-081`: pesquisar forwarding de - ambiente/configuracao para os agentes filhos; - publicar wrapper ou docs somente quando houver um ponto de extensao real. -- `CLI-082`, `CLI-083`, `CLI-084`, `CLI-085`, `CLI-086`, `CLI-087`, `CLI-088`, `CLI-089` e - `CLI-090`: escolher ACP, MCP, launcher ou integracao do agente filho; nao apresentar uma - integracao de orquestrador como provider de modelo. -- `CLI-091` e `CLI-092`: tratar como interoperabilidade entre proxies; documentar loops, headers, - auth e riscos antes de propor codigo. -- `CLI-093` e `CLI-094`: integrar como broker/ferramenta MCP somente se isso estiver no escopo dos - projetos. -- `CLI-095` e `CLI-096`: configurar o agente filho e revisar a entrada existente de Agent Deck. - -### Onda 5 - P4, fechados, EULA e MITM - -- `CLI-097` Pool: confirmar o que a EULA permite; priorizar configuracao local e nao presumir PR. -- `CLI-098` Junie CLI: pesquisar canal oficial de feedback; sem repositorio publico confirmado, nao - existe fila de PR. -- `CLI-099` Cursor desktop, `CLI-100` Windsurf, `CLI-101` Amp, `CLI-102` Amazon Q/Kiro CLI e - `CLI-103` Cowork: tratar como MITM, configuracao de produto ou pedido oficial de feature. So mover - para PR se um repositorio publico e uma politica de contribuicao forem comprovados. - -## 7. Prompt operacional para cada subagente - -O agente principal deve adaptar e enviar este prompt para cada item: - -```text -Voce e responsavel exclusivamente por CLI-NNN - no repositorio . -Voce nao esta sozinho no workspace: nao reverta, sobrescreva ou reorganize mudancas de outros -agentes. Trabalhe somente na worktree isolada atribuida dentro de .claude/worktrees/ e nunca use -git stash/pop. - -Primeiro pesquise o upstream atual. Leia README, CONTRIBUTING, licenca, templates e instrucoes locais. -Registre commit/release, arquitetura de providers, config/base URL, protocolo, auth, modelos, -streaming, tool calling, issues/PRs existentes e comandos oficiais de build/test. A evidencia inicial -do relatorio e uma hipotese, nao uma conclusao. - -Antes de editar, classifique o caso como pr-provider, pr-generic, pr-docs, issue-first, config-only, -adapter-acp, adapter-mcp, wrapper, needs-mitm ou blocked, com justificativa. Execute o baseline e -registre falhas preexistentes. Se houver patch, trabalhe com teste primeiro e implemente somente a -menor integracao coerente com o upstream. Confirme raiz versus /v1 versus /v1beta, autenticacao, -modelo, streaming e tool calling conforme aplicavel. - -Nao publique nada antes da revisao do agente principal. Entregue: pesquisa com links/caminhos, -gate, baseline, diff, testes, smoke test sanitizado, riscos, branch/commit local se criados e a -atualizacao proposta para 04-tracker-integracoes-clis.md. Nao invente dados e nao exponha chaves. -``` - -## 8. Checklist de autorizacao para enviar uma PR - -O agente principal somente autoriza a publicacao quando todas as respostas forem `sim` ou houver -uma excecao registrada: - -- [ ] O repositorio canonico e a branch-alvo foram confirmados. -- [ ] A politica aceita o tipo de contribuicao planejado. -- [ ] Issues/PRs duplicadas foram pesquisadas. -- [ ] O commit/release de base esta registrado. -- [ ] O gate de contribuicao esta justificado. -- [ ] O baseline foi executado e falhas preexistentes estao separadas. -- [ ] O patch e o menor necessario e segue a arquitetura upstream. -- [ ] A base URL e sua regra de versao foram verificadas no codigo e em runtime. -- [ ] Auth/modelos foram testados sem vazar segredo. -- [ ] Streaming/tool calling foram testados ou marcados explicitamente como nao aplicaveis. -- [ ] Testes, lint, format, typecheck/build relevantes foram executados. -- [ ] A documentacao foi executada e corresponde ao codigo. -- [ ] O diff nao contem caches, builds, logs, credenciais ou refactors sem relacao. -- [ ] O titulo e o corpo seguem o template upstream e nao contêm marketing ou texto de IA. -- [ ] O tracker esta pronto para receber branch, commit e URL reais. - -## 9. Campos adicionais recomendados no tracker - -O tracker atual deve continuar como fonte principal. Durante a execucao, registrar nas observacoes ou -em uma nota individual: - -- commit/release pesquisado; -- decisao `pr-provider`, `pr-generic`, `pr-docs`, `issue-first`, `config-only`, adapter, wrapper, - MITM ou bloqueio; -- protocolo e regra da base URL; -- comandos de baseline e resultado; -- comandos finais e resultado; -- smoke tests realizados; -- arquivos modificados; -- fork, branch e commit; -- PR/issue e estado de CI/review; -- limitacoes e proximo passo. - -Campos ainda nao comprovados permanecem `—`. - -## 10. Inicio recomendado - -O primeiro ciclo de publicacao deve usar o lote P0.1: - -1. `CLI-001` - Gemini CLI (`google-gemini/gemini-cli`) -2. `CLI-002` - Claw Code (`ultraworkers/claw-code`) -3. `CLI-003` - Plandex (`plandex-ai/plandex`) - -Os tres subagentes fazem pesquisa fresca e implementacao em paralelo, mas nenhuma PR e enviada antes -da revisao individual do agente principal. Ao publicar ou concluir config-only/bloqueio, atualizar o -tracker e liberar os mesmos tres slots para o lote P0.2. - -## Lote P2.10 iniciado em 2026-08-03 - -Base local: `release/v3.8.50` em `84b1e5e12f238269e698f400766230f985f4a07b`. Worktrees isoladas e um agente por upstream foram criadas para `CLI-070` PicoClaw, `CLI-071` IronClaw e `CLI-072` NullClaw. Nenhuma publicação está autorizada; os agentes devem pesquisar o HEAD atual, provar `config-only` ou RED→GREEN e registrar governança, gates, smoke e estado limpo. - -Resultado P2.10: - -- `CLI-070` PicoClaw: `config-only`, `openai/auto` com base `/api/v1`; Chat/SSE/tools/usage/images/discovery. Go ausente impediu execução local; monitorar #3298, sem PR. -- `CLI-071` IronClaw: `config-only`, `openai_compatible` com `/api/v1` e `auto`; 889 testes do crate LLM, 5 de resolução e fmt passaram. Sem PR; reasoning proprietário segue limitado por #3673. -- `CLI-072` NullClaw: `config-only`, provider custom com Chat Completions recomendado e Responses/Anthropic como alternativas. Zig ausente; CI do mesmo HEAD verde. Sem PR. - -Estado final P2.10: commits `0`, pushes `0`, forks `0`, PRs `0`, issues `0`, Discussions `0`. -Pesquisa acumulada: `73/104` (`70,2%`); pendentes: `31/104` (`29,8%`). Próxima fila: P2.11 (`CLI-073` Moltis, `CLI-074` GitClaw, `CLI-075` LionClaw). - -Resultado P3.1: - -- `CLI-076` VibePod: `config-only` pelo agente Claude Code com raiz Anthropic `/api`; wrapper injeta env no container. Codex sem chave automática permanece não comprovado. -- `CLI-077` zeroshot: `config-only` pelo gateway OpenAI `/api/v1`; 22 testes focados verdes; limitações de streaming JSON, reasoning e MCP registradas. -- `CLI-078` Fractal: `config-only` por Codex Responses em `CODEX_HOME` por node; servidores tmux quentes podem perder `OMNIROUTE_API_KEY`, recomendando fix genérico upstream. - -Estado final P3.1: commits `0`, pushes `0`, forks `0`, PRs `0`, issues `0`, Discussions `0`. Pesquisa acumulada: `79/104` (`76,0%`); pendentes: `25/104` (`24,0%`). - -Resultado P3.2: Bernstein `config-only` por openai_agents; Traycer `config-only` indireto pelo harness OpenCode; h5i `patch-required` porque auth proxy/egress são fixados em OpenAI. Nenhuma publicação externa. Pesquisa acumulada `82/104` (`78,8%`), pendentes `22/104` (`21,2%`). - -Resultado P2.11: - -- `CLI-073` Moltis: `config-only`, provider `custom-omniroute`, `/api/v1`, `auto`, Chat/SSE/tools e capacidades multimodais. 401 testes e fmt passaram. Sem publicação. -- `CLI-074` GitClaw/GitAgent: `config-only`, loader OpenAI-compatible com `GITAGENT_MODEL_BASE_URL`, `OPENAI_API_KEY` e `omniroute:auto`. Build, 65 testes e smoke passaram. Sem publicação. -- `CLI-075` LionClaw: `patch-required`/`issue-first`. O runtime Codex confinado não recebe `config.toml`/provider secret; preparar proposta genérica alinhada à [#157](https://github.com/moshthepitt/lionclaw/issues/157), sem PR até revisão do mantenedor. - -Estado final P2.11: commits `0`, pushes `0`, forks `0`, PRs `0`, issues `0`, Discussions `0`. Pesquisa acumulada: `76/104` (`73,1%`); pendentes: `28/104` (`26,9%`). -Resultado P3.3: OMK `viable-mcp`; kodo `config-only` indireto; ORCH `needs-wrapper`. Pesquisa acumulada `85/104` (`81,7%`), pendentes `19/104` (`18,3%`). Nenhuma publicação externa. - -Resultado P3.4: LoopTroop `config-only` indireto via provider OpenCode; Galley `patch-required` por não possuir transport OpenAI-compatible configurável; Relay `config-only` via provider profile/Codex, condicionado a smoke da Responses API e controles sobre ferramentas nativas. Nenhuma publicação externa. Pesquisa acumulada `88/104` (`84,6%`), pendentes `16/104` (`15,4%`). - -Resultado P3.5: SageCLI `config-only` indireto via Codex, com caveat de env plaintext; 5dive `patch-required` por mapas fechados de provider/base; agx `config-only` indireto via Codex e com gates de Responses/sandbox. Pesquisa acumulada `91/104` (`87,5%`), pendentes `13/104` (`12,5%`). Nenhuma publicação externa. - -Resultado P3.6: claude-code-router, cc-router e OneCLI são config-only; os dois primeiros oferecem endpoints custom OpenAI-compatible e OneCLI injeta credenciais por proxy MITM. Pesquisa acumulada `94/104` (`90,4%`), pendentes `10/104` (`9,6%`). Nenhuma publicação externa. - -Resultado P3.7: agent-browser `config-only` direto por Chat Completions; OpenWork `config-only` via OpenCode custom; Agent Deck `config-only` via CLIs filhos. Pesquisa acumulada `97/104` (`93,3%`), pendentes `7/104` (`6,7%`). Nenhuma publicação externa. - -Resultado P4.1: Pool e Junie são `config-only` OpenAI-compatible; Cursor é `config-only` limitado ao BYO chat panel, sem MITM/protocolo privado. Pesquisa acumulada `100/104` (`96,2%`), pendentes `4/104` (`3,8%`). Nenhuma publicação externa. - -Resultado P4.2: Windsurf está bloqueado para inferência e permite apenas MCP; Amp depende de confirmação Enterprise; Amazon Q legado requer patch substancial e Kiro atual é MCP-only seguro. Pesquisa acumulada `103/104` (`99,0%`), pendente `1/104` (`1,0%`). Nenhuma publicação externa. - -Resultado P4.3: Cowork não permite substituir oficialmente a inferência; Custom Connector MCP remoto é o único caminho suportado e permanece separado do modelo. Pesquisa concluída `104/104` (`100%`), pendentes `0/104` (`0%`). Nenhuma publicação externa nesta fase de pesquisa. diff --git a/_references/_sistemas_cli/06-relatorio-final-104-clis-e-estrategia-prs.md b/_references/_sistemas_cli/06-relatorio-final-104-clis-e-estrategia-prs.md deleted file mode 100644 index e1929db328..0000000000 --- a/_references/_sistemas_cli/06-relatorio-final-104-clis-e-estrategia-prs.md +++ /dev/null @@ -1,131 +0,0 @@ -# Relatório final — campanha de 104 integrações CLI OmniRoute - -**Data de fechamento:** 2026-08-03 -**Escopo:** `CLI-000` a `CLI-103` -**Resultado:** `104/104` pesquisados (`100%`), `0` pendentes de pesquisa. - -## Como consultar o resultado individual - -O documento autoritativo, com uma linha para cada caso, é o [tracker completo](./04-tracker-integracoes-clis.md). Ele contém para cada ID: - -- prioridade; -- projeto e repositório; -- classificação de integração; -- estado de contribuição upstream; -- branch e commit quando existentes; -- URL de PR e/ou issue quando publicados; -- estado no catálogo OmniRoute; -- observações, limitações, testes e próximo passo. - -Além do tracker, existem fichas técnicas individuais em `_tasks/cli-integrations/`. A cobertura foi auditada e agora há uma ficha para cada ID `CLI-000`–`CLI-103`; o caso `CLI-000` jcode foi adicionado como ficha de referência nesta revisão. - -## Resumo quantitativo - -| Grupo operacional | Quantidade | Tratamento | -|---|---:|---| -| Configuração direta ou indireta | 76 | Documentar receita, validar smoke e só abrir PR se houver melhoria upstream real | -| Contribuição upstream (PR/issue/docs/patch) | 17 | Preparar diff mínimo, validar, revisar e publicar conforme política do repositório | -| Patch obrigatório | 4 | Implementar genericamente, com RED→GREEN/TDD e revisão do mantenedor | -| Bloqueados/fechados | 4 | Registrar bloqueio; usar apenas MCP ou canal oficial, sem MITM | -| MCP/wrapper/ACP como caminho principal | 2 | Integrar a camada de ferramentas/orquestração, sem falsificar provider de inferência | -| Outros casos híbridos | 1 | Seguir a combinação específica descrita no tracker | - -Os números são derivados do campo `Tipo` do tracker; categorias podem se sobrepor em casos híbridos. Atualmente há **7 PRs reais** e **9 issues reais** registrados no tracker, além de cinco entradas locais marcadas como integradas ao catálogo OmniRoute. Nenhum link foi inventado para os 97 casos sem publicação externa. - -## O que foi feito na campanha - -1. Inventário inicial e busca extensa de CLIs, runtimes, harnesses e control-planes. -2. Priorização P0–P4 considerando compatibilidade de protocolo, adoção, licença, maturidade e risco. -3. Pesquisa fresca, uma a uma, em worktrees isoladas, em lotes de no máximo três agentes. -4. Uso de Codebase Memory para índices upstream e verificação de cobertura; faixas parciais foram lidas diretamente quando aplicável. -5. Classificação por configuração, patch, PR documental, issue-first, MCP, wrapper ou bloqueio. -6. Registro de comandos, base URL, autenticação, modelos, streaming, tools, reasoning, imagens, MCP/ACP/A2A, testes e limitações. -7. Consolidação de cada lote com commit separado no OmniRoute e no repositório `_tasks`. -8. Atualização final do tracker, plano de integração, plano de publicação e handoff. -9. Nenhuma credencial real, publicação externa ou técnica de interceptação não autorizada foi utilizada. - -## Estratégia para abrir PRs em 100% dos casos - -“Abrir PR para 100%” deve ser interpretado como **dar um destino upstream apropriado a 100% dos casos**, e não criar 104 PRs artificiais. Há quatro trilhas: - -### Trilha A — PR de código ou documentação - -Aplicar aos casos `viable-upstream`, `pr-generic`, `pr-docs`, `patch-required` e híbridos que tenham superfície pública e política de contribuição compatível. - -Processo por caso: - -1. Reconfirmar HEAD, licença, branch default, política de contribuição e duplicatas. -2. Criar worktree/branch baseada na versão local vigente. -3. Executar baseline upstream e registrar falhas preexistentes. -4. Escrever teste RED que demonstre a lacuna. -5. Implementar o menor patch genérico possível — preferir `openai-compatible`, `base_url` ou provider abstrato a um provider nominal OmniRoute. -6. Executar GREEN: testes focados, suite upstream, lint, format, typecheck/build e smoke com fake server ou OmniRoute local usando placeholder. -7. Revisar segurança: nenhuma chave em argv, logs, fixtures, URL ou artefato; erros sanitizados; streaming/tools/cancelamento cobertos. -8. Abrir PR somente se contribuições externas forem aceitas. O corpo deve explicar problema, solução genérica, compatibilidade, testes, limitações e não conter marketing/texto de IA. -9. Se o repositório bloquear fork/PR ou pedir discussão prévia, abrir issue de proposta com o mesmo patch/reprodução, sem enviar PR prematuramente. -10. Atualizar tracker com branch, commit, URL, CI, revisão e resposta do mantenedor; acompanhar até `accepted`, `merged`, `rejected` ou `awaiting-maintainer`. - -### Trilha B — Issue-first, discussão ou suporte ao mantenedor - -Aplicar quando a arquitetura é adequada, mas há bloqueio de governança, firewall, CLA, fork fechado, dúvida de protocolo ou necessidade de decisão do autor. A issue deve conter: - -- caso de uso OmniRoute; -- configuração atualmente possível; -- lacuna reproduzível; -- proposta genérica; -- impacto de segurança; -- testes/fake server; -- disposição para enviar PR após aprovação. - -Não abrir uma PR paralela enquanto a política exigir issue-first. - -### Trilha C — Config-only documentado - -Aplicar aos casos em que o upstream já suporta a integração e uma mudança de código seria redundante. O entregável é: - -- ficha individual; -- receita validada; -- smoke test e limitações; -- eventual documentação externa/local do OmniRoute; -- issue somente se houver pedido de documentação ou descoberta de bug real. - -Não criar provider nominal ou PR apenas para adicionar a palavra “OmniRoute”. - -### Trilha D — MCP, wrapper ou bloqueio seguro - -Aplicar a control-planes, produtos fechados e CLIs sem rota de inferência substituível. O resultado pode ser: - -- MCP remoto/stdio do OmniRoute; -- wrapper local claramente identificado como wrapper; -- solicitação oficial de custom provider; -- registro de bloqueio e gate legal/ToS. - -Nunca mascarar OmniRoute como Claude/Codex, falsificar executável, interceptar TLS ou reutilizar tokens privados para fabricar uma PR upstream. - -## Ordem recomendada de execução - -1. **Primeiro:** PRs e issues já preparadas ou com alto retorno e baixo risco — jcode, Gemini CLI, Claw Code, Plandex, Trae Agent, Every Code, VT Code e CoreCoder. -2. **Segundo:** patches genéricos com boa superfície OSS — AutoCodeRover, Galley, 5dive e demais casos `pr-generic`/`patch-required`. -3. **Terceiro:** issues aguardando decisão — Open Codex, Kimi CLI, Devon, g3, Free Code, Claude Engineer e casos com `awaiting-maintainer`. -4. **Quarto:** documentação e receitas config-only agrupadas por ecossistema — OpenCode, Codex, LiteLLM, AI SDK, OpenAI-compatible e Anthropic-compatible. -5. **Quinto:** MCP/plugins para produtos fechados — Windsurf, Amp, Kiro, Cowork e Cursor, sempre pela superfície oficial. - -Cada rodada deve manter no máximo três agentes ativos. O agente principal revisa o resultado do trio antes de liberar o próximo. - -## Critério de encerramento por caso - -Um caso só pode ser marcado como finalizado quando possui: pesquisa, classificação, evidência de protocolo, baseline ou limitação reproduzível, receita/patch/bloqueio, validação proporcional, estado de publicação e próximo passo. Para produtos fechados, `blocked-closed` ou `MCP-only` é um resultado válido e preferível a uma PR não autorizada. - -## Estado de publicação atual - -Os únicos links de publicação comprovados devem continuar sendo os registrados no tracker. O fato de existir uma branch local de pesquisa não significa que exista PR upstream. A matriz de verdade é: - -- PR/issue preenchida: publicação real; -- campo `—`: nenhuma publicação externa comprovada; -- `not-applicable`: configuração ou bloqueio sem contribuição upstream; -- `awaiting-maintainer`: contato feito, aguardando decisão; -- `published-pr`/`published-issue`: URL real presente no tracker. - -## Próxima fase - -A pesquisa está encerrada. A próxima fase é execução controlada da Trilha A/B/C/D, começando pelos casos com maior retorno e menor risco, com revisão central antes de qualquer push, PR, issue ou contato externo. diff --git a/bin/cli/commands/oauth.mjs b/bin/cli/commands/oauth.mjs index 5c1a6ec4a9..8a1d170ad6 100644 --- a/bin/cli/commands/oauth.mjs +++ b/bin/cli/commands/oauth.mjs @@ -6,7 +6,6 @@ import { t } from "../i18n.mjs"; const PROVIDERS_WITH_OAUTH = [ { id: "gemini", name: "Google Gemini", flow: "browser" }, { id: "antigravity", name: "Antigravity", flow: "browser" }, - { id: "windsurf", name: "Windsurf", flow: "browser" }, { id: "cursor", name: "Cursor", flow: "import" }, { id: "zed", name: "Zed", flow: "import" }, { id: "kiro", name: "Amazon Kiro", flow: "social" }, diff --git a/changelog.d/features/10001-api-key-compression-bypass.md b/changelog.d/features/10001-api-key-compression-bypass.md deleted file mode 100644 index 896b32cec6..0000000000 --- a/changelog.d/features/10001-api-key-compression-bypass.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(api):** API keys can disable prompt compression from the dashboard, including for clients that cannot send custom headers ([#10001](https://github.com/diegosouzapw/OmniRoute/pull/10001)) — thanks @shixi-li diff --git a/changelog.d/features/5696-layer-a-capability-filter.md b/changelog.d/features/5696-layer-a-capability-filter.md deleted file mode 100644 index 37d04132e3..0000000000 --- a/changelog.d/features/5696-layer-a-capability-filter.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(core):** add Layer A capability filter at router (#5696) diff --git a/changelog.d/features/6671-deepai-multimodal-provider.md b/changelog.d/features/6671-deepai-multimodal-provider.md deleted file mode 100644 index eccf405d14..0000000000 --- a/changelog.d/features/6671-deepai-multimodal-provider.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(providers):** add DeepAI as paid API-key image provider ([#6671](https://github.com/diegosouzapw/OmniRoute/issues/6671)) diff --git a/changelog.d/features/6674-gpt4free-batch-3-providers.md b/changelog.d/features/6674-gpt4free-batch-3-providers.md deleted file mode 100644 index bafe537872..0000000000 --- a/changelog.d/features/6674-gpt4free-batch-3-providers.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(providers):** add Naga.ac and ChatAnywhere aggregator gateway providers (#6674 — thanks @chirag127) \ No newline at end of file diff --git a/changelog.d/features/6736-response-content-encoding.md b/changelog.d/features/6736-response-content-encoding.md deleted file mode 100644 index 14ed572868..0000000000 --- a/changelog.d/features/6736-response-content-encoding.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(api):** add response content encoding verification — confirms Next.js compress:true and documents stripStaleForwardingHeaders behavior ([#6736](https://github.com/diegosouzapw/OmniRoute/issues/6736)) diff --git a/changelog.d/features/6752-plugins-marketplace-install-api.md b/changelog.d/features/6752-plugins-marketplace-install-api.md deleted file mode 100644 index 4b53508688..0000000000 --- a/changelog.d/features/6752-plugins-marketplace-install-api.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(api):** add plugins marketplace install endpoint with checksum verification ([#6752](https://github.com/diegosouzapw/OmniRoute/issues/6752)) diff --git a/changelog.d/features/7679-chatgpt-web-thinking-tool-emulation.md b/changelog.d/features/7679-chatgpt-web-thinking-tool-emulation.md deleted file mode 100644 index fcd0ec4a14..0000000000 --- a/changelog.d/features/7679-chatgpt-web-thinking-tool-emulation.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(chatgpt-web):** harden prompt-emulated tool contract for thinking models (#7679 — thanks @horacecar) diff --git a/changelog.d/features/7786-management-auth-terminology-docs.md b/changelog.d/features/7786-management-auth-terminology-docs.md deleted file mode 100644 index 4a5fca7f9d..0000000000 --- a/changelog.d/features/7786-management-auth-terminology-docs.md +++ /dev/null @@ -1 +0,0 @@ -- **docs:** add management authentication terminology guide ([#7786](https://github.com/diegosouzapw/OmniRoute/issues/7786)) diff --git a/changelog.d/features/8237-reduce-idle-memory-small-vps.md b/changelog.d/features/8237-reduce-idle-memory-small-vps.md deleted file mode 100644 index 4127a21a70..0000000000 --- a/changelog.d/features/8237-reduce-idle-memory-small-vps.md +++ /dev/null @@ -1 +0,0 @@ -- **docs:** add low-memory/small VPS optimization guide ([#8237](https://github.com/diegosouzapw/OmniRoute/issues/8237)) diff --git a/changelog.d/features/8369-connection-level-upstream-headers.md b/changelog.d/features/8369-connection-level-upstream-headers.md deleted file mode 100644 index 250c797819..0000000000 --- a/changelog.d/features/8369-connection-level-upstream-headers.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(providers):** add connection-level custom upstream headers via `provider_specific_data.customHeaders` — applied to every request through that connection, with model-level headers overriding on the same case-insensitive name. (thanks @Benson-mk) \ No newline at end of file diff --git a/changelog.d/features/8461-runomniroutecli-approval-gate.md b/changelog.d/features/8461-runomniroutecli-approval-gate.md deleted file mode 100644 index bf08a096dc..0000000000 --- a/changelog.d/features/8461-runomniroutecli-approval-gate.md +++ /dev/null @@ -1 +0,0 @@ -- feat(copilot): add approval gate for runOmniRouteCli commands (#8461) diff --git a/changelog.d/features/8468-bun-windows-ci-coverage.md b/changelog.d/features/8468-bun-windows-ci-coverage.md deleted file mode 100644 index 48c4f100cc..0000000000 --- a/changelog.d/features/8468-bun-windows-ci-coverage.md +++ /dev/null @@ -1 +0,0 @@ -- feat(ci): add windows-latest leg to test-bun-sqlite job (#8468) diff --git a/changelog.d/features/8799-electron-remote-server-mode.md b/changelog.d/features/8799-electron-remote-server-mode.md deleted file mode 100644 index f7c4016b3c..0000000000 --- a/changelog.d/features/8799-electron-remote-server-mode.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(electron):** Desktop app can now attach to an already-running OmniRoute server (e.g. a Docker/OrbStack container) instead of always spawning its own bundled server — configurable via the tray's "Remote Server → Connect to Remote Server…" or the `OMNIROUTE_REMOTE_URL` env var ([#8799](https://github.com/diegosouzapw/OmniRoute/pull/8799)) — thanks @soulhakr diff --git a/changelog.d/features/8862-novita-model-catalog.md b/changelog.d/features/8862-novita-model-catalog.md deleted file mode 100644 index e510b079de..0000000000 --- a/changelog.d/features/8862-novita-model-catalog.md +++ /dev/null @@ -1 +0,0 @@ -- **Providers**: expands the Novita AI catalog from a single Llama 3.1 8B entry to 19 curated serving models (DeepSeek V4, Kimi K3, GLM 5.2, MiniMax M3, Qwen3.7 Max, Qwen3 Coder 480B, MiMo V2.5 Pro, gpt-oss-120b, Gemma 4 31B and more), each carrying its real context window, output cap and reasoning flag from the live `/openai/v1/models` listing, and each vision flag confirmed by an actual image request rather than the listing's self-reported modalities diff --git a/changelog.d/features/8870-node-sqlite-adapter-parity.md b/changelog.d/features/8870-node-sqlite-adapter-parity.md deleted file mode 100644 index b912939d2e..0000000000 --- a/changelog.d/features/8870-node-sqlite-adapter-parity.md +++ /dev/null @@ -1 +0,0 @@ -- **Database**: The `node:sqlite` fallback now uses SQLite's native backup API and real immediate write transactions, improving backup consistency and concurrent-write behavior when `better-sqlite3` is unavailable diff --git a/changelog.d/features/8908-model-token-limit-overrides.md b/changelog.d/features/8908-model-token-limit-overrides.md deleted file mode 100644 index 8d32a9e1f0..0000000000 --- a/changelog.d/features/8908-model-token-limit-overrides.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(models):** add exact per-model `context_length`, `max_input_tokens`, and `max_output_tokens` overrides across model discovery and runtime enforcement, with automatic migration from the retired output-only `max_token` key ([#8908](https://github.com/diegosouzapw/OmniRoute/pull/8908)) — thanks @xz-dev diff --git a/changelog.d/features/8964-xai-agent-tools-passthrough.md b/changelog.d/features/8964-xai-agent-tools-passthrough.md deleted file mode 100644 index 62536adb43..0000000000 --- a/changelog.d/features/8964-xai-agent-tools-passthrough.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(providers):** native xAI Agent Tools passthrough on `/v1/responses` for `xai` / `xai-oauth` (`xao`) — forward `web_search` + `x_search` to `api.x.ai` instead of rewriting or rejecting them ([#8964](https://github.com/diegosouzapw/OmniRoute/issues/8964)) diff --git a/changelog.d/features/8978-unorouter.md b/changelog.d/features/8978-unorouter.md deleted file mode 100644 index 5a4e34839f..0000000000 --- a/changelog.d/features/8978-unorouter.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(providers): add UnoRouter provider** — UnoRouter is an OpenAI-compatible routing gateway supporting hundreds of models. It is now registered as an API-key provider. ([#8978](https://github.com/diegosouzapw/OmniRoute/issues/8978)) diff --git a/changelog.d/features/8980-deprecate-gemini-cli-provider.md b/changelog.d/features/8980-deprecate-gemini-cli-provider.md deleted file mode 100644 index 38a826a2e7..0000000000 --- a/changelog.d/features/8980-deprecate-gemini-cli-provider.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(sse):** deprecated the legacy `gemini-cli` **upstream provider**. It was not routable (no registry entry, no executor), yet the scheduler kept refreshing its token against Google — maintaining a credential that could never serve a request. A stored connection now becomes terminal with a legible reason and a working migration path: re-add the account under `gemini`, which uses the same Google OAuth client. The `gemini-cli` **client identity** (requests arriving *from* the Gemini CLI, issue #7034) is untouched ([#8980](https://github.com/diegosouzapw/OmniRoute/pull/8980)) diff --git a/changelog.d/features/9000-encrypted-reasoning-replay.md b/changelog.d/features/9000-encrypted-reasoning-replay.md deleted file mode 100644 index 417256a6f6..0000000000 --- a/changelog.d/features/9000-encrypted-reasoning-replay.md +++ /dev/null @@ -1,2 +0,0 @@ -- Add a default-off connection setting for Codex, OpenAI, and OpenAI-compatible Responses API providers that preserves client-supplied `reasoning.encrypted_content` items for replay, including per-target combo routing. -- Omit opaque encrypted reasoning values from persisted call logs while retaining compact diagnostic markers. diff --git a/changelog.d/features/9031-regolo-ai-provider.md b/changelog.d/features/9031-regolo-ai-provider.md deleted file mode 100644 index 0af978fafe..0000000000 --- a/changelog.d/features/9031-regolo-ai-provider.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(providers):** add Regolo AI OpenAI-compatible provider ([#9031](https://github.com/diegosouzapw/OmniRoute/issues/9031)) diff --git a/changelog.d/features/9068-editable-discovered-provider-slugs.md b/changelog.d/features/9068-editable-discovered-provider-slugs.md deleted file mode 100644 index cc5bcee236..0000000000 --- a/changelog.d/features/9068-editable-discovered-provider-slugs.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(db):** add provider-scoped model aliases that survive rediscovery ([#9068](https://github.com/diegosouzapw/OmniRoute/issues/9068)) diff --git a/changelog.d/features/9173-cursor-agent-nudge-banner.md b/changelog.d/features/9173-cursor-agent-nudge-banner.md deleted file mode 100644 index e62f0331f9..0000000000 --- a/changelog.d/features/9173-cursor-agent-nudge-banner.md +++ /dev/null @@ -1 +0,0 @@ -- feat(cursor): surface a dismissible dashboard banner suggesting `cursor-agent` installation when it isn't available, so Cursor connections needing periodic manual reconnection aren't a silent surprise (#9173) diff --git a/changelog.d/features/9173-cursor-proactive-renewal.md b/changelog.d/features/9173-cursor-proactive-renewal.md deleted file mode 100644 index b21d7edfe2..0000000000 --- a/changelog.d/features/9173-cursor-proactive-renewal.md +++ /dev/null @@ -1 +0,0 @@ -- feat(cursor): proactively renew Cursor sessions before their ~24h token expires via the token health-check sweep, nudging `cursor-agent` and re-scraping IDE/agent credential sources so connections stop silently expiring (#9173) diff --git a/changelog.d/features/9208-codex-parenthesized-reasoning.md b/changelog.d/features/9208-codex-parenthesized-reasoning.md deleted file mode 100644 index 3eb2d97e26..0000000000 --- a/changelog.d/features/9208-codex-parenthesized-reasoning.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(codex):** accept parenthesized GPT-5.6 reasoning overrides. (thanks @seakleangnhak) diff --git a/changelog.d/features/9214-claude-thinking-token-counts.md b/changelog.d/features/9214-claude-thinking-token-counts.md deleted file mode 100644 index 6787c2bd45..0000000000 --- a/changelog.d/features/9214-claude-thinking-token-counts.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(usage):** surface Claude thinking token counts to clients. (thanks @luoyide) diff --git a/changelog.d/features/9225-ollama-local-embeddings.md b/changelog.d/features/9225-ollama-local-embeddings.md deleted file mode 100644 index 02b606281b..0000000000 --- a/changelog.d/features/9225-ollama-local-embeddings.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(ollama):** add Ollama Local embedding support via /v1/embeddings. (thanks @HaoNgo232) diff --git a/changelog.d/features/9239-image-combo-strategy-execution.md b/changelog.d/features/9239-image-combo-strategy-execution.md deleted file mode 100644 index 950c2aa83c..0000000000 --- a/changelog.d/features/9239-image-combo-strategy-execution.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(images):** execute full combo strategy + fallback in `/v1/images/generations` for combo targets, expanding to images-capable models with priority strategy and per-target `handleImageGeneration` ([#9239](https://github.com/diegosouzapw/OmniRoute/pull/9239)) diff --git a/changelog.d/features/9243-forwarded-header-budget-env.md b/changelog.d/features/9243-forwarded-header-budget-env.md deleted file mode 100644 index 830ce41612..0000000000 --- a/changelog.d/features/9243-forwarded-header-budget-env.md +++ /dev/null @@ -1 +0,0 @@ -- feat: make forwarded upstream response-header budget configurable via env var (#9243) diff --git a/changelog.d/features/9247-provider-detail-connections.md b/changelog.d/features/9247-provider-detail-connections.md deleted file mode 100644 index 2f731547de..0000000000 --- a/changelog.d/features/9247-provider-detail-connections.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(providers):** filter provider detail connections server-side while preserving full-page search and pagination. (thanks @RobertsXML) diff --git a/changelog.d/features/9248-video-url-passthrough.md b/changelog.d/features/9248-video-url-passthrough.md deleted file mode 100644 index de1c81b6f0..0000000000 --- a/changelog.d/features/9248-video-url-passthrough.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(providers):** make video_url passthrough configurable per provider/model via compat override ([#9248](https://github.com/diegosouzapw/OmniRoute/issues/9248)) — thanks @HellFiveOsborn diff --git a/changelog.d/features/9268-gemini-schema-recursive-type-empty-choices.md b/changelog.d/features/9268-gemini-schema-recursive-type-empty-choices.md deleted file mode 100644 index 8b38913bae..0000000000 --- a/changelog.d/features/9268-gemini-schema-recursive-type-empty-choices.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(gemini):** recursive type:object injection in schema normalizer + empty choices interceptor for streaming (#9268) diff --git a/changelog.d/features/9270-provider-api-key-links.md b/changelog.d/features/9270-provider-api-key-links.md deleted file mode 100644 index f6e884cea5..0000000000 --- a/changelog.d/features/9270-provider-api-key-links.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(dashboard):** render a conditional "Get API key" link on the provider detail page, surfaced from the existing `notice.apiKeyUrl` / `notice.signupUrl` catalog metadata (e.g. `pioneer`, `jina`, `together`). The link opens in a new tab and is hidden when neither URL is present, so existing providers are unaffected. Tracks the notice field in `ProviderCatalogMetadata` ([#9270](https://github.com/diegosouzapw/OmniRoute/pull/9270)) diff --git a/changelog.d/features/9284-json-cookie-input.md b/changelog.d/features/9284-json-cookie-input.md deleted file mode 100644 index 100842dcc0..0000000000 --- a/changelog.d/features/9284-json-cookie-input.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(providers):** accept JSON cookie objects in normalizeSessionCookieHeader (#9284 — thanks @AIB1TAL0S) diff --git a/changelog.d/features/9318-opencode-zen-reasoning-effort.md b/changelog.d/features/9318-opencode-zen-reasoning-effort.md deleted file mode 100644 index 49f8e78a84..0000000000 --- a/changelog.d/features/9318-opencode-zen-reasoning-effort.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(providers):** support max reasoning effort for opencode-zen DeepSeek models (#9318) diff --git a/changelog.d/features/9322-nanogpt-endpoint-surface.md b/changelog.d/features/9322-nanogpt-endpoint-surface.md deleted file mode 100644 index 485b3cf6c6..0000000000 --- a/changelog.d/features/9322-nanogpt-endpoint-surface.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(providers):** expanded the NanoGPT (`nano-gpt.com`) upstream provider from chat-only to the full OpenAI-compatible endpoint surface: audio transcriptions (`/api/v1/audio/transcriptions`), audio speech (`/api/v1/audio/speech`), video generation (`/api/v1/video/generations`), embeddings (`/v1/embeddings`), and the Responses API (`responsesBaseUrl` → `/api/v1/responses`) ([#9322](https://github.com/diegosouzapw/OmniRoute/issues/9322)) diff --git a/changelog.d/features/9414-combo-system-prompt-templates.md b/changelog.d/features/9414-combo-system-prompt-templates.md deleted file mode 100644 index 05f86c0f6e..0000000000 --- a/changelog.d/features/9414-combo-system-prompt-templates.md +++ /dev/null @@ -1,2 +0,0 @@ -- **feat(sse):** combo `system_message` supports server-side `{{MODEL_ID}}`, `{{PROVIDER_ID}}`, `{{ACCOUNT}}` and `{{FINGERPRINT}}` template expansion from the actually-routed target ([#5501](https://github.com/diegosouzapw/OmniRoute/issues/5501)) -- **feat(sse):** template expansion covers the standard dispatch loop, round-robin and pinned context-cache sessions; fusion, chaos, pipeline and nested-execute strategies do not expand yet ([#5501](https://github.com/diegosouzapw/OmniRoute/issues/5501)) diff --git a/changelog.d/features/9415-newapi-sub2api-aggregator-balance.md b/changelog.d/features/9415-newapi-sub2api-aggregator-balance.md deleted file mode 100644 index e2317e3cb8..0000000000 --- a/changelog.d/features/9415-newapi-sub2api-aggregator-balance.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(sse):** New-API/One-API/Sub2API aggregator balance detection for compatible provider nodes — when the "Aggregator Gateway" toggle is enabled, OmniRoute queries the aggregator's `/api/user/self` endpoint to detect the account balance; the dashboard shows a balance badge and quota-preflight routing skips exhausted accounts. Gated by the `NEWAPI_AGGREGATOR_BALANCE` feature flag (default: off), with a custom `quotaPerUnit` override for aggregators that use a different rate than the default 500000 units/$1 ([#9415](https://github.com/diegosouzapw/OmniRoute/issues/9415)) diff --git a/changelog.d/features/9418-disable-auto-no-think-combos.md b/changelog.d/features/9418-disable-auto-no-think-combos.md deleted file mode 100644 index 0f02309f3f..0000000000 --- a/changelog.d/features/9418-disable-auto-no-think-combos.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(catalog):** added opt-in settings `hideAutoCombos` and `hideNoThinkVariants` (default off) to filter built-in `auto/*` virtual combos and `no-think/*` gateway variants from the `/v1/models` catalog — user-defined combos and original provider models stay listed; routing is unaffected ([#9418](https://github.com/diegosouzapw/OmniRoute/issues/9418)) diff --git a/changelog.d/features/9473-opencode-plugin-model-allowlist.md b/changelog.d/features/9473-opencode-plugin-model-allowlist.md deleted file mode 100644 index 2f0a937812..0000000000 --- a/changelog.d/features/9473-opencode-plugin-model-allowlist.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(opencode-plugin):** added `features.visibleModels` (allowlist) and `features.hiddenModels` (blocklist) to `@omniroute/opencode-plugin` — curate the OpenCode TUI/CLI model picker from 600+ catalog entries down to an operator-defined ID list that persists in `opencode.json` across config resets ([#9473](https://github.com/diegosouzapw/OmniRoute/issues/9473)) diff --git a/changelog.d/features/9485-deepseek-thinking-efforts.md b/changelog.d/features/9485-deepseek-thinking-efforts.md deleted file mode 100644 index a2b2bbcf95..0000000000 --- a/changelog.d/features/9485-deepseek-thinking-efforts.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(providers):** add native DeepSeek V4 Flash and Pro thinking-effort aliases for their documented per-model tiers, including Combo Builder exposure ([#9485](https://github.com/diegosouzapw/OmniRoute/pull/9485)). diff --git a/changelog.d/features/9490-opencode-plugin-warm-startup-parallel-refresh.md b/changelog.d/features/9490-opencode-plugin-warm-startup-parallel-refresh.md deleted file mode 100644 index 273151e9e9..0000000000 --- a/changelog.d/features/9490-opencode-plugin-warm-startup-parallel-refresh.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(plugin):** warm catalog startup from disk snapshot + parallel refresh in the opencode-plugin config-shim — registers ~1-2s on warm gateways instead of ~30s, `Promise.allSettled` over the six fetchers, keeps the last disk snapshot on failed refresh, and an in-flight guard prevents concurrent refreshes for the same cache key ([#9490](https://github.com/diegosouzapw/OmniRoute/pull/9490)) diff --git a/changelog.d/features/9511-quota-exhausted-transient-test-all.md b/changelog.d/features/9511-quota-exhausted-transient-test-all.md deleted file mode 100644 index d9b3e54270..0000000000 --- a/changelog.d/features/9511-quota-exhausted-transient-test-all.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(models):** Test All's "Auto-hide failed models" no longer hides quota errors — daily-quota-exhausted and credits-exhausted responses are now classified via the routing path's existing quota detectors, so an evening Test All on a free-tier provider no longer silently wipes the catalog. Quota results stay visible with a distinct amber badge ([#9511](https://github.com/diegosouzapw/OmniRoute/issues/9511)) diff --git a/changelog.d/features/9530-forgotten-sibling-tests-gate.md b/changelog.d/features/9530-forgotten-sibling-tests-gate.md deleted file mode 100644 index c9407e0e68..0000000000 --- a/changelog.d/features/9530-forgotten-sibling-tests-gate.md +++ /dev/null @@ -1 +0,0 @@ -- Add an advisory forgotten-sibling-tests report to pull-request quality checks. The report traces changed modules through their static consumers to candidate sibling tests, while keeping barrel and dynamic-import cases non-blocking and requiring reviewed, referenced exceptions. diff --git a/changelog.d/features/9544-muse-code-cli-provider.md b/changelog.d/features/9544-muse-code-cli-provider.md deleted file mode 100644 index 23994a628f..0000000000 --- a/changelog.d/features/9544-muse-code-cli-provider.md +++ /dev/null @@ -1 +0,0 @@ -- feat(providers): add Muse Code CLI provider preset (#9544) diff --git a/changelog.d/features/9570-plugin-context-headers.md b/changelog.d/features/9570-plugin-context-headers.md deleted file mode 100644 index 07fc8687c4..0000000000 --- a/changelog.d/features/9570-plugin-context-headers.md +++ /dev/null @@ -1 +0,0 @@ -- feat(plugins): expose client request headers in plugin onRequest/onResponse context (#9570) diff --git a/changelog.d/features/9579-soniox-audio-provider.md b/changelog.d/features/9579-soniox-audio-provider.md deleted file mode 100644 index 9213793594..0000000000 --- a/changelog.d/features/9579-soniox-audio-provider.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(audio):** Soniox STT + TTS provider (`sx`) — async speech-to-text (`stt-async-v5`, `stt-async-v4`) and real-time text-to-speech (`tts-rt-v1`) ([#9579](https://github.com/diegosouzapw/OmniRoute/pull/9579)) diff --git a/changelog.d/features/9620-cache-read-write-logs.md b/changelog.d/features/9620-cache-read-write-logs.md deleted file mode 100644 index f92846262d..0000000000 --- a/changelog.d/features/9620-cache-read-write-logs.md +++ /dev/null @@ -1,2 +0,0 @@ -- Show cache-read and cache-write token counts in request log rows and details when providers - report them. diff --git a/changelog.d/features/9622-memory-embedding-custom-endpoint.md b/changelog.d/features/9622-memory-embedding-custom-endpoint.md deleted file mode 100644 index 7849ee9ac2..0000000000 --- a/changelog.d/features/9622-memory-embedding-custom-endpoint.md +++ /dev/null @@ -1 +0,0 @@ -- feat(memory): support custom OpenAI-compatible endpoints for Memory embeddings (#9622) diff --git a/changelog.d/features/9709-stream-throughput-watchdog.md b/changelog.d/features/9709-stream-throughput-watchdog.md deleted file mode 100644 index 45ed50adff..0000000000 --- a/changelog.d/features/9709-stream-throughput-watchdog.md +++ /dev/null @@ -1 +0,0 @@ -- feat(resilience): add an opt-in watchdog for persistently slow upstream streams (#9709) diff --git a/changelog.d/features/9752-one-click-free-providers.md b/changelog.d/features/9752-one-click-free-providers.md deleted file mode 100644 index f8c06d4603..0000000000 --- a/changelog.d/features/9752-one-click-free-providers.md +++ /dev/null @@ -1,4 +0,0 @@ -- **Onboarding:** add an explicit, reviewable one-click setup for eligible no-auth LLM providers, - with per-provider caution links, selectable confirmation, idempotent creation, and safe partial - retries. Existing provider connections are never changed and setup completion never enables - providers silently. ([#9752](https://github.com/diegosouzapw/OmniRoute/issues/9752)) diff --git a/changelog.d/features/9782-modality-bridge-settings.md b/changelog.d/features/9782-modality-bridge-settings.md deleted file mode 100644 index 47ab7c56e6..0000000000 --- a/changelog.d/features/9782-modality-bridge-settings.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(settings):** add a dedicated Modality Bridge settings page with Vision controls, runtime stats, and URL-addressable Audio and Video tabs ([#9782](https://github.com/diegosouzapw/OmniRoute/pull/9782)) diff --git a/changelog.d/features/9807-audio-modality-bridge.md b/changelog.d/features/9807-audio-modality-bridge.md deleted file mode 100644 index 64d99490d2..0000000000 --- a/changelog.d/features/9807-audio-modality-bridge.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(modality bridge):** Transcribe chat audio for text-only models through the existing speech-to-text providers, with configurable limits, caching, runtime stats, and a dashboard self-test ([#9807](https://github.com/diegosouzapw/OmniRoute/pull/9807)) diff --git a/changelog.d/features/9924-strict-system-providers-env.md b/changelog.d/features/9924-strict-system-providers-env.md deleted file mode 100644 index 23273d1ee4..0000000000 --- a/changelog.d/features/9924-strict-system-providers-env.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(memory):** `PROVIDERS_SYSTEM_MUST_BE_FIRST` (the #6135/#7293 fix for backends that reject any non-leading `system` message) was hardcoded to `xiaomi-mimo`/`mimo`. Added `OMNIROUTE_STRICT_SYSTEM_PROVIDERS` (comma-separated provider ids) so self-hosted deployments can flag additional strict backends — e.g. a custom OpenAI-compatible connection in front of a self-hosted Qwen3.5+/3.6 model — without forking and rebuilding the image ([#9924](https://github.com/diegosouzapw/OmniRoute/pull/9924)) diff --git a/changelog.d/features/adobe-firefly-reference-images.md b/changelog.d/features/adobe-firefly-reference-images.md deleted file mode 100644 index 5c889d9a76..0000000000 --- a/changelog.d/features/adobe-firefly-reference-images.md +++ /dev/null @@ -1 +0,0 @@ -- **feat(adobe-firefly):** reference-image attach for generate + OpenAI `/v1/images/edits` support (follow-up to #8006). Uploads sources to Firefly storage (`POST /v2/storage/image`), then submits `referenceBlobs` on 3P generate-async (nano multi-ref `usage:general`; gpt-image `usage:subject`). Wire matches live `firefly.adobe.com` captures. Also routes built-in edits to the same path (up to 4 refs). diff --git a/changelog.d/fixes/7754-best-free-fallback.md b/changelog.d/fixes/7754-best-free-fallback.md deleted file mode 100644 index 0d1598538d..0000000000 --- a/changelog.d/fixes/7754-best-free-fallback.md +++ /dev/null @@ -1 +0,0 @@ -- test(combo): guard auto/best-free never leaks the combo name as a model (#7754) diff --git a/changelog.d/fixes/8072-catalog-provider-grouped-ordering.md b/changelog.d/fixes/8072-catalog-provider-grouped-ordering.md deleted file mode 100644 index f1b919cd40..0000000000 --- a/changelog.d/fixes/8072-catalog-provider-grouped-ordering.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(models):** `/v1/models` now publishes one contiguous provider-grouped block per provider instead of interleaved fragments. The catalog is assembled by many independent push loops (auto-combos, named combos, static registry, codex-native, synced, OpenRouter, specialty, custom, alias-backed, connection-fallback), so one provider's models previously landed in several separated blocks. A single stable, provider-grouped sort is applied at serialization, keyed by `owned_by` (canonical owner identity) rather than the model-id prefix — so a single routable public prefix that differs from its owner (e.g. no-auth OpenCode publishing `oc/` while keeping `owned_by: "opencode"`) stays contiguous. Combos are pinned first (preserving #4164); then providers in registry precedence (OAuth → NoAuth → API-key); then unknown providers in locale-independent code-unit order. The sort is stable and pure (reorders rows only, no mutation, no DB/IO), preserving combo `sort_order`, connection priority, custom append-order, and equal-id audio twins. diff --git a/changelog.d/fixes/8430-fix.plan.md b/changelog.d/fixes/8430-fix.plan.md deleted file mode 100644 index c184b6ed85..0000000000 --- a/changelog.d/fixes/8430-fix.plan.md +++ /dev/null @@ -1,3 +0,0 @@ -- fix(vision-bridge): describe-model no longer returns unreachable "openai/gpt-4o-mini" when every vision-capable provider is unreachable on the instance — returns null instead and surfaces a clear error (#8430) -- fix(vision-bridge): validate fixedModel against usable credentials before short-circuiting in getBestVisionModel, so the default "openai/gpt-4o-mini" is not unconditionally selected when no OpenAI connection exists (#8430) -- fix(vision-bridge): in the combo describe path, replace raw images with an error text stub when all describe attempts fail, instead of forwarding images to a confirmed non-vision backend that would reject them with an opaque serde error (#8430) diff --git a/changelog.d/fixes/8522-fix.plan.md b/changelog.d/fixes/8522-fix.plan.md deleted file mode 100644 index 41a25b266b..0000000000 --- a/changelog.d/fixes/8522-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(quality): add base-relative file-size check so inherited drift does not red innocent PRs (#8522) diff --git a/changelog.d/fixes/8542-fix.plan.md b/changelog.d/fixes/8542-fix.plan.md deleted file mode 100644 index f44dd909c6..0000000000 --- a/changelog.d/fixes/8542-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(ci): aggregate all fast-gates into non-fail-fast loop so one red gate no longer masks later gates (#8542) diff --git a/changelog.d/fixes/8577-fix.plan.md b/changelog.d/fixes/8577-fix.plan.md deleted file mode 100644 index 2b7b175101..0000000000 --- a/changelog.d/fixes/8577-fix.plan.md +++ /dev/null @@ -1,2 +0,0 @@ -- fix(tests): make machineId tests macOS-compatible by stubbing ioreg in test helper (#8577) -- fix(scripts): replace bash 4+ readarray with compatible while-read loop in restore-policies.sh (#8577) diff --git a/changelog.d/fixes/8609-fix.plan.md b/changelog.d/fixes/8609-fix.plan.md deleted file mode 100644 index 0f8cb8e868..0000000000 --- a/changelog.d/fixes/8609-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(cli): enable systray2 on Windows for Norton-friendly tray (#8609) \ No newline at end of file diff --git a/changelog.d/fixes/8653-fix.plan.md b/changelog.d/fixes/8653-fix.plan.md deleted file mode 100644 index 14b0215a24..0000000000 --- a/changelog.d/fixes/8653-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(executor): guard claude/anthropic buildHeaders against empty credentials and extend dual-Bearer parity for third-party baseUrls (#8653) diff --git a/changelog.d/fixes/8681-fix.plan.md b/changelog.d/fixes/8681-fix.plan.md deleted file mode 100644 index 9abd3a9e87..0000000000 --- a/changelog.d/fixes/8681-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(providers): gate premium opencode-zen/opencode-go models behind an API key (#8681) diff --git a/changelog.d/fixes/8728-model-catalog-swr.md b/changelog.d/fixes/8728-model-catalog-swr.md deleted file mode 100644 index 9272b3f0b7..0000000000 --- a/changelog.d/fixes/8728-model-catalog-swr.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(api):** make `/v1/models` stale refresh response-safe and generation-safe, with narrow synced-model invalidation ([#8728](https://github.com/diegosouzapw/OmniRoute/pull/8728)). Related to #8697. diff --git a/changelog.d/fixes/8739-yuanbao-sse-parser.md b/changelog.d/fixes/8739-yuanbao-sse-parser.md deleted file mode 100644 index 5893d17799..0000000000 --- a/changelog.d/fixes/8739-yuanbao-sse-parser.md +++ /dev/null @@ -1 +0,0 @@ -- fix(yuanbao-web): accept `content` field in SSE text events (upstream format change) (#8739) diff --git a/changelog.d/fixes/8781-fix.plan.md b/changelog.d/fixes/8781-fix.plan.md deleted file mode 100644 index ce761c1555..0000000000 --- a/changelog.d/fixes/8781-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(build): remove misleading open-sse/package.json facade and add workspace typecheck gate (#8781) diff --git a/changelog.d/fixes/8813-chatgpt-sentinel.md b/changelog.d/fixes/8813-chatgpt-sentinel.md deleted file mode 100644 index 0cd1091c5e..0000000000 --- a/changelog.d/fixes/8813-chatgpt-sentinel.md +++ /dev/null @@ -1 +0,0 @@ -- fix(errorClassifier): classify ChatGPT Web SENTINEL_BLOCKED 403 as terminal FORBIDDEN, enabling proper combo fallback (#8813) diff --git a/changelog.d/fixes/8826-fix.plan.md b/changelog.d/fixes/8826-fix.plan.md deleted file mode 100644 index 9549452e3c..0000000000 --- a/changelog.d/fixes/8826-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(cli): fall back to node:sqlite when better-sqlite3 constructor throws at runtime (#8826) \ No newline at end of file diff --git a/changelog.d/fixes/8830-fix.plan.md b/changelog.d/fixes/8830-fix.plan.md deleted file mode 100644 index 5cb0cf3c28..0000000000 --- a/changelog.d/fixes/8830-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(opencode): prefix provider id with "opencode-" for auth login command (#8830) \ No newline at end of file diff --git a/changelog.d/fixes/8841-fix.plan.md b/changelog.d/fixes/8841-fix.plan.md deleted file mode 100644 index 6eca00c5b6..0000000000 --- a/changelog.d/fixes/8841-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(opencode-zen): add current free-tier models to registry to enable combo context pre-filtering (#8841) diff --git a/changelog.d/fixes/8843-provider-media-body-limits.md b/changelog.d/fixes/8843-provider-media-body-limits.md deleted file mode 100644 index e90c5bab4d..0000000000 --- a/changelog.d/fixes/8843-provider-media-body-limits.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(api):** Let image and video providers enforce their own request-size limits instead of rejecting media payloads at OmniRoute's 10 MB global default ([#8843](https://github.com/diegosouzapw/OmniRoute/pull/8843)) — thanks @artickc diff --git a/changelog.d/fixes/8847-bun-prebuilds.md b/changelog.d/fixes/8847-bun-prebuilds.md deleted file mode 100644 index 2711dfa745..0000000000 --- a/changelog.d/fixes/8847-bun-prebuilds.md +++ /dev/null @@ -1 +0,0 @@ -- fix(build): include better-sqlite3 prebuilds in standalone bun bundle diff --git a/changelog.d/fixes/8853-fix.plan.md b/changelog.d/fixes/8853-fix.plan.md deleted file mode 100644 index e43b144916..0000000000 --- a/changelog.d/fixes/8853-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(proxy-health): include credentials in proxy health check URLs (#8853) \ No newline at end of file diff --git a/changelog.d/fixes/8858-win32-cmd-shim-einval.md b/changelog.d/fixes/8858-win32-cmd-shim-einval.md deleted file mode 100644 index 86ca5d1099..0000000000 --- a/changelog.d/fixes/8858-win32-cmd-shim-einval.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(build):** `prepublish` no longer spawns the Windows `.cmd` shims for npm/npx, which Node >= 20 refuses to launch without a shell (`EINVAL`). On Node 24 that silently skipped the MITM utilities, the MCP server bundle, the LLMLingua ONNX worker and `@omniroute/opencode-plugin` while `build:cli` still exited 0 and reported success. Build tools are now resolved to their own JS entry point and run with the current Node binary — no shim, no shell, no unescaped arguments. (thanks @maisdesign) diff --git a/changelog.d/fixes/8869-opencode-complete-model-limits.md b/changelog.d/fixes/8869-opencode-complete-model-limits.md deleted file mode 100644 index 9647ab8d39..0000000000 --- a/changelog.d/fixes/8869-opencode-complete-model-limits.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(opencode):** generate schema-complete model limits so OpenCode accepts catalog entries without an explicit output cap ([#8869](https://github.com/diegosouzapw/OmniRoute/pull/8869)) — thanks @xiaoyaner0201 diff --git a/changelog.d/fixes/8876-codex-responses-wire-default.md b/changelog.d/fixes/8876-codex-responses-wire-default.md deleted file mode 100644 index cca93603ff..0000000000 --- a/changelog.d/fixes/8876-codex-responses-wire-default.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(cli):** default omitted Codex CLI wire API settings to Responses and clear stale Chat state after reset ([#8876](https://github.com/diegosouzapw/OmniRoute/pull/8876)) — thanks @xiaoyaner0201 diff --git a/changelog.d/fixes/8883-proxy-credential-autofill.md b/changelog.d/fixes/8883-proxy-credential-autofill.md deleted file mode 100644 index 71d03dbe78..0000000000 --- a/changelog.d/fixes/8883-proxy-credential-autofill.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(proxy):** isolate new proxy credential fields from browser and password-manager autofill after form reset ([#8883](https://github.com/diegosouzapw/OmniRoute/pull/8883)) — thanks @xiaoyaner0201 diff --git a/changelog.d/fixes/8887-lkgp-connection-delete.md b/changelog.d/fixes/8887-lkgp-connection-delete.md deleted file mode 100644 index f00dbb655e..0000000000 --- a/changelog.d/fixes/8887-lkgp-connection-delete.md +++ /dev/null @@ -1 +0,0 @@ -- fix(db): invalidate stale LKGP pins when provider connections are deleted (#8887) diff --git a/changelog.d/fixes/8901-nightly-compat-stale-fixtures-and-goldens.md b/changelog.d/fixes/8901-nightly-compat-stale-fixtures-and-goldens.md deleted file mode 100644 index dcf494fd33..0000000000 --- a/changelog.d/fixes/8901-nightly-compat-stale-fixtures-and-goldens.md +++ /dev/null @@ -1 +0,0 @@ -- fix(tests): update stale nightly compat fixtures and goldens to match current source constants (#8901) diff --git a/changelog.d/fixes/8906-quota-pool-combo-cleanup.md b/changelog.d/fixes/8906-quota-pool-combo-cleanup.md deleted file mode 100644 index b244f8875d..0000000000 --- a/changelog.d/fixes/8906-quota-pool-combo-cleanup.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(quota):** Deleting a quota pool now removes its scoped managed combos without racing in-flight pool mutations ([#8906](https://github.com/diegosouzapw/OmniRoute/pull/8906)) — thanks @xiaoyaner0201 diff --git a/changelog.d/fixes/8909-vertex-claude-rawpredict-streaming.md b/changelog.d/fixes/8909-vertex-claude-rawpredict-streaming.md deleted file mode 100644 index e5e8f77086..0000000000 --- a/changelog.d/fixes/8909-vertex-claude-rawpredict-streaming.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(executors):** Vertex AI now routes Claude models through the native Anthropic `rawPredict` endpoint instead of the generic OpenAI-compatible partner endpoint, and synthesizes a real streaming response so Claude-via-Vertex works with `stream: true` ([#8909](https://github.com/diegosouzapw/OmniRoute/pull/8909)) — thanks @wgordon17 diff --git a/changelog.d/fixes/8921-codebuddy-cn-dual-auth-actions.md b/changelog.d/fixes/8921-codebuddy-cn-dual-auth-actions.md deleted file mode 100644 index 5e2ce88591..0000000000 --- a/changelog.d/fixes/8921-codebuddy-cn-dual-auth-actions.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(providers):** expose both OAuth Connect and manual API-key actions for dual-auth providers such as CodeBuddy CN ([#8921](https://github.com/diegosouzapw/OmniRoute/pull/8921)) — thanks @Llliao1113 diff --git a/changelog.d/fixes/8946-no-tool-output.md b/changelog.d/fixes/8946-no-tool-output.md deleted file mode 100644 index 9dd6ed3369..0000000000 --- a/changelog.d/fixes/8946-no-tool-output.md +++ /dev/null @@ -1 +0,0 @@ -- fix(compression): drop orphan custom_tool_call/local_shell_call/apply_patch_call on compaction restore (#8946) diff --git a/changelog.d/fixes/8950-fix.plan.md b/changelog.d/fixes/8950-fix.plan.md deleted file mode 100644 index a2214d6e47..0000000000 --- a/changelog.d/fixes/8950-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(auth): setting first dashboard login password no longer fails with HTTP 400 PASSWORD_REQUIRED (#8950) \ No newline at end of file diff --git a/changelog.d/fixes/8951-fix.plan.md b/changelog.d/fixes/8951-fix.plan.md deleted file mode 100644 index 9b3d32029b..0000000000 --- a/changelog.d/fixes/8951-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(github): add targetFormat to GPT-5.6 Sol/Terra/Luna models (#8951) diff --git a/changelog.d/fixes/8956-fix.plan.md b/changelog.d/fixes/8956-fix.plan.md deleted file mode 100644 index a5e4892c00..0000000000 --- a/changelog.d/fixes/8956-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(auto-update): skip synthetic Next.js standalone package.json without `name` field in resolveProjectRoot (#8956) \ No newline at end of file diff --git a/changelog.d/fixes/8960-fix.plan.md b/changelog.d/fixes/8960-fix.plan.md deleted file mode 100644 index 2dca8c7069..0000000000 --- a/changelog.d/fixes/8960-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(opencode): propagate vision capability from live catalog into opencode.json (#8960) diff --git a/changelog.d/fixes/8965-fix.plan.md b/changelog.d/fixes/8965-fix.plan.md deleted file mode 100644 index d557cd7027..0000000000 --- a/changelog.d/fixes/8965-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(providers): switch Antigravity quota RPCs to iterate ANTIGRAVITY_RUNTIME_BASE_URLS (#8965) \ No newline at end of file diff --git a/changelog.d/fixes/8971-fix.plan.md b/changelog.d/fixes/8971-fix.plan.md deleted file mode 100644 index b4f0183830..0000000000 --- a/changelog.d/fixes/8971-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(providers): copilot-m365-web enterprise turns send disconnectBehavior=continue (#8971) diff --git a/changelog.d/fixes/8985-release-tooling-hidden-work.md b/changelog.d/fixes/8985-release-tooling-hidden-work.md deleted file mode 100644 index 8f6aca73ce..0000000000 --- a/changelog.d/fixes/8985-release-tooling-hidden-work.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(ci):** the reconciliation helper no longer bounds its scan with `git describe --tags` — releases squash-merge, so that range re-listed 1361 commits instead of the cycle's real 22, which is how ~200 PRs once slipped through without a changelog bullet. The base is now resolved from the commit that opened the cycle, and a new `sweep:stale-fragments` gate removes `changelog.d/` fragments that a back-merge from `main` resurrected after they had already been folded in ([#8985](https://github.com/diegosouzapw/OmniRoute/pull/8985)) diff --git a/changelog.d/fixes/8988-mac-updater-manifest-and-runner-split.md b/changelog.d/fixes/8988-mac-updater-manifest-and-runner-split.md deleted file mode 100644 index c749f2ed76..0000000000 --- a/changelog.d/fixes/8988-mac-updater-manifest-and-runner-split.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(ci):** fixed a live auto-update defect where **Intel Macs downloaded the ARM dmg** — the two macOS jobs each emitted their own `latest-mac.yml` and `merge-multiple` let one silently overwrite the other by arrival order, leaving `electron-updater`'s arch fallback pointing at the wrong build. The manifests are now merged deliberately, un-suffixed entry first. Also: test jobs pinned to hosted runners (`setup-node` measured 20m06s self-hosted vs 16s hosted), the npm publish no longer discards a valid build artifact because an unrelated shard was flaky, the agent-skills gate now runs on pushes to `main` instead of PRs only, and the CI summary names every job that ended cancelled ([#8988](https://github.com/diegosouzapw/OmniRoute/pull/8988)) diff --git a/changelog.d/fixes/8990-preserve-tools-response-completed.md b/changelog.d/fixes/8990-preserve-tools-response-completed.md deleted file mode 100644 index 50ce426422..0000000000 --- a/changelog.d/fixes/8990-preserve-tools-response-completed.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(sse):** `stripResponsesLifecycleEcho` no longer strips `tools` from the `response.completed` snapshot — that terminal event is what Codex CLI rebuilds its tool list from, so stripping it left the client with zero tools. `tools` is still stripped from `response.created`/`response.in_progress`, and `instructions` (the >100KB size lever) is still stripped from all three ([#8990](https://github.com/diegosouzapw/OmniRoute/pull/8990)) diff --git a/changelog.d/fixes/8994-vertex-partner-claude.md b/changelog.d/fixes/8994-vertex-partner-claude.md deleted file mode 100644 index 4e673ffc4b..0000000000 --- a/changelog.d/fixes/8994-vertex-partner-claude.md +++ /dev/null @@ -1 +0,0 @@ -- fix(vertex): route Claude models to native rawPredict endpoint and respect custom targetFormat overrides (#8994) diff --git a/changelog.d/fixes/8995-fix.plan.md b/changelog.d/fixes/8995-fix.plan.md deleted file mode 100644 index 5ce1ddc6a2..0000000000 --- a/changelog.d/fixes/8995-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(proxies): resolveProxyForConnection now returns the proxy name, so the dashboard badge shows the name instead of the hostname (#8995) diff --git a/changelog.d/fixes/8997-gpt56-max-reasoning.plan.md b/changelog.d/fixes/8997-gpt56-max-reasoning.plan.md deleted file mode 100644 index 233441d5d8..0000000000 --- a/changelog.d/fixes/8997-gpt56-max-reasoning.plan.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(translator):** the Responses-to-Chat promotion path called `normalizeResponsesReasoningEffort` without the model argument, so GPT-5.6 Sol/Terra/Luna requests with `reasoning.effort: "max""` were downgraded to `"xhigh"`. The model is now threaded through, preserving `max` for GPT-5.6 while keeping the legacy downgrade for older models ([#8997](https://github.com/diegosouzapw/OmniRoute/pull/8997)) \ No newline at end of file diff --git a/changelog.d/fixes/9006-vertex-claude-catalog-dispatch.md b/changelog.d/fixes/9006-vertex-claude-catalog-dispatch.md deleted file mode 100644 index 4d8f103361..0000000000 --- a/changelog.d/fixes/9006-vertex-claude-catalog-dispatch.md +++ /dev/null @@ -1,14 +0,0 @@ -- **fix(sse):** Claude reasoning-effort suffix ids (`-high`/`-low`/`-medium`/`-xhigh`) now strip - correctly on any provider serving a real Claude model, not just the direct Anthropic provider - ([#9006](https://github.com/diegosouzapw/OmniRoute/pull/9006)) -- **fix(sse):** the no-thinking (`no-think/`) catalog variant's provider-qualification bug — which - made it unusable outside the direct provider, both in the discovery catalog and the dashboard - playground — is fixed ([#9006](https://github.com/diegosouzapw/OmniRoute/pull/9006)) -- **fix(sse):** a single unrecognized model id on a Vertex connection no longer cools down every - other model on that connection for 2 minutes — Vertex 404s are now scoped to a per-model - lockout via `passthroughModels` instead of a connection-wide cooldown - ([#9006](https://github.com/diegosouzapw/OmniRoute/pull/9006)) -- **fix(sse):** Vertex `PERMISSION_DENIED` 403s are now disambiguated using Google's own - documented error format — a genuinely connection-wide cause (API disabled, project-level IAM - denial) still cools the whole connection, while a model-specific denial locks out only that - model ([#9006](https://github.com/diegosouzapw/OmniRoute/pull/9006)) diff --git a/changelog.d/fixes/9022-stream-error-diagnostic.md b/changelog.d/fixes/9022-stream-error-diagnostic.md deleted file mode 100644 index 041b27769a..0000000000 --- a/changelog.d/fixes/9022-stream-error-diagnostic.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(sse):** error-only streams now preserve sanitized executor diagnostics for operators without changing stream-readiness fallback classification ([#9022](https://github.com/diegosouzapw/OmniRoute/pull/9022)) — thanks @shixi-li diff --git a/changelog.d/fixes/9029-cursor-narration.md b/changelog.d/fixes/9029-cursor-narration.md deleted file mode 100644 index 852f75f192..0000000000 --- a/changelog.d/fixes/9029-cursor-narration.md +++ /dev/null @@ -1 +0,0 @@ -- fix(cursor): preserve tool context across multi-turn conversations when client lacks conversation_id (#9029) diff --git a/changelog.d/fixes/9030-antigravity-system-429s.md b/changelog.d/fixes/9030-antigravity-system-429s.md deleted file mode 100644 index da2ebecece..0000000000 --- a/changelog.d/fixes/9030-antigravity-system-429s.md +++ /dev/null @@ -1 +0,0 @@ -- fix(sse): move Antigravity client system content to first user message to avoid upstream 429 RESOURCE_EXHAUSTED on oversized systemInstruction (#9030) diff --git a/changelog.d/fixes/9033-fix.plan.md b/changelog.d/fixes/9033-fix.plan.md deleted file mode 100644 index b5d8a37ca3..0000000000 --- a/changelog.d/fixes/9033-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(auth): IP blacklist now blocks on direct connections via trusted peer stamp and re-reads config without restart (#9033) diff --git a/changelog.d/fixes/9034-fix.plan.md b/changelog.d/fixes/9034-fix.plan.md deleted file mode 100644 index 49fa4b744d..0000000000 --- a/changelog.d/fixes/9034-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(api): use configured prefix instead of raw node UUID for alias-backed model id in /v1/models (#9034) diff --git a/changelog.d/fixes/9041-rate-limit-idle-capacity-wedge.md b/changelog.d/fixes/9041-rate-limit-idle-capacity-wedge.md deleted file mode 100644 index cfb180cabd..0000000000 --- a/changelog.d/fixes/9041-rate-limit-idle-capacity-wedge.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(resilience):** Detect and reset idle-capacity rate-limit queue wedges on an eligible watchdog scan so routing can fall back promptly ([#9041](https://github.com/diegosouzapw/OmniRoute/pull/9041)) diff --git a/changelog.d/fixes/9045-fix.plan.md b/changelog.d/fixes/9045-fix.plan.md deleted file mode 100644 index 6065f9a181..0000000000 --- a/changelog.d/fixes/9045-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(db): stream DB backup export instead of buffering entire file into memory (#9045) \ No newline at end of file diff --git a/changelog.d/fixes/9046-fix.md b/changelog.d/fixes/9046-fix.md deleted file mode 100644 index e80cc7b528..0000000000 --- a/changelog.d/fixes/9046-fix.md +++ /dev/null @@ -1 +0,0 @@ -- fix(ui): normalize Free Pool API response payload to read from data.proxies (#9046) \ No newline at end of file diff --git a/changelog.d/fixes/9053-claude-to-openai-max-passthrough.md b/changelog.d/fixes/9053-claude-to-openai-max-passthrough.md deleted file mode 100644 index 86dac223ba..0000000000 --- a/changelog.d/fixes/9053-claude-to-openai-max-passthrough.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(translator):** pass `output_config.effort="max"` through verbatim instead of unconditionally rewriting it to `xhigh`, so Anthropic → OpenAI-shape upstream calls reach `sanitizeReasoningEffortForProvider` with the carrier intact and providers that accept `max` literally (Ollama Cloud, opencode-go DeepSeek, Moonshot K3, native Claude) no longer 400 on `invalid reasoning value: 'xhigh'`. Regression guard: end-to-end test in `tests/unit/base-executor-sanitize-effort.test.ts`. diff --git a/changelog.d/fixes/9054-fix.plan.md b/changelog.d/fixes/9054-fix.plan.md deleted file mode 100644 index 2efd3cf8f4..0000000000 --- a/changelog.d/fixes/9054-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(api/analytics): stop charging :free models at arbitrary fallback price (#9054) diff --git a/changelog.d/fixes/9057-fix.plan.md b/changelog.d/fixes/9057-fix.plan.md deleted file mode 100644 index e20f273385..0000000000 --- a/changelog.d/fixes/9057-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(api): auto/* routing aliases bypass API-key allowedConnections/disableNonPublicModels (#9057) diff --git a/changelog.d/fixes/9064-fix-anthropic-code-execution-skills-beta.plan.md b/changelog.d/fixes/9064-fix-anthropic-code-execution-skills-beta.plan.md deleted file mode 100644 index 3c81c75460..0000000000 --- a/changelog.d/fixes/9064-fix-anthropic-code-execution-skills-beta.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(providers): anthropic strips code-execution/skills beta flag, causing container rejection (#9064) \ No newline at end of file diff --git a/changelog.d/fixes/9073-batches-list-limit-validation.md b/changelog.d/fixes/9073-batches-list-limit-validation.md deleted file mode 100644 index 18f5538f82..0000000000 --- a/changelog.d/fixes/9073-batches-list-limit-validation.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(batches):** `GET /v1/batches` now validates the `limit` query param instead of passing `Number.parseInt(limit)` straight to the SQLite `LIMIT` bind. Previously `?limit=abc` threw an unhandled `datatype mismatch` (→ HTTP 500), `?limit=-1`/`0` returned an incoherent `has_more:true` empty page with `last_id:null`, and a large `?limit` read the entire `batches` table into memory. It now returns a `400` for any non-integer or out-of-range value (1–100, default 20), matching the `POST` handler's Zod validation and the OpenAI Batches contract ([#9073](https://github.com/diegosouzapw/OmniRoute/pull/9073)) diff --git a/changelog.d/fixes/9083-a2a-auth-timing-safe.md b/changelog.d/fixes/9083-a2a-auth-timing-safe.md deleted file mode 100644 index c5a64776c1..0000000000 --- a/changelog.d/fixes/9083-a2a-auth-timing-safe.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(a2a):** the A2A JSON-RPC router now compares the bearer token against `OMNIROUTE_API_KEY` in constant time (`crypto.timingSafeEqual`) instead of `===`, closing a token-length timing side-channel, and no longer logs the request URL to server logs on every call ([#9083](https://github.com/diegosouzapw/OmniRoute/pull/9083)) diff --git a/changelog.d/fixes/9088-skills-routes-error-sanitization.md b/changelog.d/fixes/9088-skills-routes-error-sanitization.md deleted file mode 100644 index 7962220e6c..0000000000 --- a/changelog.d/fixes/9088-skills-routes-error-sanitization.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(api/skills):** the `/api/skills/**` routes now run caught error messages through `sanitizeErrorMessage` before returning them, so a filesystem failure no longer leaks an absolute path (e.g. `/home//.omniroute/skills/...`) to the client; the `{ error: string }` response shape is preserved for the dashboard ([#9088](https://github.com/diegosouzapw/OmniRoute/pull/9088)) diff --git a/changelog.d/fixes/9096-fix-audio-speech-transcriptions-translations-provider-nodes.plan.md b/changelog.d/fixes/9096-fix-audio-speech-transcriptions-translations-provider-nodes.plan.md deleted file mode 100644 index 10f7268184..0000000000 --- a/changelog.d/fixes/9096-fix-audio-speech-transcriptions-translations-provider-nodes.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(providers): admit audio-speech/audio-transcriptions apiType in audio route provider-node filters (#9096) \ No newline at end of file diff --git a/changelog.d/fixes/9102-fix.plan.md b/changelog.d/fixes/9102-fix.plan.md deleted file mode 100644 index bfbfed5c22..0000000000 --- a/changelog.d/fixes/9102-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(providers): modal.com validation returns clear error when Base URL is missing, instead of leaking "Invalid outbound URL" (#9102) \ No newline at end of file diff --git a/changelog.d/fixes/9103-remove-retired-copilot-gemini-models.md b/changelog.d/fixes/9103-remove-retired-copilot-gemini-models.md deleted file mode 100644 index 73087690c4..0000000000 --- a/changelog.d/fixes/9103-remove-retired-copilot-gemini-models.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(providers):** GitHub Copilot no longer re-imports or routes cached Gemini 2.5 Pro and Gemini 3 Flash model IDs after their retirement ([#9103](https://github.com/diegosouzapw/OmniRoute/pull/9103)) diff --git a/changelog.d/fixes/9134-fix.plan.md b/changelog.d/fixes/9134-fix.plan.md deleted file mode 100644 index acf04acb1c..0000000000 --- a/changelog.d/fixes/9134-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(providers): resolve combo names in audio transcriptions route so /v1/models stays honest (#9134) diff --git a/changelog.d/fixes/9140-fix.plan.md b/changelog.d/fixes/9140-fix.plan.md deleted file mode 100644 index 5ab7425cf6..0000000000 --- a/changelog.d/fixes/9140-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(vscode): allow built-in auto-routing models in VS Code model filter (#9140) \ No newline at end of file diff --git a/changelog.d/fixes/9142-fix.plan.md b/changelog.d/fixes/9142-fix.plan.md deleted file mode 100644 index aecf251f9e..0000000000 --- a/changelog.d/fixes/9142-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(background): detect Anthropic top-level system prompts for background task detection (#9142) diff --git a/changelog.d/fixes/9149-autosync-per-connection.md b/changelog.d/fixes/9149-autosync-per-connection.md deleted file mode 100644 index 90774b7825..0000000000 --- a/changelog.d/fixes/9149-autosync-per-connection.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(dashboard):** the provider "Auto Sync" toggle now applies to every active connection and each connection gets its own Auto Sync toggle — previously only the lowest-priority connection was updated. ([#9149](https://github.com/diegosouzapw/OmniRoute/pull/9149)) diff --git a/changelog.d/fixes/9156-macos-autostart-execpath.md b/changelog.d/fixes/9156-macos-autostart-execpath.md deleted file mode 100644 index 8e5ab4b184..0000000000 --- a/changelog.d/fixes/9156-macos-autostart-execpath.md +++ /dev/null @@ -1 +0,0 @@ -- fix(cli): use process.execPath for macOS launchd autostart diff --git a/changelog.d/fixes/9159-fix.plan.md b/changelog.d/fixes/9159-fix.plan.md deleted file mode 100644 index 22d84fba2a..0000000000 --- a/changelog.d/fixes/9159-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(management): authorize mcp:connect-only keys on loopback/LAN when requireLogin is enabled (#9159) \ No newline at end of file diff --git a/changelog.d/fixes/9160-fix.plan.md b/changelog.d/fixes/9160-fix.plan.md deleted file mode 100644 index d6ad2b567c..0000000000 --- a/changelog.d/fixes/9160-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(model-discovery): ingest capabilities.effort_tiers for synced models (#9160) diff --git a/changelog.d/fixes/9161-codex-responses-chat-targets.md b/changelog.d/fixes/9161-codex-responses-chat-targets.md deleted file mode 100644 index 2fff43b6e8..0000000000 --- a/changelog.d/fixes/9161-codex-responses-chat-targets.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(translator):** Honor configured Chat targets for Responses-shaped clients while preserving native Responses providers and outbound token fields ([#9161](https://github.com/diegosouzapw/OmniRoute/pull/9161)) — thanks @Zartharas diff --git a/changelog.d/fixes/9168-streamed-responses-tool-null.plan.md b/changelog.d/fixes/9168-streamed-responses-tool-null.plan.md deleted file mode 100644 index d847e0af94..0000000000 --- a/changelog.d/fixes/9168-streamed-responses-tool-null.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(translator): buffer and normalize upstream tool-call argument deltas so optional null values are stripped before reaching the client (#9168) diff --git a/changelog.d/fixes/9173-cursor-manual-refresh-502.md b/changelog.d/fixes/9173-cursor-manual-refresh-502.md deleted file mode 100644 index 0a2244e0f8..0000000000 --- a/changelog.d/fixes/9173-cursor-manual-refresh-502.md +++ /dev/null @@ -1 +0,0 @@ -- fix(cursor): the manual "Refresh" button on Cursor connections now calls the dedicated Cursor renewal route instead of silently returning a 502 every time (#9173) diff --git a/changelog.d/fixes/9177-fix.plan.md b/changelog.d/fixes/9177-fix.plan.md deleted file mode 100644 index 49ea75e012..0000000000 --- a/changelog.d/fixes/9177-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(translator): avoid double-normalizing tool names in Gemini-to-Claude response path (#9177) diff --git a/changelog.d/fixes/9179-default-model-editable.md b/changelog.d/fixes/9179-default-model-editable.md deleted file mode 100644 index dd607d91ba..0000000000 --- a/changelog.d/fixes/9179-default-model-editable.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(dashboard):** the "Default Model" of an OpenAI-compatible connection is now visible and editable after creation (was set once, then invisible), and it is no longer required when creating a connection — matching the API which always treated it as optional. ([#9179](https://github.com/diegosouzapw/OmniRoute/pull/9179)) diff --git a/changelog.d/fixes/9187-enable-request-logs.md b/changelog.d/fixes/9187-enable-request-logs.md deleted file mode 100644 index 9ba8a3ca87..0000000000 --- a/changelog.d/fixes/9187-enable-request-logs.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(db):** honor the `ENABLE_REQUEST_LOGS` environment override for detailed request persistence. (thanks @RobertsXML) diff --git a/changelog.d/fixes/9193-context-window-suffix.md b/changelog.d/fixes/9193-context-window-suffix.md deleted file mode 100644 index 3cd229937d..0000000000 --- a/changelog.d/fixes/9193-context-window-suffix.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(model):** normalize client context-window suffixes for combo routing. (thanks @b1nhm1nh) diff --git a/changelog.d/fixes/9195-fix.plan.md b/changelog.d/fixes/9195-fix.plan.md deleted file mode 100644 index 966b51cad7..0000000000 --- a/changelog.d/fixes/9195-fix.plan.md +++ /dev/null @@ -1,2 +0,0 @@ -- fix(catalog): repair dead guard and synced-first ordering for custom model Vision capable override (#9195) -- fix(routing): consult customModels supportsVision flag in Combo vision filter (#9195) diff --git a/changelog.d/fixes/9199-model-catalog-affinity.md b/changelog.d/fixes/9199-model-catalog-affinity.md deleted file mode 100644 index aafc42a8bf..0000000000 --- a/changelog.d/fixes/9199-model-catalog-affinity.md +++ /dev/null @@ -1,4 +0,0 @@ -- **fix(models):** Preserve published model catalogs during session-affinity bookkeeping so routine affinity updates do not force unnecessary cold rebuilds ([#9199](https://github.com/diegosouzapw/OmniRoute/pull/9199)) — thanks @xz-dev -- **fix(models):** Reuse one build-local virtual-auto candidate snapshot across built-in catalog entries and cooperatively yield during cold catalog generation, while detaching invalidated in-flight generations so policy changes cannot publish stale results ([#9199](https://github.com/diegosouzapw/OmniRoute/pull/9199)) — thanks @xz-dev -- **fix(models):** Resolve token limits and model capabilities once per unique candidate in that build-local snapshot, eliminating repeated SQLite lookups across the 38 built-in auto entries while preserving fresh runtime preparation and hard invalidation ([#9199](https://github.com/diegosouzapw/OmniRoute/pull/9199)) — thanks @xz-dev -- **fix(models):** Read and parse models.dev pricing once per cold catalog build, then yield before final enrichment so queued health checks are not starved while every model in that build shares one coherent pricing snapshot ([#9199](https://github.com/diegosouzapw/OmniRoute/pull/9199)) — thanks @xz-dev diff --git a/changelog.d/fixes/9200-compression-off-reactive-compaction.md b/changelog.d/fixes/9200-compression-off-reactive-compaction.md deleted file mode 100644 index e4fefaf0f4..0000000000 --- a/changelog.d/fixes/9200-compression-off-reactive-compaction.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(compression):** honor the global compression-off setting for proactive and last-resort context compaction, preventing disabled compression from rewriting tool-call histories ([#9200](https://github.com/diegosouzapw/OmniRoute/pull/9200)) — thanks @joachimBrindeau diff --git a/changelog.d/fixes/9201-web-search-proxy-bind.plan.md b/changelog.d/fixes/9201-web-search-proxy-bind.plan.md deleted file mode 100644 index 67a72dd64f..0000000000 --- a/changelog.d/fixes/9201-web-search-proxy-bind.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(web-search): bind each search provider attempt to its connection proxy (#9201) \ No newline at end of file diff --git a/changelog.d/fixes/9204-fix.plan.md b/changelog.d/fixes/9204-fix.plan.md deleted file mode 100644 index 21981ed128..0000000000 --- a/changelog.d/fixes/9204-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(auth): make antigravity and agy equivalent in credential selection (#9204) diff --git a/changelog.d/fixes/9209-cli-ipv4-first-dns.md b/changelog.d/fixes/9209-cli-ipv4-first-dns.md deleted file mode 100644 index b0e602eed6..0000000000 --- a/changelog.d/fixes/9209-cli-ipv4-first-dns.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(cli):** prefer IPv4 DNS for spawned Node servers. (thanks @dsitmilis) diff --git a/changelog.d/fixes/9212-reasoning-cost-double-billing.md b/changelog.d/fixes/9212-reasoning-cost-double-billing.md deleted file mode 100644 index 3c16a3ae8b..0000000000 --- a/changelog.d/fixes/9212-reasoning-cost-double-billing.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(pricing):** stop billing reasoning tokens twice. (thanks @yidecode) diff --git a/changelog.d/fixes/9218-combo-picker-hidden-models.md b/changelog.d/fixes/9218-combo-picker-hidden-models.md deleted file mode 100644 index aa8270fd40..0000000000 --- a/changelog.d/fixes/9218-combo-picker-hidden-models.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(combo):** the Combo "Add model" picker now respects hidden-model visibility for every model source — system catalog, fallback, passthrough/node aliases, custom rows and auto-fetched models — instead of drowning the list in 500+ unavailable entries ([#9218](https://github.com/diegosouzapw/OmniRoute/pull/9218)) — thanks @szzhoujiarui diff --git a/changelog.d/fixes/9219-codex-additional-tools-normalization.md b/changelog.d/fixes/9219-codex-additional-tools-normalization.md deleted file mode 100644 index 02ee481136..0000000000 --- a/changelog.d/fixes/9219-codex-additional-tools-normalization.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(codex):** normalize additional_tools passthrough items. (thanks @SalyyS1) diff --git a/changelog.d/fixes/9222-codex-quota-window-duration.md b/changelog.d/fixes/9222-codex-quota-window-duration.md deleted file mode 100644 index 2f2e7dd2b7..0000000000 --- a/changelog.d/fixes/9222-codex-quota-window-duration.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(codex):** preserve quota window duration in usage shape. (thanks @HectorBernstorff) diff --git a/changelog.d/fixes/9223-azure-gpt5-chat-parameters.md b/changelog.d/fixes/9223-azure-gpt5-chat-parameters.md deleted file mode 100644 index 6f4bb43afb..0000000000 --- a/changelog.d/fixes/9223-azure-gpt5-chat-parameters.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(azure):** normalize GPT-5 chat completion parameters. (thanks @royanrosyad85) diff --git a/changelog.d/fixes/9228-codex-orphaned-tool-outputs.md b/changelog.d/fixes/9228-codex-orphaned-tool-outputs.md deleted file mode 100644 index 46897c0a4f..0000000000 --- a/changelog.d/fixes/9228-codex-orphaned-tool-outputs.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(codex):** strip orphaned tool outputs from compacted conversations. (thanks @raflyazf) diff --git a/changelog.d/fixes/9235-french-ui-catalog.md b/changelog.d/fixes/9235-french-ui-catalog.md deleted file mode 100644 index 77731166ac..0000000000 --- a/changelog.d/fixes/9235-french-ui-catalog.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(i18n):** completed the French UI catalog by adding all missing keys and replacing every placeholder translation ([#9235](https://github.com/diegosouzapw/OmniRoute/pull/9235)) — thanks @alex-jordan547 diff --git a/changelog.d/fixes/9236-nvidia-tool-compatibility.md b/changelog.d/fixes/9236-nvidia-tool-compatibility.md deleted file mode 100644 index b97bd98faf..0000000000 --- a/changelog.d/fixes/9236-nvidia-tool-compatibility.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(nvidia):** normalize tool names and call ids for NVIDIA compatibility. (thanks @minhnhat166) diff --git a/changelog.d/fixes/9237-fix.plan.md b/changelog.d/fixes/9237-fix.plan.md deleted file mode 100644 index fde574eb17..0000000000 --- a/changelog.d/fixes/9237-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(lmarena): emit Uint8Array SSE chunks instead of strings to satisfy shared pipeline contract (#9237) \ No newline at end of file diff --git a/changelog.d/fixes/9241-registered-keys-window-reset.md b/changelog.d/fixes/9241-registered-keys-window-reset.md deleted file mode 100644 index deeb1e4baa..0000000000 --- a/changelog.d/fixes/9241-registered-keys-window-reset.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(db):** `validateRegisteredKey` no longer rejects the first request of a fresh budget window when the previous window's usage already met the daily/hourly budget — the reset `UPDATE` zeroed the counters in the DB but the budget check still read the stale pre-reset snapshot, so the reset is now mirrored into the row before checking ([#9241](https://github.com/diegosouzapw/OmniRoute/pull/9241)) diff --git a/changelog.d/fixes/9245-hardcoded-web-ui-i18n.md b/changelog.d/fixes/9245-hardcoded-web-ui-i18n.md deleted file mode 100644 index a2c0157189..0000000000 --- a/changelog.d/fixes/9245-hardcoded-web-ui-i18n.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(i18n):** localized hardcoded web UI copy across public pages, dashboard views, and shared components, with complete French and Vietnamese coverage ([#9245](https://github.com/diegosouzapw/OmniRoute/pull/9245)) — thanks @alex-jordan547 diff --git a/changelog.d/fixes/9246-purge-orphan-proxy-assignments.md b/changelog.d/fixes/9246-purge-orphan-proxy-assignments.md deleted file mode 100644 index ee460f8ca4..0000000000 --- a/changelog.d/fixes/9246-purge-orphan-proxy-assignments.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(db):** deleting a provider connection (single, batch, or provider-scoped) now purges its account-scoped `proxy_assignments` rows inside an atomic transaction — no more orphan assignments pointing at deleted connections ([#9246](https://github.com/diegosouzapw/OmniRoute/pull/9246)) — thanks @maxmad64bis diff --git a/changelog.d/fixes/9250-cli-compatible-provider-apply.md b/changelog.d/fixes/9250-cli-compatible-provider-apply.md deleted file mode 100644 index e245077f66..0000000000 --- a/changelog.d/fixes/9250-cli-compatible-provider-apply.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(cli-tools):** keep Apply enabled for active OpenAI-compatible and Anthropic-compatible providers without static catalog entries. (thanks @lazysaltyfish) diff --git a/changelog.d/fixes/9253-translator-format-detection-2949.md b/changelog.d/fixes/9253-translator-format-detection-2949.md deleted file mode 100644 index cec3893832..0000000000 --- a/changelog.d/fixes/9253-translator-format-detection-2949.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(translator):** harden Claude format detection for relative message endpoints and kebab-case version metadata. (thanks @ervareza) diff --git a/changelog.d/fixes/9256-minimax-thinking-signature.md b/changelog.d/fixes/9256-minimax-thinking-signature.md deleted file mode 100644 index d25edee6f0..0000000000 --- a/changelog.d/fixes/9256-minimax-thinking-signature.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(minimax):** add the required empty signature placeholder to unsigned thinking block starts. (thanks @rixzkiye) diff --git a/changelog.d/fixes/9259-rolling-rpm-leases.md b/changelog.d/fixes/9259-rolling-rpm-leases.md deleted file mode 100644 index a20f6c4367..0000000000 --- a/changelog.d/fixes/9259-rolling-rpm-leases.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(resilience):** Enforce RPM limits with rolling leases and atomic global/provider/account admission ([#9259](https://github.com/diegosouzapw/OmniRoute/pull/9259)). The configured global RPM budget is shared across all enabled provider connections within one process; provider/account overrides add narrower scopes. diff --git a/changelog.d/fixes/9269-fix.plan.md b/changelog.d/fixes/9269-fix.plan.md deleted file mode 100644 index 147c32be70..0000000000 --- a/changelog.d/fixes/9269-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(classify429):** add missing `have exhausted their quota` pattern so the synthetic 429 from auth.ts is recognized as quota exhaustion, preventing the combo loop from burning retries against the same provider instead of falling back to a healthy one ([#9269](https://github.com/diegosouzapw/OmniRoute/issues/9269)) diff --git a/changelog.d/fixes/9276-fix.plan.md b/changelog.d/fixes/9276-fix.plan.md deleted file mode 100644 index 4ad84fe574..0000000000 --- a/changelog.d/fixes/9276-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(claude): remove unconditional "always" return in claudeClassifierCompat so normal chat requests are not swallowed (#9276) \ No newline at end of file diff --git a/changelog.d/fixes/9277-fix.plan.md b/changelog.d/fixes/9277-fix.plan.md deleted file mode 100644 index b161675e43..0000000000 --- a/changelog.d/fixes/9277-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(qoder): include actionable CLI_QODER_BIN hint in connection test when qodercli is not found (#9277) \ No newline at end of file diff --git a/changelog.d/fixes/9279-fix.plan.md b/changelog.d/fixes/9279-fix.plan.md deleted file mode 100644 index 5dbc10c5f4..0000000000 --- a/changelog.d/fixes/9279-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(providers):** the web search fallback detector in `webSearchFallback.ts` used an exact `Set` (`web_search`, `web_search_preview`) that missed Anthropic's date-suffixed server-tool variant `web_search_20250305` (sent by Claude Code 2.1.220+). Changed to prefix regex `/^web_search/`, matching the two other detectors in the codebase, so the fallback intercepts versioned web search tools for OpenAI-compatible upstreams ([#9279](https://github.com/diegosouzapw/OmniRoute/pull/9279)) diff --git a/changelog.d/fixes/9286-redis-loopback-bind.md b/changelog.d/fixes/9286-redis-loopback-bind.md deleted file mode 100644 index dbd6448bf5..0000000000 --- a/changelog.d/fixes/9286-redis-loopback-bind.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(docker):** the bundled Redis sidecar no longer publishes on `0.0.0.0`. `docker-compose.yml`, `omniroute redis up` and the dashboard's 1-click launcher all built an unqualified `-p :6379` spec, which the container runtime expands to every interface — and none of them sets `requirepass`, so any host on the LAN could reach the rate-limiter/cache store. All three now default to `127.0.0.1`, with exposure opt-in via `REDIS_BIND_HOST` (compose), `--bind` (CLI) and `OMNIROUTE_REDIS_BIND_HOST` (launcher); the CLI warns when a non-loopback bind is requested without `--password` ([#9286](https://github.com/diegosouzapw/OmniRoute/pull/9286)) diff --git a/changelog.d/fixes/9289-fix.plan.md b/changelog.d/fixes/9289-fix.plan.md deleted file mode 100644 index 284df06aec..0000000000 --- a/changelog.d/fixes/9289-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(credential-health): scheduler never retries failed connections due to static interval comparison (#9289) diff --git a/changelog.d/fixes/9291-proxy-logs-egress-ip.md b/changelog.d/fixes/9291-proxy-logs-egress-ip.md deleted file mode 100644 index 11e6b18f08..0000000000 --- a/changelog.d/fixes/9291-proxy-logs-egress-ip.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(db):** persist the account egress IP into `proxy_logs.egress_ip` (migration 134 + schema reconciler) so real traffic stays attributable to the actual node/IP even after restart — the egress IP was previously computed and logged but silently dropped from persistence ([#9291](https://github.com/diegosouzapw/OmniRoute/pull/9291)) — thanks @maxmad64bis diff --git a/changelog.d/fixes/9293-fix.plan.md b/changelog.d/fixes/9293-fix.plan.md deleted file mode 100644 index 96e6f6727a..0000000000 --- a/changelog.d/fixes/9293-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(api): specialty model catalog ignores hidden OpenRouter model flags (#9293) \ No newline at end of file diff --git a/changelog.d/fixes/9297-fix.plan.md b/changelog.d/fixes/9297-fix.plan.md deleted file mode 100644 index 67679de6ee..0000000000 --- a/changelog.d/fixes/9297-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(mcp): break circular import between googApiKeyAuth.ts and auth.ts to fix esbuild SyntaxError in MCP server bundle (#9297) diff --git a/changelog.d/fixes/9300-fix.plan.md b/changelog.d/fixes/9300-fix.plan.md deleted file mode 100644 index c83558b707..0000000000 --- a/changelog.d/fixes/9300-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(catalog): cache getModelsDevPricing() to prevent OOM at startup (#9300) \ No newline at end of file diff --git a/changelog.d/fixes/9304-fix.plan.md b/changelog.d/fixes/9304-fix.plan.md deleted file mode 100644 index ad7e0b0ecb..0000000000 --- a/changelog.d/fixes/9304-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(providers): bump qwen-web SPA version header from 0.2.66 to 0.2.81 (#9304) diff --git a/changelog.d/fixes/9305-fix.plan.md b/changelog.d/fixes/9305-fix.plan.md deleted file mode 100644 index 1db4b82b32..0000000000 --- a/changelog.d/fixes/9305-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(sse): broaden OMNIROUTE_SSE_COMMENTS to accept 'false','0','no' and gate metadata comment emission (#9305) diff --git a/changelog.d/fixes/9306-fix.plan.md b/changelog.d/fixes/9306-fix.plan.md deleted file mode 100644 index 3e76a384b0..0000000000 --- a/changelog.d/fixes/9306-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(lmarena): encode SSE stream chunks as Uint8Array to prevent TextDecoder TypeError (#9306) diff --git a/changelog.d/fixes/9308-claude-tool-result-pairing.md b/changelog.d/fixes/9308-claude-tool-result-pairing.md deleted file mode 100644 index 9e6bee8aa9..0000000000 --- a/changelog.d/fixes/9308-claude-tool-result-pairing.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(claude):** reconcile compacted tool results against the preceding tool use. (thanks @ryanngit) diff --git a/changelog.d/fixes/9314-kiro-nested-tool-call-validation.md b/changelog.d/fixes/9314-kiro-nested-tool-call-validation.md deleted file mode 100644 index 22c6ef5665..0000000000 --- a/changelog.d/fixes/9314-kiro-nested-tool-call-validation.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(kiro):** validate completed nested tool-call payloads before forwarding them. (thanks @SemonCat) diff --git a/changelog.d/fixes/9315-fix.plan.md b/changelog.d/fixes/9315-fix.plan.md deleted file mode 100644 index 31fcc09f78..0000000000 --- a/changelog.d/fixes/9315-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(backend): use accumulated responseBody for provider payload in dashboard log viewer to avoid stale data from truncated SSE events (#9315) \ No newline at end of file diff --git a/changelog.d/fixes/9319-fix.plan.md b/changelog.d/fixes/9319-fix.plan.md deleted file mode 100644 index dc5f04e762..0000000000 --- a/changelog.d/fixes/9319-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(qoder): surface qodercli stderr in error message instead of generic 502 (#9319) diff --git a/changelog.d/fixes/9320-fix.plan.md b/changelog.d/fixes/9320-fix.plan.md deleted file mode 100644 index 426fbab8cf..0000000000 --- a/changelog.d/fixes/9320-fix.plan.md +++ /dev/null @@ -1 +0,0 @@ -- fix(security): require auth for /v1/models when management auth is configured (#9320) \ No newline at end of file diff --git a/changelog.d/fixes/9332-port-2649-claude-server-tool-models.md b/changelog.d/fixes/9332-port-2649-claude-server-tool-models.md deleted file mode 100644 index a1d0d8bd59..0000000000 --- a/changelog.d/fixes/9332-port-2649-claude-server-tool-models.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(claude):** normalize nested Claude server tool model ids (`cc/` and `claude/` prefixes) on native passthrough, covering non-versioned server tools (Task/subagent). (thanks @AlanSyue) diff --git a/changelog.d/fixes/9338-kimi-web-k3-exhausted.md b/changelog.d/fixes/9338-kimi-web-k3-exhausted.md deleted file mode 100644 index 8bf5c7bc88..0000000000 --- a/changelog.d/fixes/9338-kimi-web-k3-exhausted.md +++ /dev/null @@ -1 +0,0 @@ -- fix(providers): map kimi-web/K3 to K2D5 scenario instead of OK Computer premium mode to fix resource_exhausted on non-subscriber accounts (#9338) diff --git a/changelog.d/fixes/9343-bare-json-tool-calls.md b/changelog.d/fixes/9343-bare-json-tool-calls.md deleted file mode 100644 index a17aa60e85..0000000000 --- a/changelog.d/fixes/9343-bare-json-tool-calls.md +++ /dev/null @@ -1 +0,0 @@ -- fix(security): require explicit tool envelope to prevent bare JSON from being promoted to real tool_calls (#9343) diff --git a/changelog.d/fixes/9364-models-pricing-gap.md b/changelog.d/fixes/9364-models-pricing-gap.md deleted file mode 100644 index 182fc0061f..0000000000 --- a/changelog.d/fixes/9364-models-pricing-gap.md +++ /dev/null @@ -1 +0,0 @@ -- fix(api): consult LiteLLM pricing_synced layer in resolveCatalogPricing so deployed models absent from models.dev and defaults get pricing in /v1/models (#9364) diff --git a/changelog.d/fixes/9406-claude-web-429-test.md b/changelog.d/fixes/9406-claude-web-429-test.md deleted file mode 100644 index 46a9576b2e..0000000000 --- a/changelog.d/fixes/9406-claude-web-429-test.md +++ /dev/null @@ -1,2 +0,0 @@ -- fix(providers): treat claude-web 429 as unhealthy and forward upstream Retry-After header (#9406) -- fix(providers): treat muse-spark-web 429 as unhealthy (#9406) diff --git a/changelog.d/fixes/9407-gemini-web-false-positive.md b/changelog.d/fixes/9407-gemini-web-false-positive.md deleted file mode 100644 index d76caa14c5..0000000000 --- a/changelog.d/fixes/9407-gemini-web-false-positive.md +++ /dev/null @@ -1 +0,0 @@ -- fix(providers): detect expired gemini-web sessions via ServiceLogin redirect and add testConnection override (#9407) diff --git a/changelog.d/fixes/9408-claude-web-tool-use.md b/changelog.d/fixes/9408-claude-web-tool-use.md deleted file mode 100644 index ed6f8f258f..0000000000 --- a/changelog.d/fixes/9408-claude-web-tool-use.md +++ /dev/null @@ -1 +0,0 @@ -- fix(providers): add tool_use block handling to claude-web stream parser for OpenAI tool_calls projection (#9408) diff --git a/changelog.d/fixes/9416-internal-provider-prefixes.md b/changelog.d/fixes/9416-internal-provider-prefixes.md deleted file mode 100644 index ea5a343dfc..0000000000 --- a/changelog.d/fixes/9416-internal-provider-prefixes.md +++ /dev/null @@ -1 +0,0 @@ -- fix(api): fall back to slugified provider name when prefix is empty to prevent UUID leak in /v1/models (#9416) diff --git a/changelog.d/fixes/9431-codex-gpt56-context.md b/changelog.d/fixes/9431-codex-gpt56-context.md deleted file mode 100644 index da11703298..0000000000 --- a/changelog.d/fixes/9431-codex-gpt56-context.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(providers):** Codex GPT-5.6 model metadata reports the 1M context window and 922K input limit ([#9431](https://github.com/diegosouzapw/OmniRoute/issues/9431)). diff --git a/changelog.d/fixes/9435-kiro-import-overwrite.md b/changelog.d/fixes/9435-kiro-import-overwrite.md deleted file mode 100644 index 9081e7537b..0000000000 --- a/changelog.d/fixes/9435-kiro-import-overwrite.md +++ /dev/null @@ -1 +0,0 @@ -- fix(oauth): Kiro import token endpoint no longer overwrites existing connection when using shared cached OIDC clientId (#9435) diff --git a/changelog.d/fixes/9436-claude-system-role-cache-boundary.md b/changelog.d/fixes/9436-claude-system-role-cache-boundary.md deleted file mode 100644 index c2433f470a..0000000000 --- a/changelog.d/fixes/9436-claude-system-role-cache-boundary.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(sse):** hoisting a mid-conversation `system`/`developer` message into the top-level `system` field no longer carries its `cache_control` marker along, which left the conversation history without a cache breakpoint and forced a full re-read plus a rebuild on the next turn. The boundary is moved to the nearest preceding block that can carry one, and now survives the rewrites that turn `tool_result` and inlined file/document blocks into plain text; if the target block is already marked, both markers are kept unless Anthropic's TTL ordering forbids it. Both hoisting paths are fixed — `extractSystemRoleMessages` and `extractSystemMessagesToBody`. Regression guard: `tests/unit/claude-system-role-cache-boundary.test.ts`. ([#9436](https://github.com/diegosouzapw/OmniRoute/issues/9436)) diff --git a/changelog.d/fixes/9442-mitm-ca-umask.md b/changelog.d/fixes/9442-mitm-ca-umask.md deleted file mode 100644 index e0a27abab3..0000000000 --- a/changelog.d/fixes/9442-mitm-ca-umask.md +++ /dev/null @@ -1 +0,0 @@ -- fix(backend): force system MITM CA cert to 0644 on Linux regardless of umask and repair on re-install (#9442) diff --git a/changelog.d/fixes/9447-bare-model-codex-preemption.md b/changelog.d/fixes/9447-bare-model-codex-preemption.md deleted file mode 100644 index f1549a4b4b..0000000000 --- a/changelog.d/fixes/9447-bare-model-codex-preemption.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(routing):** a Codex-native bare model id (`gpt-5.5`, the `gpt-5.6-sol`/`terra`/`luna` tiers) no longer routes to `codex` when no codex connection is active — an OpenAI-only install was getting `no active credentials for provider: codex` for a model OpenAI serves, and an install whose codex connection was merely inactive failed the same way. With codex active the Codex preference still wins over OpenAI, and ids only codex catalogs (`codex-auto-review`) still resolve to codex with no connection at all ([#9447](https://github.com/diegosouzapw/OmniRoute/pull/9447)) diff --git a/changelog.d/fixes/9451-selfsigned-docker-dep.md b/changelog.d/fixes/9451-selfsigned-docker-dep.md deleted file mode 100644 index a2f525665d..0000000000 --- a/changelog.d/fixes/9451-selfsigned-docker-dep.md +++ /dev/null @@ -1 +0,0 @@ -- fix(docker): ship MITM `_internal/` shims and `selfsigned` package in standalone bundle (#9451) diff --git a/changelog.d/fixes/9454-launch-claude-exe-windows.md b/changelog.d/fixes/9454-launch-claude-exe-windows.md deleted file mode 100644 index c4abdf25ab..0000000000 --- a/changelog.d/fixes/9454-launch-claude-exe-windows.md +++ /dev/null @@ -1 +0,0 @@ -- fix(cli): probe PATH for claude.exe/codex.exe on Windows before falling back to the .cmd shim (#9454) diff --git a/changelog.d/fixes/9455-stop-supervisor-respawn.md b/changelog.d/fixes/9455-stop-supervisor-respawn.md deleted file mode 100644 index b4571ce88f..0000000000 --- a/changelog.d/fixes/9455-stop-supervisor-respawn.md +++ /dev/null @@ -1 +0,0 @@ -- fix(cli): stop the supervisor before the child so omniroute stop no longer reports success while the supervisor respawns the server (#9455) diff --git a/changelog.d/fixes/9474-claude-code-oauth-mismap.md b/changelog.d/fixes/9474-claude-code-oauth-mismap.md deleted file mode 100644 index 4a7df44a69..0000000000 --- a/changelog.d/fixes/9474-claude-code-oauth-mismap.md +++ /dev/null @@ -1 +0,0 @@ -- fix(cli): route claude-code OAuth to the Anthropic `claude` browser-PKCE flow instead of the unrelated command-code provider (#9474) diff --git a/changelog.d/fixes/9475-update-lies-shadowing.md b/changelog.d/fixes/9475-update-lies-shadowing.md deleted file mode 100644 index 969d9b4aee..0000000000 --- a/changelog.d/fixes/9475-update-lies-shadowing.md +++ /dev/null @@ -1 +0,0 @@ -- fix(cli): re-verify running binary version after `omniroute update` install and warn instead of lying about success when a local install shadows the global one (#9475) diff --git a/changelog.d/fixes/9486-claude-400-quota.md b/changelog.d/fixes/9486-claude-400-quota.md deleted file mode 100644 index b410faf7d1..0000000000 --- a/changelog.d/fixes/9486-claude-400-quota.md +++ /dev/null @@ -1 +0,0 @@ -- fix(providers): classify 400 out of extra usage as quota_exhausted for Anthropic OAuth diff --git a/changelog.d/fixes/9491-port-3005-auth-redirect-login.md b/changelog.d/fixes/9491-port-3005-auth-redirect-login.md deleted file mode 100644 index 8c82bc1b43..0000000000 --- a/changelog.d/fixes/9491-port-3005-auth-redirect-login.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(auth):** redirect active sessions from /login by checking the session cookie before showing the login form. (thanks @DaDecky) diff --git a/changelog.d/fixes/9494-chat-history-cap-opt-in.md b/changelog.d/fixes/9494-chat-history-cap-opt-in.md deleted file mode 100644 index 30e0be1e03..0000000000 --- a/changelog.d/fixes/9494-chat-history-cap-opt-in.md +++ /dev/null @@ -1 +0,0 @@ -- fix(api): make the 800-message chat history cap opt-in so long conversations reach compression instead of a terminal 413 (#9494) diff --git a/changelog.d/fixes/9496-kimi-k3-responses-replay.md b/changelog.d/fixes/9496-kimi-k3-responses-replay.md deleted file mode 100644 index 59ee61b0f0..0000000000 --- a/changelog.d/fixes/9496-kimi-k3-responses-replay.md +++ /dev/null @@ -1 +0,0 @@ -- fix(translator): preserve authentic K3 Responses reasoning by model across providers, keep it on the matching assistant turn, and make Kimi Coding prefer client reasoning then cached replay before its empty-marker fallback (#9496) diff --git a/changelog.d/fixes/9500-reasoning-summary-separator.md b/changelog.d/fixes/9500-reasoning-summary-separator.md deleted file mode 100644 index 95f5565a72..0000000000 --- a/changelog.d/fixes/9500-reasoning-summary-separator.md +++ /dev/null @@ -1 +0,0 @@ -- fix(translator): join reasoning summary segments with newline separators (#9500) diff --git a/changelog.d/fixes/9502-muse-ecto1-auth-token.md b/changelog.d/fixes/9502-muse-ecto1-auth-token.md deleted file mode 100644 index 5962deb307..0000000000 --- a/changelog.d/fixes/9502-muse-ecto1-auth-token.md +++ /dev/null @@ -1 +0,0 @@ -- fix(muse-spark-web): document the ecto1: WS auth token requirement in the credential hint, spec, and error message (#9502) diff --git a/changelog.d/fixes/9505-atu-effort-beta-allowlist.md b/changelog.d/fixes/9505-atu-effort-beta-allowlist.md deleted file mode 100644 index e580e1cb6b..0000000000 --- a/changelog.d/fixes/9505-atu-effort-beta-allowlist.md +++ /dev/null @@ -1 +0,0 @@ -- fix(sse): stop force-injecting advanced-tool-use beta via the effort-2025-11-24 gate; forward client-negotiated effort through the allowlist (#9505) diff --git a/changelog.d/fixes/9507-maxtokens-upward-rewrite.md b/changelog.d/fixes/9507-maxtokens-upward-rewrite.md deleted file mode 100644 index ef43480699..0000000000 --- a/changelog.d/fixes/9507-maxtokens-upward-rewrite.md +++ /dev/null @@ -1 +0,0 @@ -- fix(sse): stop the reasoning-token buffer from enlarging a client's explicit max_tokens upward (x1.5) (#9507) diff --git a/changelog.d/fixes/9531-ci-combo-matrix.md b/changelog.d/fixes/9531-ci-combo-matrix.md deleted file mode 100644 index c5ff766166..0000000000 --- a/changelog.d/fixes/9531-ci-combo-matrix.md +++ /dev/null @@ -1 +0,0 @@ -- fix(ci): include combo-matrix tests in test-integration job (#9531) diff --git a/changelog.d/fixes/9532-unit-ceiling-measurement.md b/changelog.d/fixes/9532-unit-ceiling-measurement.md deleted file mode 100644 index 3b71df081d..0000000000 --- a/changelog.d/fixes/9532-unit-ceiling-measurement.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(ci):** tighten unit suite ceiling from 100min to 80min as a conservative step (#9532) diff --git a/changelog.d/fixes/9533-ratelimit-bound-queue-wait-bottleneck-exit.md b/changelog.d/fixes/9533-ratelimit-bound-queue-wait-bottleneck-exit.md deleted file mode 100644 index 0822619f7a..0000000000 --- a/changelog.d/fixes/9533-ratelimit-bound-queue-wait-bottleneck-exit.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(ratelimit):** added queue-wait timeout tests and updateFromResponseBody sequencing tests for the existing RATE_LIMIT_QUEUE_TIMEOUT feature in withRateLimit (#9533) diff --git a/changelog.d/fixes/9534-modelsdevsync-timers.md b/changelog.d/fixes/9534-modelsdevsync-timers.md deleted file mode 100644 index a12b4448c4..0000000000 --- a/changelog.d/fixes/9534-modelsdevsync-timers.md +++ /dev/null @@ -1 +0,0 @@ -- fix(test): prevent flaky modelsDevSync timer assertions by serializing test execution within the file (#9534) diff --git a/changelog.d/fixes/9536-usage-misreporting.md b/changelog.d/fixes/9536-usage-misreporting.md deleted file mode 100644 index ad6daa28ee..0000000000 --- a/changelog.d/fixes/9536-usage-misreporting.md +++ /dev/null @@ -1 +0,0 @@ -- fix(backend): map cache tokens in OpenAI-to-Claude non-streaming usage translation (#9536) diff --git a/changelog.d/fixes/9541-fastpath-db-corruption.md b/changelog.d/fixes/9541-fastpath-db-corruption.md deleted file mode 100644 index b15f04fa65..0000000000 --- a/changelog.d/fixes/9541-fastpath-db-corruption.md +++ /dev/null @@ -1 +0,0 @@ -- fix(db): add transient-error retry to corruption probe to prevent data loss under concurrent load (#9541) diff --git a/changelog.d/fixes/9543-searxng-auto-select.md b/changelog.d/fixes/9543-searxng-auto-select.md deleted file mode 100644 index 2798fab967..0000000000 --- a/changelog.d/fixes/9543-searxng-auto-select.md +++ /dev/null @@ -1 +0,0 @@ -- fix(search): mark searxng-search as fallbackOnly to prevent auto-select without instance (#9543) diff --git a/changelog.d/fixes/9545-gpt56-effort-tools.md b/changelog.d/fixes/9545-gpt56-effort-tools.md deleted file mode 100644 index 7cc1a77bb3..0000000000 --- a/changelog.d/fixes/9545-gpt56-effort-tools.md +++ /dev/null @@ -1 +0,0 @@ -- fix(providers): strip provider prefix in getModelTargetFormat to route GPT-5.6 models to /v1/responses (#9545) diff --git a/changelog.d/fixes/9550-amazon-q-alias.md b/changelog.d/fixes/9550-amazon-q-alias.md deleted file mode 100644 index b984b8bfc0..0000000000 --- a/changelog.d/fixes/9550-amazon-q-alias.md +++ /dev/null @@ -1 +0,0 @@ -- fix(model): add "aq" alias for amazon-q provider so parseModel resolves it instead of falling back to OpenAI (#9550) diff --git a/changelog.d/fixes/9551-proxyfetch-context-bypass.md b/changelog.d/fixes/9551-proxyfetch-context-bypass.md deleted file mode 100644 index eeefa9d7e6..0000000000 --- a/changelog.d/fixes/9551-proxyfetch-context-bypass.md +++ /dev/null @@ -1 +0,0 @@ -- fix(proxy): NO_PROXY now bypasses context-level proxy in resolveProxyForRequest (#9551) diff --git a/changelog.d/fixes/9553-prepublish-npm-entry-posix.md b/changelog.d/fixes/9553-prepublish-npm-entry-posix.md deleted file mode 100644 index af1b199ee3..0000000000 --- a/changelog.d/fixes/9553-prepublish-npm-entry-posix.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(build):** `npm run build:cli` (prepublish) no longer fails on POSIX with "npm-cli.js not found next to the running Node binary". The #8858 shim-free npm resolver only knew the Windows layout (`\node_modules\npm`); on GitHub hosted runners, nvm and system installs npm lives at `/lib/node_modules/npm` while node is `/bin/node`, so every fresh CI checkout died installing `@omniroute/opencode-plugin` deps (Fast Production Build + dast-smoke red on all PRs). The resolver, extracted to `scripts/build/resolveNpmEntry.ts`, now tries `npm_execpath` (exported by `npm run` itself) first, then the Windows layout, then the POSIX layout — covered by `tests/unit/build/resolve-npm-entry.test.ts` including a live POSIX regression guard. diff --git a/changelog.d/fixes/9554-file-size-inherited-drift-reconcile.md b/changelog.d/fixes/9554-file-size-inherited-drift-reconcile.md deleted file mode 100644 index 095d7609d2..0000000000 --- a/changelog.d/fixes/9554-file-size-inherited-drift-reconcile.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(quality):** reconcile the accumulated file-size drift on `release/v3.8.50` — 13 files sat above their frozen LOC on the clean tip (measured by the gate itself), turning the absolute-mode check (nightly / local) permanently red while the PR-mode base-relative check (#8522) let every innocent PR pass. The per-PR rebaselines were lost across successive conflict resolutions of this hot file during the 08-05/06 merge batch. Frozen values updated to the measured tip for the 11 grown files (each annotated with its owning merged PR: #9024 #9324 #9329 #9193 #9332 #9228 #9260 #8934 #9196 #9163) and `open-sse/executors/default.ts` / `kiro.ts` (above the 1000 cap with no entry) added to the frozen set. diff --git a/changelog.d/fixes/9559-mcp-audit-vitest-seam.md b/changelog.d/fixes/9559-mcp-audit-vitest-seam.md deleted file mode 100644 index 2117839f0b..0000000000 --- a/changelog.d/fixes/9559-mcp-audit-vitest-seam.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(mcp):** the 3 `audit.test.ts` shutdown/fallback tests fail deterministically since #8959 switched the audit DB loader to `createRequire("better-sqlite3")` — `vi.doMock` only patches Vitest's ESM module graph, so the old better-sqlite3 mock never engaged and the tests hit a real empty sqlite file ("no such table: mcp_tool_audit"), redding the `Vitest (fast-path)` job on every PR (long misdiagnosed as a flake). Shutdown tests now inject the mock through the audit connection cache (`globalThis.__omnirouteMcpAuditDb`), and the node:sqlite fallback test drives a new test-only loader seam (`__setBetterSqliteLoaderForTests`) — the production `createRequire` path is unchanged. 3/3 red → 3/3 green; full `open-sse/mcp-server` vitest suite 88/88. diff --git a/changelog.d/fixes/9560-turbopack-nft-guard.md b/changelog.d/fixes/9560-turbopack-nft-guard.md deleted file mode 100644 index f6ec73d296..0000000000 --- a/changelog.d/fixes/9560-turbopack-nft-guard.md +++ /dev/null @@ -1 +0,0 @@ -- fix(build): lazy-resolve module-level fs paths to avoid Turbopack NFT whole-source trace (#9560) diff --git a/changelog.d/fixes/9567-chatcore-sse-flaky.md b/changelog.d/fixes/9567-chatcore-sse-flaky.md deleted file mode 100644 index 4dfefc22a0..0000000000 --- a/changelog.d/fixes/9567-chatcore-sse-flaky.md +++ /dev/null @@ -1 +0,0 @@ -- fix(sse): replace timer-based waits with polling to fix flaky chatCore/SSE tests under CI load (#9567) diff --git a/changelog.d/fixes/9568-gemini-tool-casing.md b/changelog.d/fixes/9568-gemini-tool-casing.md deleted file mode 100644 index 0629e40538..0000000000 --- a/changelog.d/fixes/9568-gemini-tool-casing.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(translator):** restore original tool name casing in Gemini/Antigravity response translators ([#9568](https://github.com/diegosouzapw/OmniRoute/issues/9568)) diff --git a/changelog.d/fixes/9575-tool-call-case.md b/changelog.d/fixes/9575-tool-call-case.md deleted file mode 100644 index dd3e888151..0000000000 --- a/changelog.d/fixes/9575-tool-call-case.md +++ /dev/null @@ -1 +0,0 @@ -- fix(translator): add case-insensitive fallback for upstream tool call name lookups (#9575) diff --git a/changelog.d/fixes/9580-standalone-ws-multipart-uploads.md b/changelog.d/fixes/9580-standalone-ws-multipart-uploads.md deleted file mode 100644 index b22b6f7fc2..0000000000 --- a/changelog.d/fixes/9580-standalone-ws-multipart-uploads.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(standalone):** multipart uploads (`POST /v1/audio/transcriptions`) no longer hang — the WebDAV wrapper hands non-WebDAV requests to Next synchronously instead of losing the start of a streaming body ([#9580](https://github.com/diegosouzapw/OmniRoute/pull/9580)) diff --git a/changelog.d/fixes/9615-docker-colocate-partial-trace.md b/changelog.d/fixes/9615-docker-colocate-partial-trace.md deleted file mode 100644 index 700a0e023e..0000000000 --- a/changelog.d/fixes/9615-docker-colocate-partial-trace.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(docker):** standalone co-location now completes packages Next's file tracing materialized partially (package.json without its `main` payload) — unblocks the Docker Hub publish that failed on every v3.8.50 push with `Cannot find module '@atjsh/llmlingua-2/dist/index.js'` ([#9615](https://github.com/diegosouzapw/OmniRoute/pull/9615)) diff --git a/changelog.d/fixes/9623-connection-test-recovery.md b/changelog.d/fixes/9623-connection-test-recovery.md deleted file mode 100644 index 413e59ee87..0000000000 --- a/changelog.d/fixes/9623-connection-test-recovery.md +++ /dev/null @@ -1 +0,0 @@ -- fix(resilience): failed connection test now sets a short cooldown so connections recover after transient outages (#9623) diff --git a/changelog.d/fixes/9624-telemetry-cleanup-wiring.md b/changelog.d/fixes/9624-telemetry-cleanup-wiring.md deleted file mode 100644 index 01e389606e..0000000000 --- a/changelog.d/fixes/9624-telemetry-cleanup-wiring.md +++ /dev/null @@ -1 +0,0 @@ -- fix(db): wire telemetry cleanup scheduler in Next.js startup path (#9624) diff --git a/changelog.d/fixes/9625-domain-cost-ms.md b/changelog.d/fixes/9625-domain-cost-ms.md deleted file mode 100644 index 37c3e1e7e6..0000000000 --- a/changelog.d/fixes/9625-domain-cost-ms.md +++ /dev/null @@ -1 +0,0 @@ -- fix(db): align domain_cost_history cleanup cutoff with millisecond column (#9625) diff --git a/changelog.d/fixes/9626-playground-errors.md b/changelog.d/fixes/9626-playground-errors.md deleted file mode 100644 index 3bf1ee0343..0000000000 --- a/changelog.d/fixes/9626-playground-errors.md +++ /dev/null @@ -1 +0,0 @@ -- fix(playground): surface provider model loading errors and offer retry (#9626) diff --git a/changelog.d/fixes/9630-combo-false-503.md b/changelog.d/fixes/9630-combo-false-503.md deleted file mode 100644 index 5558818649..0000000000 --- a/changelog.d/fixes/9630-combo-false-503.md +++ /dev/null @@ -1 +0,0 @@ -- fix(combo): distinguish pre-dispatch skips from genuine failures to prevent false 503 ALL_ACCOUNTS_INACTIVE (#9630) diff --git a/changelog.d/fixes/9633-npm-build-files.md b/changelog.d/fixes/9633-npm-build-files.md deleted file mode 100644 index c1dc5128da..0000000000 --- a/changelog.d/fixes/9633-npm-build-files.md +++ /dev/null @@ -1 +0,0 @@ -- fix(build): add build-next-isolated.mjs sibling imports to package.json files array diff --git a/changelog.d/fixes/9675-anonymous-fallback-disable-toggle.md b/changelog.d/fixes/9675-anonymous-fallback-disable-toggle.md deleted file mode 100644 index 1a1b802eb3..0000000000 --- a/changelog.d/fixes/9675-anonymous-fallback-disable-toggle.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(providers):** new per-provider `noAuthFallbackDisabledProviders` setting lets operators disable the synthetic anonymous (no-auth) credential fallback for API-key providers whose static definition declares `anonymousFallback: true` (e.g. `opencode-go`, `opencode-zen`) — upstream endpoints now reject anonymous requests with `401 Missing API key`, so the fallback added latency and caused UI health/reconnect churn. Real keyed connections keep working and recover automatically once quota state clears; true no-auth providers (`opencode`, `mimocode`, …) are unaffected, with `blockedProviders` remaining their disable mechanism. Default behavior is unchanged ([#9675](https://github.com/diegosouzapw/OmniRoute/pull/9675)) diff --git a/changelog.d/fixes/9695-docker-bundler-build-arg.md b/changelog.d/fixes/9695-docker-bundler-build-arg.md deleted file mode 100644 index 3bc3f0ee7d..0000000000 --- a/changelog.d/fixes/9695-docker-bundler-build-arg.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(docker):** `--build-arg OMNIROUTE_USE_TURBOPACK=0` now reaches the builder stage — a bare `ENV` was shadowing the `ARG`, so the documented webpack escape hatch was silently ignored and memory-constrained hosts were OOM-killed with no error output ([#9695](https://github.com/diegosouzapw/OmniRoute/pull/9695)) diff --git a/changelog.d/fixes/9713-claude-gemini-tool-casing.md b/changelog.d/fixes/9713-claude-gemini-tool-casing.md deleted file mode 100644 index f35d38de3c..0000000000 --- a/changelog.d/fixes/9713-claude-gemini-tool-casing.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(translator):** restore TitleCase tool names on the Claude → Gemini/Antigravity request path so Claude Code no longer fails with `No such tool available: read` ([#9713](https://github.com/diegosouzapw/OmniRoute/issues/9713)) diff --git a/changelog.d/fixes/9719-combo-connection-pins.md b/changelog.d/fixes/9719-combo-connection-pins.md deleted file mode 100644 index 79c3973ee0..0000000000 --- a/changelog.d/fixes/9719-combo-connection-pins.md +++ /dev/null @@ -1 +0,0 @@ -- fix(db): clear stale combo connection pins when provider connections are deleted (#9719) diff --git a/changelog.d/fixes/9730-persist-rtk-renderers.md b/changelog.d/fixes/9730-persist-rtk-renderers.md deleted file mode 100644 index ce2c7467b8..0000000000 --- a/changelog.d/fixes/9730-persist-rtk-renderers.md +++ /dev/null @@ -1 +0,0 @@ -- fix(compression): persist `enableRenderers` through `normalizeRtkConfig` so RTK renderer settings survive a DB round-trip ([#9730](https://github.com/diegosouzapw/OmniRoute/pull/9730)) \ No newline at end of file diff --git a/changelog.d/fixes/9737-memory-id-route-backend.md b/changelog.d/fixes/9737-memory-id-route-backend.md deleted file mode 100644 index 93c6e6f836..0000000000 --- a/changelog.d/fixes/9737-memory-id-route-backend.md +++ /dev/null @@ -1 +0,0 @@ -- Fixed `GET`/`PUT`/`DELETE /api/memory/[id]` always failing with a 500 (`Primary backend "sqlite" not registered`) when the route was reached before any other memory endpoint in the same process. diff --git a/changelog.d/fixes/9737-route-body-validation.md b/changelog.d/fixes/9737-route-body-validation.md deleted file mode 100644 index 3c9f16a39c..0000000000 --- a/changelog.d/fixes/9737-route-body-validation.md +++ /dev/null @@ -1 +0,0 @@ -- Replaced hand-rolled body type checks with Zod validation in the plugins marketplace install route and the three Dario admin routes, restoring the `t06:route-validation` gate (Hard Rule #7). diff --git a/changelog.d/fixes/9737-vietnamese-locale-parity.md b/changelog.d/fixes/9737-vietnamese-locale-parity.md deleted file mode 100644 index 3b6b4a1465..0000000000 --- a/changelog.d/fixes/9737-vietnamese-locale-parity.md +++ /dev/null @@ -1 +0,0 @@ -- Restore Vietnamese locale parity after the entity-normalization sync dropped Radar, provider, and mini-playground messages. diff --git a/changelog.d/fixes/9776-radar-entitlement-refresh.md b/changelog.d/fixes/9776-radar-entitlement-refresh.md deleted file mode 100644 index 1b4e775629..0000000000 --- a/changelog.d/fixes/9776-radar-entitlement-refresh.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(radar):** refresh signed catalog/referral caches when supporter entitlement changes, preserve the one-time live-to-community downgrade, and test real provider connection IDs from the setup tour diff --git a/changelog.d/fixes/9783-namespace-identity-pivot.md b/changelog.d/fixes/9783-namespace-identity-pivot.md deleted file mode 100644 index 93ba20fdac..0000000000 --- a/changelog.d/fixes/9783-namespace-identity-pivot.md +++ /dev/null @@ -1 +0,0 @@ -- **Translator**: keep the Responses namespace identity map across the hub-and-spoke pivot — namespace sub-tool calls routed to non-OpenAI targets (Kiro, Cursor) no longer come back flattened (`unsupported call: functions__exec` in Codex CLI) (#9783 — thanks @VXNCXNX) diff --git a/changelog.d/fixes/9788-model-catalog-gateway-permissions.md b/changelog.d/fixes/9788-model-catalog-gateway-permissions.md deleted file mode 100644 index f2218d1d2e..0000000000 --- a/changelog.d/fixes/9788-model-catalog-gateway-permissions.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(api):** Model catalogs no longer expose functional gateway mirrors unless the API key permits the mirror's final public model ID ([#9788](https://github.com/diegosouzapw/OmniRoute/pull/9788)) — thanks @xz-dev diff --git a/changelog.d/fixes/9826-command-code-responses-usage.md b/changelog.d/fixes/9826-command-code-responses-usage.md deleted file mode 100644 index 45d8dad254..0000000000 --- a/changelog.d/fixes/9826-command-code-responses-usage.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(executors):** preserve Command Code usage in `/v1/responses` streams so Codex clients receive real input, output, cache, and reasoning token counts ([#9826](https://github.com/diegosouzapw/OmniRoute/pull/9826)) — thanks @MrShitFox diff --git a/changelog.d/fixes/9828-codex-redundant-oneof-enum.md b/changelog.d/fixes/9828-codex-redundant-oneof-enum.md deleted file mode 100644 index b0d7d6b135..0000000000 --- a/changelog.d/fixes/9828-codex-redundant-oneof-enum.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(executors):** prevent intermittent Codex `upstream_empty_response` errors for tool schemas that combine `oneOf` const branches with a matching sibling `enum` by removing only the semantically redundant `oneOf`; bare, narrowing, non-matching, and type-discriminated `oneOf` schemas remain unchanged. ([#9828](https://github.com/diegosouzapw/OmniRoute/pull/9828)) diff --git a/changelog.d/fixes/9834-cursor-selected-image-blobid.md b/changelog.d/fixes/9834-cursor-selected-image-blobid.md deleted file mode 100644 index 6ad655af98..0000000000 --- a/changelog.d/fixes/9834-cursor-selected-image-blobid.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(cursor):** SelectedImage uses `blobIdWithData` + session blobStore, with JPEG soft-cap prep via sharp ([#9834](https://github.com/diegosouzapw/OmniRoute/pull/9834)) — thanks @yansigit diff --git a/changelog.d/fixes/9914-search-exa-contents.md b/changelog.d/fixes/9914-search-exa-contents.md deleted file mode 100644 index 506fe9ebed..0000000000 --- a/changelog.d/fixes/9914-search-exa-contents.md +++ /dev/null @@ -1 +0,0 @@ -- fix(search): nest Exa contents options (text/highlights) for /search API (#9914) diff --git a/changelog.d/fixes/9927-encryption-log-identity.md b/changelog.d/fixes/9927-encryption-log-identity.md deleted file mode 100644 index 8a9f57cb28..0000000000 --- a/changelog.d/fixes/9927-encryption-log-identity.md +++ /dev/null @@ -1 +0,0 @@ -- fix(encryption): name failing credential + recovery path in decrypt errors, dedupe per connection (#9927) diff --git a/changelog.d/fixes/9931-codex-translated-tool-strict.md b/changelog.d/fixes/9931-codex-translated-tool-strict.md deleted file mode 100644 index f6cf3f79c5..0000000000 --- a/changelog.d/fixes/9931-codex-translated-tool-strict.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(executors):** preserve non-strict function-tool semantics when translating Chat Completions requests to Codex Responses, avoiding intermittent streamed failures without rewriting tool schemas or dropping branch-level descriptions and annotations. ([#9931](https://github.com/diegosouzapw/OmniRoute/pull/9931)) diff --git a/changelog.d/fixes/9934-migration-fresh-setup.md b/changelog.d/fixes/9934-migration-fresh-setup.md deleted file mode 100644 index b794540c58..0000000000 --- a/changelog.d/fixes/9934-migration-fresh-setup.md +++ /dev/null @@ -1 +0,0 @@ -- fix(migrations): don't abort on fresh install with only the 001 seed (#9934) \ No newline at end of file diff --git a/changelog.d/fixes/9940-per-connection-virtual-admission-lanes.md b/changelog.d/fixes/9940-per-connection-virtual-admission-lanes.md deleted file mode 100644 index 59f304f591..0000000000 --- a/changelog.d/fixes/9940-per-connection-virtual-admission-lanes.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(admission):** per-connection virtual admission lanes with idle TTL eviction — guards `expireEntry` null deref, adds `deleteLane()` for safe LRU eviction, and passes `sessionId` to byte-level admission (fixes #9654) diff --git a/changelog.d/fixes/9971-empty-choices-vps.md b/changelog.d/fixes/9971-empty-choices-vps.md deleted file mode 100644 index 9e09aa3c9b..0000000000 --- a/changelog.d/fixes/9971-empty-choices-vps.md +++ /dev/null @@ -1 +0,0 @@ -- fix(chat): don't misclassify content-less thinking/redacted Claude bodies as empty_choices (#9971) \ No newline at end of file diff --git a/changelog.d/fixes/9981-image-error-normalization.md b/changelog.d/fixes/9981-image-error-normalization.md deleted file mode 100644 index 022d808ce2..0000000000 --- a/changelog.d/fixes/9981-image-error-normalization.md +++ /dev/null @@ -1 +0,0 @@ -- fix(images): normalize terminal upstream errors via OpenAI-standard type/code (#9981) diff --git a/changelog.d/fixes/9985-basereds-docs-size.md b/changelog.d/fixes/9985-basereds-docs-size.md deleted file mode 100644 index 1f743f8333..0000000000 --- a/changelog.d/fixes/9985-basereds-docs-size.md +++ /dev/null @@ -1 +0,0 @@ -- fix(quality): green release/v3.8.50 base-reds — sync 4 env vars into .env.example/ENVIRONMENT.md and freeze the new proxied-TLS proxyFetch helper in the file-size baseline (#9985) diff --git a/changelog.d/fixes/ghe-copilot-oauth-lifecycle.md b/changelog.d/fixes/ghe-copilot-oauth-lifecycle.md deleted file mode 100644 index 48101d76c6..0000000000 --- a/changelog.d/fixes/ghe-copilot-oauth-lifecycle.md +++ /dev/null @@ -1,2 +0,0 @@ -- **fix(oauth):** GHE Copilot OAuth lifecycle — connecting an account and refreshing its token both failed. Adding a connection died with `gheUrl is required for GHE Copilot OAuth` because the poll handler's `ghe-copilot` branch was unreachable dead code: the provider is listed in `NO_PKCE_DEVICE_CODE_PROVIDERS`, and that set-based check ran first, calling `pollForToken()` without the `extraData` carrying `gheUrl`. Separately, every manual `Refresh` click surfaced `Token refresh failed — provider returned no new token`, and the proactive pre-request refresh never fired for GHE connections — the manual route, the health-check sweep and `checkAndRefreshToken()` all still special-cased plain `github`, while GHE Copilot's device-code flow never yields a `refresh_token` (only a GitHub access token plus a short-lived Copilot sub-token). `refreshCopilotToken()` now takes an optional `baseUrl` so it can target a GHE host's `/api/v3` Copilot token endpoint, and `ghe-copilot` is wired in alongside `github` at all four sites. -- **fix(health-check):** the access-token-only branch of the token health-check sweep no longer logs an unconditional `has no refresh token but has a GitHub access token` line on every tick. That path runs once per 60 s sweep for every `github` / `ghe-copilot` connection, so it emitted ~1440 identical entries per day per connection reporting that nothing had changed. It now logs only when the sweep actually attempted a Copilot sub-token refresh, and says whether that refresh succeeded or failed — so a genuine failure still surfaces instead of being buried in steady-state noise. diff --git a/changelog.d/fixes/i18n-cc-alias-unclosed-tags.md b/changelog.d/fixes/i18n-cc-alias-unclosed-tags.md deleted file mode 100644 index ed1a1b5de3..0000000000 --- a/changelog.d/fixes/i18n-cc-alias-unclosed-tags.md +++ /dev/null @@ -1 +0,0 @@ -- fix(i18n): re-escape CC discovery-alias `claude//` to HTML entities so next-intl stops logging INVALID_MESSAGE: UNCLOSED_TAG on provider detail pages (#8747 regression) diff --git a/changelog.d/fixes/prepublish-native-esbuild.md b/changelog.d/fixes/prepublish-native-esbuild.md deleted file mode 100644 index 60c7b76d94..0000000000 --- a/changelog.d/fixes/prepublish-native-esbuild.md +++ /dev/null @@ -1 +0,0 @@ -- fix(build): exec native esbuild binary directly in prepublish — esbuild ≥0.25 ships an ELF at bin/esbuild and running it through node crashed every build:cli (dast-smoke red on all PRs) diff --git a/changelog.d/fixes/release-v3850-base-drifted-test-expectations.md b/changelog.d/fixes/release-v3850-base-drifted-test-expectations.md deleted file mode 100644 index 5fd73a3777..0000000000 --- a/changelog.d/fixes/release-v3850-base-drifted-test-expectations.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(test):** reconcile test expectations that drifted from the code they guard on `release/v3.8.50` — auth/vision/provider schema snapshots, and three context-aware combo compatibility assertions that contradicted the same file's own stated contract (catalog-too-small targets stay available as runtime fallback rather than being dropped). The combo assertions were masked by an unresolved import that stopped `combo.ts` from loading at all, so they only become reachable once that import is repaired. diff --git a/changelog.d/fixes/release-v3850-post-sweep-locale-lint.md b/changelog.d/fixes/release-v3850-post-sweep-locale-lint.md deleted file mode 100644 index 3377f5c04a..0000000000 --- a/changelog.d/fixes/release-v3850-post-sweep-locale-lint.md +++ /dev/null @@ -1 +0,0 @@ -- Repair release-sweep regressions in locale and environment contracts, package metadata, scripts, dependency, size and dead-code ratchets, OpenAPI coverage, Telegram error sanitization, Openference public-credential handling, DB-module classification, resilience UI test assertions, strict CodeBuddy CN tests, Lite compression typing, and the job-registry migration number. diff --git a/changelog.d/fixes/release-v3850-turbopack-build-red.md b/changelog.d/fixes/release-v3850-turbopack-build-red.md new file mode 100644 index 0000000000..44f69203e3 --- /dev/null +++ b/changelog.d/fixes/release-v3850-turbopack-build-red.md @@ -0,0 +1 @@ +- **fix(build):** repair the broken Turbopack production build, the red lint gate and a runtime crash on `release/v3.8.50`. Six independent module-level defects, each from a different PR, had accumulated because the `Build` CI job is advisory rather than blocking: a lost closing brace in `modelSelectModalHelpers.ts` that swallowed `PROVIDER_TEST_CHUNK_SIZE` into a function body (#9011); `handleFalVideoGeneration` imported twice in `videoGeneration.ts` after the provider-neutral Fal module superseded the standalone handler (#9982 over #9969); `catalog.ts` still re-exporting and calling the injectable stale-while-revalidate policy that #9199 deliberately replaced with a fixed 30 s bound when it landed on top of #8728 — the consumer and the #8728 test suite were never realigned; two dangling statements left in `catalogCache.ts::scheduleBackgroundRefresh` referencing undeclared `inFlight`/`promise`, which made **every** stale-while-revalidate read throw a `ReferenceError` at runtime (a defect the build never caught, surfaced here by the realigned test); a generated wasm-bindgen sidecar URL in `tinycmsSigner.ts` that Turbopack resolves at build time even though the WASM module ships inlined as base64 (#8736/#10087); `conolDiscovery.ts` importing `getProviderOutboundGuard` from `outboundUrlGuard` instead of the sibling `outboundUrlGuardPolicy` module that actually exports it (#8974) — fixed on the consumer side, since re-exporting it would put a `@/`-aliased import into the module the packaged CLI loads without a tsconfig (#7682); and an unbalanced brace in `tests/unit/db-adapters/driverFactory.test.ts` where a new case was inserted between the preceding test's `finally` block and its `});`, so the whole file stopped parsing and the SQLite driver-cascade coverage silently stopped running since 2026-08-11 (#9173). diff --git a/changelog.d/fixes/release-v3850-validator-test-masking-timeout.md b/changelog.d/fixes/release-v3850-validator-test-masking-timeout.md deleted file mode 100644 index 4b7c777092..0000000000 --- a/changelog.d/fixes/release-v3850-validator-test-masking-timeout.md +++ /dev/null @@ -1 +0,0 @@ -- Let the release-green validator finish the test-masking gate on loaded runners while preserving the existing timeout for every other full-CI gate, and report Node.js `ETIMEDOUT` errors as explicit timeout failures. diff --git a/changelog.d/maintenance/8484-client-usage-format-contract.md b/changelog.d/maintenance/8484-client-usage-format-contract.md deleted file mode 100644 index c459a8eda8..0000000000 --- a/changelog.d/maintenance/8484-client-usage-format-contract.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(types):** preserve the client response format contract while estimating usage for non-streaming responses diff --git a/changelog.d/maintenance/8484-responses-transform-options-type.md b/changelog.d/maintenance/8484-responses-transform-options-type.md deleted file mode 100644 index 7c27623665..0000000000 --- a/changelog.d/maintenance/8484-responses-transform-options-type.md +++ /dev/null @@ -1 +0,0 @@ -- Preserve the Responses API transform options contract under TypeScript 7. diff --git a/changelog.d/maintenance/8484-thinking-signature-recovery-types.md b/changelog.d/maintenance/8484-thinking-signature-recovery-types.md deleted file mode 100644 index 94c32a5b6e..0000000000 --- a/changelog.d/maintenance/8484-thinking-signature-recovery-types.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(types):** preserved the known first-failure record while reading Anthropic thinking-signature recovery details so TypeScript 7 keeps the retry result union narrow ([#8484](https://github.com/diegosouzapw/OmniRoute/issues/8484)) diff --git a/changelog.d/maintenance/8484-validation-failure-narrowing.md b/changelog.d/maintenance/8484-validation-failure-narrowing.md deleted file mode 100644 index d5a5c7a5c2..0000000000 --- a/changelog.d/maintenance/8484-validation-failure-narrowing.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(types):** reuse the validation failure predicate when building malformed-body responses so the existing error envelope remains type-safe and unchanged. diff --git a/changelog.d/maintenance/8484-vision-capability-literal.md b/changelog.d/maintenance/8484-vision-capability-literal.md deleted file mode 100644 index b155ef82e6..0000000000 --- a/changelog.d/maintenance/8484-vision-capability-literal.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(types):** preserve the literal `capabilities.vision: true` contract for catalog vision fields so custom-model capability composition remains type-safe under TypeScript 7 ([#9121](https://github.com/diegosouzapw/OmniRoute/pull/9121)) diff --git a/changelog.d/maintenance/8966-remove-iflow-ttl.md b/changelog.d/maintenance/8966-remove-iflow-ttl.md deleted file mode 100644 index 588d891955..0000000000 --- a/changelog.d/maintenance/8966-remove-iflow-ttl.md +++ /dev/null @@ -1 +0,0 @@ -- **chore(sse):** dropped the leftover `iflow` entry from the token-refresh TTL map — the provider was removed from the product but its 24-hour refresh lead outlived it, and the identifier had exactly two occurrences left repo-wide ([#8966](https://github.com/diegosouzapw/OmniRoute/pull/8966)) diff --git a/changelog.d/maintenance/8967-remove-fork-publish-workflows.md b/changelog.d/maintenance/8967-remove-fork-publish-workflows.md deleted file mode 100644 index d07d91980a..0000000000 --- a/changelog.d/maintenance/8967-remove-fork-publish-workflows.md +++ /dev/null @@ -1 +0,0 @@ -- **chore(ci):** removed two fork-owned image-publish workflows that had ridden into the repo as unrelated extra files in on-topic PRs — `build-fork.yml` (`ghcr.io/kang-heewon`, job-level guard, so it instantiated a skipped run on every push to main and every tag) and `build-rinseaid-image.yml` (`ghcr.io/rinseaid`, no guard, never fired). Neither could authenticate against this repository's token; a new policy guard now fails CI on any workflow targeting a foreign registry namespace ([#8967](https://github.com/diegosouzapw/OmniRoute/pull/8967)) diff --git a/changelog.d/maintenance/8977-promote-latest-test-epipe.md b/changelog.d/maintenance/8977-promote-latest-test-epipe.md deleted file mode 100644 index e563dda84f..0000000000 --- a/changelog.d/maintenance/8977-promote-latest-test-epipe.md +++ /dev/null @@ -1 +0,0 @@ -- **test(ci):** fixed the intermittent `spawnSync bash EPIPE` failure in the `:latest` promotion guard — the script exits on a pre-release version before reading stdin, so the harness's pipe-backed `input:` raced that exit; stdin is now file-backed, which makes the race structurally impossible ([#8977](https://github.com/diegosouzapw/OmniRoute/pull/8977)) diff --git a/changelog.d/maintenance/9023-remove-retired-github-models.md b/changelog.d/maintenance/9023-remove-retired-github-models.md deleted file mode 100644 index 3a09c1e961..0000000000 --- a/changelog.d/maintenance/9023-remove-retired-github-models.md +++ /dev/null @@ -1 +0,0 @@ -- **refactor(providers):** removed the retired GitHub Models provider and its catalog, discovery, embedding, free-tier, UI, and documentation surfaces; upgrades now run a durable, idempotent purge of its stored credentials, usage state, structured configuration, and call-log artifacts while preserving GitHub Copilot and live members of mixed configurations ([#9023](https://github.com/diegosouzapw/OmniRoute/pull/9023)) diff --git a/changelog.d/maintenance/9063-cover-specificity-rules.md b/changelog.d/maintenance/9063-cover-specificity-rules.md deleted file mode 100644 index f4e0ef5ce6..0000000000 --- a/changelog.d/maintenance/9063-cover-specificity-rules.md +++ /dev/null @@ -1,7 +0,0 @@ -- **test(sse):** added the first test suite for `open-sse/services/specificityRules.ts` — the - module was hotspot #7 in the coverage plan at 11.28% lines with no dedicated test; the 14 pure - detectors are now pinned edge-to-edge (token ladders, per-domain max-not-sum scoring, and the - min/max clamps), taking the file to ~100% line coverage. The suite also documents two quirks - left unchanged: `detectReasoningDepth` scores above 0 on marker-free input via its - always-applied message-depth bonus, and `detectErrorContext` returns non-integer scores because - it never rounds ([#9063](https://github.com/diegosouzapw/OmniRoute/pull/9063)) diff --git a/changelog.d/maintenance/9104-veoaifree-polling-delay-type.md b/changelog.d/maintenance/9104-veoaifree-polling-delay-type.md deleted file mode 100644 index 5da0e8337c..0000000000 --- a/changelog.d/maintenance/9104-veoaifree-polling-delay-type.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(types):** preserved the Veo polling delay promise result as `void` for TypeScript 7 compatibility without changing runtime polling behavior ([#9104](https://github.com/diegosouzapw/OmniRoute/pull/9104)) diff --git a/changelog.d/maintenance/9105-compression-stats-type-import.md b/changelog.d/maintenance/9105-compression-stats-type-import.md deleted file mode 100644 index 714536d96b..0000000000 --- a/changelog.d/maintenance/9105-compression-stats-type-import.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(types):** imported compression analytics statistics from their defining module so TypeScript 7 resolves the existing interface correctly ([#9105](https://github.com/diegosouzapw/OmniRoute/pull/9105)) diff --git a/changelog.d/maintenance/9117-ts7-semantic-cache-signature-inputs.md b/changelog.d/maintenance/9117-ts7-semantic-cache-signature-inputs.md deleted file mode 100644 index c49c326950..0000000000 --- a/changelog.d/maintenance/9117-ts7-semantic-cache-signature-inputs.md +++ /dev/null @@ -1 +0,0 @@ -- **chore(types):** align semantic cache signature inputs with the numeric request contract so both cache-write paths remain runtime-equivalent while TypeScript 7 checks them safely ([#9117](https://github.com/diegosouzapw/OmniRoute/pull/9117)) diff --git a/changelog.d/maintenance/9118-ts7-response-meta-header-inputs.md b/changelog.d/maintenance/9118-ts7-response-meta-header-inputs.md deleted file mode 100644 index 983269b392..0000000000 --- a/changelog.d/maintenance/9118-ts7-response-meta-header-inputs.md +++ /dev/null @@ -1 +0,0 @@ -- **fix(types):** narrowed non-streaming chat response metadata inputs to the shared header contract without changing emitted metadata headers ([#9118](https://github.com/diegosouzapw/OmniRoute/pull/9118)) diff --git a/changelog.d/maintenance/9229-zoo-code-branding.md b/changelog.d/maintenance/9229-zoo-code-branding.md deleted file mode 100644 index 7bb2c48803..0000000000 --- a/changelog.d/maintenance/9229-zoo-code-branding.md +++ /dev/null @@ -1 +0,0 @@ -- **docs(readme):** replace Roo Code branding with Zoo Code. (thanks @taltas) diff --git a/changelog.d/maintenance/9425-dependabot-ioredis-major.md b/changelog.d/maintenance/9425-dependabot-ioredis-major.md deleted file mode 100644 index 56c00ce70b..0000000000 --- a/changelog.d/maintenance/9425-dependabot-ioredis-major.md +++ /dev/null @@ -1 +0,0 @@ -- **chore(ci):** stopped dependabot from grouping `ioredis` majors with routine production bumps — the package is resolved through a dynamic import in the distributed quota store, so a breaking major passes build, typecheck and both test suites and only surfaces at runtime for operators running Redis-backed quota ([#9425](https://github.com/diegosouzapw/OmniRoute/pull/9425)) diff --git a/changelog.d/maintenance/9614-opencode-plugin-bare-key-suite.md b/changelog.d/maintenance/9614-opencode-plugin-bare-key-suite.md deleted file mode 100644 index c47643b915..0000000000 --- a/changelog.d/maintenance/9614-opencode-plugin-bare-key-suite.md +++ /dev/null @@ -1 +0,0 @@ -- **test(cli):** OpenCode plugin suite realigned to the bare-key static-catalog contract from #9178/#9175 (21 tests were red on every opencode-plugin CI run; 287/287 after) ([#9614](https://github.com/diegosouzapw/OmniRoute/pull/9614)) diff --git a/changelog.d/maintenance/9738-deadcode-radar-referrals.md b/changelog.d/maintenance/9738-deadcode-radar-referrals.md deleted file mode 100644 index 0d89158f49..0000000000 --- a/changelog.d/maintenance/9738-deadcode-radar-referrals.md +++ /dev/null @@ -1 +0,0 @@ -- Removed the unused `RadarReferrals` type export left by the radar referral-links feature (#9697), returning the dead-code ratchet to its 227 baseline. diff --git a/changelog.d/maintenance/9839-v3850-quality-ratchets.md b/changelog.d/maintenance/9839-v3850-quality-ratchets.md deleted file mode 100644 index 51bad864ad..0000000000 --- a/changelog.d/maintenance/9839-v3850-quality-ratchets.md +++ /dev/null @@ -1 +0,0 @@ -- Reconcile the final v3.8.50 bundle-size and file-size ratchets against the measured release tip, preserving exact direction-down ceilings and their source attribution. diff --git a/changelog.d/maintenance/9950-file-size-rebaseline-30pct.md b/changelog.d/maintenance/9950-file-size-rebaseline-30pct.md deleted file mode 100644 index acf3604770..0000000000 --- a/changelog.d/maintenance/9950-file-size-rebaseline-30pct.md +++ /dev/null @@ -1 +0,0 @@ -- **chore(quality):** expand all file-size baselines by +30% ahead of v3.8.51 (authorized DRIFT rebaseline) to unblock the pre-release queue; no functionality changes. diff --git a/changelog.d/maintenance/base-reds-v3850-golden-and-any.md b/changelog.d/maintenance/base-reds-v3850-golden-and-any.md deleted file mode 100644 index 447d392ae2..0000000000 --- a/changelog.d/maintenance/base-reds-v3850-golden-and-any.md +++ /dev/null @@ -1 +0,0 @@ -- **chore(tests):** cleared two base-reds sitting on `release/v3.8.50` itself, both of which turned every open PR red the moment it merged the release. `tests/snapshots/provider/translate-path.json` was stale: #9064 added the `code-execution-2025-08-25` and `skills-2025-10-02` beta flags to the Anthropic header without regenerating the golden, so `provider-translate-path-golden` failed on the bare release tip (2 pass / 1 fail with zero PRs boarded). And `tests/unit/v1-models-auth-leak-9320.test.ts:83` shipped a `(k: any)` in a file new enough that `config/quality/eslint-suppressions.json` does not cover it — with `@typescript-eslint/no-explicit-any` set to `error` under `tests/`, that single cast failed the `No new ESLint warnings` gate repo-wide. Same class in `tests/unit/issue-9407-gemini-web-validation-false-positive.test.ts:50` (`(executor as any).testConnection`), which entered at `f1ea77fd04` — `testConnection` is a declared public method on `GeminiWebExecutor`, so that cast was redundant too. Regenerating the snapshot and dropping both casts restores the gates. diff --git a/changelog.d/maintenance/basereds-eslint-baseline-tighten.md b/changelog.d/maintenance/basereds-eslint-baseline-tighten.md deleted file mode 100644 index d2085f85c9..0000000000 --- a/changelog.d/maintenance/basereds-eslint-baseline-tighten.md +++ /dev/null @@ -1 +0,0 @@ -- fix(quality): tighten eslintWarnings baseline 5000->0 to match the gate's suppressions-applied measurement (unblocks require-tighten on every code PR) diff --git a/changelog.d/maintenance/rtl-physical-class-ratchet.md b/changelog.d/maintenance/rtl-physical-class-ratchet.md deleted file mode 100644 index 16432ea051..0000000000 --- a/changelog.d/maintenance/rtl-physical-class-ratchet.md +++ /dev/null @@ -1 +0,0 @@ -- chore(quality): add an RTL layout ratchet — counts physical directional Tailwind classes (ml/mr/pl/pr/left/right/text-left/border-l/rounded-l) that do not mirror under `dir=rtl`, seeded at 1011 so the backlog behind `tests/unit/ui/rtl-logical-classes.test.tsx` ("#3541, partial, core layout") cannot grow while it is worked through diff --git a/config/quality/eslint-suppressions.json b/config/quality/eslint-suppressions.json index e4bb896b21..92c2c341c2 100644 --- a/config/quality/eslint-suppressions.json +++ b/config/quality/eslint-suppressions.json @@ -558,11 +558,6 @@ "count": 1 } }, - "src/app/api/providers/[id]/models/discovery/providerModelsConfig.ts": { - "no-restricted-imports": { - "count": 1 - } - }, "src/app/api/providers/[id]/models/route.ts": { "no-restricted-imports": { "count": 1 @@ -1788,7 +1783,7 @@ }, "tests/unit/chatcore-translation-paths.test.ts": { "@typescript-eslint/no-explicit-any": { - "count": 34 + "count": 31 } }, "tests/unit/chatgpt-web-tools-5240.test.ts": { diff --git a/docs/DEVIN_CLAUDE_BRIDGE_PROGRESS.md b/docs/DEVIN_CLAUDE_BRIDGE_PROGRESS.md deleted file mode 100644 index 9bc402220b..0000000000 --- a/docs/DEVIN_CLAUDE_BRIDGE_PROGRESS.md +++ /dev/null @@ -1,115 +0,0 @@ -# Devin Claude Bridge Progress - -Updated: 2026-07-28 - -## Baseline - -- Fork version: `3.8.49`. -- Starting branch: `release/v3.8.49`. -- Starting commit: `ed7db3ee5f89a144b2d931d8605534522f83de30`. -- Fixed runtime artifacts: Node `26.0.0`, Claude Code `2.1.220`, Devin CLI `3000.2.17`. -- Existing `devin-cli` remains unchanged; the new path is the separate - `devin-cli-agentic` provider. - -## Implemented architecture - -- Claude Code runs only inside the non-root bridge container with its own empty config - volume and local OmniRoute base URL. -- `devin-cli-agentic` preserves Anthropic messages, tool schemas, `tool_use`, and - `tool_result`, then calls the official Devin CLI over ACP stdio. -- The executor starts `devin acp --agent-type summarizer`. This is the only fixed official - ACP role in the pinned CLI that has no Devin-owned tools. -- The request is framed as an execution trace. Devin can return one strict client tool - envelope; Claude Code executes that tool locally. -- Internal ACP `tool_call` events, unsupported blocks, invalid schemas, narrative actions, - timeouts, cancellation, and process failure all fail closed. -- Provider and network policy prevent combo/auto/Anthropic fallback. - -## Offline proof - -- Focused serializer, parser, executor, ACP lifecycle, wire-format, environment, and audit - tests pass (39/39). -- The contract suite covers Anthropic JSON/SSE, `tool_use`, `tool_result` continuation, - fragmented ACP frames, stderr, early exit, timeout, cancellation, and fail-closed provider - loss. -- The production bridge image builds with the pinned CLIs. -- Real Claude Code offline E2E loads `CLAUDE.md`, the project skill and slash command, fires - hooks, executes local tools over multiple turns, observes a failed test, repairs the file, - reruns the test, and completes. -- The isolation verifier proves non-root/read-only execution, isolated mounts and config, - blocked Anthropic/Claude access, no host credential mounts, local-only inference, and no - fallback. - -Evidence is generated under `.sandbox/evidence` and ignored by Git. - -## Regression status - -- `typecheck:core`, focused ESLint, Prettier, shell/Node syntax, and the complete documentation - accuracy suite pass. -- The broad `npm run check` is not reported as passed: after its lint phase, the repository - test runner remained alive while an existing `ioredis` client repeatedly retried an - unavailable local Redis endpoint after `quota-redis-store.test.ts`. The bridge-focused - suites, production image build, offline E2E, isolation proof, and live gate do not use that - Redis service and all pass. - -## Live Devin proof - -Passed with the official in-container login and discovered model -`swe-1-7-lightning`. The terminal live run completed all three scenarios: - -1. Claude Code loaded the fixture instructions, issued client-owned `Read` calls, and - returned a correct defect analysis. -2. Claude Code issued a real `Edit` changing subtraction to addition, then a client-owned - `Bash` call running `npm test`; the test reported one pass and zero failures. -3. Claude Code initialization listed `bridge-check` and `bridge-proof`, read the corrected - source and test, executed another client-owned `npm test`, and completed successfully. - -The live evidence validator parses stream JSON and requires successful tool results. It does -not accept a textual claim that a tool ran. It also rejects terminal summaries that report a -blocker, incomplete work, or required next steps. - -The final live gate reported: - -```text -PASS: validated Claude evidence for LIVE_ANALYSIS_COMPLETE -PASS: validated Claude evidence for LIVE_FIX_COMPLETE -PASS: validated Claude evidence for BRIDGE_E2E_COMPLETE -PASS: three live Devin-backed Claude Code scenarios completed -PASS: live model swe-1-7-lightning was discovered and validated by three scenarios -``` - -The same gate validated the network audit: only the Devin guard path was used, no internal -Devin tool event was accepted, and the Claude egress audit remained empty. - -## Investigation conclusion - -The initial default-agent hypothesis failed because ACP permission modes do not turn the -default Devin agent into a raw inference backend. Even `ask` mode can emit Devin-owned -`tool_call` events. A discovered `allowed-tools: []` agent configuration was not consumed by -`devin acp` in CLI `3000.2.17`. - -The working adaptation uses the official `summarizer` agent because it is structurally -no-tools. Its fixed summarization behavior can produce intermediate prose, so the bridge -frames requests as execution traces, detects future-action narration, performs at most one -strict repair, and otherwise fails. Live validation also exposed transient ACP timeouts; -the harness now spaces independent scenarios rather than weakening routing or retrying into -another provider. - -## Safety record - -No host Claude executable, configuration, login, OAuth token, Keychain, or Anthropic API was -used. The dedicated Docker volumes remain role-separated. No credential value is written to -the repository or evidence output. - -During the early baseline, a focused test without isolated `DATA_DIR` initialized the -repository's normal OmniRoute database at `/Users/lucasisrael/.omniroute/storage.sqlite`. -It was not rolled back or touched again. Every bridge command now pins database and temporary -paths under the worktree's `.sandbox` directory. - -## Remaining limits - -- The no-tools backend has a summarizer system role rather than a neutral generation role. -- One client tool call per response is supported; parallel tool calls are rejected. -- ACP processes are per-turn and stateless. -- Live Devin availability can still produce explicit `502`/`504` failures. -- Images and unadvertised vision/effort/large-context capabilities remain unsupported. diff --git a/docs/INCIDENT_RESPONSE.md b/docs/INCIDENT_RESPONSE.md deleted file mode 100644 index e6bd5accd7..0000000000 --- a/docs/INCIDENT_RESPONSE.md +++ /dev/null @@ -1,200 +0,0 @@ ---- -title: "Incident Response Runbook — OmniRoute (2026-06-18)" -version: 3.8.50 -lastUpdated: 2026-08-06 ---- - -# Incident Response Runbook — OmniRoute (2026-06-18) - -**Status**: Authoritative. The 71-pillar audit (L61) references this doc -for the `Obs > 2.00` gate. -**Owner**: observability-circle (lead: security-circle lead). -**SLOs**: see `docs/PERF_BUDGETS.md` § 1 (top-level SLOs) and -`ops/slos.yaml` (machine-readable form, generated by the Bifrost team). -**Disclosure policy**: see `SECURITY.md` (vulnerability disclosure only, -separate flow). - -This runbook is the operational playbook for **non-security** incidents: -outages, latency regressions, error-budget burn, and provider-side -failures. Vulnerability disclosure stays on `SECURITY.md`; do not route -those through this runbook. - ---- - -## 1. Severity ladder - -| Sev | Definition | Examples | Page on | Resolve by | -|---|---|---|---|---| -| **SEV-1** | User-visible outage; > 50 % of requests failing or > 2x SLO breach for 5 min. | Cluster down; auth layer broken; 5xx flood. | On-call P0 (immediate) | 4 h | -| **SEV-2** | Significant degradation; 1.5–2x SLO breach for 15 min, or single-tenant impact. | Single provider down; p95 > 1.5x budget; rate-limit runaway. | On-call P1 (15 min) | 24 h | -| **SEV-3** | Latent bug or near-miss; no current user impact but error budget at risk. | Memory leak trending up; circuit breaker tripping on one provider. | Slack `#omniroute-ops` (next standup) | 7 d | -| **SEV-4** | Cosmetic / informational. | Log line noise; non-binding UI glitch. | Next weekly review | Next refactor cycle | - -**Burn-rate escalation** (per `docs/PERF_BUDGETS.md` § 1): 6x for 5 min -is SEV-1; 2x for 1 h is SEV-2; sustained < 1x for 7 d demotes to SEV-3. - ---- - -## 2. Detection sources - -| Source | Signal | Routing | -|---|---|---| -| Prometheus (`/metrics`) | Counter deltas (5xx, latency) | Alertmanager → PagerDuty | -| Grafana SLO dashboards | SLO burn-rate panels | Slack `#omniroute-ops` | -| Uptime probe (`/api/health/ping`) | 3 consecutive failures from 3 regions | Alertmanager → PagerDuty | -| Dependabot | New CVE in dependency | GitHub issue + Slack `#security` | -| User report (support@) | Manual triage | Slack `#omniroute-triage` | -| Error budget burn alert | `slo_burn_rate > threshold` | Alertmanager | - -Prometheus and Alertmanager are configured in the deploy repo (see -`docs/operations/DEPLOY.md` once published; currently inline in -`docker-compose.prod.yml`). - ---- - -## 3. First-15-minutes checklist - -When paged, the on-call engineer runs this checklist verbatim. **Do -not** skip steps; each is timed. - -1. **0:00** — Acknowledge the page in PagerDuty. Stops the escalation - timer and notifies the secondary. -2. **0:02** — Open the [SLO dashboard][dash] and the [incident - channel][chan] (`#inc-YYYY-MM-DD-slug`). Post a single-line ack - with the alert name and the time. -3. **0:05** — Classify severity per § 1. If SEV-1 or SEV-2, declare - the incident in the channel and tag `@incident-commander`. -4. **0:08** — Capture the alert payload, the most recent deploy SHA, - and the top 5 slow / erroring endpoints. Post to the channel. -5. **0:12** — Decide: **mitigate first, root-cause later**. Choose - one of: - - **Roll back** to the last green deploy (`bin/rollback.sh vX.Y.Z`). - - **Failover** to the healthy replicas (Caddy LB removes the bad - replica automatically; verify with `curl /api/health/ping`). - - **Disable** the broken connection(s) via `PUT /api/providers/{connectionId}` - with body `{ "isActive": false }` (per-connection toggle, safe by - default; repeat per key/account — see § 4.1). -6. **0:15** — Post the chosen mitigation in the channel. If the page - is still firing after 5 more minutes, escalate to the secondary. - -[chan]: TBD — set to your team's incident-chat channel (e.g. a Discord/Slack `#inc-*` channel); not provisioned by this repo. -[dash]: TBD — set to your Grafana/observability dashboard URL; not provisioned by this repo. - ---- - -## 4. Mitigation runbooks (per failure mode) - -### 4.1 Provider outage (single provider down) - -1. `PUT /api/providers/{connectionId}` with body `{ "isActive": false }` — - deactivates that connection; combo routing and account selection skip it - on the next request (`src/app/api/providers/[id]/route.ts`). There is no - single whole-provider kill switch — if the provider has more than one - key/account, repeat per connection, or let the automatic provider circuit - breaker trip on its own (`src/shared/utils/circuitBreaker.ts`, - `domain_circuit_breakers` table; see `docs/architecture/RESILIENCE_GUIDE.md`). -2. Verify p95 returns to budget within 5 min. -3. If all connections for a model are down, apply the same `isActive: false` - toggle to every connection offering that model — there is no separate - per-model disable endpoint. Combo routing's automatic Model Lockout - (`open-sse/services/accountFallback.ts`; see - `docs/architecture/RESILIENCE_GUIDE.md`) also skips a model that keeps - erroring, without manual action. -4. Update the status page (if one is configured — see § 5) with a banner if - the outage exceeds 15 min. - -### 4.2 Cluster-wide latency regression - -1. Check the most recent deploy (`/api/monitoring/health` returns `appVersion`). -2. If p95 doubled vs the 7-day baseline, **roll back** to the prior - SHA via `bin/rollback.sh`. -3. If the regression is provider-side, see § 4.1. - -### 4.3 Auth layer broken (5xx on /v1/responses for all keys) - -1. Check the authz-inventory endpoint: - `curl https://api.omniroute.dev/api/settings/authz-inventory | jq`. - It returns a route-tier inventory (`tiers`, `bypassEnabled`, - `bypassPrefixes`, `spawnCapablePrefixes`, `cors` — see - `src/app/api/settings/authz-inventory/route.ts`); there is no - `policies_active` field. A non-200 response, or a `tiers` array that - fails to populate, means the settings/DB layer the auth pipeline reads - from is down — not just a single bad key. -2. If the endpoint itself errors or returns malformed data, restore the - settings store from the last good backup (`bin/restore-policies.sh `). -3. If the endpoint is healthy but requests still 5xx for every key, verify - `JWT_SECRET` / `API_KEY_SECRET` are set and unchanged for this deploy, - and that `isValidApiKey` (`src/sse/services/auth.ts`) can reach the DB. -4. Roll back if the cause is unclear. - -### 4.4 Data-layer incident (sqlite corruption, audit log gap) - -1. **Stop the cluster** (`docker compose -f docker-compose.prod.yml - stop`) — preventing further writes is more important than uptime. -2. Snapshot the data volume (`bin/snapshot-data.sh`). -3. Open a SEV-1; this is data-loss territory. Page the data-team. -4. Restore from the last verified backup (see `docs/BACKUP.md` once - published; currently the runbook is `bin/restore-data.sh `). - -### 4.5 Security incident (vulnerability disclosure) - -**Stop.** This is the `SECURITY.md` path, not this runbook. Page the -security on-call (`@security-team`); do not post details to -`#omniroute-ops`. - ---- - -## 5. Communication - -| Audience | Channel | Cadence | Owner | -|---|---|---|---| -| Engineering | `#inc-YYYY-MM-DD-slug` | Real-time | Incident commander | -| Status page | TBD — not provisioned by this repo | Every 30 min during SEV-1/2 | On-call | -| Customers (email) | TBD — set your announcement list/address | At SEV-1 start + resolution | Comms lead | -| Upstream providers | Direct contact | At SEV-1 start | Vendor mgmt | -| Postmortem | `docs/postmortem/YYYY-MM-DD-slug.md` | Within 5 business days | Incident commander | - -Postmortem template is at `docs/postmortem/TEMPLATE.md` (forthcoming; no -dedicated ADR covers it yet — once written, register it in -`docs/architecture/cluster-decisions.md` following this repo's 71-pillar/ADR -numbering convention, e.g. ADR-041 there). - ---- - -## 6. On-call rotation - -| Role | Primary | Secondary | Rotation | -|---|---|---|---| -| Engineering on-call | security-circle lead | @open-sse | Weekly, Mon 09:00 PDT | -| Security on-call | @security-team | — | Weekly | -| Data on-call | @db-team | — | Weekly | -| Comms lead | @comms | — | As needed | - -**Handoff**: every Monday 09:00 PDT, the outgoing on-call posts a -written handoff to the incoming in `#omniroute-ops-handoff` covering: -open SEV-3/4 items, scheduled maintenance windows, and any -in-flight mitigations. - ---- - -## 7. Postmortem expectations - -- **Blameless**. People did the best they could with the information - they had. Focus on systems, signals, and decision points. -- **Within 5 business days** of resolution. File via - `gh issue create --label postmortem --label SEV-1` (or `--label SEV-2`). -- **Action items** must be assigned, dated, and tracked in - `docs/TECH_DEBT.md` (P0 < 30 d, P1 < 90 d per that doc's SLA). -- **Mandatory attendees**: incident commander, on-call, any engineer - who touched the mitigation, and one person who was *not* involved - (fresh-eyes review). - ---- - -## 8. Review log - -| Date | Reviewer | Change | -|---|---|---| -| 2026-06-18 | security-circle lead | Initial runbook; severity ladder + 15-min checklist + 4.1–4.5 mitigation runbooks. Closes 71-pillar audit L61 (1/3 → 2/3). | -| 2026-07-18 | observability-circle | Corrected § 4.1/4.3 to the real provider-disable (`PUT /api/providers/{connectionId}`) and authz-inventory (`tiers`/`bypassEnabled`/`cors`, no `policies_active`) mechanisms; removed foreign branding and the nonexistent ADR-024/029 references. | -| 2026-07-18 (planned) | observability-circle | Wire on-call rotation into PagerDuty schedule; add the postmortem template. | diff --git a/docs/PERF_BUDGETS.md b/docs/PERF_BUDGETS.md deleted file mode 100644 index 995aaf6bf4..0000000000 --- a/docs/PERF_BUDGETS.md +++ /dev/null @@ -1,233 +0,0 @@ ---- -title: "Performance Budgets — OmniRoute (2026-06-18)" -version: 3.8.50 -lastUpdated: 2026-08-06 ---- - -# Performance Budgets — OmniRoute (2026-06-18) - -**Status**: Authoritative. SLO targets that the 71-pillar audit (L13) -references for the `Perf > 2.00` gate. -**Methodology**: per-endpoint p50/p95/p99 latency budgets, plus a -top-level availability SLO. Budgets are derived from the 3-replica -Caddy + Redis topology (commit `038439fa7`); adjust on infra change. -**Enforcement**: none yet. § 6 sketches a `benches/perf-gate.k6.js` k6 -script that would assert the SLOs below, but it is a design reference, -not a committed file — no `bench/` or `benches/` directory exists in -this repo today. This doc is a target-setting reference only until a -CI gate is built as follow-up work. -**Re-evaluation cadence**: quarterly, or on any major infra change. - ---- - -## 1. Top-level SLOs - -| SLO | Target | Window | Page on breach | -|---|---|---|---| -| **Availability** (2xx or 4xx for /v1/* and /api/settings/*) | 99.9% | rolling 30 days | on-call P2 | -| **Error budget burn rate** (1xx normalized rate) | < 2x for 1h, < 6x for 5m | 1h / 5m windows | on-call P1 | -| **Aggregate p95 latency** (all /v1/*) | ≤ 1.5 s | rolling 5 min | on-call P2 | -| **Aggregate p99 latency** (all /v1/*) | ≤ 4.0 s | rolling 5 min | on-call P2 | - -**Error budget**: 30-day window = 43.2 minutes of unavailability at -99.9%. Burn rate > 2x is P2; > 6x is P1. - ---- - -## 2. Per-endpoint latency budgets - -All budgets measured **server-side** (Next.js Route Handler entry to -response start, or last byte for streaming). Stream endpoints are -measured to time-of-first-byte (TTFB) since the body is incremental. - -### 2.1 Inference endpoints (the hot path) - -| Endpoint | Method | p50 | p95 | p99 | Notes | -|---|---|---|---|---|---| -| `/v1/responses` (non-stream) | POST | 800 ms | 1.8 s | 3.5 s | Includes translator + provider roundtrip | -| `/v1/responses` (stream) | POST (TTFB) | 350 ms | 900 ms | 1.8 s | TTFB only; total duration unbounded | -| `/v1/relay/chat/completions` (non-stream) | POST | 1.0 s | 2.2 s | 4.0 s | Includes per-(token,IP) rate-limit check | -| `/v1/relay/chat/completions` (stream) | POST (TTFB) | 400 ms | 1.0 s | 2.0 s | | -| `/v1/embeddings` | POST | 300 ms | 700 ms | 1.4 s | Pure provider roundtrip; cheap | -| `/v1/rerank` | POST | 600 ms | 1.4 s | 2.8 s | | -| `/v1/moderations` | POST | 250 ms | 600 ms | 1.2 s | Lightweight classification | -| `/v1/audio/speech` | POST | 1.2 s | 3.0 s | 6.0 s | Audio synthesis is slow; budget reflects that | -| `/v1/audio/transcriptions` | POST | 2.0 s | 5.0 s | 10.0 s | STT is bounded by audio duration + model size | -| `/v1/images/generations` | POST | 4.0 s | 8.0 s | 15.0 s | Image gen is async-bound by provider | -| `/v1/videos/generations` | POST (TTFB) | 600 ms | 1.5 s | 3.0 s | Async; client polls `/v1/videos/{id}` | -| `/v1/music/generations` | POST | 3.0 s | 6.0 s | 12.0 s | | - -### 2.2 Files + batches - -| Endpoint | Method | p50 | p95 | p99 | Notes | -|---|---|---|---|---|---| -| `/v1/files` (GET) | GET | 80 ms | 200 ms | 400 ms | Cached list | -| `/v1/files` (POST upload) | POST | 500 ms | 1.2 s | 2.5 s | 25 MB cap; multipart parse | -| `/v1/files/{id}` (GET) | GET | 60 ms | 150 ms | 300 ms | | -| `/v1/files/{id}` (DELETE) | DELETE | 80 ms | 200 ms | 400 ms | | -| `/v1/files/{id}/content` (download) | GET | 100 ms | 300 ms | 600 ms | + per-MB throughput | -| `/v1/batches` (GET) | GET | 150 ms | 400 ms | 800 ms | | -| `/v1/batches` (POST create) | POST | 200 ms | 500 ms | 1.0 s | Validates input file then enqueues | -| `/v1/batches/{id}` (GET) | GET | 100 ms | 300 ms | 600 ms | | -| `/v1/batches/{id}` (DELETE) | DELETE | 100 ms | 300 ms | 600 ms | | -| `/v1/batches/delete-completed` (POST) | POST | 400 ms | 1.0 s | 2.0 s | Mass delete; n rows | - -### 2.3 Agents - -| Endpoint | Method | p50 | p95 | p99 | Notes | -|---|---|---|---|---|---| -| `/v1/agents/health` | GET | 1.5 s | 4.5 s | 5.0 s | 5s per-provider timeout cap; expect 3-provider total | -| `/v1/agents/credentials` | GET | 100 ms | 250 ms | 500 ms | Metadata only; values never returned | -| `/v1/agents/tasks` (GET list) | GET | 150 ms | 400 ms | 800 ms | | -| `/v1/agents/tasks` (POST create) | POST | 250 ms | 600 ms | 1.2 s | Just enqueues; doesn't run agent | -| `/v1/agents/tasks/{id}` (GET) | GET | 100 ms | 300 ms | 600 ms | | -| `/v1/agents/tasks/{id}` (DELETE) | DELETE | 150 ms | 400 ms | 800 ms | | - -### 2.4 Combos / me / providers - -| Endpoint | Method | p50 | p95 | p99 | -|---|---|---|---|---| -| `/v1/combos` | GET | 80 ms | 200 ms | 400 ms | -| `/v1/me/status` | GET | 60 ms | 150 ms | 300 ms | -| `/v1/providers/{provider}/models` | GET | 100 ms | 250 ms | 500 ms | - -### 2.5 Web / search - -| Endpoint | Method | p50 | p95 | p99 | Notes | -|---|---|---|---|---|---| -| `/v1/web/fetch` | POST | 1.5 s | 4.0 s | 8.0 s | 10s timeout cap; recurse depth 3 | -| `/v1/search` | POST | 800 ms | 2.0 s | 4.0 s | Provider search latency varies | - -### 2.6 VSCode-CLI shim (token-scoped) - -These are the legacy passthrough paths. Budgets are tighter because -they're called frequently by the VSCode-CLI extension in tight loops. - -| Endpoint | Method | p50 | p95 | p99 | -|---|---|---|---|---| -| `/v1/vscode/{token}/v1/chat/completions` | POST | 700 ms | 1.6 s | 3.0 s | -| `/v1/vscode/{token}/v1/models` | GET | 60 ms | 150 ms | 300 ms | -| `/v1/vscode/{token}/combos` | GET | 80 ms | 200 ms | 400 ms | -| `/v1/vscode/{token}/chat/completions` (legacy) | POST | 700 ms | 1.6 s | 3.0 s | -| `/v1/vscode/{token}/models` (legacy) | GET | 60 ms | 150 ms | 300 ms | -| `/v1/vscode/{token}/responses` | POST | 800 ms | 1.8 s | 3.5 s | - -### 2.7 Management / settings - -Management endpoints are operator-only and not part of the hot path. -Budgets are set conservatively; breaches don't page on-call but do -flag in the weekly perf review. - -| Endpoint group | p50 | p95 | p99 | -|---|---|---|---| -| `/api/settings/*` (GET) | 100 ms | 300 ms | 600 ms | -| `/api/settings/*` (POST/PATCH/DELETE) | 200 ms | 500 ms | 1.0 s | -| `/api/keys/*` (CRUD) | 150 ms | 400 ms | 800 ms | -| `/api/quota/*` (CRUD) | 150 ms | 400 ms | 800 ms | -| `/api/monitoring/health` (heavy) | 500 ms | 1.5 s | 3.0 s | - -### 2.8 Public probes - -| Endpoint | Method | p50 | p95 | p99 | -|---|---|---|---|---| -| `/api/health/ping` | GET | 5 ms | 20 ms | 50 ms | -| `/api/monitoring/health` | GET | 5 ms | 20 ms | 50 ms | -| `/api/docs` | GET | 20 ms | 80 ms | 200 ms (HTML shell, no provider call) | - ---- - -## 3. Throughput targets - -| Tier | Per-replica RPS | Cluster RPS (3 replicas) | Notes | -|---|---|---|---| -| Inference (non-stream) | 50 RPS | 150 RPS | Bounded by provider quota + translator CPU | -| Inference (stream) | 25 concurrent streams | 75 streams | Bounded by Node event-loop + memory | -| Embeddings | 200 RPS | 600 RPS | Cheap | -| Files (upload) | 10 RPS | 30 RPS | Multipart parse + DB write | -| Files (download) | 100 RPS | 300 RPS | Static-content via Next.js | -| Combos / me / providers | 500 RPS | 1,500 RPS | Cached | -| WebSocket | 100 concurrent connections | 300 | Per-IP cap 5 | - -**Cluster ceiling** (all endpoints combined, sustained): ~1,000 RPS -before p95 latency begins to climb. Scale horizontally beyond that -by adding replicas; the Caddy LB is stateless. - ---- - -## 4. Resource budgets - -| Resource | Per-replica cap | Notes | -|---|---|---| -| RSS memory | 1.5 GB | Spikes during audio/video gen; expect brief 2 GB | -| Event-loop lag (p99) | 50 ms | Alert via `clinic doctor` regression | -| Heap retained | 800 MB | Old-gen GC tuning in `node --max-old-space-size` | -| File descriptors | 2,000 | `ulimit -n 4096` recommended at host | -| DB connections (sql.js) | 1 per replica | sql.js is in-process; no pool needed | -| Redis connections | 20 per replica | Pooled; idle reaped at 5 min | - ---- - -## 5. Cold-start budget - -Next.js App Router cold-start on a fresh container: - -| Phase | Budget | -|---|---| -| Container start → HTTP listening | ≤ 800 ms | -| First request TTFB (warm) | ≤ 200 ms | -| Translator registry bootstrap | ≤ 500 ms (one-time, first /v1/responses) | - -**Measurement script**: `bin/cold-start-bench.sh` (already in the repo -since v3.8.36; `bin/` is the canonical scripts dir). - ---- - -## 6. Regression gate (k6 reference, not yet implemented) - -The sketch below shows how a future `benches/perf-gate.k6.js` script -would assert the SLOs above. Nothing in this section is committed or -wired into CI today — it is a design reference for follow-up work, not -a running gate. - -```javascript -// benches/perf-gate.k6.js — pseudo-code; not yet committed -import http from 'k6/http'; -import { check, Trend } from 'k6'; - -const responsesTTFB = new Trend('v1_responses_ttfb', true); - -export const options = { - scenarios: { - smoke: { - executor: 'constant-vus', - vus: 10, - duration: '1m', - }, - }, - thresholds: { - 'http_req_duration{endpoint:v1_responses}': ['p(95)<1800', 'p(99)<3500'], - 'http_req_failed': ['rate<0.01'], - 'v1_responses_ttfb': ['p(95)<900'], - }, -}; - -export default function () { - const res = http.post(`${__ENV.BASE_URL}/api/v1/responses`, JSON.stringify({ - model: 'gpt-4o-mini', - input: 'ping', - }), { headers: { 'Authorization': `Bearer ${__ENV.API_KEY}` }}); - check(res, { 'status is 200': (r) => r.status === 200 }); - responsesTTFB.add(res.timings.waiting); -} -``` - ---- - -## 7. Review log - -| Date | Reviewer | Change | -|---|---|---| -| 2026-06-18 | security-circle lead | Initial per-endpoint budgets derived from 3-replica Caddy + Redis topology | -| 2026-07-18 | observability-circle | Clarified this doc ships zero enforcement today (no `bench/`/`benches/` dir, no CI gate) and fixed the stale "not yet committed" claim about `bin/cold-start-bench.sh` (present since v3.8.36). | -| 2026-07-18 (planned) | observability-circle | Wire `benches/perf-gate.k6.js` into CI; gate on p95 + p99 breach | -| 2026-09-18 (planned) | observability-circle | Quarterly review; adjust after real-traffic baseline data | diff --git a/docs/README.md b/docs/README.md index 96834709ab..92935da7a1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,7 +8,7 @@ lastUpdated: 2026-06-28 Navigable index of the OmniRoute documentation set. Topics are grouped by intent so you can find what you need quickly. -> Looking for the project overview, install steps, or release notes? See the root [README.md](../README.md), [CHANGELOG.md](../CHANGELOG.md), and [CONTRIBUTING.md](../CONTRIBUTING.md). +> Looking for the project overview, install steps, or release notes? See the root [README.md](../README.md), [ROADMAP.md](../ROADMAP.md), [CHANGELOG.md](../CHANGELOG.md), and [CONTRIBUTING.md](../CONTRIBUTING.md). --- @@ -22,7 +22,7 @@ Simple guides for using OmniRoute — no technical background needed. - [AUTO-COMBO-GUIDE.md](getting-started/AUTO-COMBO-GUIDE.md) — let OmniRoute pick the best AI for you. - [PROVIDERS-GUIDE.md](getting-started/PROVIDERS-GUIDE.md) — how to connect AI providers. - [FREE-TIERS-GUIDE.md](getting-started/FREE-TIERS-GUIDE.md) — get free AI with no credit card. -- [TROUBLESHOOTING.md](getting-started/TROUBLESHOOTING.md) — fix common issues. +- [WEB-COOKIE-GUIDE.md](getting-started/WEB-COOKIE-GUIDE.md) — web cookie providers (session-credential setup). ### guides/ @@ -42,6 +42,8 @@ Simple guides for using OmniRoute — no technical background needed. - [CLAUDE-CODE-CONFIGURATION.md](guides/CLAUDE-CODE-CONFIGURATION.md) — Claude Code CLI with OmniRoute. - [CODEX-CLI-CONFIGURATION.md](guides/CODEX-CLI-CONFIGURATION.md) — Codex CLI with OmniRoute. - [KIRO_SETUP.md](guides/KIRO_SETUP.md) — Kiro setup. +- [ANTIGRAVITY-ONBOARDING.md](guides/ANTIGRAVITY-ONBOARDING.md) — Antigravity (Google One AI) onboarding. +- [MANAGEMENT-AUTH.md](guides/MANAGEMENT-AUTH.md) — management authentication. - [I18N.md](guides/I18N.md) — translation and locale workflow. - [TROUBLESHOOTING.md](guides/TROUBLESHOOTING.md) — detailed troubleshooting reference. - [UNINSTALL.md](guides/UNINSTALL.md) — clean removal steps. @@ -64,6 +66,10 @@ How the system is put together — read these to understand the runtime, code la - [QUALITY_GATES.md](architecture/QUALITY_GATES.md) — quality-gate scripts and CI jobs inventory. - [MONITORING_SECTIONS.md](architecture/MONITORING_SECTIONS.md) — monitoring/costs dashboard navigation. - [cluster-decisions.md](architecture/cluster-decisions.md) — optional sidecar/cluster profile decisions. +- [DESIGN_SYSTEM.md](architecture/DESIGN_SYSTEM.md) — design system & visual identity. +- [ROUTER_BACKENDS.md](architecture/ROUTER_BACKENDS.md) — router backends & embedded services architecture contract (ADR). +- [admission-lanes.md](architecture/admission-lanes.md) — the two admission-lane systems and what gates each. +- [persistence-backend-boundary.md](architecture/persistence-backend-boundary.md) — pluggable persistence boundary (ADR). ## reference/ @@ -77,6 +83,9 @@ Lookup material — API surface, environment variables, CLI flags, provider cata - [FEATURE_FLAGS.md](reference/FEATURE_FLAGS.md) — feature flags and their defaults. - [CLI-TOOLS.md](reference/CLI-TOOLS.md) — bundled CLI commands. - [FREE_TIERS.md](reference/FREE_TIERS.md) — free-tier LLM provider directory. +- [FREE_PROXIES_API.md](reference/FREE_PROXIES_API.md) — free proxies API. +- [RELAY_BACKEND_STRATEGY.md](reference/RELAY_BACKEND_STRATEGY.md) — relay backend strategy. +- [RELAY_TROUBLESHOOTING.md](reference/RELAY_TROUBLESHOOTING.md) — relay troubleshooting. ## frameworks/ @@ -97,6 +106,7 @@ Pluggable subsystems exposed to clients, agents, and operators. - [EMBEDDED-SERVICES.md](frameworks/EMBEDDED-SERVICES.md) — embedded sidecar services (9Router, CLIProxyAPI). - [NOTION_CONTEXT.md](frameworks/NOTION_CONTEXT.md) — Notion context source. - [OBSIDIAN_CONTEXT.md](frameworks/OBSIDIAN_CONTEXT.md) — Obsidian context source. +- [LOCAL_CORPUS_CONTEXT.md](frameworks/LOCAL_CORPUS_CONTEXT.md) — local corpus context source (approved directory exposed to MCP). - [OPENCODE.md](frameworks/OPENCODE.md) — OpenCode integration. - [OPEN_SSE_ARCHITECTURE.md](frameworks/OPEN_SSE_ARCHITECTURE.md) — open-sse streaming engine internals. - [PLAYGROUND_STUDIO.md](frameworks/PLAYGROUND_STUDIO.md) — Playground Studio UI. @@ -111,9 +121,10 @@ Pluggable subsystems exposed to clients, agents, and operators. Combo routing, scoring, and replay. -- [AUTO-COMBO.md](routing/AUTO-COMBO.md) — Auto-Combo (multi-factor scoring, 17 strategies). +- [AUTO-COMBO.md](routing/AUTO-COMBO.md) — Auto-Combo (multi-factor scoring, 19 strategies). - [QUOTA_SHARE.md](routing/QUOTA_SHARE.md) — quota sharing engine. - [REASONING_REPLAY.md](routing/REASONING_REPLAY.md) — reasoning replay cache. +- [REASONING_ROUTING.md](routing/REASONING_ROUTING.md) — reasoning routing rules (effort/budget rule engine). ## security/ @@ -127,6 +138,9 @@ Guardrails, compliance, stealth, and the mandatory patterns for handling public - [ROUTE_GUARD_TIERS.md](security/ROUTE_GUARD_TIERS.md) — route-guard classification tiers. - [CLI_TOKEN.md](security/CLI_TOKEN.md) — CLI machine-ID token (HMAC + legacy SHA-256) auth. - [EGRESS_POLICY.md](security/EGRESS_POLICY.md) — egress IP family (IPv4/IPv6) policy. +- [BAN_DETECTION.md](security/BAN_DETECTION.md) — account-ban / banned-keyword detection. +- [AGENTROUTER_WAF.md](security/AGENTROUTER_WAF.md) — agentrouter.org WAF. +- [CORS.md](security/CORS.md) — CORS configuration & security. - [MITM-TPROXY-DECRYPT.md](security/MITM-TPROXY-DECRYPT.md) — transparent MITM decrypt. - [SUPPLY_CHAIN.md](security/SUPPLY_CHAIN.md) — supply-chain gates (SLSA, SBOM, Trivy, osv-scanner, Scorecard). - [SOCKET_DEV_FINDINGS.md](security/SOCKET_DEV_FINDINGS.md) — supply-chain finding attestations. @@ -148,8 +162,11 @@ Prompt compression engines, rules, and language packs. Provider-specific integration guides. - [CLAUDE_WEB.md](providers/CLAUDE_WEB.md) — Claude Web (cookie-auth) provider. +- [CHATGPT_WEB.md](providers/CHATGPT_WEB.md) — ChatGPT Web (Plus/Pro + Codex) providers. +- [ALIBABA-QWEN-PROVIDER-FAMILIES.md](providers/ALIBABA-QWEN-PROVIDER-FAMILIES.md) — Alibaba and Qwen provider families. - [AGENTROUTER.md](providers/AGENTROUTER.md) — AgentRouter setup. - [ZED-DOCKER.md](providers/ZED-DOCKER.md) — Zed IDE integration under Docker. +- [CURSOR-DOCKER.md](providers/CURSOR-DOCKER.md) — Cursor model listing under Docker. ## comparison/ @@ -161,11 +178,17 @@ Release, deployment, proxies, tunnels, coverage, database, monitoring. - [RELEASE_CHECKLIST.md](ops/RELEASE_CHECKLIST.md) — release flow checklist. - [RELEASE_GREEN.md](ops/RELEASE_GREEN.md) — keeping the PR queue and release branch green. +- [BRANCHING_MODEL.md](ops/BRANCHING_MODEL.md) — branching & release model. +- [MERGE_TRAIN.md](ops/MERGE_TRAIN.md) — merge queue & manual merge-train runbook. +- [HOMOLOGATION.md](ops/HOMOLOGATION.md) — homologation suite (`npm run homolog`). - [QUALITY_GATE_PLAYBOOK.md](ops/QUALITY_GATE_PLAYBOOK.md) — quality-gate playbook. +- [RUNNER_BOX.md](ops/RUNNER_BOX.md) — self-hosted runner box operations. - [BRANCH_PROTECTION_MAIN.md](ops/BRANCH_PROTECTION_MAIN.md) — `main` branch protection. +- [CONTRIBUTION_GOLDEN_PATH.md](ops/CONTRIBUTION_GOLDEN_PATH.md) — contribution golden path (focused checks per change type). - [COVERAGE_PLAN.md](ops/COVERAGE_PLAN.md) — test coverage plan. - [DATABASE_GUIDE.md](ops/DATABASE_GUIDE.md) — DB schema and operations. - [SQLITE_RUNTIME.md](ops/SQLITE_RUNTIME.md) — SQLite driver resolution chain. +- [REDIS_PRODUCTION_CONFIG.md](ops/REDIS_PRODUCTION_CONFIG.md) — Redis production configuration. - [MONITORING_GUIDE.md](ops/MONITORING_GUIDE.md) — monitoring & observability. - [FLY_IO_DEPLOYMENT_GUIDE.md](ops/FLY_IO_DEPLOYMENT_GUIDE.md) — Fly.io deployment. - [VM_DEPLOYMENT_GUIDE.md](ops/VM_DEPLOYMENT_GUIDE.md) — generic VM deployment. diff --git a/docs/architecture/ARCHITECTURE.md b/docs/architecture/ARCHITECTURE.md index 152b4c7397..b41bc81297 100644 --- a/docs/architecture/ARCHITECTURE.md +++ b/docs/architecture/ARCHITECTURE.md @@ -17,13 +17,13 @@ It provides a single OpenAI-compatible endpoint (`/v1/*`) and routes traffic acr Core capabilities: -- OpenAI-compatible API surface for CLI/tools (271 providers, 89 executors) +- OpenAI-compatible API surface for CLI/tools (338 providers, 101 executors) - Request/response translation across provider formats - Model combo fallback (multi-model sequence) - Structured combo steps (`provider + model + connection`) with runtime ordering by `compositeTiers` - Account-level fallback (multi-account per provider) - Quota preflight and quota-aware P2C account selection in the main chat path -- OAuth + API-key provider connection management (21 OAuth provider modules) +- OAuth + API-key provider connection management (22 OAuth provider modules) - Embedding generation via `/v1/embeddings` (6 providers, 9 models) - Image generation via `/v1/images/generations` (10+ providers, 20+ models) - Audio transcription via `/v1/audio/transcriptions` (7 providers) @@ -66,7 +66,7 @@ Core capabilities: - Prompt injection guard middleware - Prompt compression pipeline with Caveman, RTK, stacked pipelines, compression combos, language packs, and analytics - ACP (Agent Communication Protocol) registry -- Modular OAuth providers (19 individual modules under `src/lib/oauth/providers/`) +- Modular OAuth providers (22 individual modules under `src/lib/oauth/providers/`) - Uninstall/full-uninstall scripts - OAuth environment repair action - WebSocket bridge for OpenAI-compatible WS clients (`/v1/ws`) @@ -321,10 +321,10 @@ Domain layer modules: - Eval runner: `src/lib/evals/evalRunner.ts` - Domain state persistence: `src/lib/db/domainState.ts` — SQLite CRUD for fallback chains, budgets, cost history, lockout state, circuit breakers -OAuth provider modules (16 individual files under `src/lib/oauth/providers/`): +OAuth provider modules (22 individual files under `src/lib/oauth/providers/`): - Registry index: `src/lib/oauth/providers/index.ts` -- Individual providers: `claude.ts`, `codex.ts`, `gemini.ts`, `antigravity.ts`, `agy.ts`, `qoder.ts`, `qwen.ts`, `kimi-coding.ts`, `github.ts`, `kiro.ts`, `cursor.ts`, `kilocode.ts`, `cline.ts`, `windsurf.ts`, `gitlab-duo.ts`, `trae.ts` +- Individual providers: `agy.ts`, `antigravity.ts`, `claude.ts`, `cline.ts`, `codebuddy-cn.ts`, `codex.ts`, `cursor.ts`, `devin-desktop.ts`, `ghe-copilot.ts`, `github.ts`, `gitlab-duo.ts`, `grok-cli-oauth.ts`, `grok-cli.ts`, `kilocode.ts`, `kimi-coding.ts`, `kiro.ts`, `qoder.ts`, `raycast.ts`, `trae.ts`, `xai-oauth.ts`, `zed-hosted.ts`, `zed.ts` - Thin wrapper: `src/lib/oauth/providers.ts` — re-exports from individual modules ## 5) Embedded Services (v3.8.4) @@ -365,7 +365,7 @@ relying on a static combo definition. It powers the `auto/*` model prefix family Key capabilities: -- **17 routing strategies** (priority, weighted, fill-first, round-robin, P2C, random, +- **19 routing strategies** (priority, weighted, fill-first, round-robin, P2C, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, **auto**, lkgp, context-optimized, context-relay, **fusion**, plus a fallback path) — auto is the headline addition in v3.8.0; `fusion` (panel fan-out + judge synthesis, @@ -927,7 +927,7 @@ Each provider has a specialized executor extending `BaseExecutor` (in `open-sse/ | `PuterExecutor` | Puter | Browser-based provider integration | | `QoderExecutor` | Qoder AI | PAT and OAuth support, multi-model free tier | | `VertexExecutor` | Google Vertex AI | Service account auth, region-based endpoints | -| `WindsurfExecutor` | Windsurf (Codeium) | Codeium OAuth + session token refresh | +| `DevinDesktopExecutor` | Devin Desktop | Imported API key + Connect-protobuf chat streaming | All other providers (including custom compatible nodes) use the `DefaultExecutor`. @@ -980,9 +980,9 @@ All other providers (including custom compatible nodes) use the `DefaultExecutor | GLMT (preset) | claude | API Key | ✅ | ✅ | ❌ | ⚠️ Per request | | Kimi Coding | openai | OAuth / API Key | ✅ | ✅ | ✅ | ❌ | | KIE | openai | API Key | ✅ | ✅ | ❌ | ❌ | -| Windsurf | openai | OAuth (Codeium) | ✅ | ✅ | ✅ | ⚠️ Per request | +| Devin Desktop | openai | Imported API key | ✅ (Connect→SSE) | ✅ | ❌ | ⚠️ Per request | | GitLab Duo | openai | OAuth (GitLab) | ✅ | ✅ | ✅ | ❌ | -| Devin CLI | openai | OAuth | ✅ | ✅ | ✅ | ✅ Task API | +| Devin CLI | openai | Local CLI login | ✅ | ✅ | ❌ | ✅ Task API | | Codex Cloud | openai-responses | OAuth | ✅ | ❌ | ✅ | ✅ Rate limits | | Jules | openai | OAuth | ✅ | ✅ | ✅ | ✅ Task API | | AgentRouter | openai | API Key | ✅ | ✅ | ❌ | ❌ | diff --git a/docs/architecture/CODEBASE_DOCUMENTATION.md b/docs/architecture/CODEBASE_DOCUMENTATION.md index 02b2e68920..e12317863b 100644 --- a/docs/architecture/CODEBASE_DOCUMENTATION.md +++ b/docs/architecture/CODEBASE_DOCUMENTATION.md @@ -293,7 +293,7 @@ table groups the actual directories and notable top-level files. | `jobs/` | Background jobs (`autoUpdate.ts`, …) | | `memory/` | Persistent memory: `store.ts`, `cache.ts`, `retrieval.ts`, `summarization.ts`, `extraction.ts`, `injection.ts`, `qdrant.ts`, `settings.ts`, `verify.ts`, `schemas.ts`, `types.ts` | | `monitoring/` | `observability.ts` | -| `oauth/` | OAuth providers (13): `antigravity`, `claude`, `cline`, `codex`, `cursor`, `gemini`, `github`, `gitlab-duo`, `kilocode`, `kimi-coding`, `kiro`, `qoder`, `windsurf` plus `services/`, `utils/{pkce, server, banner, codexAuthFile, ui}`, `constants/oauth.ts` | +| `oauth/` | OAuth/import provider modules (22): `agy`, `antigravity`, `claude`, `cline`, `codebuddy-cn`, `codex`, `cursor`, `devin-desktop`, `ghe-copilot`, `github`, `gitlab-duo`, `grok-cli-oauth`, `grok-cli`, `kilocode`, `kimi-coding`, `kiro`, `qoder`, `raycast`, `trae`, `xai-oauth`, `zed-hosted`, `zed`, plus `services/`, `utils/`, and `constants/oauth.ts` | | `plugins/` | Plugin loader (`index.ts`) | | `promptCache/` | `prefixAnalyzer.ts`, `index.ts` | | `providerModels/` | Managed model lifecycle: `modelDiscovery.ts`, `managedModelImport.ts`, `managedAvailableModels.ts`, `cursorAgent.ts` | @@ -452,12 +452,12 @@ open-sse/ ├── types.d.ts ├── config/ Provider registries, header profiles, identity, … ├── handlers/ Request handlers (chat, embeddings, audio, image, …) -├── executors/ 89 provider-specific HTTP executors +├── executors/ 101 provider-specific HTTP executors ├── translator/ Format conversion (OpenAI ↔ Claude ↔ Gemini ↔ Cursor ↔ Kiro) ├── transformer/ Responses API ↔ Chat Completions stream transformer ├── services/ 80+ service modules (combos, fallback, quotas, identity, …) ├── utils/ Streaming helpers, TLS client, AWS SigV4, proxy fetch, … -└── mcp-server/ MCP server (3 transports, 32 scopes, 99 tools) +└── mcp-server/ MCP server (3 transports, 31 scopes, 105 tools) ``` ### 4.1 `open-sse/handlers/` @@ -482,16 +482,16 @@ open-sse/ ### 4.2 `open-sse/executors/` -84 provider executors, each extending `BaseExecutor` (`base.ts`): +101 provider executors, each extending `BaseExecutor` (`base.ts`): `antigravity`, `azure-openai`, `blackbox-web`, `chatgpt-web`, `cliproxyapi`, `cloudflare-ai`, `codex`, `commandCode`, `cursor`, `default`, `devin-cli`, `muse-spark-web`, `nlpcloud`, `opencode`, `perplexity-web`, `petals`, -`pollinations`, `puter`, `qoder`, `vertex`, `windsurf`, plus `claudeIdentity.ts` +`pollinations`, `puter`, `qoder`, `vertex`, `devin-desktop`, plus `claudeIdentity.ts` (shared identity helper) and `index.ts` (registry). > Note: providers not listed here are served by `default.ts` using the generic -> OpenAI-compatible executor. The full provider catalog (268 entries) lives in +> OpenAI-compatible executor. The full provider catalog (338 providers) lives in > `src/shared/constants/providers.ts`. ### 4.3 `open-sse/translator/` @@ -524,7 +524,7 @@ Highlights (full list under `open-sse/services/`): | Concern | Files | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Combo routing | `combo.ts` (17 strategies), `comboConfig.ts`, `comboMetrics.ts`, `comboManifestMetrics.ts`, `comboAgentMiddleware.ts` | +| Combo routing | `combo.ts` (19 strategies), `comboConfig.ts`, `comboMetrics.ts`, `comboManifestMetrics.ts`, `comboAgentMiddleware.ts` | | Auto Combo engine | `autoCombo/` — `engine.ts`, `scoring.ts`, `taskFitness.ts`, `virtualFactory.ts`, `modePacks.ts`, `autoPrefix.ts`, `persistence.ts`, `providerDiversity.ts`, `providerRegistryAccessor.ts`, `routerStrategy.ts`, `selfHealing.ts`, `index.ts` | | Resilience | `accountFallback.ts` (cooldown + lockout), `errorClassifier.ts`, `emergencyFallback.ts`, `rateLimitManager.ts`, `rateLimitSemaphore.ts`, `accountSemaphore.ts`, `accountSelector.ts` | | Quotas | `quotaMonitor.ts`, `quotaPreflight.ts`, `bailianQuotaFetcher.ts`, `codexQuotaFetcher.ts`, `deepseekQuotaFetcher.ts`, `openrouterQuotaFetcher.ts`, `openrouterFreeWindow.ts`, `crofUsageFetcher.ts`, `antigravityCredits.ts` | @@ -544,7 +544,7 @@ Highlights (full list under `open-sse/services/`): 5 compression tools, 3 memory tools, 4 skills tools, plus advanced tools added through `advancedTools.ts`). - **3 transports**: stdio, HTTP Streamable, SSE. -- **13 scopes** declared in `src/shared/constants/mcpScopes.ts`. +- **31 scopes** declared in `src/shared/constants/mcpScopes.ts`. - Audit table: `mcp_tool_audit` (populated by `audit.ts`). - Files: `server.ts`, `index.ts`, `httpTransport.ts`, `audit.ts`, `scopeEnforcement.ts`, `runtimeHeartbeat.ts`, `descriptionCompressor.ts`, `schemas/{tools, a2a, audit, index}.ts`, @@ -634,17 +634,17 @@ Two binaries are exposed in `package.json` → `bin`: ## 7. `tests/` -| Directory | Type | -| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- | -| `tests/unit/` | Unit tests via Node native test runner (1821 files, plus `api/`, `auth/`, `authz/` subdirs) | -| `tests/integration/` | Cross-module + DB-state tests | -| `tests/e2e/` | Playwright UI tests | -| `tests/protocols-e2e/` | MCP/A2A protocol e2e | -| `tests/translator/` | Translator-specific tests | -| `tests/security/` | Security regressions | -| `tests/load/` | Load / stress tests | -| `tests/golden-set/` | Reference outputs for translator regressions | -| `tests/helpers/`, `tests/fixtures/`, `tests/manual/`, `tests/scratch_test.mjs` | Support | +| Directory | Type | +| ---------------------------------------------------- | ------------------------------------------------------------------------------------------- | +| `tests/unit/` | Unit tests via Node native test runner (1821 files, plus `api/`, `auth/`, `authz/` subdirs) | +| `tests/integration/` | Cross-module + DB-state tests | +| `tests/e2e/` | Playwright UI tests | +| `tests/protocols-e2e/` | MCP/A2A protocol e2e | +| `tests/translator/` | Translator-specific tests | +| `tests/security/` | Security regressions | +| `tests/load/` | Load / stress tests | +| `tests/golden-set/` | Reference outputs for translator regressions | +| `tests/helpers/`, `tests/fixtures/`, `tests/manual/` | Support | Common commands: diff --git a/docs/architecture/MONITORING_SECTIONS.md b/docs/architecture/MONITORING_SECTIONS.md index ca03a1136c..3fa9657caa 100644 --- a/docs/architecture/MONITORING_SECTIONS.md +++ b/docs/architecture/MONITORING_SECTIONS.md @@ -142,5 +142,5 @@ Namespaces added by Group B: | `sidebar.costsOverview` | Costs overview item | | `activity.*` | All Activity page strings (title, verbs, filters, empty state) | -Source-of-truth locales: `pt-BR` and `en`. All other 39 locales fall back to +Source-of-truth locales: `pt-BR` and `en`. All other 41 locales fall back to English via the `next-intl` fallback mechanism (configured in `src/i18n/config.ts`). diff --git a/docs/architecture/QUALITY_GATES.md b/docs/architecture/QUALITY_GATES.md index 34c05d0699..63fbdea72f 100644 --- a/docs/architecture/QUALITY_GATES.md +++ b/docs/architecture/QUALITY_GATES.md @@ -9,7 +9,9 @@ It describes each gate, what it validates, which CI job it runs in, whether it u a ratchet baseline or a pass/fail policy, and whether it blocks the build or is advisory. For a short summary and the allowlist policy, see the "Quality Gates & Ratchets" section -in `CLAUDE.md`. +in `CLAUDE.md`. For the critical assessment, maturity classification, and tool-agnostic +replication plan of the same system, see the +[Quality Gate Playbook](../ops/QUALITY_GATE_PLAYBOOK.md). --- @@ -205,7 +207,7 @@ Runs after `build`. Blocks merge on failure. | Suite | Validates | Blocking | | ---------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | -| `test:vitest` | MCP server (94 tools), autoCombo, cache — vitest runner | Yes | +| `test:vitest` | MCP server (105 tools), autoCombo, cache — vitest runner | Yes | | `test:vitest:ui` | UI component tests — vitest runner | **Blocking** — pre-existing failures are explicitly excluded in `vitest.config.ts`; new failures fail the job | ### Nightly workflows (scheduled, advisory) diff --git a/docs/architecture/REPOSITORY_MAP.md b/docs/architecture/REPOSITORY_MAP.md index 20c31c4829..5cee8f04a0 100644 --- a/docs/architecture/REPOSITORY_MAP.md +++ b/docs/architecture/REPOSITORY_MAP.md @@ -182,7 +182,7 @@ src/ | `compliance/` | Audit log + provider audit — see `docs/security/COMPLIANCE.md` | | `compression/` | Compression engine glue (engines live in `open-sse/services/compression/`) | | `config/` | Runtime config helpers | -| `db/` | 95+ domain DB modules + 110+ migrations (always go through here for SQLite) | +| `db/` | 95+ domain DB modules + 144 migrations (always go through here for SQLite) | | `quota/` | Quota Sharing Engine: `dimensions.ts` (types/Zod), `types.ts` (QuotaStore interface), `sqliteQuotaStore.ts`, `redisQuotaStore.ts`, `storeFactory.ts`, `fairShare.ts`, `burnRate.ts`, `planResolver.ts`, `planRegistry.ts`, `saturationSignals.ts`, `enforce.ts`, `spendRecorder.ts` — see `docs/routing/QUOTA_SHARE.md` | | `radar/` | Radar free-model catalog client: `feedSchema.ts`, `pinnedKeys.ts`, `verify.ts`, `sync.ts`, `applyFeed.ts`, `index.ts` (`getRadarCatalog()`) — see `docs/frameworks/RADAR.md` | | `display/` | UI formatting helpers (cost, latency, etc.) | @@ -196,7 +196,7 @@ src/ | `memory/vectorStore.ts` | sqlite-vec v0.1.9 wrapper — KNN brute-force + hybrid RRF (FTS5 + vector, k=60). Lazy-init, degrades gracefully when sqlite-vec unavailable. (plan 21) | | `memory/reindex.ts` | `runReindexBatch()` — processes memories with `needs_reindex=1` in background; called by `POST /api/memory/reindex` and lazy-backfill path. (plan 21) | | `monitoring/` | Health checks, metrics emission | -| `oauth/` | OAuth flows for 13 providers (claude, codex, antigravity, cursor, github, gemini, kimi-coding, kilocode, cline, kiro, qoder, gitlab-duo, windsurf) | +| `oauth/` | OAuth/import flows for 22 provider modules (agy, antigravity, claude, cline, codebuddy-cn, codex, cursor, devin-desktop, ghe-copilot, github, gitlab-duo, grok-cli-oauth, grok-cli, kilocode, kimi-coding, kiro, qoder, raycast, trae, xai-oauth, zed-hosted, zed) | | `plugins/` | Plugin registry | | `promptCache/` | Anthropic-style prompt cache breakpoints | | `skills/` | Skills framework (built-in + marketplace + SkillsSH) — see `docs/frameworks/SKILLS.md` | @@ -209,7 +209,7 @@ src/ | `cacheLayer.ts`, `idempotencyLayer.ts` | Request caching + idempotency | | (~30 more top-level files) | Specialized helpers (logEnv, modelsDevSync, piiSanitizer, etc.) | -### `src/db/` — Database (94 modules + 106 migrations) +### `src/db/` — Database (117 modules + 144 migrations) | Subdir | Purpose | | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -244,9 +244,9 @@ src/ | Module | Purpose | | -------------------------------- | ---------------------------------------------------------------------- | -| `constants/providers.ts` | **236 providers** with Zod validation (source of truth) | +| `constants/providers.ts` | **338 providers** with Zod validation (source of truth) | | `constants/cliTools.ts` | External CLI tool registry | -| `constants/routingStrategies.ts` | **17 routing strategies** with priorities | +| `constants/routingStrategies.ts` | **19 routing strategies** with priorities | | `constants/publicApiRoutes.ts` | Routes that require Bearer (vs management) auth | | `constants/upstreamHeaders.ts` | Header denylist for upstream requests | | `validation/schemas.ts` | ~80 Zod schemas (single source of truth for API contracts) | @@ -270,7 +270,7 @@ open-sse/ ├── translator/ # Format converters (9 request, 9 response, 9 helpers) ├── transformer/ # Responses API ↔ Chat Completions (TransformStream) ├── services/ # ~80+ service modules (combo, accountFallback, autoCombo, reasoningCache, claude code/chatgpt stealth, modelDeprecation, taskAwareRouter, workflowFSM, etc.) -├── mcp-server/ # MCP server (99 tools, 3 transports, 32 scopes) +├── mcp-server/ # MCP server (105 tools, 3 transports, 31 scopes) ├── config/ # Provider/model registries, header config, model aliases ├── utils/ # TLS client, proxy fetch/dispatcher, network helpers ├── index.ts # Workspace entry @@ -398,16 +398,16 @@ open-sse/ | `COVERAGE_PLAN.md` | Coverage goals and current state | | `FREE_TIERS.md` | Curated free-tier providers (48+ free + 11 OAuth) | | `CLI-TOOLS.md` | External CLI integrations + Internal OmniRoute CLI | -| `I18N.md` | i18n architecture, adding a language, 30 locales | +| `I18N.md` | i18n architecture, adding a language, 43 locales | | `UNINSTALL.md` | Clean uninstall steps | -| `PROVIDER_REFERENCE.md` | **Auto-generated** catalog of 236 providers (regen: `npm run gen:provider-reference`) | +| `PROVIDER_REFERENCE.md` | **Auto-generated** catalog of 338 providers (regen: `npm run gen:provider-reference`) | ### Subsystem deep-dives | Doc | Purpose | | -------------------------- | ------------------------------------------------------------------- | -| `MCP-SERVER.md` | MCP server: 99 tools, 3 transports, 32 scopes, REST endpoints | -| `A2A-SERVER.md` | A2A v0.3: JSON-RPC, 5 skills, REST helpers, agent card | +| `MCP-SERVER.md` | MCP server: 105 tools, 3 transports, 31 scopes, REST endpoints | +| `A2A-SERVER.md` | A2A v0.3: JSON-RPC, 6 skills, REST helpers, agent card | | `AGENT_PROTOCOLS_GUIDE.md` | Unified guide: A2A vs ACP vs Cloud Agents | | `CLOUD_AGENT.md` | Codex Cloud / Devin / Jules orchestration | | `SKILLS.md` | Skills framework (built-in + marketplace + SkillsSH + sandbox) | diff --git a/docs/architecture/meta.json b/docs/architecture/meta.json index 08128f7ec4..dba5872324 100644 --- a/docs/architecture/meta.json +++ b/docs/architecture/meta.json @@ -6,6 +6,12 @@ "CODEBASE_DOCUMENTATION", "REPOSITORY_MAP", "RESILIENCE_GUIDE", - "QUALITY_GATES" + "QUALITY_GATES", + "DESIGN_SYSTEM", + "MONITORING_SECTIONS", + "ROUTER_BACKENDS", + "admission-lanes", + "cluster-decisions", + "persistence-backend-boundary" ] } diff --git a/docs/architecture/mysql-conformance-semantics.md b/docs/architecture/mysql-conformance-semantics.md deleted file mode 100644 index 849f220b13..0000000000 --- a/docs/architecture/mysql-conformance-semantics.md +++ /dev/null @@ -1,916 +0,0 @@ ---- -title: "MySQL conformance semantics and failure-mode matrix" -status: proposed-test-specification -lastUpdated: 2026-07-30 ---- - -# MySQL conformance semantics and failure-mode matrix - -- **Tracking issue:** [#8075](https://github.com/diegosouzapw/OmniRoute/issues/8075) -- **Governing proposal:** [Pluggable persistence boundary](persistence-backend-boundary.md) -- **Measured baseline:** [SQLite coupling inventory](sqlite-coupling-inventory.md) -- **Target:** MySQL 8.0 with InnoDB -- **Runtime impact:** None. This document adds no driver, dependency, configuration, schema, - migration, or support claim. - -## 1. Purpose and normative language - -The persistence-boundary ADR requires conformance tests to compare observable behavior, not only -repository method signatures. This document turns the MySQL/InnoDB differences that can change -OmniRoute behavior into an implementation-ready specification. It provides: - -- a required server and session profile; -- evidence from the current SQLite implementation; -- minimal SQL probes that reviewers can reproduce independently; -- a backend-neutral error and retry taxonomy; -- normative decisions that a repository contract must make; -- executable acceptance specifications for a future shared conformance harness; -- a focused acceptance profile for combo definitions and model-to-combo mappings. - -The terms **MUST**, **MUST NOT**, **SHOULD**, and **MAY** are normative. A proposed MySQL adapter is -not conformant merely because its SQL succeeds. It is conformant only when the same repository -fixture produces the same domain result, durable state, atomicity, ordering, and classified failure -as the SQLite implementation. - -## 2. Scope and non-goals - -### 2.1 In scope - -This specification covers portable durable-state behavior for: - -- create, read, update, delete, and missing-row results; -- uniqueness, collation, case and accent sensitivity, and `NULL`; -- stable ordering and pagination; -- no-op writes and affected-row reporting; -- insert, identity-preserving upsert, and replacement; -- IDs, JSON, exact numerics, and timestamps; -- transactions, deadlocks, lock waits, disconnects, and retry boundaries; -- foreign keys and atomic related-record changes; -- migration ownership, implicit DDL commits, recovery, and readiness. - -### 2.2 Out of scope - -This specification does not: - -- approve PostgreSQL or MySQL runtime support; -- select a Node.js MySQL driver or pool; -- define a public environment variable or configuration UI; -- define final TypeScript repository interfaces; -- add physical MySQL schema or migration files; -- make SQLite maintenance, FTS5, `sqlite-vec`, backup files, or WAL portable; -- replace domain-specific acceptance criteria; -- permit runtime work while the governing ADR remains unapproved. - -## 3. Evidence from the current repository - -The current implementation establishes behavior that a portable contract must either preserve or -explicitly revise. These are source-backed observations, not proposed MySQL schema. - -### 3.1 Combo identity and lookup - -`src/lib/db/migrations/001_initial_schema.sql` defines `combos.id` as the primary key and -`combos.name` as unique. `src/lib/db/combos.ts` currently: - -- generates UUIDs in the application; -- generates timestamps with `new Date().toISOString()`; -- performs exact name lookup first; -- provides a separate `COLLATE NOCASE` fallback lookup; -- lists by `sort_order ASC, name COLLATE NOCASE ASC`; -- treats an update of a missing ID as `null`; -- treats deletion of a missing ID as `false`; -- updates the JSON payload and deduplicated columns together; -- reorders all selected rows in one SQLite transaction. - -Those choices imply that a future MySQL slice does not need database-generated numeric IDs for -combos, but it must still define Unicode collation, complete tie-breakers, update/delete results, and -reorder concurrency. - -### 3.2 Model-to-combo mapping behavior - -`src/lib/db/migrations/010_model_combo_mappings.sql` defines a foreign key from -`model_combo_mappings.combo_id` to `combos.id` with `ON DELETE CASCADE`. -`src/lib/db/modelComboMappings.ts` currently: - -- generates mapping UUIDs and ISO timestamps in the application; -- lists by `priority DESC, created_at ASC`; -- returns a separate total count for paginated results; -- maps integer `0`/`1` values to booleans; -- treats a missing update as `null` and a missing delete as `false`; -- resolves the first enabled matching pattern; -- skips malformed combo JSON rather than failing resolution. - -The current list and resolution order lacks a unique final tie-breaker. The MySQL implementation -MUST NOT preserve that accidental nondeterminism. Before portability is claimed, the contract must -add `id ASC` (or another unique stable key) after `created_at ASC` and the SQLite implementation -must adopt the same order. - -### 3.3 Existing SQLite-specific signals - -The measured SQLite coupling inventory records widespread use of synchronous prepared statements, -`INSERT OR REPLACE`, `lastInsertRowid`, SQLite transactions, and SQLite lifecycle operations. A -future adapter must not translate those tokens mechanically. In particular: - -- `INSERT OR REPLACE` is delete-then-insert conflict handling, not an update; -- `changes` is a driver result, not a portable domain result; -- `COLLATE NOCASE` is not equivalent to a modern MySQL Unicode collation; -- SQLite numbered migration SQL is not reusable as MySQL migration SQL. - -## 4. Required MySQL deployment and session profile - -A conformance run MUST fail during backend initialization if the effective profile is outside the -supported envelope. Silently inheriting server defaults would make behavior depend on an operator's -installation history. - -| Property | Required profile | Verification | Failure class | -| ------------------------ | ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | --------------------- | -| Server family | Oracle MySQL 8.0.x until another family passes the same suite | `SELECT VERSION()` and server metadata | `unsupported` | -| Storage engine | `InnoDB` for every portable table | `information_schema.tables` | `schema_incompatible` | -| Character set | `utf8mb4` for schema, tables, and portable text columns | `information_schema.schemata`, `tables`, and `columns` | `schema_incompatible` | -| Identity collation | Explicit per identity column; never inherited | `information_schema.columns.collation_name` | `schema_incompatible` | -| SQL mode | Strict mode and the engine-substitution guard; adapter records the effective value | `SELECT @@SESSION.sql_mode` | `unsupported` | -| Transaction isolation | Explicitly selected and verified by the backend | `SELECT @@SESSION.transaction_isolation` | `unsupported` | -| Session time zone | UTC | `SELECT @@SESSION.time_zone` | `unsupported` | -| Autocommit | Known pool default; repository transactions set boundaries explicitly | `SELECT @@SESSION.autocommit` | `unsupported` | -| Connection character set | `utf8mb4` | `SELECT @@character_set_client, @@character_set_connection, @@character_set_results` | `unsupported` | -| Found-rows behavior | One fixed pool setting, but repository results remain independent of it | Driver/pool configuration plus conformance probe | `unsupported` | -| Foreign-key checks | Enabled for normal runtime and conformance tests | `SELECT @@SESSION.foreign_key_checks` | `unsupported` | -| InnoDB page size | Recorded before validating indexed key lengths | `SELECT @@innodb_page_size` | `schema_incompatible` | - -The backend readiness report SHOULD expose the verified profile without credentials. It MUST NOT -log connection strings or secrets. - -### 4.1 Initialization probe - -The adapter acceptance suite should run an equivalent of the following read-only probe on a newly -leased connection: - -```sql -SELECT - VERSION() AS server_version, - @@SESSION.sql_mode AS sql_mode, - @@SESSION.transaction_isolation AS transaction_isolation, - @@SESSION.time_zone AS time_zone, - @@SESSION.autocommit AS autocommit, - @@SESSION.foreign_key_checks AS foreign_key_checks, - @@character_set_client AS character_set_client, - @@character_set_connection AS character_set_connection, - @@character_set_results AS character_set_results, - @@innodb_page_size AS innodb_page_size; -``` - -A pool MUST apply and verify session settings on every newly created physical connection. Applying -settings only to the first connection is insufficient. - -## 5. Normative semantic matrix - -### 5.0 Observable SQLite/MySQL difference summary - -This table is the review index for the detailed rules below. It distinguishes current or common -backend behavior from the portable result the repository must expose. The MySQL column describes -InnoDB under the verified session profile; it must not be read as permission to inherit an -unverified server default. - -| Concern | SQLite-shaped behavior | MySQL/InnoDB behavior | Required repository contract | -| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- | -| Text identity | Binary comparison by default; current code opts into ASCII-oriented `NOCASE` for selected reads and sorts | Equality, uniqueness, and sort order follow the selected column/expression collation | Declare byte-exact identity separately from named insensitive lookup and display order | -| Nullable unique key | Multiple SQL `NULL` values can pass a plain unique constraint | Multiple SQL `NULL` values can pass a plain unique index | Enforce any "one logical null" invariant atomically outside a plain unique key | -| Unordered/tied results | No total order without a complete `ORDER BY` | No total order without a complete `ORDER BY` | Define `NULL` position and a unique final tie-breaker for every portable list | -| No-op update | Driver change count reflects SQLite's statement behavior | Changed-row count differs from matched-row mode for identical assignments | Return domain outcomes independently of raw affected-row counts | -| Conflict write | `INSERT OR REPLACE` can delete then insert | Duplicate-key upsert updates one selected conflict | Classify every operation as insert-only, identity-preserving upsert, or replacement | -| Generated identity | SQLite row IDs and driver-local last-insert state are connection-bound | Generated IDs and last-insert state are connection-bound | Retrieve identity in the insert operation/lease and use stable idempotency identity on retry | -| JSON | Existing combo payloads are text and malformed legacy text can be observed | Native `JSON` validates and normalizes its representation | Choose text or typed JSON deliberately and compare the declared domain representation | -| Exact values/time | Current modules commonly serialize JavaScript values and ISO UTC text | Driver conversion can lose large integers/decimals; temporal types depend on type and session zone | Fix exact representations, UTC policy, and precision across backends | -| Concurrency/isolation | Deferred transactions and a database-wide single-writer model shape conflicts; read visibility depends on transaction mode and WAL state | InnoDB defaults to `REPEATABLE READ`, uses MVCC snapshots for consistent reads, and permits concurrent writers on different locked records | Select and verify isolation, then test domain-visible reads, conflicts, and retry boundaries rather than relying on either default | -| DDL/migrations | SQLite migration sequences can be wrapped according to SQLite transaction rules | DDL commonly commits implicitly; one atomic DDL statement does not make a multi-step migration atomic | Use distributed ownership, durable phase checkpoints, postcondition inspection, and readiness gating | - -### 5.1 Text identity, collation, and uniqueness - -MySQL equality and unique indexes use the effective collation of the indexed expression. A `_ci` -collation is case-insensitive; an `_ai` collation is also accent-insensitive. SQLite's default text -comparison and `COLLATE NOCASE` do not provide an equivalent Unicode contract. - -| Concern | SQLite-shaped risk | Required portable decision | MySQL implementation rule | -| ---------------- | -------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | -| IDs | Text IDs can inherit an unintended collation | IDs are byte-exact and case-sensitive | Use an explicit binary collation or binary representation | -| Combo names | Exact lookup and insensitive fallback are separate today | Exact lookup remains exact; insensitive lookup is a named operation | Exact and insensitive queries use explicit, different collations or normalized keys | -| Unique names | A server default can collapse case or accents | The domain declares whether case/accent variants conflict | Unique index uses the declared collation, never the database default | -| Pattern text | Pattern matching occurs in application code | Stored pattern bytes round-trip unchanged | Store with an explicit case-sensitive collation | -| User-facing sort | SQLite `NOCASE` order is not portable Unicode order | List order is defined by a normalized sort key or explicit collation policy | Schema and query use the selected policy and a unique tie-breaker | - -Minimum probe: - -```sql -CREATE TEMPORARY TABLE conformance_text ( - id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin PRIMARY KEY, - name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci UNIQUE -) ENGINE=InnoDB; - -INSERT INTO conformance_text (id, name) VALUES ('A', 'Résumé'); --- The next statement conflicts under utf8mb4_0900_ai_ci. -INSERT INTO conformance_text (id, name) VALUES ('a', 'resume'); -``` - -The harness MUST repeat the probe for the exact collation selected by the eventual schema; the -example collation above is evidence, not an approval for combo names. - -### 5.2 `NULL`, missing rows, and nullable unique keys - -MySQL unique indexes permit multiple `NULL` values. SQLite does likewise for unique columns. -However, neither behavior implements a domain invariant such as "only one active row may have no -owner." - -Repository contracts MUST distinguish: - -- no row found; -- a row found with a nullable field set to SQL `NULL`; -- a JSON document containing JSON `null`; -- a missing JSON member. - -Minimum probe: - -```sql -CREATE TEMPORARY TABLE conformance_null ( - id VARCHAR(64) PRIMARY KEY, - optional_key VARCHAR(64) NULL, - UNIQUE KEY uq_optional_key (optional_key) -) ENGINE=InnoDB; - -INSERT INTO conformance_null VALUES ('one', NULL), ('two', NULL); -SELECT COUNT(*) AS row_count FROM conformance_null; --- Expected: 2. -``` - -If a domain allows at most one logical `NULL`, it MUST use an explicit atomic invariant rather than -rely on a plain unique index. - -### 5.3 Ordering, ties, and pagination - -Without `ORDER BY`, result order is undefined. With a non-unique `ORDER BY`, tied rows still have an -undefined relative order. Offset pagination can therefore duplicate or omit records if the complete -order is not stable. - -Every portable list MUST specify: - -1. every user-visible sort expression; -2. the position of `NULL` values; -3. a unique final tie-breaker; -4. the cursor comparison tuple, if cursor pagination is used; -5. the snapshot/concurrency expectation across pages. - -For the proposed combo/mapping slice: - -```sql --- Combo list contract candidate. -ORDER BY sort_order ASC, normalized_name ASC, id ASC - --- Mapping list and resolution contract candidate. -ORDER BY priority DESC, created_at ASC, id ASC -``` - -The exact `normalized_name` representation remains a contract decision. It MUST NOT be implemented -by relying on an unspecified database default. - -For nullable values, use an explicit sort key rather than a backend default: - -```sql -ORDER BY nullable_column IS NULL ASC, nullable_column ASC, id ASC -``` - -### 5.4 Update, no-op, delete, and affected rows - -MySQL `UPDATE` reports rows actually changed by default. With the C API found-rows connection flag, -it reports rows matched. `INSERT ... ON DUPLICATE KEY UPDATE` reports 1 for insert, 2 for an actual -update, and 0 for an update to identical values; the found-rows flag changes the last value to 1. -These numbers MUST NOT become repository semantics. - -| Repository outcome | Required meaning | Forbidden implementation shortcut | -| ------------------ | ------------------------------------------------------ | --------------------------------------------- | -| `updated` | Target existed and the operation's postcondition holds | `affectedRows > 0` alone | -| `unchanged` | Target existed and already satisfied the postcondition | Treating 0 changed rows as missing | -| `not_found` | Target identity did not exist | Treating every 0 count as unchanged | -| `conflict` | Compare/update version or invariant failed | Returning generic `false` | -| delete `true` | A row existed and was deleted | Assuming a successful statement deleted a row | -| delete `false` | No row existed | Throwing a backend-specific error | - -Minimum probe, run once with each supported connection mode: - -```sql -CREATE TEMPORARY TABLE conformance_update ( - id VARCHAR(64) PRIMARY KEY, - value_text VARCHAR(64) NOT NULL, - version_no BIGINT NOT NULL -) ENGINE=InnoDB; - -INSERT INTO conformance_update VALUES ('row', 'same', 1); -UPDATE conformance_update SET value_text = 'same' WHERE id = 'row'; -UPDATE conformance_update SET value_text = 'changed' WHERE id = 'row'; -UPDATE conformance_update SET value_text = 'missing' WHERE id = 'missing'; -``` - -The harness asserts repository results and final rows, not raw driver counts. A versioned -compare/update SHOULD use a predicate such as `WHERE id = ? AND version_no = ?`, then distinguish a -missing identity from a stale version according to the domain contract. - -### 5.5 Insert, upsert, and replacement - -SQLite `INSERT OR REPLACE` deletes rows that conflict with a unique or primary key before inserting -the new row. MySQL `INSERT ... ON DUPLICATE KEY UPDATE` updates one conflicting row. The two forms -differ in foreign-key cascades, triggers, omitted columns, IDs, timestamps, and affected-row counts. - -Every write method MUST be classified as exactly one of: - -1. **insert-only:** duplicate identity returns `unique_violation`; -2. **identity-preserving upsert:** duplicate identity updates an explicit allowlist of mutable fields; -3. **replacement:** old identity is deleted and a new row is inserted, with cascade effects included - in the contract. - -A generic helper MUST NOT choose among these behaviors based on SQL convenience. - -Minimum difference probe. This uses ordinary InnoDB tables because MySQL temporary tables cannot -serve as the parent/child foreign-key fixture. Run it in an isolated conformance schema; cleanup is -included so the probe is repeatable: - -```sql -DROP TABLE IF EXISTS conformance_child; -DROP TABLE IF EXISTS conformance_parent; - -CREATE TABLE conformance_parent ( - id VARCHAR(64) PRIMARY KEY, - immutable_value VARCHAR(64) NOT NULL, - mutable_value VARCHAR(64) NOT NULL -) ENGINE=InnoDB; - -CREATE TABLE conformance_child ( - id VARCHAR(64) PRIMARY KEY, - parent_id VARCHAR(64) NOT NULL, - CONSTRAINT fk_conformance_child_parent - FOREIGN KEY (parent_id) REFERENCES conformance_parent(id) ON DELETE CASCADE -) ENGINE=InnoDB; - -INSERT INTO conformance_parent VALUES ('p', 'keep', 'old'); -INSERT INTO conformance_child VALUES ('c', 'p'); -INSERT INTO conformance_parent (id, immutable_value, mutable_value) -VALUES ('p', 'replacement', 'new') -ON DUPLICATE KEY UPDATE mutable_value = VALUES(mutable_value); - -SELECT immutable_value, mutable_value FROM conformance_parent WHERE id = 'p'; -SELECT COUNT(*) AS child_count FROM conformance_child WHERE parent_id = 'p'; --- Expected: immutable_value='keep', mutable_value='new', child_count=1. - -DROP TABLE conformance_child; -DROP TABLE conformance_parent; -``` - -The `VALUES(mutable_value)` form is used here because the target remains MySQL 8.0 as a family and -no minimum 8.0 patch release has been approved. It is deprecated in later MySQL 8.0 releases, so an -adapter that establishes a newer minimum MAY use the supported row-alias form instead. The harness -asserts identity-preserving behavior, not either SQL spelling. - -Tables with multiple unique indexes require special care because a duplicate can select an -unexpected conflicting row. Portable upsert schema SHOULD have one unambiguous conflict identity. - -### 5.6 Unicode and index-size constraints - -`utf8mb4` uses up to four bytes per character. InnoDB's maximum index key is 3072 bytes for common -`DYNAMIC` or `COMPRESSED` row formats with a 16 KiB page, and is lower for smaller page sizes or -legacy row formats. A prefix unique index is not equivalent to full-value uniqueness. - -Schema acceptance MUST: - -- set bounded lengths for all indexed identity strings; -- calculate the worst-case byte length of every composite index; -- verify the actual page size and row format; -- reject a prefix unique index for a full-identity contract; -- test maximum-length non-ASCII values before migration is accepted; -- classify an incompatible definition as `schema_incompatible`, not `unique_violation`. - -Example boundary probe for a 16 KiB/DYNAMIC profile: - -```sql -CREATE TEMPORARY TABLE conformance_index ( - value_text VARCHAR(768) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - UNIQUE KEY uq_value_text (value_text) -) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; -``` - -The exact accepted length MUST be derived from all key parts and the verified deployment profile; -this example is deliberately near a physical boundary and is not a proposed production column. - -### 5.7 IDs and connection-local state - -The current combo and mapping modules generate UUIDs in the application. A MySQL implementation -SHOULD preserve this strategy for those domains. - -If another domain uses a database-generated incrementing ID, the adapter MUST observe these rules: - -- ID retrieval is part of the same driver operation and physical connection as the insert; -- callers never issue a later connection-level `LAST_INSERT_ID()` query; -- multi-row inserts define whether one ID or all IDs are returned; -- an error or rollback makes a previously observed `LAST_INSERT_ID()` unsuitable as proof of commit; -- retries use a stable domain idempotency key; -- upsert defines whether it returns an existing or newly generated identity. - -MySQL documents `LAST_INSERT_ID()` as per-connection state and leaves it undefined after some errors -or error-driven rollbacks. Pool leases are therefore part of correctness, not merely performance. - -### 5.8 JSON representation - -Current combo data is JSON text, and malformed JSON is observable: combo reads can skip malformed -rows and mapping resolution skips malformed combo payloads. Switching the MySQL column directly to -native `JSON` would reject malformed rows at write/import time and normalize duplicate keys, -whitespace, and key order. - -Before choosing `LONGTEXT` or `JSON`, the combo contract MUST decide: - -- whether malformed stored payloads remain representable for compatibility tests; -- whether equality is structural or byte-for-byte; -- whether duplicate object keys are rejected before persistence; -- whether serialization order is stable and application-owned; -- which fields are duplicated into typed columns and which representation is authoritative. - -For the first slice, an identity-preserving migration SHOULD keep application serialization as the -domain boundary. If native `JSON` is selected, imports MUST parse and validate before writing, and -tests MUST compare parsed domain values rather than raw JSON text. - -Minimum normalization probe: - -```sql -CREATE TEMPORARY TABLE conformance_json (id VARCHAR(64) PRIMARY KEY, payload JSON) ENGINE=InnoDB; -INSERT INTO conformance_json VALUES ('j', '{"b": 2, "a": 1, "a": 3}'); -SELECT payload FROM conformance_json WHERE id = 'j'; --- The value is normalized; original whitespace/key duplication is not preserved. -``` - -### 5.9 Exact numerics and timestamps - -| Type | Risk | Required contract | -| ----------- | ----------------------------------------------------- | ----------------------------------------------------------------------- | -| `BIGINT` | Values can exceed JavaScript's safe integer range | Return a string or validated bigint representation across every backend | -| `DECIMAL` | Driver options may return strings or lossy numbers | Fix precision/scale and use an exact domain representation | -| `TIMESTAMP` | Session time zone conversion and fractional precision | Force UTC session time zone and specify fractional precision | -| `DATETIME` | No intrinsic time zone | Use only for explicitly zone-free civil time | -| ISO text | Lexical ordering depends on one canonical format | Validate UTC suffix and exact precision before persistence | - -Combo and mapping timestamps are currently application-generated ISO strings. The first slice SHOULD -preserve their exact domain format rather than introducing server-generated local time. - -### 5.10 Transaction isolation and observable concurrency - -MySQL InnoDB uses `REPEATABLE READ` as its default isolation level. Within an explicit transaction, -its consistent non-locking reads normally establish and reuse an MVCC snapshot, while locking reads -and writes inspect and lock current index records or ranges. SQLite instead combines snapshot/read -transaction behavior with a database-wide single-writer model; transaction mode and WAL state affect -when a writer is admitted and when a read transaction can be upgraded. These mechanisms are not -interchangeable even when a simple CRUD fixture produces the same final row. - -The backend profile MUST select and verify an isolation level rather than silently accept either -backend's default. The repository contract MUST then define observable results for each atomic -operation. It MUST NOT promise the implementation mechanism itself, such as gap locks or a -SQLite-wide writer lock. - -| Scenario | SQLite-shaped risk | InnoDB `REPEATABLE READ` risk | Required conformance decision | -| --------------------------------- | --------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| Two reads in one transaction | Snapshot timing depends on when the read transaction begins and the active journal mode | Consistent reads normally reuse the transaction's first established read view | State whether the operation requires one stable snapshot or deliberately performs a current read | -| Range read plus concurrent insert | A concurrent writer may be serialized by SQLite's writer admission rules | A plain consistent read can retain its snapshot; a locking range read can lock index gaps | Define whether a later read sees the insert and whether the operation requires a locking predicate | -| Read-modify-write | Single-writer serialization can mask an unsafe application sequence | Concurrent transactions can read the same value and later contend or overwrite without a version predicate | Require compare/update, a locking read, or another explicit invariant; never rely on backend serialization | -| Writers touching different rows | SQLite still admits only one writer at a time | InnoDB can execute both until their record/range locks conflict | Do not infer portable throughput or lock order; assert only atomic effects and classified conflicts | -| Pagination across transactions | Separate page reads can observe different committed states | Separate autocommit reads get separate views; one transaction may retain one view | Declare snapshot pagination or documented live pagination and test that policy | -| Retry after conflict | Busy/locked outcomes and transaction upgrade failures are SQLite-shaped | Deadlocks and lock timeouts have different rollback scopes | Normalize the error, discard the failed context, and retry the complete idempotent operation only | - -Minimum two-connection visibility probe for the selected MySQL profile: - -```text -Connection A Connection B -SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; -START TRANSACTION; -SELECT value_no FROM conformance_isolation - WHERE id = 1; -- establishes read view: 0 - START TRANSACTION; - UPDATE conformance_isolation - SET value_no = 1 WHERE id = 1; - COMMIT; -SELECT value_no FROM conformance_isolation - WHERE id = 1; -- same consistent-read view: 0 -COMMIT; -SELECT value_no FROM conformance_isolation - WHERE id = 1; -- new transaction/view: 1 -``` - -The shared harness MUST NOT assert that every backend reproduces this internal sequence. It must use -it to prove that the chosen repository operation either requests a stable snapshot explicitly or -avoids depending on repeat-read visibility. If an operation uses a current/locking read, that choice -and its conflict behavior need a separate test. - -## 6. Transactions, failures, and retry policy - -### 6.1 Transaction states - -The backend contract should expose only opaque transaction contexts, but its implementation must -maintain the following lifecycle: - -```text -idle - -> active - -> committed - -> rolled_back - -> failed_statement -> rolled_back - -> failed_transaction -> rolled_back - -> outcome_unknown -> reconciled | escalated -``` - -A context in `committed`, `rolled_back`, `failed_transaction`, or `outcome_unknown` MUST reject new -repository work. A context with a failed statement SHOULD be explicitly rolled back before its -connection returns to the pool, even when MySQL would technically permit more statements. - -### 6.2 Error classification matrix - -Numeric codes and SQLSTATE values below are MySQL 8.0 server signals. A Node.js driver can also -produce transport-specific codes; those MUST be normalized without leaking raw messages to callers. - -| Condition | MySQL signal | Rollback scope | Portable class | Retry policy | -| ------------------------------ | -------------------------------------- | ------------------------------------------------- | ------------------------ | -------------------------------------------------------------- | -| Duplicate key | `1062`, SQLSTATE `23000` | Statement | `unique_violation` | No, unless contract defines idempotent create | -| Missing referenced parent | `1452`, SQLSTATE `23000` | Statement | `foreign_key_violation` | No | -| Parent still referenced | `1451`, SQLSTATE `23000` | Statement | `foreign_key_violation` | No | -| Deadlock victim | `1213`, SQLSTATE `40001` | Entire transaction | `transaction_conflict` | Retry whole atomic operation | -| Lock wait timeout | `1205`, SQLSTATE `HY000` | Statement by default; server option can change it | `lock_timeout` | Roll back explicitly, then retry whole operation if idempotent | -| Invalid JSON text | `3140`, SQLSTATE `22032` | Statement | `invalid_data` | No | -| Data too long | `1406`, SQLSTATE `22001` | Statement | `invalid_data` | No | -| Check constraint | `3819`, SQLSTATE `HY000` | Statement | `constraint_violation` | No | -| Server gone before request | Driver/server transport signal | No operation or unknown | `unavailable` | Retry only if operation definitely was not sent | -| Connection lost during request | Driver transport signal | Unknown | `outcome_unknown` | Reconcile by idempotency key; do not blind retry | -| Pool acquisition timeout | Driver/pool signal | None | `unavailable` | Bounded retry outside transaction | -| Unsupported profile | Initialization probe mismatch | None | `unsupported` | No; fail readiness | -| Migration lock timeout | Named-lock acquisition returns timeout | None | `migration_lock_timeout` | Wait/back off according to startup policy | -| Migration lock error | Named-lock acquisition returns error | None | `migration_lock_failed` | No blind retry; inspect connection state | - -The adapter MUST classify by structured code and SQLSTATE where available, never by localized message -text. Public HTTP/SSE/MCP responses must still pass through the repository's existing sanitized error -helpers. - -### 6.3 Retry rules - -A retryable classification does not automatically make an operation safe to retry. - -A retry loop MUST: - -1. own the entire repository atomic operation; -2. discard the failed transaction context; -3. acquire a valid connection and begin a new transaction; -4. preserve a stable operation or entity identity; -5. use bounded attempts with jitter; -6. stop on non-retryable classifications; -7. reconcile `outcome_unknown` before issuing another write; -8. emit structured diagnostics without credentials or raw SQL values. - -MySQL explicitly recommends retrying the entire transaction after a deadlock. A lock wait timeout -rolls back only the current statement by default, so explicit rollback is required to make the retry -boundary independent of server configuration. - -### 6.4 Reproducible two-connection deadlock probe - -Use two physical connections, not two logical operations that might share one pool connection: - -```sql -CREATE TABLE conformance_deadlock ( - id INT PRIMARY KEY, - value_no INT NOT NULL -) ENGINE=InnoDB; -INSERT INTO conformance_deadlock VALUES (1, 0), (2, 0); -``` - -```text -Connection A Connection B -START TRANSACTION; START TRANSACTION; -UPDATE ... WHERE id = 1; UPDATE ... WHERE id = 2; -UPDATE ... WHERE id = 2; UPDATE ... WHERE id = 1; -``` - -Exactly one transaction should become the deadlock victim. The harness asserts that the victim is -classified as retryable, its whole transaction is retried with a new context, both logical updates -occur once, and no partial result remains. - -## 7. Migration ownership and DDL recovery - -### 7.1 Why a normal transaction is insufficient - -MySQL DDL statements commonly commit the current transaction implicitly before execution and often -afterward. Atomic DDL protects one supported DDL statement; it does not make a sequence of DDL, -data backfill, and schema-history updates one user transaction. - -A MySQL migration runner therefore MUST model a migration as recoverable phases: - -```text -lock acquired - -> current schema inspected - -> intent/checkpoint recorded - -> DDL phase applied and verified - -> data phase applied in bounded transactions - -> postconditions verified - -> logical milestone recorded - -> readiness allowed - -> lock released -``` - -A process crash at any arrow must have a deterministic resume or stop condition. - -### 7.2 Ownership alternatives - -| Option | Strengths | Failure modes | Decision | -| ------------------------------- | ------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| Process-local mutex | Simple and useful for one process | Does not coordinate replicas | Rejected for external-backend migration ownership | -| Row lock held in a transaction | Uses normal InnoDB locking | DDL implicit commit releases transaction ownership | Rejected as the sole DDL migration lock | -| Lease row with owner and expiry | Survives pooled connections and can support takeover | Requires clock/expiry/fencing design; stale owner may continue | Candidate for scheduled jobs, not first migration mechanism | -| MySQL named lock | Server-wide, exclusive, tied to physical session, released on disconnect | Must pin one connection; not transaction-scoped; one-server scope; undefined waiter order | Recommended first MySQL migration mutex, combined with durable history | -| External coordinator | Can coordinate across database topologies | Adds an operational dependency outside the database contract | Deferred unless deployment topology requires it | - -### 7.3 Recommended first mechanism - -For a single writable MySQL primary, the migration runner SHOULD: - -1. lease and pin one physical connection; -2. acquire one application-and-database-specific named lock of at most 64 characters; -3. distinguish acquired (`1`), timeout (`0`), and error (`NULL`); -4. inspect a durable migration-history table after acquiring the lock; -5. execute idempotent physical phases with explicit postcondition checks; -6. record completion only after all postconditions pass; -7. release the named lock explicitly in `finally`; -8. close/discard the pinned connection if release cannot be confirmed. - -Named locks are released when the session ends, not on commit or rollback. They are server-wide on one -`mysqld`; topology and failover behavior must be validated before active-active support is advertised. -A durable history/checkpoint table remains necessary because lock ownership alone says nothing about -partially completed DDL. - -### 7.4 Migration failure matrix - -| Injection point | Required durable evidence | Restart behavior | Readiness | -| ------------------------------- | --------------------------------------------- | ----------------------------------- | --------------------------------------------- | -| Before lock | No intent | Retry lock acquisition | Not ready while required migration is pending | -| After lock, before intent | No schema change | Reinspect and restart | Not ready | -| After DDL, before checkpoint | Schema postcondition reveals DDL applied | Mark/continue only after validation | Not ready | -| During data backfill | Bounded checkpoint identifies completed range | Resume from verified checkpoint | Not ready | -| After data, before milestone | Postconditions prove completion | Record milestone idempotently | Not ready until recorded | -| After milestone, before release | History proves complete | New owner verifies and proceeds | Ready if all required milestones pass | - -## 8. SQLite-to-MySQL migration validation - -An offline migration tool is required before database switching can be advertised. For each migrated -domain it MUST provide a dry run and a post-import report. - -### 8.1 Preflight - -- verify supported SQLite and MySQL schema milestones; -- validate every source JSON payload according to the chosen target representation; -- detect names that collide under the target collation; -- validate UTF-8 and maximum indexed byte lengths; -- detect orphaned foreign keys even if the source connection had checks disabled; -- validate timestamps and numeric ranges; -- count source rows by table and logical domain; -- refuse to mutate either database during dry run. - -### 8.2 Import - -- preserve application-generated IDs; -- use deterministic batches and checkpoints; -- import parents before children; -- do not use replacement semantics to hide conflicts; -- classify every rejected row with a stable reason; -- keep encrypted credential ciphertext opaque and never log it; -- stop on an unclassified difference. - -### 8.3 Postconditions - -- row counts match for every migrated table; -- identity sets match exactly; -- foreign-key orphan counts are zero; -- canonical domain digests match for JSON-backed records; -- list ordering and mapping resolution produce the same results; -- a second dry run reports no pending changes; -- SQLite remains unchanged and available for operator rollback until cutover is accepted. - -## 9. Backend-neutral conformance catalog - -Each test below runs the same repository fixture against SQLite and MySQL. MySQL-specific probes may -assert error metadata internally, but the shared assertion compares only domain results and durable -state. - -### 9.1 Core CRUD and representation - -| Test name | Fixture/action | Required assertion | -| --------------------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------ | -| `create_round_trips_domain_values` | Create Unicode, nullable, JSON, and timestamp fields | Parsed domain object equals normalized input | -| `find_missing_distinguishes_absent_from_null` | Read an absent ID and a present nullable row | Results are distinct | -| `update_missing_returns_not_found` | Update an absent ID | Stable `not_found` result | -| `delete_is_idempotent_as_declared` | Delete the same ID twice | First and second results match the repository contract | -| `json_round_trips_structurally` | Write equivalent JSON with different whitespace/order | Parsed values are equal; raw text is not asserted | -| `timestamp_round_trips_in_utc` | Change MySQL session default before leasing a verified connection | Domain serialization remains canonical UTC | -| `decimal_round_trips_without_float_loss` | Write precision/scale boundaries | Exact representation is unchanged | -| `large_integer_does_not_cross_number_lossily` | Write beyond JavaScript safe integer range | String/bigint domain representation is exact | - -### 9.2 Identity and collation - -| Test name | Fixture/action | Required assertion | -| ---------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | -| `id_is_byte_exact` | Create IDs differing only by case | Both remain distinct if the ID contract is binary | -| `exact_name_lookup_is_case_sensitive` | Store `MASTER-LIGHT`, query exact lowercase | Exact lookup misses | -| `insensitive_name_lookup_uses_declared_policy` | Query the same row through the named insensitive operation | One deterministic row is returned | -| `unique_name_case_policy_is_explicit` | Insert case variants | Result matches the selected name policy on both backends | -| `unique_name_accent_policy_is_explicit` | Insert accent variants | Result matches the selected policy | -| `unique_violation_is_classified` | Concurrently create one identity | One wins; loser is `unique_violation` without backend text | -| `nullable_unique_policy_is_explicit` | Insert two `NULL` logical keys | Result matches domain rule, not accidental index behavior | - -### 9.3 Ordering and pagination - -| Test name | Fixture/action | Required assertion | -| --------------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------ | -| `list_uses_unique_final_tiebreaker` | Insert rows with identical primary sort values | Repeated list order is identical and ID-ordered | -| `pagination_has_no_gaps_or_duplicates` | Traverse small pages across tied rows | Union equals full ID set; page intersections are empty | -| `nullable_sort_position_is_fixed` | Mix `NULL` and non-`NULL` values | `NULL` appears at the contract-defined end | -| `cursor_predicate_matches_sort_tuple` | Page forward through mixed sort keys | Every row appears exactly once in declared order | -| `concurrent_insert_pagination_behavior_is_declared` | Insert between page reads | Result matches snapshot or documented live-page policy | - -### 9.4 Writes and affected rows - -| Test name | Fixture/action | Required assertion | -| ------------------------------------------- | ------------------------------------------ | -------------------------------------------------- | -| `same_value_update_is_not_missing` | Update an existing row to identical values | `unchanged` or declared success, never `not_found` | -| `same_value_result_ignores_found_rows_mode` | Run fixture with both connection modes | Domain result is identical | -| `compare_update_detects_stale_version` | Two writers use one old version | One succeeds; one returns `conflict` | -| `batch_count_uses_contract_definition` | Mix changed and unchanged matches | Count means the same thing on both backends | -| `upsert_preserves_identity_and_children` | Upsert parent with a child row | ID, immutable fields, and child survive | -| `insert_only_never_silently_updates` | Repeat insert-only identity | Second call is `unique_violation` | - -### 9.5 Transactions, isolation, and failure injection - -| Test name | Fixture/action | Required assertion | -| ----------------------------------------------- | ----------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `related_changes_commit_atomically` | Update parent and children | All postconditions commit together | -| `related_changes_roll_back_atomically` | Inject a child constraint failure | All tables equal pre-operation state | -| `stable_snapshot_behavior_is_declared` | Read, commit a concurrent update, then read in the same operation | Result follows the operation's declared snapshot/current-read policy | -| `range_insert_visibility_is_declared` | Read a range while another transaction inserts a matching row | Later visibility matches the declared snapshot/live policy | -| `read_modify_write_prevents_lost_update` | Two transactions read one version and attempt distinct updates | One declared winner; loser conflicts/retries without overwriting | -| `independent_writers_preserve_atomic_effects` | Two transactions update different identities concurrently | Both logical effects commit; no contract depends on backend lock order | -| `deadlock_retries_whole_operation` | Two physical connections lock in opposite order | One victim; final logical effect occurs once | -| `lock_timeout_discards_context` | Hold a row lock past timeout | Explicit rollback; old context rejects work | -| `duplicate_and_foreign_key_errors_are_distinct` | Trigger each constraint | Stable distinct classes | -| `disconnect_before_send_is_unavailable` | Fail connection before dispatch | Safe bounded retry is permitted | -| `disconnect_during_commit_is_outcome_unknown` | Drop connection at commit boundary | No blind retry; reconciliation is required | -| `retry_uses_stable_operation_identity` | Fail first attempt after durable write | At most one logical effect exists | - -### 9.6 Migration and readiness - -| Test name | Fixture/action | Required assertion | -| --------------------------------------- | ------------------------------------------- | -------------------------------------------------- | -| `only_one_instance_owns_migration` | Two backend instances acquire one name | Exactly one executes migration phases | -| `lock_timeout_is_not_reported_as_ready` | Hold migration lock from another connection | Startup waits/fails with classified state | -| `disconnect_releases_named_lock` | Terminate owner connection | Another instance can acquire and reinspect | -| `ddl_checkpoint_recovers_after_crash` | Stop after DDL before history update | Restart detects postcondition and continues safely | -| `backfill_resumes_without_duplication` | Stop between deterministic batches | Completed rows are neither skipped nor duplicated | -| `partial_migration_blocks_readiness` | Leave required milestone incomplete | Health may be alive; readiness is false | -| `completed_history_is_idempotent` | Start against fully migrated schema | No DDL/data mutation occurs | - -## 10. First-slice acceptance profile: combos and model mappings - -This section specializes the general catalog for the candidate first slice discussed in #8075 and -implemented experimentally in Draft PR #8757. It does not approve that runtime PR. - -### 10.1 Contract decisions required before adapter code - -| Decision | Current evidence | Required resolution | -| --------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------------- | -| Combo ID | Application UUID | Preserve as byte-exact text/binary identity | -| Combo name uniqueness | SQLite unique name; exact and insensitive reads differ | Select explicit uniqueness collation independently from insensitive fallback | -| Combo list | `sort_order`, then `name NOCASE` | Add `id` as final tie-breaker and define Unicode name order | -| Next sort order | `MAX(sort_order) + 1` | Replace race-prone read-then-insert with an atomic allocation or retryable unique invariant | -| Reorder | One SQLite transaction updates all parseable rows | Define concurrent reorder serialization and all-or-nothing behavior | -| Corrupt combo JSON | Reads/resolution skip malformed payloads | Decide whether MySQL schema can represent malformed legacy rows during migration | -| Mapping order | `priority DESC, created_at ASC` | Add `id ASC` final tie-breaker | -| Mapping delete | Boolean from affected rows | Preserve `true` then `false` behavior independent of found-rows mode | -| Combo delete | Foreign key cascade removes mappings | Preserve one-operation atomic cascade | -| Timestamps | Application ISO strings | Preserve canonical UTC text or define an exact typed conversion | - -### 10.2 Required combo fixtures - -The shared fixture MUST include: - -- combo names `Alpha`, `alpha`, `Résumé`, and `resume` to exercise selected collation policy; -- three combos with the same requested `sortOrder` to exercise the unique final order; -- one missing ID for update and delete results; -- one payload with explicit JSON `null` and one with a missing member; -- one intentionally malformed legacy payload if compatibility requires it; -- mappings with identical `priority` and `createdAt` but different IDs; -- enabled, disabled, inactive-target, and corrupt-target mappings; -- one combo with at least two dependent mappings for cascade verification. - -### 10.3 Required combo assertions - -A MySQL implementation cannot claim the first slice complete until the shared harness proves: - -1. application UUIDs and ISO timestamps round-trip unchanged; -2. exact and insensitive combo-name lookups remain distinct operations; -3. uniqueness follows the approved name policy, not server defaults; -4. combo and mapping lists have a total deterministic order; -5. every offset page is a contiguous slice of that order; -6. update of a missing combo/mapping returns `null`; -7. first delete returns `true`, repeated delete returns `false`; -8. reorder filters unknown/duplicate requested IDs exactly as the accepted contract specifies; -9. reorder either commits every intended row or none; -10. mapping resolution uses the deterministic order and skips disabled, inactive, and malformed targets; -11. deleting a combo atomically removes all dependent mappings; -12. errors are classified without raw MySQL messages; -13. SQLite starts without loading a MySQL dependency; -14. no external-backend support is advertised by the presence of this slice alone. - -### 10.4 Concurrency probes specific to the slice - -#### Concurrent combo creation - -Two connections create different UUIDs with the same contract-equivalent name. Exactly one succeeds; -the other receives `unique_violation`. If case/accent variants are allowed by the approved policy, -both succeed and exact lookup returns the correct identity. - -#### Concurrent sort allocation - -Two connections create combos without an explicit sort order. The final values MUST follow the -contract without duplicates caused by both transactions reading the same `MAX(sort_order)`. The -implementation may serialize allocation, use a separate sequence, or retry a protected invariant; -the contract must not require one specific SQL mechanism. - -#### Concurrent reorder - -Two connections reorder the same set in opposite orders. The accepted outcome MUST be one complete -order or the other, never a mixed sequence or mismatched JSON/column `sortOrder`. The loser may wait, -return conflict, or retry according to the approved contract. - -#### Delete versus mapping creation - -One connection deletes a combo while another creates a mapping to it. The final state MUST be either -an existing combo with a valid mapping or no combo and no mapping. An orphan mapping is forbidden. - -## 11. Implementation gate checklist - -A MySQL adapter PR for any domain MUST NOT start until reviewers can answer all applicable items: - -- [ ] Identity, case, accent, and collation semantics are explicit. -- [ ] Every list has a complete order, `NULL` position, and unique tie-breaker. -- [ ] Missing, unchanged, conflict, and delete results are distinguishable. -- [ ] Every write is classified as insert-only, identity-preserving upsert, or replacement. -- [ ] ID generation and idempotency ownership are explicit. -- [ ] JSON and temporal representations are selected with migration compatibility in mind. -- [ ] Error codes map to the backend-neutral taxonomy. -- [ ] Retry ownership and maximum scope are explicit. -- [ ] Migration mutex, durable checkpoints, and readiness rules are approved. -- [ ] SQLite and MySQL fixtures run through one behavior harness. -- [ ] Offline migration preflight and postconditions exist before cutover is advertised. -- [ ] SQLite remains the zero-configuration default and clean startup path. - -## 12. Reference sources - -### 12.1 OmniRoute sources - -- `docs/architecture/persistence-backend-boundary.md` -- `docs/architecture/sqlite-coupling-inventory.md` -- `src/lib/db/combos.ts` -- `src/lib/db/modelComboMappings.ts` -- `src/lib/db/migrations/001_initial_schema.sql` -- `src/lib/db/migrations/010_model_combo_mappings.sql` -- `src/lib/db/migrations/020_combo_sort_order.sql` - -### 12.2 MySQL 8.0 reference manual - -- [Character sets and collations](https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/charset.html) -- [CREATE TABLE](https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/create-table.html) -- [UPDATE](https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/update.html) -- [INSERT ... ON DUPLICATE KEY UPDATE](https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/insert-on-duplicate.html) -- [Information functions](https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/information-functions.html) -- [The JSON data type](https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/json.html) -- [InnoDB transaction isolation](https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/innodb-transaction-isolation-levels.html) -- [InnoDB error handling](https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/innodb-error-handling.html) -- [Handling deadlocks](https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/innodb-deadlocks-handling.html) -- [Statements that cause an implicit commit](https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/implicit-commit.html) -- [Locking functions](https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/locking-functions.html) -- [InnoDB limits](https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/innodb-limits.html) - -### 12.3 SQLite references - -- [ON CONFLICT](https://sqlite.org/lang_conflict.html) -- [`NULL` handling](https://sqlite.org/nulls.html) -- [Transactions](https://sqlite.org/lang_transaction.html) -- [SELECT and ordering](https://sqlite.org/lang_select.html#orderby) - -## 13. Open decisions - -This specification deliberately leaves the following decisions to the accepted first-slice design: - -1. the exact collation and normalization policy for combo names; -2. the typed or text representation of combo JSON in MySQL; -3. the repository result type for an existing same-value update; -4. the isolation level selected by the backend profile; -5. the concurrency mechanism for sort-order allocation and reorder; -6. the physical MySQL migration schema and durable checkpoint format; -7. the exact retry budget and backoff policy; -8. the topology boundary within which a MySQL named migration lock is sufficient. - -These are not adapter implementation details. Each changes observable behavior or operational -correctness and therefore requires explicit review before runtime support proceeds. diff --git a/docs/architecture/sqlite-coupling-inventory.md b/docs/architecture/sqlite-coupling-inventory.md deleted file mode 100644 index 1c1d9d48c3..0000000000 --- a/docs/architecture/sqlite-coupling-inventory.md +++ /dev/null @@ -1,226 +0,0 @@ ---- -title: "SQLite coupling inventory" -status: measured-snapshot -lastUpdated: 2026-07-23 ---- - -# SQLite coupling inventory - -- **Tracking issue:** [#8075](https://github.com/diegosouzapw/OmniRoute/issues/8075) -- **Snapshot revision:** `9a3b605f3420ae3ab08bd93d6443034f03a1bcbc` -- **Scanned-corpus SHA-256:** `72334620a7a18a42bcede1643fb2fdf95da6eae9ffa66a891ae14ed633ad43f6` -- **Purpose:** Measure the current persistence cut lines before proposing repository interfaces -- **Runtime impact:** None; this document and its audit script do not change database behavior - -## How to reproduce - -From the repository root: - -```bash -node scripts/check/audit-sqlite-coupling.mjs -node scripts/check/audit-sqlite-coupling.mjs --json -node --test scripts/check/audit-sqlite-coupling.test.mjs -``` - -The script reads tracked files from Git, scans non-test source under `src/`, `open-sse/`, -`electron/`, and `bin/`, and scans migration SQL under `src/lib/db/migrations/`. It excludes the -top-level test tree, co-located test directories, test/spec source files, and paths outside those -configured source roots (including documentation and scripts). - -The script refuses to run if tracked files in those source roots differ from `HEAD`. It reports -both the audit-tool revision and a SHA-256 over the ordered path/content corpus. The snapshot above -was taken from the listed source revision; this PR changes only excluded documentation and script -paths, so rerunning from the clean PR branch produces the same corpus digest. - -This is a **lexical inventory**, not a TypeScript or SQL semantic analysis: - -- counts are occurrences of defined patterns, not counts of distinct SQL statements; -- adapter-call and direct-singleton patterns mask comments and literal contents first; -- template-literal contents, including embedded expressions, are excluded from those code-syntax - counts; -- the lightweight masker is not a JavaScript parser, so unusual regular-expression literal syntax - can still require manual review; -- comments and string literals can contribute to dialect-signal counts, which intentionally search - raw text for embedded SQL; -- a `.prepare()` match outside `src/lib/db/` is a review lead, not proof that the call should move; -- calls hidden behind a differently named wrapper may not be counted; -- file counts are deduplicated, while occurrence counts are not. - -The JSON output includes every matching path so reviewers can inspect or reclassify individual -results rather than trusting totals alone. - -## Snapshot scope - -At the recorded revision, the script scanned: - -- 3,830 tracked non-test source files; -- 129 migration SQL files. - -The source-file count is intentionally broad because the goal is to find persistence coupling that -has escaped the nominal database directory, including CLI and proxy/runtime code. - -## Boundary signals - -| Signal | Files | Occurrences | -| -------------------------------------------------------------------------------- | ----: | ----------: | -| Direct `getDbInstance()` call syntax outside comments/literals and `src/lib/db/` | 45 | 150 | -| `localDb` import consumers | 211 | — | -| `SqliteAdapter` type consumers outside comments/literals and `src/lib/db/` | 3 | — | - -The `localDb` barrel already gives many callers a domain-function seam, but -`src/lib/localDb.ts` remains a re-export layer rather than a backend contract. The 45 direct -singleton consumers are the clearest first review set because they bypass that logical seam and -hold an adapter-shaped handle directly. - -The three non-test source files outside `src/lib/db/` that mention the `SqliteAdapter` type in code -syntax are: - -- `src/app/api/db-backups/import/route.ts`; -- `src/lib/compliance/index.ts`; -- `src/lib/compliance/noLog.ts`. - -These are not equivalent migration tasks. Backup import is capability-specific; compliance -persistence may be portable domain state. The future boundary should classify them rather than -moving all three mechanically. - -## Adapter-shaped call syntax - -| Signal | Occurrences | Files | Outside `src/lib/db/` occurrences | Outside files | -| ----------------- | ----------: | ----: | --------------------------------: | ------------: | -| `.prepare()` | 1,219 | 163 | 252 | 52 | -| `.transaction()` | 62 | 40 | 12 | 10 | -| `.immediate()` | 3 | 3 | 0 | 0 | -| `.pragma()` | 39 | 11 | 6 | 4 | -| `.backup()` | 6 | 5 | 3 | 3 | -| `.checkpoint()` | 0 | 0 | 0 | 0 | -| `lastInsertRowid` | 15 | 7 | 1 | 1 | - -This table shows why `SqliteAdapter` is a SQLite runtime compatibility layer rather than a portable -backend abstraction. Its synchronous statement and transaction shape is widely used, and some of -that shape is visible outside the nominal database layer. - -The top direct `getDbInstance()` consumers outside `src/lib/db/` at this revision are: - -| File | Occurrences | -| -------------------------------------------------- | ----------: | -| `src/lib/proxySubscription/subscriptionService.ts` | 12 | -| `src/lib/semanticCache.ts` | 10 | -| `src/lib/usage/callLogs.ts` | 9 | -| `src/lib/cloudAgent/db.ts` | 8 | -| `src/lib/memory/store.ts` | 8 | -| `src/lib/memory/vectorStore.ts` | 8 | -| `src/lib/modelsDevSync.ts` | 8 | -| `src/lib/gamification/badges.ts` | 5 | -| `src/lib/memory/retrieval.ts` | 5 | -| `src/lib/pricingSync.ts` | 5 | -| `src/lib/skills/registry.ts` | 5 | -| `src/lib/usage/usageHistory.ts` | 5 | - -The list spans control-plane configuration, usage/audit data, cache, memory/vector search, skills, -gamification, and CLI/provider support. A single generic SQL adapter would preserve this spread; -domain repositories provide a way to reduce it slice by slice. - -## SQLite dialect and lifecycle signals - -| Signal | Occurrences | Files | -| --------------------- | ----------: | ----: | -| `PRAGMA` text | 97 | 41 | -| `sqlite_master` | 14 | 11 | -| `BEGIN IMMEDIATE` | 2 | 2 | -| `INSERT OR REPLACE` | 83 | 45 | -| `AUTOINCREMENT` | 34 | 24 | -| `datetime('now')` | 171 | 68 | -| `VACUUM` | 39 | 10 | -| `wal_checkpoint` | 13 | 7 | -| `fts5` | 43 | 8 | -| `vec0` | 7 | 1 | -| `last_insert_rowid()` | 1 | 1 | - -These values are text signals and include comments where present. They are useful for locating -portability work, not for estimating implementation effort by multiplication. - -Verified high-coupling areas include: - -- `src/lib/db/core.ts`: singleton lifecycle, SQLite file paths, WAL checkpoint, recovery, schema, - compaction, and backup creation; -- `src/lib/db/migrationRunner.ts`: numbered SQL migration execution, `sqlite_master`, - `PRAGMA table_info`, transaction behavior, and optional FTS5 handling; -- `src/lib/db/optimizationSettings.ts`: page/cache settings, auto-vacuum, WAL transitions, and - `VACUUM`; -- `src/lib/db/backup.ts`: database backup and restore lifecycle; -- `src/lib/db/schemaColumns.ts`: SQLite schema introspection and compatibility columns; -- `src/lib/memory/vectorStore.ts` and `src/lib/memory/retrieval.ts`: `vec0` and FTS5 behavior; -- `src/lib/db/adapters/`: compatibility implementations for the supported SQLite runtimes. - -These areas should not be forced through a lowest-common-denominator repository interface. They -need explicit SQLite capabilities or separate backend implementations. - -## Migration coupling - -The snapshot contains 129 tracked migration SQL files. `src/lib/db/migrationRunner.ts` does more -than execute ordered files: it owns migration discovery, version history, duplicate-version safety, -schema probes, FTS5 capability checks, pre-migration safety, and SQLite transaction execution. - -Consequently: - -- another SQL dialect cannot safely reuse the migration files unchanged; -- external backends need their own migration implementation and schema history; -- logical migration milestones may be shared, but physical SQL and capability probes remain - backend-specific; -- multi-replica operation requires migration ownership or locking before an external backend is - considered ready. - -## Recommended cut lines - -### 1. Keep SQLite runtime compatibility intact - -Do not replace `SqliteAdapter` or the driver cascade in the first repository PR. Keep file recovery, -WAL, backup, optimization, FTS5, and vector behavior behind the current SQLite implementation. - -### 2. Start with direct singleton consumers - -Use the 45-file direct-consumer list as the initial review queue. Classify each file as: - -- portable domain state; -- backend-specific maintenance or search; -- process-local or rebuildable state; -- legacy access that should call an existing domain module. - -Classification must precede interface design. A path appearing in the inventory is not, by itself, -a mandate to create a repository. - -### 3. Prove repositories with SQLite first - -For one bounded domain: - -1. define behavior-oriented repository operations; -2. adapt current SQLite queries behind that repository; -3. run behavior and transaction conformance tests against SQLite; -4. migrate callers without changing the default runtime; -5. only then implement the same repository for an external backend. - -### 4. Separate portable control-plane state from capability-specific data - -Provider connections, API keys, combos, and routing configuration are candidates for the first -portable slice, subject to maintainer approval and a table-ownership review. Memory vector search, -SQLite file backup/recovery, and database optimization are poor first slices because their behavior -is deliberately SQLite-specific. - -### 5. Treat usage, quota, affinity, and audit as a later coordination slice - -These domains have concurrency and volume semantics beyond CRUD. Their repository contracts should -be designed together with multi-replica transaction, lease, retention, and failure-mode tests rather -than copied mechanically from current SQL. - -## What this inventory does not decide - -This inventory does not: - -- approve PostgreSQL or MySQL support; -- define repository TypeScript interfaces; -- choose the first table or domain to migrate; -- claim every lexical match is a defect; -- claim the current module boundaries are ineffective; -- change SQLite, migrations, backup, search, or runtime behavior. - -Its purpose is to make the next design discussion evidence-based and reproducible. diff --git a/docs/combo-context-requirements.md b/docs/combo-context-requirements.md deleted file mode 100644 index 3c1c863d2d..0000000000 --- a/docs/combo-context-requirements.md +++ /dev/null @@ -1,273 +0,0 @@ ---- -title: "Combo Context Requirements Feature" -version: 3.8.50 -lastUpdated: 2026-08-06 ---- - -# Combo Context Requirements Feature - -## Overview - -The Context Requirements feature allows combo configurations to filter and sort targets based on their context window size. This is useful for use cases requiring large context windows like: - -- Long document processing (100k+ tokens) -- Large codebase analysis -- Extensive conversation histories -- Multi-file code reviews - -## Configuration - -### Schema - -Add `contextRequirements` to your combo's runtime config: - -```json -{ - "contextRequirements": { - "minContextWindow": 128000, - "preferLargeContext": true, - "contextFilterMode": "strict" - } -} -``` - -### Fields - -#### `minContextWindow` (optional) - -- **Type**: `number` (0 to 10,000,000) -- **Default**: `undefined` (no filtering) -- **Description**: Filters out models with context windows below this threshold - -**Examples**: - -- `32000` - Filter out models with <32K context -- `128000` - Require 128K+ context (GPT-4 Turbo, Claude 3) -- `200000` - Require 200K+ context (Claude 3 Opus) -- `1000000` - Require 1M+ context (Gemini 1.5 Pro) - -#### `preferLargeContext` (optional) - -- **Type**: `boolean` -- **Default**: `false` -- **Description**: When `true`, sorts remaining targets by context size (descending). Large context models are tried first. - -#### `contextFilterMode` (optional) - -- **Type**: `"strict"` | `"lenient"` -- **Default**: `"lenient"` -- **Description**: How to handle models with unknown context window limits - - `"strict"`: Excludes models with unknown context limits when a known-good target remains; fail-opens to unknowns if the pool would otherwise be empty (#8786) - - `"lenient"`: Includes models with unknown context limits - -## Behavior - -### Filtering Pipeline - -Context requirements are applied after `filterTargetsByRequestCompatibility()`: - -1. **Request compatibility filtering** - Removes models incompatible with request (tools, vision, structured output) -2. **Context requirements filtering** - Applies `minContextWindow` and `contextFilterMode` -3. **Context-based sorting** - If `preferLargeContext` is true, sorts by context size descending - -### Filter Mode Logic - -When `minContextWindow` is set: - -**Lenient mode** (default): - -- ✅ Includes models with context >= minContextWindow -- ✅ Includes models with unknown context limits -- ❌ Excludes models with context < minContextWindow - -**Strict mode**: - -- ✅ Includes models with context >= minContextWindow -- ❌ Excludes models with unknown context limits (when at least one known-good target remains) -- ❌ Excludes models with context < minContextWindow -- ⚠️ **Fail-open (#8786)**: if strict filtering would empty the pool and at least one - unknown-context target exists, those unknowns are restored instead of returning - `404 Combo has no executable targets`. Known-too-small targets are never resurrected. - When the pool is still empty (every known target is below `minContextWindow`), the - API returns `terminalReason: "context_requirements_exhausted"` with a recovery hint. - -### Sorting Logic - -When `preferLargeContext` is true: - -- Models are sorted by context window size (descending) -- Unknown context models sort to the end -- Original strategy order is used as a tiebreaker - -## Use Cases - -### Example 1: Long Document Processing - -```json -{ - "name": "Document Analysis", - "strategy": "fusion", - "config": { - "contextRequirements": { - "minContextWindow": 128000, - "preferLargeContext": true, - "contextFilterMode": "strict" - } - } -} -``` - -This configuration: - -- Requires 128K+ context window -- Prefers larger context models (Gemini 1.5 Pro > Claude 3 Opus > GPT-4 Turbo) -- Excludes models with unknown context limits - -### Example 2: Large Codebase Analysis - -```json -{ - "name": "Code Review", - "strategy": "auto", - "config": { - "contextRequirements": { - "minContextWindow": 200000, - "preferLargeContext": true, - "contextFilterMode": "lenient" - } - } -} -``` - -This configuration: - -- Requires 200K+ context window -- Prefers larger context models -- Includes models with unknown limits (lenient) - -### Example 3: Prefer Large Context Without Strict Requirements - -```json -{ - "name": "Flexible Chat", - "strategy": "weighted", - "config": { - "contextRequirements": { - "preferLargeContext": true - } - } -} -``` - -This configuration: - -- No minimum requirement (all models eligible) -- Sorts by context size (largest first) -- Useful when large context is preferred but not required - -## API Response - -When context requirements filter targets, the combo logger outputs: - -``` -[COMBO] Context requirements: filtered 10 → 3 targets (minContextWindow: 128000, mode: strict) -[COMBO] Context requirements: kept models gemini-1.5-pro, claude-3-opus-20240229, gpt-4-turbo -[COMBO] Context requirements: sorted by context size (descending): gemini-1.5-pro(1000000), claude-3-opus-20240229(200000), gpt-4-turbo(128000) -``` - -## Implementation Details - -### Backend Module - -`open-sse/services/combo/contextRequirements.ts`: - -- `applyContextRequirements()` - Main filtering function -- `getTargetContextWindow()` - Context lookup helper -- Uses `getModelContextLimit()` from `modelCapabilities.ts` - -### Integration Point - -`open-sse/services/combo.ts` line 1187: - -```typescript -orderedTargets = filterTargetsByRequestCompatibility(orderedTargets, body, log); -orderedTargets = applyContextRequirements(orderedTargets, config.contextRequirements, log); -``` - -### Schema Definition - -`src/shared/validation/schemas/combo.ts`: - -```typescript -contextRequirements: z - .object({ - minContextWindow: z.coerce.number().int().min(0).max(10_000_000).optional(), - preferLargeContext: z.boolean().optional(), - contextFilterMode: z.enum(["strict", "lenient"]).optional(), - }) - .strict() - .optional(), -``` - -## Testing - -### Run Tests - -```bash -# Unit tests (schema + logic) -npm test tests/unit/combo-context-requirements.test.ts - -# Integration tests (end-to-end) -npm test tests/unit/combo/context-requirements-integration.test.ts -``` - -### Test Coverage - -- Schema validation: 6 tests -- Filtering logic: 6 tests -- Integration: 5 tests -- **Total**: 17/17 passing ✅ - -## Troubleshooting - -### All targets filtered out - -**Problem**: All targets removed, combo returns "no compatible models" - -**Solutions**: - -1. Lower `minContextWindow` threshold -2. Switch to `"lenient"` mode to include unknown context models -3. Remove `minContextWindow` and use only `preferLargeContext` - -### Unknown context models excluded - -**Problem**: Custom/new models excluded even though they have large context - -**Solutions**: - -1. Switch to `"lenient"` mode (default) -2. Add model context limit to `modelCapabilities.ts` -3. Remove context filtering and rely on strategy order - -### Sorting not applied - -**Problem**: `preferLargeContext` doesn't change order - -**Check**: - -1. Verify `preferLargeContext: true` in config -2. Check if all targets have unknown context (all sort equal) -3. Verify multiple targets remain after filtering - -## Related - -- [Auto-Combo Routing Strategies](./routing/AUTO-COMBO.md) -- [Resilience Guide](./architecture/RESILIENCE_GUIDE.md) - -## Version History - -- **v3.8.47**: Initial implementation - - Added `contextRequirements` config - - Created backend filtering module - - Full test coverage (no dedicated dashboard UI yet — configure via combo JSON) diff --git a/docs/compression/meta.json b/docs/compression/meta.json index 1d3350b9cb..8c82a2fe08 100644 --- a/docs/compression/meta.json +++ b/docs/compression/meta.json @@ -6,6 +6,7 @@ "RTK_COMPRESSION", "COMPRESSION_LANGUAGE_PACKS", "COMPRESSION_RULES_FORMAT", + "CONTEXT_EDITING", "EXTENDING_COMPRESSION" ] } diff --git a/docs/diagrams/cli-terminal.svg b/docs/diagrams/cli-terminal.svg index bb015e3a12..989a0b8ff6 100644 --- a/docs/diagrams/cli-terminal.svg +++ b/docs/diagrams/cli-terminal.svg @@ -1,4 +1,4 @@ - + Compact animated terminal cycling three real OmniRoute CLI commands with a typewriter effect and a scrolling subcommand ticker; the first frame shows the completed providers-list screen. @@ -6,7 +6,7 @@ omniroute — 80+ commands -omniroute providers listOmniRoute Providers1f3a9c2e  anthropic   Claude Max 20x    active8c2d5b1a  codex       Codex Pro (team)  activef4e0a97b  glm         GLM Coding Plan   active03bd6e5f  kimi        Kimi K2 free      active… 264 more providers +omniroute providers listOmniRoute Providers1f3a9c2e  anthropic   Claude Max 20x    active8c2d5b1a  codex       Codex Pro (team)  activef4e0a97b  glm         GLM Coding Plan   active03bd6e5f  kimi        Kimi K2 free      active… 334 more providers $ omniroute providers list @@ -14,7 +14,7 @@ -OmniRoute Providers1f3a9c2e  anthropic   Claude Max 20x    active8c2d5b1a  codex       Codex Pro (team)  activef4e0a97b  glm         GLM Coding Plan   active03bd6e5f  kimi        Kimi K2 free      active… 264 more providers +OmniRoute Providers1f3a9c2e  anthropic   Claude Max 20x    active8c2d5b1a  codex       Codex Pro (team)  activef4e0a97b  glm         GLM Coding Plan   active03bd6e5f  kimi        Kimi K2 free      active… 334 more providers $ @@ -32,7 +32,7 @@ -OmniRoute Health  Status: healthy   Uptime: 4d 12h 33m  Requests (24h): 18,412   p95: 412ms  Breakers: ● 24 closed  ◒ 1 half-open  ○ 0 open  Providers: 278 registered   90+ free tiers… live: /dashboard · omniroute status +OmniRoute Health  Status: healthy   Uptime: 4d 12h 33m  Requests (24h): 18,412   p95: 412ms  Breakers: ● 24 closed  ◒ 1 half-open  ○ 0 open  Providers: 338 registered   90+ free tiers… live: /dashboard · omniroute status diff --git a/docs/diagrams/comparison-table.svg b/docs/diagrams/comparison-table.svg index 35bd075e64..509ec7f0ac 100644 --- a/docs/diagrams/comparison-table.svg +++ b/docs/diagrams/comparison-table.svg @@ -1,4 +1,4 @@ - + Static-header comparison table where each capability row fades in top to bottom; the OmniRoute column is highlighted and shows a check or a leading value in every row, while competitors show a mix of checks, partials and crosses. @@ -23,7 +23,7 @@ Providers - 290 + 338 40+ 400+* ~5 @@ -57,7 +57,7 @@ Built-in MCP server (own tools) - 104 + 105 diff --git a/docs/diagrams/free-tier-budget.svg b/docs/diagrams/free-tier-budget.svg index 6ae541be74..c3ae12e259 100644 --- a/docs/diagrams/free-tier-budget.svg +++ b/docs/diagrams/free-tier-budget.svg @@ -1,4 +1,4 @@ - + @@ -60,10 +60,10 @@ - ~1.53B + ~1.51B FREE TOKENS / MONTH · STEADY - up to ~2.15B in your first month — signup credits - documented free tiers · 43 provider pools · 460+ models · one endpoint + up to ~2.13B in your first month — signup credits + documented free tiers · 42 provider pools · 495 models · one endpoint @@ -74,7 +74,7 @@ every rate limit · 24/7 we don't publish that - ~1.53B + ~1.51B each shared free pool counted once ✓ 15 providers ToS-flagged — we flag it · you decide diff --git a/docs/diagrams/promise-pillars.svg b/docs/diagrams/promise-pillars.svg index 6f3a43632f..39d9ccffb4 100644 --- a/docs/diagrams/promise-pillars.svg +++ b/docs/diagrams/promise-pillars.svg @@ -1,4 +1,4 @@ - + Animated promise card: six pillar tiles fade in in reading order, then a soft colored border highlight sweeps from tile to tile in a continuous cycle. @@ -21,7 +21,7 @@ - One endpoint. 290 providers. Never stop building — OmniRoute picks the cheapest one that works. + One endpoint. 338 providers. Never stop building — OmniRoute picks the cheapest one that works. @@ -38,7 +38,7 @@ Never hit limits - Auto-fallback across 290 providers in + Auto-fallback across 338 providers in milliseconds. Quota out? The next provider takes over — zero downtime. @@ -125,7 +125,7 @@ Production-grade - Circuit breakers, TLS stealth, MCP (104 + Circuit breakers, TLS stealth, MCP (105 tools), A2A, memory, guardrails, evals — 25,000+ tests. diff --git a/docs/diagrams/readme-hero.svg b/docs/diagrams/readme-hero.svg index 58f8cb1d5b..ea615506ee 100644 --- a/docs/diagrams/readme-hero.svg +++ b/docs/diagrams/readme-hero.svg @@ -1,4 +1,4 @@ - + Animated hero card: a pulse travels the divider line and a compression bar demo repeatedly shrinks a prompt by up to 95 percent; all headline content is static and readable on the first frame. @@ -28,7 +28,7 @@ Never stop coding. - Every AI tool → 290 providers90+ free — through one endpoint. + Every AI tool → 338 providers90+ free — through one endpoint. Claude Code · Codex · Cursor · Cline · Copilot · Antigravity  →  FREE Claude / GPT / Gemini · auto-fallback @@ -66,13 +66,13 @@ - 290 + 338 AI PROVIDERS 90+ FREE TIERS - ~1.53B + ~1.51B FREE TOKENS / MO 15–95% diff --git a/docs/diagrams/tier-cascade.svg b/docs/diagrams/tier-cascade.svg index 4f819814fd..7944762286 100644 --- a/docs/diagrams/tier-cascade.svg +++ b/docs/diagrams/tier-cascade.svg @@ -89,7 +89,7 @@ OmniRoute — Smart Router - RTK + Caveman compression · 18 routing strategies + RTK + Caveman compression · 19 routing strategies Circuit breakers · TLS stealth · MCP · A2A · Guardrails diff --git a/docs/frameworks/A2A-SERVER.md b/docs/frameworks/A2A-SERVER.md index 9cc405fd2b..ea451e42d3 100644 --- a/docs/frameworks/A2A-SERVER.md +++ b/docs/frameworks/A2A-SERVER.md @@ -178,6 +178,9 @@ The JSON-RPC endpoint `/a2a` is the canonical A2A entry point. The REST endpoint | `/api/a2a/tasks/[id]` | GET | Get task by ID | management | | `/api/a2a/tasks/[id]/cancel` | POST | Cancel running task | management | | `/.well-known/agent.json` | GET | Agent Card (A2A discovery) | (public, cached 3600s) | +| `/api/a2a/tasks` | POST | Inbound delegation to the OmniConductor fleet (Conductor PRD RF5) | Bearer vs `OMNIROUTE_API_KEY` + `a2aEnabled` | + +**Inbound Conductor delegation (`POST /api/a2a/tasks`):** external A2A agents delegate coding work to the OmniConductor fleet through OmniRoute. Body: `{ skill: "conductor" | "conductor-cli-", messages: [{role, content}], metadata: { conductor: { repo: { url, base_ref? }, mode?, cli?, model? } } }` — only Conductor fleet skills (the ones announced on the Agent Card) are delegable; `metadata.conductor.repo.url` is required (the fleet works on git repos). The route translates to the hub's `POST /v1/tasks` using the server-side `CONDUCTOR_ORCHESTRATOR_TOKEN` (fallback `CONDUCTOR_HUB_TOKEN`) and returns `201 { conductor_task_id, state: "submitted" }`; task states flow back through the SSE→A2A mirror (RF1) and are visible via `GET /api/a2a/tasks?skill=conductor`. --- diff --git a/docs/frameworks/ACP.md b/docs/frameworks/ACP.md index 3a7b386220..997fb828b0 100644 --- a/docs/frameworks/ACP.md +++ b/docs/frameworks/ACP.md @@ -543,7 +543,7 @@ const agents = detectInstalledAgents(); ## What's Next? - **[API Reference](../reference/API_REFERENCE.md)** — REST API endpoints -- **[Provider Reference](../reference/PROVIDER_REFERENCE.md)** — All 226 providers +- **[Provider Reference](../reference/PROVIDER_REFERENCE.md)** — All 338 providers - **[MCP Server](./MCP-SERVER.md)** — Model Context Protocol integration - **[A2A Server](./A2A-SERVER.md)** — Agent-to-Agent protocol - **[Cloud Agent](./CLOUD_AGENT.md)** — Cloud-based agents diff --git a/docs/frameworks/AGENTBRIDGE.md b/docs/frameworks/AGENTBRIDGE.md index 76949f46fe..85cba9a28c 100644 --- a/docs/frameworks/AGENTBRIDGE.md +++ b/docs/frameworks/AGENTBRIDGE.md @@ -22,7 +22,7 @@ When an IDE agent (e.g., GitHub Copilot, Cursor, Claude Code) makes an API call, This means you can: -- **Reroute any agent to any provider**: Copilot talking to OpenAI? Redirect it to Anthropic Claude, Gemini, or any of OmniRoute's 226+ providers. +- **Reroute any agent to any provider**: Copilot talking to OpenAI? Redirect it to Anthropic Claude, Gemini, or any of OmniRoute's 338 providers. - **Apply model mappings**: `gemini-3-flash` → `claude-sonnet-4.7` transparently at the handler level. - **Observe all agent traffic**: every intercepted request is published to the [Traffic Inspector](./TRAFFIC_INSPECTOR.md). - **Apply OmniRoute resilience**: combo routing, circuit breakers, fallbacks, and cost tracking work for IDE agent traffic too. diff --git a/docs/frameworks/AGENT_PROTOCOLS_GUIDE.md b/docs/frameworks/AGENT_PROTOCOLS_GUIDE.md index 305c398ced..46354225a5 100644 --- a/docs/frameworks/AGENT_PROTOCOLS_GUIDE.md +++ b/docs/frameworks/AGENT_PROTOCOLS_GUIDE.md @@ -183,7 +183,7 @@ Both have "long-running tasks" but at different layers: curl http://localhost:20128/.well-known/agent.json ``` -Returns the Agent Card with all 5 skills, transports, and version. +Returns the Agent Card with all 6 skills, transports, and version. ### Call OmniRoute as an A2A agent diff --git a/docs/frameworks/MEMORY.md b/docs/frameworks/MEMORY.md index 3f41c8a210..7a431ebaee 100644 --- a/docs/frameworks/MEMORY.md +++ b/docs/frameworks/MEMORY.md @@ -888,3 +888,228 @@ To leave it off, simply keep `autoSummarize` at its default (`false`). 0 3 * * * curl -X POST http://localhost:20128/api/memory/summarize \ -H "Authorization: Bearer $OMNIROUTE_KEY" ``` + +--- + +## MemoryBackend Provider Pattern + +> **Source of truth:** `src/lib/memory/backend.ts`, `src/lib/memory/genericBackend.ts`, `src/lib/memory/manager.ts` +> **Tests:** `src/lib/memory/__tests__/generic-backend.test.ts` + +The MemoryBackend provider pattern introduces a **pluggable backend abstraction layer** over the existing memory engine. Instead of being tied to a single storage implementation, the memory system now supports multiple backends (SQLite, Obsidian, Notion, custom HTTP backends) with configurable primary/fallback routing. + +### Architecture + +``` +┌──────────────────────────────────────────────────────────┐ +│ API Routes │ +│ (src/app/api/memory/route.ts) │ +└──────────────────────┬───────────────────────────────────┘ + │ +┌──────────────────────▼───────────────────────────────────┐ +│ MemoryManager │ +│ Singleton orchestrator (manager.ts) │ +│ │ +│ Primary ──► Backend A (e.g. SQLite) │ +│ Fallback ─► Backend B (e.g. Obsidian) │ +│ Backend C (e.g. Notion via GenericBackend) │ +└──────────────────────┬───────────────────────────────────┘ + │ + ┌──────────────┼──────────────┐ + ▼ ▼ ▼ +┌────────────┐ ┌────────────┐ ┌──────────────────┐ +│ SQLite │ │ Obsidian │ │ GenericMemory │ +│ Backend │ │ Backend │ │ Backend (HTTP) │ +└────────────┘ └────────────┘ └──────────────────┘ +``` + +#### Core Interface (`backend.ts`) + +Every backend must implement the `MemoryBackend` interface: + +```typescript +interface MemoryBackend { + readonly id: string; + readonly displayName: string; + + // CRUD + create(input: CreateMemoryInput): Promise; + get(id: string): Promise; + update(id: string, updates: Partial<...>): Promise; + delete(id: string): Promise; + list(filter: MemoryFilter): Promise<{ data: Memory[]; total: number; byType: Record }>; + + // Search + search(config: SearchConfig): Promise; + + // Health + health(): Promise; + + // Lifecycle (optional) + initialize?(): Promise; + shutdown?(): Promise; +} +``` + +#### MemoryManager (`manager.ts`) + +Singleton orchestrator that: + +- **Registers** backends via `register(backend)` — called at boot from `index.ts` +- **Configures** primary + fallback via `configure(primary, fallbacks)` +- **Routes** CRUD/search to the primary, with fallback chain on failure +- **Health checks** all backends periodically + +**Fallback behavior:** + +| Operation | Primary | Fallbacks | +| --------- | -------------------- | ----------------------- | +| `create` | ✅ Primary only | ❌ | +| `get` | ✅ Try primary first | ✅ Fallback if null | +| `update` | ✅ Primary only | ✅ Fire-and-forget sync | +| `delete` | ✅ Primary only | ✅ Fire-and-forget sync | +| `list` | ✅ Primary only | ❌ | +| `search` | ✅ Primary first | ✅ Fallback on error | + +#### GenericMemoryBackend (`genericBackend.ts`) + +A generic HTTP connector that adapts any REST API into a MemoryBackend. Useful for: + +- **Notion** — connect via Notion API +- **Obsidian** — connect via Obsidian Local REST API +- **Custom backends** — any service that exposes a RESTful memory API + +**Configuration:** + +```typescript +interface GenericBackendConfig { + baseUrl: string; // Base URL of the backend API + apiKey?: string; // Bearer token for auth + headers?: Record; // Custom HTTP headers + timeout?: number; // Request timeout (default: 30000ms) + backendType?: string; // For logging + + // Endpoint overrides (defaults use REST conventions) + endpoints?: { + search?: string; // default: "/memories/search" + create?: string; // default: "/memories" + list?: string; // default: "/memories" + get?: string; // default: "/memories/{id}" + update?: string; // default: "/memories/{id}" + delete?: string; // default: "/memories/{id}" + health?: string; // default: "/health" + }; + + // Query parameter name mappings + queryParams?: { + query?/apiKeyId?/limit?/offset?/strategy?/maxTokens?/type?/sessionId?/orderBy?/orderDir?/options? + }; + + // Path parameter name mappings + pathParams?: { + id?/memoryId? + }; +} +``` + +**Known backends** are pre-configured in `KNOWN_BACKENDS`: + +```typescript +createKnownBackend("obsidian"); // → GenericMemoryBackend pointed at localhost:27123 +createKnownBackend("notion"); // → GenericMemoryBackend pointed at api.notion.com/v1 +``` + +#### Built-in Backends + +##### SQLiteBackend (`sqliteBackend.ts`) + +The default primary backend. Wraps the existing SQLite-based memory store using `src/lib/memory/store.ts`. Automatically registered at boot. + +```typescript +import { sqliteBackend } from "./sqliteBackend"; +memoryManager.register(sqliteBackend); +``` + +##### ObsidianBackend (`obsidianBackend.ts`) + +Wraps the existing Obsidian integration (`src/lib/memory/obsidianBackend.ts`). Connects to an Obsidian vault via the Obsidian Local REST API. + +### Settings + +Memory backend settings are stored in the app settings table and managed via `src/lib/memory/settings.ts`: + +| Setting | Env/Config Key | Default | Description | +| ----------------- | ------------------------ | ---------- | ---------------------------- | +| Primary backend | `memoryPrimaryBackend` | `"sqlite"` | ID of the primary backend | +| Fallback backends | `memoryFallbackBackends` | `[]` | Ordered fallback backend IDs | +| Backend configs | `memoryBackendConfigs` | `{}` | Per-backend config overrides | + +Settings are normalized via `normalizeMemorySettings()` and cached at `getMemorySettings()`. + +### Initialization Flow + +``` +App bootstrap + → index.ts imports (side-effect): registers SQLiteBackend + → initMemoryBackends() called from app lifecycle: + 1. Load settings (getMemorySettings) + 2. Configure primary + fallback + 3. Initialize all backends (health check) + 4. Ready for requests +``` + +### Adding a New Backend + +1. **Implement `MemoryBackend`** interface in `src/lib/memory/Backend.ts` +2. **Export** from `src/lib/memory/index.ts` +3. **Register** with `memoryManager.register(yourBackend)` at boot +4. **Configure** via settings: set `memoryPrimaryBackend` to your backend ID +5. **Test** with `src/lib/memory/__tests__/generic-backend.test.ts` as reference + +#### Example: Brain Backend + +```typescript +import { createGenericMemoryBackend } from "./genericBackend"; + +const brainBackend = createGenericMemoryBackend("brain", "BK-Brain", { + baseUrl: process.env.BRAIN_API_URL || "http://localhost:9099", + apiKey: process.env.BRAIN_API_KEY, + endpoints: { + search: "/api/memory/search", + create: "/api/memory", + health: "/api/health", + }, +}); + +memoryManager.register(brainBackend); +``` + +### Verification + +#### Unit tests + +```bash +npx vitest run src/lib/memory/__tests__/generic-backend.test.ts --reporter=verbose +``` + +Expected output: **26 tests, all passing** covering: + +- Constructor (2) +- Health check (4) — success, failure 500, network error, latency +- Initialize (2) — success, failure +- Create (2) — default endpoint, custom endpoint +- Get (4) — success, 404 → null, non-404 throw, custom path params +- Update (2) — success, 404 → false +- Delete (2) — success, 404 → false +- List (2) — query params, custom param names +- Search (3) — query params, custom endpoint, options serialization +- Auth headers (2) — Bearer token, custom headers +- Factory (1) + +#### Type check + +```bash +npm run typecheck:core +``` + +Expected: **0 errors**. diff --git a/docs/frameworks/MEMORY_BACKEND.md b/docs/frameworks/MEMORY_BACKEND.md deleted file mode 100644 index e76a5e476f..0000000000 --- a/docs/frameworks/MEMORY_BACKEND.md +++ /dev/null @@ -1,228 +0,0 @@ ---- -title: "MemoryBackend Provider Pattern" -version: 3.8.49 -lastUpdated: 2026-07-28 ---- - -# MemoryBackend Provider Pattern - -> **Source of truth:** `src/lib/memory/backend.ts`, `src/lib/memory/genericBackend.ts`, `src/lib/memory/manager.ts` -> **Tests:** `src/lib/memory/__tests__/generic-backend.test.ts` - -The MemoryBackend provider pattern introduces a **pluggable backend abstraction layer** over the existing memory engine. Instead of being tied to a single storage implementation, the memory system now supports multiple backends (SQLite, Obsidian, Notion, custom HTTP backends) with configurable primary/fallback routing. - -## Architecture - -``` -┌──────────────────────────────────────────────────────────┐ -│ API Routes │ -│ (src/app/api/memory/route.ts) │ -└──────────────────────┬───────────────────────────────────┘ - │ -┌──────────────────────▼───────────────────────────────────┐ -│ MemoryManager │ -│ Singleton orchestrator (manager.ts) │ -│ │ -│ Primary ──► Backend A (e.g. SQLite) │ -│ Fallback ─► Backend B (e.g. Obsidian) │ -│ Backend C (e.g. Notion via GenericBackend) │ -└──────────────────────┬───────────────────────────────────┘ - │ - ┌──────────────┼──────────────┐ - ▼ ▼ ▼ -┌────────────┐ ┌────────────┐ ┌──────────────────┐ -│ SQLite │ │ Obsidian │ │ GenericMemory │ -│ Backend │ │ Backend │ │ Backend (HTTP) │ -└────────────┘ └────────────┘ └──────────────────┘ -``` - -### Core Interface (`backend.ts`) - -Every backend must implement the `MemoryBackend` interface: - -```typescript -interface MemoryBackend { - readonly id: string; - readonly displayName: string; - - // CRUD - create(input: CreateMemoryInput): Promise; - get(id: string): Promise; - update(id: string, updates: Partial<...>): Promise; - delete(id: string): Promise; - list(filter: MemoryFilter): Promise<{ data: Memory[]; total: number; byType: Record }>; - - // Search - search(config: SearchConfig): Promise; - - // Health - health(): Promise; - - // Lifecycle (optional) - initialize?(): Promise; - shutdown?(): Promise; -} -``` - -### MemoryManager (`manager.ts`) - -Singleton orchestrator that: - -- **Registers** backends via `register(backend)` — called at boot from `index.ts` -- **Configures** primary + fallback via `configure(primary, fallbacks)` -- **Routes** CRUD/search to the primary, with fallback chain on failure -- **Health checks** all backends periodically - -**Fallback behavior:** - -| Operation | Primary | Fallbacks | -| --------- | -------------------- | ----------------------- | -| `create` | ✅ Primary only | ❌ | -| `get` | ✅ Try primary first | ✅ Fallback if null | -| `update` | ✅ Primary only | ✅ Fire-and-forget sync | -| `delete` | ✅ Primary only | ✅ Fire-and-forget sync | -| `list` | ✅ Primary only | ❌ | -| `search` | ✅ Primary first | ✅ Fallback on error | - -### GenericMemoryBackend (`genericBackend.ts`) - -A generic HTTP connector that adapts any REST API into a MemoryBackend. Useful for: - -- **Notion** — connect via Notion API -- **Obsidian** — connect via Obsidian Local REST API -- **Custom backends** — any service that exposes a RESTful memory API - -**Configuration:** - -```typescript -interface GenericBackendConfig { - baseUrl: string; // Base URL of the backend API - apiKey?: string; // Bearer token for auth - headers?: Record; // Custom HTTP headers - timeout?: number; // Request timeout (default: 30000ms) - backendType?: string; // For logging - - // Endpoint overrides (defaults use REST conventions) - endpoints?: { - search?: string; // default: "/memories/search" - create?: string; // default: "/memories" - list?: string; // default: "/memories" - get?: string; // default: "/memories/{id}" - update?: string; // default: "/memories/{id}" - delete?: string; // default: "/memories/{id}" - health?: string; // default: "/health" - }; - - // Query parameter name mappings - queryParams?: { - query?/apiKeyId?/limit?/offset?/strategy?/maxTokens?/type?/sessionId?/orderBy?/orderDir?/options? - }; - - // Path parameter name mappings - pathParams?: { - id?/memoryId? - }; -} -``` - -**Known backends** are pre-configured in `KNOWN_BACKENDS`: - -```typescript -createKnownBackend("obsidian"); // → GenericMemoryBackend pointed at localhost:27123 -createKnownBackend("notion"); // → GenericMemoryBackend pointed at api.notion.com/v1 -``` - -### Built-in Backends - -#### SQLiteBackend (`sqliteBackend.ts`) - -The default primary backend. Wraps the existing SQLite-based memory store using `src/lib/memory/store.ts`. Automatically registered at boot. - -```typescript -import { sqliteBackend } from "./sqliteBackend"; -memoryManager.register(sqliteBackend); -``` - -#### ObsidianBackend (`obsidianBackend.ts`) - -Wraps the existing Obsidian integration (`src/lib/memory/obsidianBackend.ts`). Connects to an Obsidian vault via the Obsidian Local REST API. - -## Settings - -Memory backend settings are stored in the app settings table and managed via `src/lib/memory/settings.ts`: - -| Setting | Env/Config Key | Default | Description | -| ----------------- | ------------------------ | ---------- | ---------------------------- | -| Primary backend | `memoryPrimaryBackend` | `"sqlite"` | ID of the primary backend | -| Fallback backends | `memoryFallbackBackends` | `[]` | Ordered fallback backend IDs | -| Backend configs | `memoryBackendConfigs` | `{}` | Per-backend config overrides | - -Settings are normalized via `normalizeMemorySettings()` and cached at `getMemorySettings()`. - -## Initialization Flow - -``` -App bootstrap - → index.ts imports (side-effect): registers SQLiteBackend - → initMemoryBackends() called from app lifecycle: - 1. Load settings (getMemorySettings) - 2. Configure primary + fallback - 3. Initialize all backends (health check) - 4. Ready for requests -``` - -## Adding a New Backend - -1. **Implement `MemoryBackend`** interface in `src/lib/memory/Backend.ts` -2. **Export** from `src/lib/memory/index.ts` -3. **Register** with `memoryManager.register(yourBackend)` at boot -4. **Configure** via settings: set `memoryPrimaryBackend` to your backend ID -5. **Test** with `src/lib/memory/__tests__/generic-backend.test.ts` as reference - -### Example: Brain Backend - -```typescript -import { createGenericMemoryBackend } from "./genericBackend"; - -const brainBackend = createGenericMemoryBackend("brain", "BK-Brain", { - baseUrl: process.env.BRAIN_API_URL || "http://localhost:9099", - apiKey: process.env.BRAIN_API_KEY, - endpoints: { - search: "/api/memory/search", - create: "/api/memory", - health: "/api/health", - }, -}); - -memoryManager.register(brainBackend); -``` - -## Verification - -### Unit tests - -```bash -npx vitest run src/lib/memory/__tests__/generic-backend.test.ts --reporter=verbose -``` - -Expected output: **26 tests, all passing** covering: - -- Constructor (2) -- Health check (4) — success, failure 500, network error, latency -- Initialize (2) — success, failure -- Create (2) — default endpoint, custom endpoint -- Get (4) — success, 404 → null, non-404 throw, custom path params -- Update (2) — success, 404 → false -- Delete (2) — success, 404 → false -- List (2) — query params, custom param names -- Search (3) — query params, custom endpoint, options serialization -- Auth headers (2) — Bearer token, custom headers -- Factory (1) - -### Type check - -```bash -npm run typecheck:core -``` - -Expected: **0 errors**. diff --git a/docs/frameworks/OPEN_SSE_ARCHITECTURE.md b/docs/frameworks/OPEN_SSE_ARCHITECTURE.md index dc525245dd..83ebf35a95 100644 --- a/docs/frameworks/OPEN_SSE_ARCHITECTURE.md +++ b/docs/frameworks/OPEN_SSE_ARCHITECTURE.md @@ -228,7 +228,7 @@ export async function handleComboChat(body, comboId): Promise { } ``` -Supports **17 routing strategies** (see `src/shared/constants/routingStrategies.ts`): +Supports **19 routing strategies** (see `src/shared/constants/routingStrategies.ts`): | Strategy | Behavior | | ------------------- | ------------------------------------------------------------------------- | @@ -252,7 +252,7 @@ Supports **17 routing strategies** (see `src/shared/constants/routingStrategies. ### base.ts (1170 LOC) -The **abstract executor** that all 67 executors extend. It contains: +The **abstract executor** that all 101 executors extend. It contains: - `buildUrl()` — default URL construction (subclasses override for custom) - `buildHeaders()` — default headers (auth, content-type) @@ -368,7 +368,7 @@ const result = await executor.execute({ }); ```` -The factory is generated from `config/providerRegistry.ts` which lists all 212+ providers and their executor class. +The factory is generated from `config/providerRegistry.ts` which lists all 338 providers and their executor class. --- @@ -408,7 +408,7 @@ Common translations: - **30+ tools** (provider management, combos, memory, cache, compression, 1proxy, skills) - **3 transports**: stdio, SSE, Streamable HTTP -- **13 scopes** for fine-grained authorization +- **31 scopes** for fine-grained authorization ### Tool Registration @@ -487,7 +487,7 @@ This handles: | File | Purpose | | ----------------------------- | --------------------------------- | -| `providerRegistry.ts` | 212+ provider definitions | +| `providerRegistry.ts` | 338 provider definitions | | `providerModels.ts` | Model aliases, format mapping | | `constants.ts` | Timeouts, limits, status codes | | `defaultThinkingSignature.ts` | Default Claude thinking signature | diff --git a/docs/frameworks/meta.json b/docs/frameworks/meta.json index 04fd434026..03f9670e37 100644 --- a/docs/frameworks/meta.json +++ b/docs/frameworks/meta.json @@ -5,17 +5,26 @@ "A2A-SERVER", "AGENT_PROTOCOLS_GUIDE", "ACP", + "AGENT-SKILLS", + "AGENTBRIDGE", "CLOUD_AGENT", + "EMBEDDED-SERVICES", "EVALS", "GAMIFICATION", + "LOCAL_CORPUS_CONTEXT", "MEMORY", "NOTION_CONTEXT", "OBSIDIAN_CONTEXT", "OPENCODE", + "OPEN_SSE_ARCHITECTURE", + "PLAYGROUND_STUDIO", "PLUGIN_MARKETPLACE", "PLUGINS", "PLUGIN_SDK", + "RADAR", + "SEARCH_TOOLS_STUDIO", "SKILLS", + "TRAFFIC_INSPECTOR", "WEBHOOKS" ] } diff --git a/docs/getting-started/AUTO-COMBO-GUIDE.md b/docs/getting-started/AUTO-COMBO-GUIDE.md index 503e73b807..4d6abad9a6 100644 --- a/docs/getting-started/AUTO-COMBO-GUIDE.md +++ b/docs/getting-started/AUTO-COMBO-GUIDE.md @@ -201,7 +201,7 @@ Round-robin cycles through providers in order. Auto-combo **scores each provider - **[Connect a Provider](./PROVIDERS-GUIDE.md)** — Add your first AI provider - **[Free Tiers Guide](./FREE-TIERS-GUIDE.md)** — Get free AI with no credit card -- **[Troubleshooting](./TROUBLESHOOTING.md)** — Fix common issues +- **[Troubleshooting](../guides/TROUBLESHOOTING.md)** — Fix common issues - **[Technical Reference](../routing/AUTO-COMBO.md)** — Deep dive into the scoring algorithm --- diff --git a/docs/getting-started/FREE-TIERS-GUIDE.md b/docs/getting-started/FREE-TIERS-GUIDE.md index da8ddd3589..5b32825cc5 100644 --- a/docs/getting-started/FREE-TIERS-GUIDE.md +++ b/docs/getting-started/FREE-TIERS-GUIDE.md @@ -272,5 +272,5 @@ No catch! Providers offer free tiers to attract users. OmniRoute just makes it e - **[Auto-Combo Guide](./AUTO-COMBO-GUIDE.md)** — Let OmniRoute pick the best AI for you - **[Providers Guide](./PROVIDERS-GUIDE.md)** — Connect more providers -- **[Troubleshooting](./TROUBLESHOOTING.md)** — Fix common issues +- **[Troubleshooting](../guides/TROUBLESHOOTING.md)** — Fix common issues - **[Free Tiers Reference](../reference/FREE_TIERS.md)** — Full list of free tiers diff --git a/docs/getting-started/PROVIDERS-GUIDE.md b/docs/getting-started/PROVIDERS-GUIDE.md index f725baa6df..d54b656a8a 100644 --- a/docs/getting-started/PROVIDERS-GUIDE.md +++ b/docs/getting-started/PROVIDERS-GUIDE.md @@ -237,5 +237,5 @@ Go to Providers → click on the provider → click **Disconnect**. - **[Auto-Combo Guide](./AUTO-COMBO-GUIDE.md)** — Let OmniRoute pick the best AI for you - **[Free Tiers Guide](./FREE-TIERS-GUIDE.md)** — Get free AI with no credit card -- **[Troubleshooting](./TROUBLESHOOTING.md)** — Fix common issues +- **[Troubleshooting](../guides/TROUBLESHOOTING.md)** — Fix common issues - **[Provider Reference](../reference/PROVIDER_REFERENCE.md)** — Full list of 226 providers diff --git a/docs/getting-started/QUICK-START.md b/docs/getting-started/QUICK-START.md index a451327602..c4b34316c7 100644 --- a/docs/getting-started/QUICK-START.md +++ b/docs/getting-started/QUICK-START.md @@ -153,7 +153,7 @@ You can see the details of the request by clicking [Monitoring/Logs](http://loca - **[Auto-Combo Guide](./AUTO-COMBO-GUIDE.md)** — Let OmniRoute pick the best AI for you - **[Providers Guide](./PROVIDERS-GUIDE.md)** — Connect more providers (free and paid) - **[Free Tiers Guide](./FREE-TIERS-GUIDE.md)** — Get free AI with no credit card -- **[Troubleshooting](./TROUBLESHOOTING.md)** — Fix common issues +- **[Troubleshooting](../guides/TROUBLESHOOTING.md)** — Fix common issues --- @@ -183,6 +183,6 @@ OmniRoute automatically skips failed providers and tries the next one. You don't ## Need Help? -- **[Troubleshooting](./TROUBLESHOOTING.md)** — Common issues and fixes +- **[Troubleshooting](../guides/TROUBLESHOOTING.md)** — Common issues and fixes - **[Discord](https://discord.gg/U47eFqAXCn)** — Community support - **[GitHub Issues](https://github.com/diegosouzapw/OmniRoute/issues)** — Report bugs diff --git a/docs/getting-started/TROUBLESHOOTING.md b/docs/getting-started/TROUBLESHOOTING.md deleted file mode 100644 index b8b452c206..0000000000 --- a/docs/getting-started/TROUBLESHOOTING.md +++ /dev/null @@ -1,517 +0,0 @@ ---- -title: "Troubleshooting" -version: 3.8.40 -lastUpdated: 2026-06-28 ---- - -# Troubleshooting - -> **For Users**: Looking for quick fixes? See the [Quick Reference](#quick-reference) below. - -🌐 **Languages:** 🇺🇸 [English](./TROUBLESHOOTING.md) | 🇧🇷 [Português (Brasil)](../i18n/pt-BR/docs/guides/TROUBLESHOOTING.md) | 🇪🇸 [Español](../i18n/es/docs/guides/TROUBLESHOOTING.md) | 🇫🇷 [Français](../i18n/fr/docs/guides/TROUBLESHOOTING.md) | 🇮🇹 [Italiano](../i18n/it/docs/guides/TROUBLESHOOTING.md) | 🇷🇺 [Русский](../i18n/ru/docs/guides/TROUBLESHOOTING.md) | 🇨🇳 [中文 (简体)](../i18n/zh-CN/docs/guides/TROUBLESHOOTING.md) | 🇩🇪 [Deutsch](../i18n/de/docs/guides/TROUBLESHOOTING.md) | 🇮🇳 [हिन्दी](../i18n/in/docs/guides/TROUBLESHOOTING.md) | 🇹🇭 [ไทย](../i18n/th/docs/guides/TROUBLESHOOTING.md) | 🇺🇦 [Українська](../i18n/uk-UA/docs/guides/TROUBLESHOOTING.md) | 🇸🇦 [العربية](../i18n/ar/docs/guides/TROUBLESHOOTING.md) | 🇯🇵 [日本語](../i18n/ja/docs/guides/TROUBLESHOOTING.md) | 🇻🇳 [Tiếng Việt](../i18n/vi/docs/guides/TROUBLESHOOTING.md) | 🇧🇬 [Български](../i18n/bg/docs/guides/TROUBLESHOOTING.md) | 🇩🇰 [Dansk](../i18n/da/docs/guides/TROUBLESHOOTING.md) | 🇫🇮 [Suomi](../i18n/fi/docs/guides/TROUBLESHOOTING.md) | 🇮🇱 [עברית](../i18n/he/docs/guides/TROUBLESHOOTING.md) | 🇭🇺 [Magyar](../i18n/hu/docs/guides/TROUBLESHOOTING.md) | 🇮🇩 [Bahasa Indonesia](../i18n/id/docs/guides/TROUBLESHOOTING.md) | 🇰🇷 [한국어](../i18n/ko/docs/guides/TROUBLESHOOTING.md) | 🇲🇾 [Bahasa Melayu](../i18n/ms/docs/guides/TROUBLESHOOTING.md) | 🇳🇱 [Nederlands](../i18n/nl/docs/guides/TROUBLESHOOTING.md) | 🇳🇴 [Norsk](../i18n/no/docs/guides/TROUBLESHOOTING.md) | 🇵🇹 [Português (Portugal)](../i18n/pt/docs/guides/TROUBLESHOOTING.md) | 🇷🇴 [Română](../i18n/ro/docs/guides/TROUBLESHOOTING.md) | 🇵🇱 [Polski](../i18n/pl/docs/guides/TROUBLESHOOTING.md) | 🇸🇰 [Slovenčina](../i18n/sk/docs/guides/TROUBLESHOOTING.md) | 🇸🇪 [Svenska](../i18n/sv/docs/guides/TROUBLESHOOTING.md) | 🇵🇭 [Filipino](../i18n/phi/docs/guides/TROUBLESHOOTING.md) | 🇨🇿 [Čeština](../i18n/cs/docs/guides/TROUBLESHOOTING.md) - -Common problems and solutions for OmniRoute. - ---- - -## Quick Reference - -**New to OmniRoute?** Start here — these solve 90% of problems: - -| I see this | What it means | What to do | -| ----------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------- | -| "Can't connect" | OmniRoute isn't running | Run `omniroute` or `docker restart omniroute` | -| "Invalid API key" | Your key is wrong or expired | Re-copy the key from the provider's website | -| "Rate limit exceeded" | You're sending too many requests | Wait 1 minute, or use `model: "auto"` for automatic fallback | -| "Quota exceeded" | You've used up your free/paid quota | Connect more providers, or use free providers (Kiro, Pollinations) | -| "Slow responses" | Provider is busy or far away | Use `model: "auto/fast"` or connect a faster provider (Groq, Cerebras) | -| "Wrong provider used" | `auto` picked a different provider | That's normal! `auto` picks the best one. Force a specific provider with `model: "openai/gpt-4o"` | -| "502 Bad Gateway" | Provider is down | Wait and retry, or use `model: "auto"` to switch providers | -| "401 Unauthorized" | Your credentials are wrong | Check your API key or re-authenticate with OAuth | -| "429 Too Many Requests" | Rate limited | Wait 1 minute, or connect more providers | - -**Still stuck?** See the [Quick Fixes](#quick-fixes) below, or ask on [Discord](https://discord.gg/U47eFqAXCn). - ---- - -## npm install Warnings (ERESOLVE / peer / deprecated) - -When you run `npm install -g omniroute`, you may see a wall of warnings like `npm warn ERESOLVE`, peer-dependency notices, and `deprecated` messages. **These are expected and harmless.** Your install succeeded if you see `added packages` in the output. - -The warnings come from stale peer-dependency ranges in third-party packages OmniRoute doesn't control: - -1. **`marked-terminal` wants `marked >=1 <16`, found `marked@18`** — works fine in practice; the upstream peer range is just stale. -2. **`deprecated prebuild-install@7.1.3`** — the native-binary fetch helper. Only relevant later if a web-cookie provider reports a missing `tls-client-node` native binary (a separate issue, not caused by this warning). - -**No action needed** — the warnings cannot be fully silenced without forking upstream packages. - ---- - -## Quick Fixes - -| Problem | Solution | -| --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -| First login not working | Set `INITIAL_PASSWORD` in `.env` (no hardcoded default) | -| Dashboard opens on wrong port | Set `PORT=20128` and `NEXT_PUBLIC_BASE_URL=http://localhost:20128` | -| No logs written to disk | Set `APP_LOG_TO_FILE=true` and verify call log capture is enabled | -| EACCES: permission denied | Set `DATA_DIR=/path/to/writable/dir` to override `~/.omniroute` | -| Routing strategy not saving | Update to the latest v3.x release (Zod schema fix for settings persistence shipped in earlier versions) | -| Login crash / blank page | Check Node.js version — see [Node.js Compatibility](#nodejs-compatibility) below | -| `dlopen` / `slice is not valid mach-o file` (macOS) | Run `cd $(npm root -g)/omniroute/app && npm rebuild better-sqlite3 && omniroute` — see [macOS native module rebuild](#macos-native-module-rebuild) below | -| Proxy "fetch failed" | Ensure proxy config is set at the correct level — see [Proxy Issues](#proxy-issues) below | - ---- - -## Node.js Compatibility - - - -### Login page crashes or shows "Module self-registration" error - -**Cause:** You are running a Node.js version outside OmniRoute's approved secure runtime floor. The most common case is running an older Node 22 or 24 patch level that falls below the patched security floor OmniRoute requires. - -**Symptoms:** - -- Login page shows a blank screen or a server error -- Console shows `Error: Module did not self-register` or similar native binding errors -- The login page shows an **orange warning banner** with your Node version if the runtime is outside the supported secure policy - -**Fix:** - -1. Install a supported Node.js LTS release (recommended: Node.js 24.x): - ```bash - nvm install 24 - nvm use 24 - ``` -2. Verify your version: `node --version` should show `v24.0.0` or newer on the 24.x LTS line -3. Reinstall OmniRoute: `npm install -g omniroute` -4. Restart: `omniroute` - -> **Supported secure versions:** `>=22.22.2 <23` or `>=24.0.0 <27`. Node.js 24.x LTS (Krypton) and Node.js 26 are fully supported. - -### macOS: `dlopen` / "slice is not valid mach-o file" - - - -**Cause:** After a global `npm install -g omniroute`, the `better-sqlite3` native binary inside the package may have been compiled for a different architecture or Node.js ABI than what is running locally. This is common on macOS (both Apple Silicon and Intel) when the pre-built binary does not match your environment. - -**Symptoms:** - -- Server fails immediately on startup with a `dlopen` error -- Error contains `slice is not valid mach-o file` -- Full example: - -``` -dlopen(/Users//.nvm/versions/node/v24.14.1/lib/node_modules/omniroute/app/node_modules/better-sqlite3/build/Release/better_sqlite3.node, 0x0001): tried: '...' (slice is not valid mach-o file) -``` - -**Fix — rebuild for your local environment (no Node.js downgrade required):** - -```bash -cd $(npm root -g)/omniroute/app -npm rebuild better-sqlite3 -omniroute -``` - -> **Note:** This recompiles the native binding against your local Node.js version and CPU architecture, resolving the binary mismatch. The officially supported runtime range is **`>=22.22.2 <23` or `>=24.0.0 <27`** (`SUPPORTED_NODE_RANGE` in `src/shared/utils/nodeRuntimeSupport.ts`, aligned with the `package.json` `engines` field). Node.js 24.x LTS (Krypton) and Node.js 26 are fully supported with `better-sqlite3` v12.x. - ---- - -## Proxy Issues - - - -### Provider validation shows "fetch failed" - -**Cause:** The API key validation endpoint (`POST /api/providers/validate`) was previously bypassing proxy configuration, causing failures in environments that require proxy routing. - -**Fix (v3.5.5+):** This is now fixed. Provider validation routes through `runWithProxyContext`, honoring provider-level and global proxy settings automatically. - -### Token health check fails with "fetch failed" - -**Cause:** Background OAuth token refresh was not resolving proxy configuration per connection. - -**Fix (v3.5.5+):** The token health check scheduler now resolves proxy config per connection before attempting refresh. Update to v3.5.5+. - -### SOCKS5 proxy returns "invalid onRequestStart method" - -**Cause:** On Node.js 22, the undici@8 dispatcher is incompatible with Node's built-in `fetch()` implementation. - -**Fix (v3.5.5+):** OmniRoute now uses undici's own `fetch()` function when a proxy dispatcher is active, ensuring consistent behavior. Update to v3.5.5+. - ---- - -## Provider Issues - -### "Language model did not provide messages" - -**Cause:** Provider quota exhausted. - -**Fix:** - -1. Check dashboard quota tracker -2. Use a combo with fallback tiers -3. Switch to cheaper/free tier - -### Rate Limiting - -**Cause:** Subscription quota exhausted. - -**Fix:** - -- Add fallback: `cc/claude-opus-4-6 → glm/glm-4.7 → if/qwen3.8-max-preview` -- Use GLM/MiniMax as cheap backup - -### OAuth Token Expired - -OmniRoute auto-refreshes tokens. If issues persist: - -1. Dashboard → Provider → Reconnect -2. Delete and re-add the provider connection - -### Kiro multi-account: second account invalidates the first - -**Cause:** Kiro's backend enforces a single active session per OIDC client registration. -When two accounts share the same registered client (connections imported before v3.8.0), -refreshing one account's token invalidates the other's refresh token. - -**Fix (v3.8.0+):** Re-import affected connections. -Starting with v3.8.0, every new Kiro connection created via **Import Token**, -**Google/GitHub social login**, or **Auto-Import** automatically registers its own -dedicated OIDC client. The connection is therefore fully isolated and refreshing one -account has no effect on any other account. - -Connections that were imported _before_ v3.8.0 do not carry a per-connection client -registration. Those connections continue to use the shared social-auth refresh endpoint. -To gain isolation, delete the old connection from Dashboard → Providers and re-add it -via any of the three import flows. - -For full details and step-by-step instructions for adding two Kiro accounts side by side, -see [`docs/guides/KIRO_SETUP.md`](../guides/KIRO_SETUP.md). - ---- - -## Cloud Issues - -### Cloud Sync Errors - -1. Verify `BASE_URL` points to your running instance (e.g., `http://localhost:20128`) -2. Verify `CLOUD_URL` points to your cloud endpoint (e.g., `https://omniroute.dev`) -3. Keep `NEXT_PUBLIC_*` values aligned with server-side values - -### Cloud `stream=false` Returns 500 - -**Symptom:** `Unexpected token 'd'...` on cloud endpoint for non-streaming calls. - -**Cause:** Upstream returns SSE payload while client expects JSON. - -**Workaround:** Use `stream=true` for cloud direct calls. Local runtime includes SSE→JSON fallback. - -### Cloud Says Connected but "Invalid API key" - -1. Create a fresh key from local dashboard (`/api/keys`) -2. Run cloud sync: Enable Cloud → Sync Now -3. Old/non-synced keys can still return `401` on cloud - ---- - -## Docker Issues - -### CLI Tool Shows Not Installed - -1. Check runtime fields: `curl http://localhost:20128/api/cli-tools/runtime/codex | jq` -2. For portable mode: use image target `runner-cli` (bundled CLIs) -3. For host mount mode: set `CLI_EXTRA_PATHS` and mount host bin directory as read-only -4. If `installed=true` and `runnable=false`: binary was found but failed healthcheck - -### Quick Runtime Validation - -```bash -curl -s http://localhost:20128/api/cli-tools/codex-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}' -curl -s http://localhost:20128/api/cli-tools/claude-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}' -curl -s http://localhost:20128/api/cli-tools/openclaw-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}' -``` - ---- - -## Cost Issues - -### High Costs - -1. Check usage stats in Dashboard → Usage -2. Switch primary model to GLM/MiniMax -3. Use free tier (Qoder, Kiro) for non-critical tasks -4. Set cost budgets per API key: Dashboard → API Keys → Budget - ---- - -## Debugging - -### Enable Log Files - -Set `APP_LOG_TO_FILE=true` in your `.env` file. Application logs are written under `logs/`. -Request artifacts are stored under `${DATA_DIR}/call_logs/` when the call log pipeline is -enabled in settings. -When pipeline capture is enabled, set `CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS=false` to omit -stream chunk payloads, or tune `CALL_LOG_PIPELINE_MAX_SIZE_KB` to change the artifact cap in KB. - -### Check Provider Health - -```bash -# Health dashboard -http://localhost:20128/dashboard/health - -# API health check -curl http://localhost:20128/api/monitoring/health -``` - -### Runtime Storage - -- Main state: `${DATA_DIR}/storage.sqlite` (providers, combos, aliases, keys, settings) -- Usage: SQLite tables in `storage.sqlite` (`usage_history`, `call_logs`, `proxy_logs`) + optional `${DATA_DIR}/call_logs/` -- Application logs: `/logs/...` (when `APP_LOG_TO_FILE=true`) -- Call log artifacts: `${DATA_DIR}/call_logs/YYYY-MM-DD/...` when the call log pipeline is enabled - -The Request Logs page's **Clean history** action clears `call_logs`, legacy -`request_detail_logs`, and the local `${DATA_DIR}/call_logs/` artifact directory. - ---- - -## Circuit Breaker Issues - -### Provider stuck in OPEN state - -When a provider's circuit breaker is OPEN, requests are blocked until the cooldown expires. - -**Fix:** - -1. Go to **Dashboard → Settings → Resilience** -2. Check the circuit breaker card for the affected provider -3. Click **Reset All** to clear all breakers, or wait for the cooldown to expire -4. Verify the provider is actually available before resetting - -### Provider keeps tripping the circuit breaker - -If a provider repeatedly enters OPEN state: - -1. Check **Dashboard → Health → Provider Health** for the failure pattern -2. Go to **Settings → Resilience → Provider Profiles** and increase the failure threshold -3. Check if the provider has changed API limits or requires re-authentication -4. Review latency telemetry — high latency may cause timeout-based failures - ---- - -## Audio Transcription Issues - -### "Unsupported model" error - -- Ensure you're using the correct prefix: `deepgram/nova-3` or `assemblyai/best` -- Verify the provider is connected in **Dashboard → Providers** - -### Transcription returns empty or fails - -- Check supported audio formats: `mp3`, `wav`, `m4a`, `flac`, `ogg`, `webm` -- Verify file size is within provider limits (typically < 25MB) -- Check provider API key validity in the provider card - ---- - -## Translator Debugging - -Use **Dashboard → Translator** to debug format translation issues: - -| Mode | When to Use | -| ---------------- | -------------------------------------------------------------------------------------------- | -| **Playground** | Compare input/output formats side by side — paste a failing request to see how it translates | -| **Chat Tester** | Send live messages and inspect the full request/response payload including headers | -| **Test Bench** | Run batch tests across format combinations to find which translations are broken | -| **Live Monitor** | Watch real-time request flow to catch intermittent translation issues | - -### Common format issues - -- **Thinking tags not appearing** — Check if the target provider supports thinking and the thinking budget setting -- **Tool calls dropping** — Some format translations may strip unsupported fields; verify in Playground mode -- **System prompt missing** — Claude and Gemini handle system prompts differently; check translation output -- **SDK returns raw string instead of object** — Resolved in v1.x; response sanitizer strips non-standard fields (`x_groq`, `usage_breakdown`, etc.) that cause OpenAI SDK Pydantic validation failures. If you still see this on v3.x+, please file an issue. -- **GLM/ERNIE rejects `system` role** — Resolved in v1.x; role normalizer automatically merges system messages into user messages for incompatible models. If you still see this on v3.x+, please file an issue. -- **`developer` role not recognized** — Resolved in v1.x; automatically converted to `system` for non-OpenAI providers. If you still see this on v3.x+, please file an issue. -- **`json_schema` not working with Gemini** — Resolved in v1.x; `response_format` is now converted to Gemini's `responseMimeType` + `responseSchema`. If you still see this on v3.x+, please file an issue. - ---- - -## Resilience Settings - -### Auto rate-limit not triggering - -- Auto rate-limit only applies to API key providers (not OAuth/subscription) -- Verify **Settings → Resilience → Provider Profiles** has auto-rate-limit enabled -- Check if the provider returns `429` status codes or `Retry-After` headers - -### Tuning exponential backoff - -Provider profiles support these settings: - -- **Base delay** — Initial wait time after first failure (default: 1s) -- **Max delay** — Maximum wait time cap (default: 30s) -- **Multiplier** — How much to increase delay per consecutive failure (default: 2x) - -### Anti-thundering herd - -When many concurrent requests hit a rate-limited provider, OmniRoute uses mutex + auto rate-limiting to serialize requests and prevent cascading failures. This is automatic for API key providers. - ---- - -## Optional RAG / LLM failure taxonomy (16 problems) - -Some OmniRoute users place the gateway in front of RAG or agent stacks. In those setups it is common to see a strange pattern: OmniRoute looks healthy (providers up, routing profiles ok, no rate limit alerts) but the final answer is still wrong. - -In practice these incidents usually come from the downstream RAG pipeline, not from the gateway itself. - -If you want a shared vocabulary to describe those failures you can use the WFGY ProblemMap, an external MIT license text resource that defines sixteen recurring RAG / LLM failure patterns. At a high level it covers: - -- retrieval drift and broken context boundaries -- empty or stale indexes and vector stores -- embedding versus semantic mismatch -- prompt assembly and context window issues -- logic collapse and overconfident answers -- long chain and agent coordination failures -- multi agent memory and role drift -- deployment and bootstrap ordering problems - -The idea is simple: - -1. When you investigate a bad response, capture: - - user task and request - - route or provider combo in OmniRoute - - any RAG context used downstream (retrieved documents, tool calls, etc) -2. Map the incident to one or two WFGY ProblemMap numbers (`No.1` … `No.16`). -3. Store the number in your own dashboard, runbook, or incident tracker next to the OmniRoute logs. -4. Use the corresponding WFGY page to decide whether you need to change your RAG stack, retriever, or routing strategy. - -Full text and concrete recipes live here (MIT license, text only): - -[WFGY ProblemMap README](https://github.com/onestardao/WFGY/blob/main/ProblemMap/README.md) - -You can ignore this section if you do not run RAG or agent pipelines behind OmniRoute. - ---- - -## v3.8.0 Known Issues - -Issues specific to the v3.8.0 release and their current workarounds. If a fix lands in a later patch, the entry will be updated or removed. - -### Windsurf OAuth flow fails with 401 - -**Symptoms:** - -- "401 unauthorized" while completing the Windsurf OAuth flow from the dashboard -- Windsurf provider card stays in "needs reconnection" state after the callback - -**Causes:** - -- `WINDSURF_FIREBASE_API_KEY` env var missing or empty -- `WINDSURF_API_KEY` misconfigured or pointing at a stale token -- Local firewall/proxy blocking the OAuth callback - -**Fix:** - -1. Verify both `WINDSURF_FIREBASE_API_KEY` and `WINDSURF_API_KEY` are set in `.env` -2. Restart OmniRoute so the new env values are picked up -3. Re-run the OAuth flow from **Dashboard → Providers → Windsurf → Reconnect** - -### Devin CLI auth failures - -**Symptoms:** - -- "Devin CLI not found" or "auth failed" when invoking Devin-backed tools -- CLI runtime check reports `installed=false` - -**Causes:** - -- `CLI_DEVIN_BIN` points to a path that does not exist -- Devin CLI is not installed on the host - -**Fix:** - -1. Install the Devin CLI for your platform -2. Set `CLI_DEVIN_BIN=/usr/local/bin/devin` (or the real path) in `.env` -3. Restart OmniRoute and re-test from **Dashboard → CLI Tools** - -### Model cooldown stuck (manual reset) - -**Symptoms:** - -- A model stays listed in cooldown even after the expiration time has passed -- Requests still skip the model in combo routing despite the timestamp being in the past - -**Manual reset:** - -- **Dashboard:** **Settings → Model Cooldowns** → click **Re-enable** on the affected card -- **API:** `DELETE /api/resilience/model-cooldowns` with management auth headers - -### Command Code provider connection fails with 403 - -**Symptoms:** - -- 403 when testing the Command Code provider connection -- The provider card shows "unauthorized" after a fresh add - -**Cause:** The OAuth flow did not complete (callback not received or token not persisted). - -**Fix:** - -- Run `omniroute providers` from the CLI to re-trigger the OAuth flow, or -- Re-run OAuth from **Dashboard → Providers → Command Code → Reconnect** - -### ModelScope returns aggressive 429 cooldowns - -**Symptoms:** - -- Very short or immediate cooldowns on ModelScope after a small burst of requests -- Combo routing skips ModelScope earlier than expected - -**Cause:** ModelScope emits provider-specific `Retry-After` headers. v3.8.0 ships dedicated handling for those headers, so older versions misread them as generic rate-limit hints. - -**Fix:** - -- Ensure you are on v3.8.0 or later -- Verify the `useUpstream429BreakerHints` toggle is enabled under **Settings → Resilience** - -### OMNIROUTE_WS_BRIDGE_SECRET missing in production - -**Symptoms:** - -- 401 on every Codex/Responses WebSocket bridge request when running on a remote production host -- WebSocket bridge handshake closes immediately after connect - -**Cause:** The `OMNIROUTE_WS_BRIDGE_SECRET` env var is missing from the production environment. - -**Fix:** - -1. Generate a random secret: `openssl rand -hex 32` -2. Set `OMNIROUTE_WS_BRIDGE_SECRET=` in the production server env (and any client that talks to the bridge) -3. Restart OmniRoute - -### Responses API: background mode degraded to synchronous - -**Symptoms:** - -- Warning logged: `background mode degraded to synchronous` -- A `background: true` request returns a normal synchronous response instead of a background job handle - -**Cause:** v3.8.0 intentionally degrades `background: true` on the Responses API to synchronous execution while emitting a warning. Full async background execution is a future deliverable. - -**Fix:** - -- Adjust the client to call without `background`, or -- Wait for a later release that ships full async background mode (track the changelog) - ---- - -## Still Stuck? - -- **GitHub Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **Architecture**: See [`docs/architecture/ARCHITECTURE.md`](../architecture/ARCHITECTURE.md) for internal details -- **API Reference**: See [`docs/reference/API_REFERENCE.md`](../reference/API_REFERENCE.md) for all endpoints -- **Health Dashboard**: Check **Dashboard → Health** for real-time system status -- **Translator**: Use **Dashboard → Translator** to debug format issues diff --git a/docs/getting-started/meta.json b/docs/getting-started/meta.json index 33d94a228c..429bc64059 100644 --- a/docs/getting-started/meta.json +++ b/docs/getting-started/meta.json @@ -6,6 +6,6 @@ "AUTO-COMBO-GUIDE", "PROVIDERS-GUIDE", "FREE-TIERS-GUIDE", - "TROUBLESHOOTING" + "WEB-COOKIE-GUIDE" ] } diff --git a/docs/guides/DOCKER_GUIDE.md b/docs/guides/DOCKER_GUIDE.md index 3180c10e3b..6740a1958e 100644 --- a/docs/guides/DOCKER_GUIDE.md +++ b/docs/guides/DOCKER_GUIDE.md @@ -336,6 +336,57 @@ Endpoint tunnel panels (Cloudflare, Tailscale, ngrok) can be shown or hidden fro Multi-platform manifest: `linux/amd64` + `linux/arm64` native (Apple Silicon, AWS Graviton, Raspberry Pi). Docker selects the matching architecture automatically; pass `--platform linux/amd64` if you need to force AMD64 emulation on ARM hosts. +### Release Channels + +OmniRoute publishes separate Docker channels for stable releases, active release-branch testing, and development builds. + +| Channel | Source | Mutability | Recommended use | +| ------------------------------- | ----------------------------------- | --------------------------- | ----------------------------------------------------------------------------------------------- | +| `:` / `:-web` | Signed/versioned release | Immutable | Production deployments that pin an exact release | +| `:latest` / `:latest-web` | Highest stable release | Mutable stable pointer | Production deployments that intentionally follow stable releases | +| `:next` / `:next-web` | Current default `release/v*` branch | Mutable pre-release pointer | Testing fixes that have landed on the active release branch but are not yet in a stable release | +| `:main` / `:main-web` | `main` branch | Mutable development pointer | Development and integration testing only | + +#### Using the pre-release channel + +The `next` channel is rebuilt on every push to the current default `release/v*` branch and is published for both AMD64 and ARM64. Older maintenance branches cannot overwrite it. The channel provides a pullable image for fixes that have merged into the active release branch before the next stable tag is cut. + +```bash +docker pull diegosouzapw/omniroute:next +docker pull diegosouzapw/omniroute:next-web +``` + +For Docker Compose, override the image tag used by the selected profile, then pull and recreate the service: + +```yaml +services: + omniroute: + image: diegosouzapw/omniroute:next +``` + +```bash +docker compose pull +docker compose up -d +``` + +#### Safety and rollback + +`next` is a floating pre-release channel. It may change on any push to the active release branch and is **not supported for production use**. Pin the image digest while evaluating a specific build: + +```bash +docker pull diegosouzapw/omniroute:next +docker image inspect diegosouzapw/omniroute:next --format '{{index .RepoDigests 0}}' +``` + +Before testing, back up the OmniRoute data volume or bind-mounted data directory. To roll back, restore the previously used stable version or digest and recreate the container: + +```bash +docker pull diegosouzapw/omniroute: +docker compose up -d +``` + +A release-branch build can never move `latest`; only an eligible stable semantic version may promote the stable pointer. The `next` images retain the release image inspection and blocking CRITICAL-vulnerability gate. + ## Important Notes - **SQLite WAL Mode:** `docker stop` should be allowed to finish so OmniRoute can checkpoint the latest changes back into `storage.sqlite`. The bundled Compose files already set a 40s stop grace period. If you run the image directly, keep `--stop-timeout 40`. diff --git a/docs/guides/DOCKER_RELEASE_CHANNELS.md b/docs/guides/DOCKER_RELEASE_CHANNELS.md deleted file mode 100644 index afc47318a0..0000000000 --- a/docs/guides/DOCKER_RELEASE_CHANNELS.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "Docker Release Channels" -version: 3.8.50 -lastUpdated: 2026-08-06 ---- - -# Docker Release Channels - -OmniRoute publishes separate Docker channels for stable releases, active release-branch testing, and development builds. - -## Channel summary - -| Channel | Source | Mutability | Recommended use | -| --- | --- | --- | --- | -| `:` / `:-web` | Signed/versioned release | Immutable | Production deployments that pin an exact release | -| `:latest` / `:latest-web` | Highest stable release | Mutable stable pointer | Production deployments that intentionally follow stable releases | -| `:next` / `:next-web` | Current default `release/v*` branch | Mutable pre-release pointer | Testing fixes that have landed on the active release branch but are not yet in a stable release | -| `:main` / `:main-web` | `main` branch | Mutable development pointer | Development and integration testing only | - -## Using the pre-release channel - -The `next` channel is rebuilt on every push to the current default `release/v*` branch and is published for both AMD64 and ARM64. Older maintenance branches cannot overwrite it. The channel provides a pullable image for fixes that have merged into the active release branch before the next stable tag is cut. - -```bash -docker pull diegosouzapw/omniroute:next -docker pull diegosouzapw/omniroute:next-web -``` - -For Docker Compose, override the image tag used by the selected profile, then pull and recreate the service: - -```yaml -services: - omniroute: - image: diegosouzapw/omniroute:next -``` - -```bash -docker compose pull -docker compose up -d -``` - -## Safety and rollback - -`next` is a floating pre-release channel. It may change on any push to the active release branch and is **not supported for production use**. Pin the image digest while evaluating a specific build: - -```bash -docker pull diegosouzapw/omniroute:next -docker image inspect diegosouzapw/omniroute:next --format '{{index .RepoDigests 0}}' -``` - -Before testing, back up the OmniRoute data volume or bind-mounted data directory. To roll back, restore the previously used stable version or digest and recreate the container: - -```bash -docker pull diegosouzapw/omniroute: -docker compose up -d -``` - -A release-branch build can never move `latest`; only an eligible stable semantic version may promote the stable pointer. The `next` images retain the release image inspection and blocking CRITICAL-vulnerability gate. diff --git a/docs/guides/FEATURES.md b/docs/guides/FEATURES.md index d416c2b486..0255d21554 100644 --- a/docs/guides/FEATURES.md +++ b/docs/guides/FEATURES.md @@ -22,7 +22,7 @@ The v3.7.x → v3.8.0 cycle added zero-config auto routing, new providers, OAuth - 🆕 **Command Code provider** (#2199) — first-class registration with model catalog and quota tracking - 🆕 **Z.AI provider** — new free-tier provider with quota labels - 🎬 **KIE media expansion** — extended catalog including video generation models -- 🔐 **Windsurf + Devin CLI OAuth flows** (#2168) — end-to-end browser-based login +- 🔐 **Devin authentication** — Desktop imports an existing Devin API key; the CLI uses local `devin auth login` credentials - 🆓 **8 new free providers** — LLM7, Lepton, UncloseAI, BazaarLink, Completions, Enally, FreeTheAi, Command Code - 🎯 **Manifest-aware tier routing W1–W4** — provider manifests drive weighted tier selection - 🎨 **Cursor full OpenAI parity** — tool calls, streaming, session management end-to-end @@ -153,7 +153,7 @@ Dashboard for discovering and managing CLI agents. Shows a grid of 16 built-in a - **Protocol badges** — stdio, HTTP, etc. - **Custom agents** — Register any CLI tool via form (name, binary, version command, spawn args) - **CLI Fingerprint Matching** — Per-provider toggle to match native CLI request signatures, reducing ban risk while preserving proxy IP -- **OAuth-backed agents** — Windsurf & Devin CLI now use browser OAuth flows for authentication (v3.8.0+) +- **Local Devin authentication** — Devin CLI uses `devin auth login`; no browser OAuth flow is required --- diff --git a/docs/guides/I18N.md b/docs/guides/I18N.md index 1cc5a7f088..87b06395de 100644 --- a/docs/guides/I18N.md +++ b/docs/guides/I18N.md @@ -88,9 +88,9 @@ README variants) are not yet handled by the new pipeline and are still used. ### Source of Truth - **UI strings**: `src/i18n/messages/en.json` (English source, ~2800 keys) -- **Locale files**: `src/i18n/messages/{locale}.json` (30 translations) +- **Locale files**: `src/i18n/messages/{locale}.json` (43 translations) - **Framework**: `next-intl` with cookie-based locale resolution -- **Config**: `src/i18n/config.ts` — defines all 30 locales, language names, flags +- **Config**: `src/i18n/config.ts` — defines all 43 locales, language names, flags ### Runtime Flow @@ -304,7 +304,7 @@ invocation. Use `config lang set` to persist. 43 locale files ship in `bin/cli/locales/`. Full translations: `en`, `pt-BR`. Scaffold-only (all keys fall back to `en`): `bn`, `gu`, `he`, `in`, `mr`, `ms`, `phi`, `sw`, `ta`, `te`, `ur`. -All other 29 locales have `common` + `program` keys translated. +All other 30 locales have `common` + `program` keys translated. ### Adding a new CLI locale @@ -533,7 +533,7 @@ python3 scripts/i18n/validate_translation.py quick -l '${{ matrix.lang }}' ``` src/i18n/ -├── config.ts # Locale definitions (30 locales, RTL config) +├── config.ts # Locale definitions (43 locales, RTL config) ├── request.ts # Runtime locale resolution └── messages/ ├── en.json # Source of truth (~2800 keys) diff --git a/docs/guides/TIERS.md b/docs/guides/TIERS.md index 704d93cf71..2be0f408df 100644 --- a/docs/guides/TIERS.md +++ b/docs/guides/TIERS.md @@ -21,7 +21,7 @@ it expires. | OpenAI Codex (ChatGPT subscription) | Plus/Team includes Codex quota | | GitHub Copilot | Per-seat — quota resets monthly | | Cursor IDE | Pro plan quota | -| Antigravity / Windsurf | Built-in quotas | +| Antigravity / Devin Desktop | Built-in quotas | **Strategy**: route here first for every request that fits the model's strengths. Quota tracker monitors approaching reset; combo strategies diff --git a/docs/guides/TROUBLESHOOTING.md b/docs/guides/TROUBLESHOOTING.md index 8c629422a6..c8aaf561a0 100644 --- a/docs/guides/TROUBLESHOOTING.md +++ b/docs/guides/TROUBLESHOOTING.md @@ -38,6 +38,19 @@ Common problems and solutions for OmniRoute. --- +## npm install Warnings (ERESOLVE / peer / deprecated) + +When you run `npm install -g omniroute`, you may see a wall of warnings like `npm warn ERESOLVE`, peer-dependency notices, and `deprecated` messages. **These are expected and harmless.** Your install succeeded if you see `added packages` in the output. + +The warnings come from stale peer-dependency ranges in third-party packages OmniRoute doesn't control: + +1. **`marked-terminal` wants `marked >=1 <16`, found `marked@18`** — works fine in practice; the upstream peer range is just stale. +2. **`deprecated prebuild-install@7.1.3`** — the native-binary fetch helper. Only relevant later if a web-cookie provider reports a missing `tls-client-node` native binary (a separate issue, not caused by this warning). + +**No action needed** — the warnings cannot be fully silenced without forking upstream packages. + +--- + ## Quick Fixes | Problem | Solution | @@ -594,25 +607,6 @@ You can ignore this section if you do not run RAG or agent pipelines behind Omni Issues specific to the v3.8.0 release and their current workarounds. If a fix lands in a later patch, the entry will be updated or removed. -### Windsurf OAuth flow fails with 401 - -**Symptoms:** - -- "401 unauthorized" while completing the Windsurf OAuth flow from the dashboard -- Windsurf provider card stays in "needs reconnection" state after the callback - -**Causes:** - -- `WINDSURF_FIREBASE_API_KEY` env var missing or empty -- `WINDSURF_API_KEY` misconfigured or pointing at a stale token -- Local firewall/proxy blocking the OAuth callback - -**Fix:** - -1. Verify both `WINDSURF_FIREBASE_API_KEY` and `WINDSURF_API_KEY` are set in `.env` -2. Restart OmniRoute so the new env values are picked up -3. Re-run the OAuth flow from **Dashboard → Providers → Windsurf → Reconnect** - ### Devin CLI auth failures **Symptoms:** diff --git a/docs/guides/meta.json b/docs/guides/meta.json index 331d7a5d7f..41c6a102c5 100644 --- a/docs/guides/meta.json +++ b/docs/guides/meta.json @@ -11,11 +11,17 @@ "COST_TRACKING", "I18N", "KIRO_SETUP", + "ANTIGRAVITY-ONBOARDING", + "CLAUDE-CODE-CONFIGURATION", "CODEX-CLI-CONFIGURATION", + "CLI-INTEGRATIONS", + "MANAGEMENT-AUTH", + "REMOTE-MODE", "PWA_GUIDE", "TERMUX_GUIDE", "TIERS", "USAGE_QUOTA_GUIDE", + "TROUBLESHOOTING", "UNINSTALL" ] } diff --git a/docs/i18n/ar/llm.txt b/docs/i18n/ar/llm.txt index d157540caa..454f5dcd4d 100644 --- a/docs/i18n/ar/llm.txt +++ b/docs/i18n/ar/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/az/llm.txt b/docs/i18n/az/llm.txt index 075229caa5..d829905bcd 100644 --- a/docs/i18n/az/llm.txt +++ b/docs/i18n/az/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/bg/llm.txt b/docs/i18n/bg/llm.txt index 075229caa5..d829905bcd 100644 --- a/docs/i18n/bg/llm.txt +++ b/docs/i18n/bg/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/bn/llm.txt b/docs/i18n/bn/llm.txt index 686cf2afbc..e0a399b644 100644 --- a/docs/i18n/bn/llm.txt +++ b/docs/i18n/bn/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/cs/llm.txt b/docs/i18n/cs/llm.txt index 5dbaf03e99..922e176440 100644 --- a/docs/i18n/cs/llm.txt +++ b/docs/i18n/cs/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/da/llm.txt b/docs/i18n/da/llm.txt index 29093c0fce..fc4d0b2466 100644 --- a/docs/i18n/da/llm.txt +++ b/docs/i18n/da/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/de/llm.txt b/docs/i18n/de/llm.txt index 175fbf938b..c013784a40 100644 --- a/docs/i18n/de/llm.txt +++ b/docs/i18n/de/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/es/llm.txt b/docs/i18n/es/llm.txt index 01d19c8093..c383e19104 100644 --- a/docs/i18n/es/llm.txt +++ b/docs/i18n/es/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/fa/llm.txt b/docs/i18n/fa/llm.txt index 4ee1ea1f79..fe7f03f67d 100644 --- a/docs/i18n/fa/llm.txt +++ b/docs/i18n/fa/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/fi/llm.txt b/docs/i18n/fi/llm.txt index 777b728cb9..11273b2f23 100644 --- a/docs/i18n/fi/llm.txt +++ b/docs/i18n/fi/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/fr/llm.txt b/docs/i18n/fr/llm.txt index 83e126582a..e1c32578f8 100644 --- a/docs/i18n/fr/llm.txt +++ b/docs/i18n/fr/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/gu/llm.txt b/docs/i18n/gu/llm.txt index 909f1818f2..26a0640805 100644 --- a/docs/i18n/gu/llm.txt +++ b/docs/i18n/gu/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/he/llm.txt b/docs/i18n/he/llm.txt index a229eeb907..39c47704a3 100644 --- a/docs/i18n/he/llm.txt +++ b/docs/i18n/he/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/hi/llm.txt b/docs/i18n/hi/llm.txt index e92f5650b4..27fddd2e19 100644 --- a/docs/i18n/hi/llm.txt +++ b/docs/i18n/hi/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/hu/llm.txt b/docs/i18n/hu/llm.txt index 40b0dd095c..a1d63275bb 100644 --- a/docs/i18n/hu/llm.txt +++ b/docs/i18n/hu/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/id/llm.txt b/docs/i18n/id/llm.txt index 8b61036b68..377391d905 100644 --- a/docs/i18n/id/llm.txt +++ b/docs/i18n/id/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/in/llm.txt b/docs/i18n/in/llm.txt index 86bf32e43e..bbd35be114 100644 --- a/docs/i18n/in/llm.txt +++ b/docs/i18n/in/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/it/llm.txt b/docs/i18n/it/llm.txt index 0341b59136..d14785348e 100644 --- a/docs/i18n/it/llm.txt +++ b/docs/i18n/it/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/ja/llm.txt b/docs/i18n/ja/llm.txt index 92af0f6bae..e6c52a40c6 100644 --- a/docs/i18n/ja/llm.txt +++ b/docs/i18n/ja/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/ko/llm.txt b/docs/i18n/ko/llm.txt index 74258069db..e0e5de2910 100644 --- a/docs/i18n/ko/llm.txt +++ b/docs/i18n/ko/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/mr/llm.txt b/docs/i18n/mr/llm.txt index 9f79456c69..5a9ce36db4 100644 --- a/docs/i18n/mr/llm.txt +++ b/docs/i18n/mr/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/ms/llm.txt b/docs/i18n/ms/llm.txt index 9c5b6b9760..4c7cee1944 100644 --- a/docs/i18n/ms/llm.txt +++ b/docs/i18n/ms/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/nl/llm.txt b/docs/i18n/nl/llm.txt index 1b2b3435a3..77a8c8a29c 100644 --- a/docs/i18n/nl/llm.txt +++ b/docs/i18n/nl/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/no/llm.txt b/docs/i18n/no/llm.txt index f3f4e73e48..992be4b63f 100644 --- a/docs/i18n/no/llm.txt +++ b/docs/i18n/no/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/phi/llm.txt b/docs/i18n/phi/llm.txt index 015777774b..9a248f4be2 100644 --- a/docs/i18n/phi/llm.txt +++ b/docs/i18n/phi/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/pl/SECURITY.md b/docs/i18n/pl/SECURITY.md index 594e660e90..87dadd93f8 100644 --- a/docs/i18n/pl/SECURITY.md +++ b/docs/i18n/pl/SECURITY.md @@ -42,7 +42,7 @@ Request → CORS → Authz pipeline (classify → policies → enforce) | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | | **Dashboard Login** | Uwierzytelnianie hasłem z tokenami JWT (ciasteczka HttpOnly) | | **API Key Auth** | Klucze podpisane HMAC z walidacją CRC | -| **OAuth 2.0 + PKCE** | 13 dostawców (Claude, Codex, GitHub, Cursor, Antigravity, Gemini, Kimi Coding, Kilo Code, Cline, Kiro, Qoder, Windsurf, GitLab Duo) | +| **OAuth 2.0 + PKCE** | Przepływy OAuth w przeglądarce/na urządzeniu używają PKCE, gdy dostawca je obsługuje; importowane poświadczenia Devin są obsługiwane osobno. | | **Token Refresh** | Automatyczne odświeżanie tokenów OAuth przed wygaśnięciem | | **Secure Cookies** | `AUTH_COOKIE_SECURE=true` dla środowisk HTTPS | | **Authz Pipeline** | Klasyfikacja tras (PUBLIC / CLIENT_API / MANAGEMENT) — zob. `docs/architecture/AUTHZ_GUIDE.md` | diff --git a/docs/i18n/pl/docs/INCIDENT_RESPONSE.md b/docs/i18n/pl/docs/INCIDENT_RESPONSE.md deleted file mode 100644 index d23663330a..0000000000 --- a/docs/i18n/pl/docs/INCIDENT_RESPONSE.md +++ /dev/null @@ -1,232 +0,0 @@ -# Runbook reagowania na incydenty — OmniRoute (2026-06-18) - -**Status**: Dokument autorytatywny. Audyt 71 filarów (L61) odwołuje się do tego -dokumentu w bramce `Obs > 2.00`. -**Właściciel**: observability-circle (lead: security-circle lead). -**SLO**: zob. `docs/PERF_BUDGETS.md` § 1 (SLO najwyższego poziomu) oraz -`ops/slos.yaml` (forma maszynowo czytelna, generowana przez zespół Bifrost). -**Polityka ujawniania**: zob. `SECURITY.md` (wyłącznie ujawnianie podatności, -osobny przepływ). - -Ten runbook to operacyjny playbook dla incydentów **niezwiązanych z bezpieczeństwem**: -awarie, regresje opóźnień, spalanie budżetu błędów oraz awarie po stronie -dostawców. Ujawnianie podatności pozostaje w `SECURITY.md`; nie kieruj -tych spraw przez ten runbook. - ---- - -## 1. Skala ważności - -| Sev | Definicja | Przykłady | Powiadomienie | Rozwiązanie do | -| --------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- | ----------------------------------------- | ---------------------------- | -| **SEV-1** | Awaria widoczna dla użytkownika; > 50 % żądań kończy się niepowodzeniem lub naruszenie SLO > 2x przez 5 min. | Klaster niedostępny; warstwa auth uszkodzona; powódź 5xx. | On-call P0 (natychmiast) | 4 h | -| **SEV-2** | Znacząca degradacja; naruszenie SLO 1,5–2x przez 15 min lub wpływ na jednego najemcę. | Jeden dostawca niedostępny; p95 > 1,5x budżetu; niekontrolowane rate-limity. | On-call P1 (15 min) | 24 h | -| **SEV-3** | Uśpiony błąd lub near-miss; brak bieżącego wpływu na użytkownika, ale budżet błędów zagrożony. | Wyciek pamięci w trendzie wzrostowym; circuit breaker wyłącza jednego dostawcę. | Slack `#omniroute-ops` (następny standup) | 7 d | -| **SEV-4** | Kosmetyczny / informacyjny. | Szum w logach; nieblokujący glitch UI. | Następny przegląd tygodniowy | Następny cykl refaktoryzacji | - -**Eskalacja burn-rate** (zgodnie z `docs/PERF_BUDGETS.md` § 1): 6x przez 5 min -to SEV-1; 2x przez 1 h to SEV-2; utrzymanie < 1x przez 7 d obniża do SEV-3. - ---- - -## 2. Źródła detekcji - -| Źródło | Sygnał | Routing | -| --------------------------------- | ------------------------------------ | ------------------------------------- | -| Prometheus (`/metrics`) | Delty liczników (5xx, latency) | Alertmanager → PagerDuty | -| Panele SLO w Grafana | Panele burn-rate SLO | Slack `#omniroute-ops` | -| Sonda uptime (`/api/health/ping`) | 3 kolejne niepowodzenia z 3 regionów | Alertmanager → PagerDuty | -| Dependabot | Nowe CVE w zależności (CVSS ≥ 7) | GitHub Security → security-circle | -| Ręczny raport użytkownika | Zgłoszenie w Discord / GitHub issue | Triage przez dyżurnego (on-call) | -| Chaos-drill (kwartalny) | Wstrzyknięte awarie | Planowany drill; wyniki w `docs/ops/` | - -Alerty **nie** idą na prywatne DM. Domyślny kanał to `#omniroute-ops`; PagerDuty -stronicuje rotację on-call. Pełna matryca alertów: `ops/alertmanager/rules.yml` -(gdy jest wdrożona; do tego czasu reguły są w konfiguracji Prometheus w -`deploy/observability/`). - ---- - -## 3. Pierwsze 15 minut (SEV-1 / SEV-2) - -1. **Potwierdź**. Otwórz panel SLO i sprawdź, czy alert jest prawdziwy, a nie - flapping. Jeśli flapping — wycisz na 15 min i zbadaj. -2. **Zadeklaruj**. Opublikuj w `#omniroute-ops`: - ``` - INCIDENT - IC: @you - Status: investigating - Następna aktualizacja: - ``` -3. **Stabilizuj** przed diagnozą główną przyczyny. Preferowana kolejność: - - Odetnij zły deploy: `kubectl rollout undo deploy/omniroute` (lub - równoważne dla Twojego środowiska; zob. `docs/ops/DEPLOYMENT.md`). - - Przełącz combo / dostawcę: `POST /api/combos/:id/switch` lub MCP - `switch_combo`. - - Włącz tryb degradacji: ustaw - `OMNIROUTE_DEGRADATION_MODE=lite` (pomija niekrytyczne middleware). - - Rate-limit ruch wejściowy na edge, jeśli to flood. -4. **Aktualizuj** co 15 min do złagodzenia lub rozwiązania. - -Nie debuguj w produkcji przy SEV-1. Przywróć ostatni znany dobry stan, potem -rób post-mortem offline. - ---- - -## 4. Macierz runbooków - -| Klasa awarii | Pierwszy ruch | Runbook | -| ------------------------------------ | ------------------------------------------------------------- | ---------------------------------------------------------- | -| Całkowity outage (wszystkie regiony) | Rollback ostatniego deployu; sprawdź status edge / DNS | `docs/ops/DEPLOYMENT.md` § rollback | -| Pojedynczy dostawca 5xx / timeout | Wyłącz dostawcę w combo; włącz fallback | `docs/architecture/RESILIENCE_GUIDE.md` | -| Spalanie budżetu błędów (latency) | Sprawdź p95 per-route; włącz compression / cache | `docs/PERF_BUDGETS.md` § 1–3 | -| Wyczerpanie połączeń SQLite | Zrestartuj z większym pool; sprawdź długotrwałe transakcje | `docs/architecture/CODEBASE_DOCUMENTATION.md` (warstwa DB) | -| Wyciek pamięci / OOM | Heap snapshot; rolling restart; oznacz SEV-3 na follow-up | wewnętrzny runbook profilowania | -| Wygaśnięcie certu / TLS | Wdróż odnowiony cert; sprawdź automatyzację renew | `docs/ops/TLS.md` (gdy jest; w przeciwnym razie ręcznie) | -| Awaria odświeżania tokena OAuth | Wymuś re-auth na dotkniętych kontach; sprawdź status dostawcy | `docs/security/OAUTH.md` | -| Powódź rate-limit (wejście) | Zaciśnij limity na kluczu API; zbanuj obrażający klucz | `docs/architecture/AUTHZ_GUIDE.md` | -| Awaria zależności (npm / CVE) | Pin / patch; w razie potrzeby wyłącz funkcję | `SECURITY.md` + Dependabot | - -Każdy runbook musi kończyć się kryteriami **done** i właścicielem follow-upu. - ---- - -## 5. Role w czasie incydentu - -| Rola | Kto | Odpowiedzialności | -| --------------------------- | ------------------------------------ | ---------------------------------------------------------------- | -| **Incident Commander (IC)** | Dyżurny on-call (lub delegat) | Deklaruje sev, prowadzi mostek, zatwierdza mitigacje, zamyka | -| **Tech lead** | Inżynier znający dotknięty podsystem | Diagnozuje, proponuje mitigacje, wdraża poprawki | -| **Comms** | IC lub wolontariusz | Aktualizacje na Slacku, status page, odpowiedzi dla użytkowników | -| **Scribe** | Wolontariusz | Notatki z linii czasu na potrzeby post-mortem | -| **Executive sponsor** | Tylko SEV-1 | Escalation path; decyzje o zasobach | - -Jedna osoba = jedna rola, gdy to możliwe. IC **nie** debuguje. - ---- - -## 6. Komunikacja - -- **Wewnętrzna**: `#omniroute-ops` jest źródłem prawdy. Wątek na incydent na - deklarację; wszystkie aktualizacje w wątku. -- **Zewnętrzna** (gdy dotyczy użytkowników zewnętrznych): status page - (status.omniroute.example — zastąp prawdziwym URL, gdy będzie live). SEV-1 - dostaje publiczny post w ≤ 30 min; SEV-2 w ≤ 2 h, jeśli wpływ jest - zewnętrzny. -- **Nie** spekuluj o root cause publicznie. Podawaj objawy i ETA mitigacji. -- Po złagodzeniu: jedna wiadomość „mitigated, monitoring for 30 min”, potem - „resolved” z linkiem do post-mortem (gdy będzie gotowy). - ---- - -## 7. Łagodzenie vs rozwiązanie - -| Stan | Znaczenie | Kiedy używać | -| --------------- | -------------------------------------------------------- | ------------------------------------------ | -| `investigating` | Alert potwierdzony, przyczyna nieznana | Pierwsze 15 min | -| `mitigating` | Stosowana poprawka; wpływ powinien spadać | Podczas rollbacku / failover | -| `mitigated` | Wpływ na użytkownika ustał; root cause może być otwarty | Po udanej stabilizacji | -| `resolved` | Root cause znany i trwale naprawiony (lub zaakceptowany) | Po merge poprawki lub decyzji o akceptacji | -| `wontfix` | Zaakceptowane ryzyko; udokumentowane | Tylko SEV-3/4 za zgodą IC | - -SEV-1/2 nie mogą pozostać w `mitigated` dłużej niż 7 dni bez eskalacji do -executive sponsora. - ---- - -## 8. Post-mortem (obowiązkowy dla SEV-1/2) - -Szablon (skopiuj do `docs/postmortems/YYYY-MM-DD-.md`): - -```markdown -# Post-mortem: - -- Data: YYYY-MM-DD -- Sev: SEV-N -- IC: @handle -- Czas trwania: wykrycie → mitigacja → rozwiązanie -- Dotknięci użytkownicy / budżet błędów spalony: - -## Streszczenie - -<5 zdań, bez winy> - -## Linia czasu - -| Czas (UTC) | Event | -| ---------- | ----- | -| HH:MM | ... | - -## Root cause - - - -## Co poszło dobrze - -- ... - -## Co poszło źle - -- ... - -## Action items - -| AI | Właściciel | Termin | Status | -| --- | ---------- | ---------- | ------ | -| ... | @handle | YYYY-MM-DD | open | - -## Lekcje - -<1–3 trwałe zmiany procesu lub kodu> -``` - -Zasady: - -- **Bez obwiniania.** System zawiódł, nie osoba. -- Action items mają właściciela i termin; otwarte AI są przeglądane na - cotygodniowym standupie ops. -- Opublikuj w ciągu **5 dni roboczych** od rozwiązania. -- SEV-3 dostaje post-mortem tylko gdy IC uzna to za wartościowe; SEV-4 nigdy. - ---- - -## 9. Kwartalne chaos-drille - -Harmonogram (własność: observability-circle): - -| Kwartał | Scenariusz | Sukces = | -| ------- | ------------------------------------------- | --------------------------------------------- | -| Q1 | Kill pod główny podczas peak load | Failover < 30 s; zero utraty danych | -| Q2 | Wstrzyknij 5xx u top-1 dostawcy | Combo przełącza się; budżet błędów trzyma się | -| Q3 | Partycja sieci do SQLite (gdy sklastrowany) | Degradacja read-only; brak korupcji | -| Q4 | Wygaśnięcie certu TLS (staging) | Alert odpala; renew w SLO | - -Wyniki lądują w `docs/ops/chaos/YYYY-QN.md`. Niezaliczony drill otwiera SEV-3 -z AI na lukę. - ---- - -## 10. Powiązane dokumenty - -| Dokument | Rola | -| --------------------------------------- | ------------------------------------- | -| `docs/PERF_BUDGETS.md` | SLO, budżety błędów, progi burn-rate | -| `ops/slos.yaml` | Maszynowa forma SLO (Bifrost) | -| `SECURITY.md` | Ujawnianie podatności (osobny flow) | -| `docs/architecture/RESILIENCE_GUIDE.md` | Fallback, circuit breaker, degradacja | -| `docs/ops/DEPLOYMENT.md` | Deploy / rollback | -| `docs/architecture/AUTHZ_GUIDE.md` | Nadużycia kluczy API, rate-limity | -| `docs/postmortems/` | Archiwum wpisów post-mortem | - ---- - -## 11. Historia zmian - -| Data | Zmiana | -| ---------- | ---------------------------------------------- | -| 2026-06-18 | Wstępna wersja autorytatywna (L61 / gate Obs). | - ---- - -_Ten dokument jest autorytatywny dla operacyjnego reagowania na incydenty. -Poprawki: PR do `docs/INCIDENT_RESPONSE.md` z recenzją observability-circle._ diff --git a/docs/i18n/pl/docs/PERF_BUDGETS.md b/docs/i18n/pl/docs/PERF_BUDGETS.md deleted file mode 100644 index 94f5e2b19c..0000000000 --- a/docs/i18n/pl/docs/PERF_BUDGETS.md +++ /dev/null @@ -1,231 +0,0 @@ -# Budżety wydajności — OmniRoute (2026-06-18) - -**Status**: Miarodajny. Cele SLO, do których odwołuje się audyt 71 filarów (L13) -przy bramce `Perf > 2.00`. -**Metodyka**: budżety opóźnień p50/p95/p99 per endpoint oraz -nadrzędne SLO dostępności. Budżety wyprowadzono z topologii 3 replik -Caddy + Redis (commit `038439fa7`); korygować przy zmianie infrastruktury. -**Egzekwowanie**: na razie brak. § 6 szkicuje skrypt k6 `benches/perf-gate.k6.js`, -który asertowałby poniższe SLO, lecz jest to odniesienie projektowe, -a nie zacommitowany plik — w repozytorium nie ma dziś katalogu `bench/` ani `benches/`. -Ten dokument służy wyłącznie do ustalania celów, dopóki bramka CI -nie powstanie jako praca następcza. -**Częstotliwość ponownej oceny**: kwartalnie lub przy każdej istotnej zmianie infrastruktury. - ---- - -## 1. Nadrzędne SLO - -| SLO | Cel | Okno | Page przy naruszeniu | -| ------------------------------------------------------------- | ------------------------ | --------------- | -------------------- | -| **Dostępność** (2xx lub 4xx dla /v1/* i /api/settings/*) | 99.9% | rolling 30 days | on-call P2 | -| **Tempo spalania error budget** (znormalizowany wskaźnik 1xx) | < 2x for 1h, < 6x for 5m | 1h / 5m windows | on-call P1 | -| **Zagregowane opóźnienie p95** (wszystkie /v1/*) | ≤ 1.5 s | rolling 5 min | on-call P2 | -| **Zagregowane opóźnienie p99** (wszystkie /v1/*) | ≤ 4.0 s | rolling 5 min | on-call P2 | - -**Error budget**: okno 30-dniowe = 43,2 minuty niedostępności przy -99.9%. Tempo spalania > 2x to P2; > 6x to P1. - ---- - -## 2. Budżety opóźnień per endpoint - -Wszystkie budżety mierzone **po stronie serwera** (od wejścia do Next.js Route Handler -do startu odpowiedzi albo do ostatniego bajtu przy streamingu). Endpointy streamowe -mierzone do time-of-first-byte (TTFB), ponieważ body jest przyrostowe. - -### 2.1 Endpointy inferencji (ścieżka krytyczna) - -| Endpoint | Method | p50 | p95 | p99 | Notes | -| ----------------------------------------- | ----------- | ------ | ------ | ------ | ------------------------------------------------------------- | -| `/v1/responses` (non-stream) | POST | 800 ms | 1.8 s | 3.5 s | Obejmuje translator + roundtrip do providera | -| `/v1/responses` (stream) | POST (TTFB) | 350 ms | 900 ms | 1.8 s | Tylko TTFB; całkowity czas nieograniczony | -| `/v1/relay/chat/completions` (non-stream) | POST | 1.0 s | 2.2 s | 4.0 s | Obejmuje sprawdzenie rate-limit per-(token,IP) | -| `/v1/relay/chat/completions` (stream) | POST (TTFB) | 400 ms | 1.0 s | 2.0 s | | -| `/v1/embeddings` | POST | 300 ms | 700 ms | 1.4 s | Czysty roundtrip do providera; tani | -| `/v1/rerank` | POST | 600 ms | 1.4 s | 2.8 s | | -| `/v1/moderations` | POST | 250 ms | 600 ms | 1.2 s | Lekka klasyfikacja | -| `/v1/audio/speech` | POST | 1.2 s | 3.0 s | 6.0 s | Synteza audio jest wolna; budżet to odzwierciedla | -| `/v1/audio/transcriptions` | POST | 2.0 s | 5.0 s | 10.0 s | STT ograniczony czasem audio + rozmiarem modelu | -| `/v1/images/generations` | POST | 4.0 s | 8.0 s | 15.0 s | Generacja obrazów ograniczona asynchronicznie przez providera | -| `/v1/videos/generations` | POST (TTFB) | 600 ms | 1.5 s | 3.0 s | Async; klient odpytuje `/v1/videos/{id}` | -| `/v1/music/generations` | POST | 3.0 s | 6.0 s | 12.0 s | | - -### 2.2 Pliki + batche - -| Endpoint | Method | p50 | p95 | p99 | Notes | -| ------------------------------------- | ------ | ------ | ------ | ------ | ---------------------------------------- | -| `/v1/files` (GET) | GET | 80 ms | 200 ms | 400 ms | Lista z cache | -| `/v1/files` (POST upload) | POST | 500 ms | 1.2 s | 2.5 s | Limit 25 MB; parsowanie multipart | -| `/v1/files/{id}` (GET) | GET | 60 ms | 150 ms | 300 ms | | -| `/v1/files/{id}` (DELETE) | DELETE | 80 ms | 200 ms | 400 ms | | -| `/v1/files/{id}/content` (download) | GET | 100 ms | 300 ms | 600 ms | + przepustowość per-MB | -| `/v1/batches` (GET) | GET | 150 ms | 400 ms | 800 ms | | -| `/v1/batches` (POST create) | POST | 200 ms | 500 ms | 1.0 s | Waliduje plik wejściowy, potem enqueuuje | -| `/v1/batches/{id}` (GET) | GET | 100 ms | 300 ms | 600 ms | | -| `/v1/batches/{id}` (DELETE) | DELETE | 100 ms | 300 ms | 600 ms | | -| `/v1/batches/delete-completed` (POST) | POST | 400 ms | 1.0 s | 2.0 s | Masowe usuwanie; n wierszy | - -### 2.3 Agenci - -| Endpoint | Method | p50 | p95 | p99 | Notes | -| -------------------------------- | ------ | ------ | ------ | ------ | ------------------------------------------------------------- | -| `/v1/agents/health` | GET | 1.5 s | 4.5 s | 5.0 s | Limit timeout 5s per provider; oczekiwane łącznie 3 providery | -| `/v1/agents/credentials` | GET | 100 ms | 250 ms | 500 ms | Tylko metadane; wartości nigdy nie są zwracane | -| `/v1/agents/tasks` (GET list) | GET | 150 ms | 400 ms | 800 ms | | -| `/v1/agents/tasks` (POST create) | POST | 250 ms | 600 ms | 1.2 s | Tylko enqueuuje; nie uruchamia agenta | -| `/v1/agents/tasks/{id}` (GET) | GET | 100 ms | 300 ms | 600 ms | | -| `/v1/agents/tasks/{id}` (DELETE) | DELETE | 150 ms | 400 ms | 800 ms | | - -### 2.4 Combos / me / providers - -| Endpoint | Method | p50 | p95 | p99 | -| --------------------------------- | ------ | ------ | ------ | ------ | -| `/v1/combos` | GET | 80 ms | 200 ms | 400 ms | -| `/v1/me/status` | GET | 60 ms | 150 ms | 300 ms | -| `/v1/providers/{provider}/models` | GET | 100 ms | 250 ms | 500 ms | - -### 2.5 Web / search - -| Endpoint | Method | p50 | p95 | p99 | Notes | -| --------------- | ------ | ------ | ----- | ----- | ---------------------------------------------- | -| `/v1/web/fetch` | POST | 1.5 s | 4.0 s | 8.0 s | Limit timeout 10s; głębokość rekurencji 3 | -| `/v1/search` | POST | 800 ms | 2.0 s | 4.0 s | Opóźnienie wyszukiwania u providera bywa różne | - -### 2.6 Shim VSCode-CLI (scoped tokenem) - -To ścieżki legacy passthrough. Budżety są ciaśniejsze, bo -rozszerzenie VSCode-CLI wywołuje je często w ciasnych pętlach. - -| Endpoint | Method | p50 | p95 | p99 | -| ---------------------------------------------- | ------ | ------ | ------ | ------ | -| `/v1/vscode/{token}/v1/chat/completions` | POST | 700 ms | 1.6 s | 3.0 s | -| `/v1/vscode/{token}/v1/models` | GET | 60 ms | 150 ms | 300 ms | -| `/v1/vscode/{token}/combos` | GET | 80 ms | 200 ms | 400 ms | -| `/v1/vscode/{token}/chat/completions` (legacy) | POST | 700 ms | 1.6 s | 3.0 s | -| `/v1/vscode/{token}/models` (legacy) | GET | 60 ms | 150 ms | 300 ms | -| `/v1/vscode/{token}/responses` | POST | 800 ms | 1.8 s | 3.5 s | - -### 2.7 Zarządzanie / settings - -Endpointy zarządzania są wyłącznie operatorskie i nie należą do ścieżki krytycznej. -Budżety ustawiono konserwatywnie; naruszenia nie page'ują on-call, ale -są flagowane w tygodniowym przeglądzie wydajności. - -| Endpoint group | p50 | p95 | p99 | -| ------------------------------------- | ------ | ------ | ------ | -| `/api/settings/*` (GET) | 100 ms | 300 ms | 600 ms | -| `/api/settings/*` (POST/PATCH/DELETE) | 200 ms | 500 ms | 1.0 s | -| `/api/keys/*` (CRUD) | 150 ms | 400 ms | 800 ms | -| `/api/quota/*` (CRUD) | 150 ms | 400 ms | 800 ms | -| `/api/monitoring/health` (heavy) | 500 ms | 1.5 s | 3.0 s | - -### 2.8 Publiczne sondy - -| Endpoint | Method | p50 | p95 | p99 | -| ------------------------ | ------ | ----- | ----- | ------------------------------------- | -| `/api/health/ping` | GET | 5 ms | 20 ms | 50 ms | -| `/api/monitoring/health` | GET | 5 ms | 20 ms | 50 ms | -| `/api/docs` | GET | 20 ms | 80 ms | 200 ms (HTML shell, no provider call) | - ---- - -## 3. Cele przepustowości - -| Tier | Per-replica RPS | Cluster RPS (3 replicas) | Notes | -| ----------------------- | -------------------------- | ------------------------ | --------------------------------------------------- | -| Inference (non-stream) | 50 RPS | 150 RPS | Ograniczone przez quota providera + CPU translatora | -| Inference (stream) | 25 concurrent streams | 75 streams | Ograniczone przez event-loop Node + pamięć | -| Embeddings | 200 RPS | 600 RPS | Tanie | -| Files (upload) | 10 RPS | 30 RPS | Parsowanie multipart + zapis do DB | -| Files (download) | 100 RPS | 300 RPS | Treść statyczna przez Next.js | -| Combos / me / providers | 500 RPS | 1,500 RPS | Z cache | -| WebSocket | 100 concurrent connections | 300 | Limit per-IP: 5 | - -**Sufit klastra** (wszystkie endpointy łącznie, obciążenie ciągłe): ~1 000 RPS, -zanim p95 latency zacznie rosnąć. Powyżej tego skalować horyzontalnie -przez dodawanie replik; Caddy LB jest bezstanowy. - ---- - -## 4. Budżety zasobów - -| Resource | Per-replica cap | Notes | -| ----------------------- | --------------- | ------------------------------------------------------ | -| RSS memory | 1.5 GB | Skoki przy gen. audio/wideo; spodziewane chwilowe 2 GB | -| Event-loop lag (p99) | 50 ms | Alert przez regresję `clinic doctor` | -| Heap retained | 800 MB | Strojenie old-gen GC w `node --max-old-space-size` | -| File descriptors | 2,000 | Na hoście zalecane `ulimit -n 4096` | -| DB connections (sql.js) | 1 per replica | sql.js działa in-process; pool nie jest potrzebny | -| Redis connections | 20 per replica | Z poola; idle usuwane po 5 min | - ---- - -## 5. Budżet cold-start - -Cold-start Next.js App Router na świeżym kontenerze: - -| Phase | Budget | -| -------------------------------- | ---------------------------------------- | -| Container start → HTTP listening | ≤ 800 ms | -| First request TTFB (warm) | ≤ 200 ms | -| Translator registry bootstrap | ≤ 500 ms (one-time, first /v1/responses) | - -**Skrypt pomiarowy**: `bin/cold-start-bench.sh` (już w repozytorium -od v3.8.36; `bin/` to kanoniczny katalog skryptów). - ---- - -## 6. Bramka regresji (odniesienie k6, jeszcze niezaimplementowane) - -Poniższy szkic pokazuje, jak przyszły skrypt `benches/perf-gate.k6.js` -asertowałby powyższe SLO. Nic z tej sekcji nie jest dziś zacommitowane ani -podpięte do CI — to odniesienie projektowe do pracy następczej, a nie -działająca bramka. - -```javascript -// benches/perf-gate.k6.js — pseudo-code; not yet committed -import http from "k6/http"; -import { check, Trend } from "k6"; - -const responsesTTFB = new Trend("v1_responses_ttfb", true); - -export const options = { - scenarios: { - smoke: { - executor: "constant-vus", - vus: 10, - duration: "1m", - }, - }, - thresholds: { - "http_req_duration{endpoint:v1_responses}": ["p(95)<1800", "p(99)<3500"], - http_req_failed: ["rate<0.01"], - v1_responses_ttfb: ["p(95)<900"], - }, -}; - -export default function () { - const res = http.post( - `${__ENV.BASE_URL}/api/v1/responses`, - JSON.stringify({ - model: "gpt-4o-mini", - input: "ping", - }), - { headers: { Authorization: `Bearer ${__ENV.API_KEY}` } } - ); - check(res, { "status is 200": (r) => r.status === 200 }); - responsesTTFB.add(res.timings.waiting); -} -``` - ---- - -## 7. Dziennik przeglądów - -| Date | Reviewer | Change | -| -------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| 2026-06-18 | security-circle lead | Wstępne budżety per endpoint wyprowadzone z topologii 3 replik Caddy + Redis | -| 2026-07-18 | observability-circle | Doprecyzowano, że dokument dziś nie egzekwuje nic (brak katalogu `bench/`/`benches/`, brak bramki CI) oraz poprawiono nieaktualne twierdzenie „not yet committed” o `bin/cold-start-bench.sh` (obecny od v3.8.36). | -| 2026-07-18 (planned) | observability-circle | Podpięcie `benches/perf-gate.k6.js` do CI; bramka przy naruszeniu p95 + p99 | -| 2026-09-18 (planned) | observability-circle | Przegląd kwartalny; korekta po danych bazowych z ruchu produkcyjnego | diff --git a/docs/i18n/pl/docs/architecture/ARCHITECTURE.md b/docs/i18n/pl/docs/architecture/ARCHITECTURE.md index ff8e00a87e..40a5cf9981 100644 --- a/docs/i18n/pl/docs/architecture/ARCHITECTURE.md +++ b/docs/i18n/pl/docs/architecture/ARCHITECTURE.md @@ -66,7 +66,7 @@ Główne możliwości: - Middleware ochrony przed prompt injection - Potok kompresji promptów z Caveman, RTK, stacked pipelines, compression combos, language packs i analityką - Rejestr ACP (Agent Communication Protocol) -- Modularne dostawcy OAuth (19 osobnych modułów w `src/lib/oauth/providers/`) +- Modularne dostawcy OAuth (22 osobne moduły w `src/lib/oauth/providers/`) - Skrypty uninstall/full-uninstall - Akcja naprawy środowiska OAuth - Most WebSocket dla klientów WS zgodnych z OpenAI (`/v1/ws`) @@ -321,10 +321,10 @@ Moduły warstwy domenowej: - Runner eval: `src/lib/evals/evalRunner.ts` - Persystencja stanu domeny: `src/lib/db/domainState.ts` — CRUD SQLite dla łańcuchów fallback, budżetów, historii kosztów, stanu lockout, circuit breakerów -Moduły dostawców OAuth (16 osobnych plików w `src/lib/oauth/providers/`): +Moduły dostawców OAuth (22 osobne pliki w `src/lib/oauth/providers/`): - Indeks rejestru: `src/lib/oauth/providers/index.ts` -- Poszczególni dostawcy: `claude.ts`, `codex.ts`, `gemini.ts`, `antigravity.ts`, `agy.ts`, `qoder.ts`, `qwen.ts`, `kimi-coding.ts`, `github.ts`, `kiro.ts`, `cursor.ts`, `kilocode.ts`, `cline.ts`, `windsurf.ts`, `gitlab-duo.ts`, `trae.ts` +- Poszczególni dostawcy: `agy.ts`, `antigravity.ts`, `claude.ts`, `cline.ts`, `codebuddy-cn.ts`, `codex.ts`, `cursor.ts`, `devin-desktop.ts`, `ghe-copilot.ts`, `github.ts`, `gitlab-duo.ts`, `grok-cli-oauth.ts`, `grok-cli.ts`, `kilocode.ts`, `kimi-coding.ts`, `kiro.ts`, `qoder.ts`, `raycast.ts`, `trae.ts`, `xai-oauth.ts`, `zed-hosted.ts`, `zed.ts` - Cienki wrapper: `src/lib/oauth/providers.ts` — re-eksport z poszczególnych modułów ## 5) Osadzone usługi (v3.8.4) @@ -927,7 +927,7 @@ Każdy dostawca ma wyspecjalizowany executor rozszerzający `BaseExecutor` (w `o | `PuterExecutor` | Puter | Integracja dostawcy oparta na przeglądarce | | `QoderExecutor` | Qoder AI | Wsparcie PAT i OAuth, darmowy tier multi-model | | `VertexExecutor` | Google Vertex AI | Auth service account, endpointy oparte na regionie | -| `WindsurfExecutor` | Windsurf (Codeium) | OAuth Codeium + odświeżanie tokenu sesji | +| `DevinDesktopExecutor` | Devin Desktop | Importowany klucz API + strumieniowanie czatu Connect-protobuf | Wszystkie pozostałe dostawcy (w tym niestandardowe węzły kompatybilne) używają `DefaultExecutor`. @@ -980,9 +980,9 @@ Wszystkie pozostałe dostawcy (w tym niestandardowe węzły kompatybilne) używa | GLMT (preset) | claude | API Key | ✅ | ✅ | ❌ | ⚠️ Per żądanie | | Kimi Coding | openai | OAuth / API Key | ✅ | ✅ | ✅ | ❌ | | KIE | openai | API Key | ✅ | ✅ | ❌ | ❌ | -| Windsurf | openai | OAuth (Codeium) | ✅ | ✅ | ✅ | ⚠️ Per żądanie | +| Devin Desktop | openai | Importowany klucz API | ✅ (Connect→SSE) | ✅ | ❌ | ⚠️ Na żądanie | | GitLab Duo | openai | OAuth (GitLab) | ✅ | ✅ | ✅ | ❌ | -| Devin CLI | openai | OAuth | ✅ | ✅ | ✅ | ✅ Task API | +| Devin CLI | openai | Lokalne logowanie CLI | ✅ | ✅ | ❌ | ✅ Task API | | Codex Cloud | openai-responses | OAuth | ✅ | ❌ | ✅ | ✅ Rate limity | | Jules | openai | OAuth | ✅ | ✅ | ✅ | ✅ Task API | | AgentRouter | openai | API Key | ✅ | ✅ | ❌ | ❌ | diff --git a/docs/i18n/pl/docs/architecture/CODEBASE_DOCUMENTATION.md b/docs/i18n/pl/docs/architecture/CODEBASE_DOCUMENTATION.md index 53dba5f2eb..c3378124e7 100644 --- a/docs/i18n/pl/docs/architecture/CODEBASE_DOCUMENTATION.md +++ b/docs/i18n/pl/docs/architecture/CODEBASE_DOCUMENTATION.md @@ -634,17 +634,17 @@ Dwa binaria są wystawione w `package.json` → `bin`: ## 7. `tests/` -| Katalog | Typ | -| ------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------- | -| `tests/unit/` | Testy jednostkowe przez Node native test runner (1821 plików, plus `api/`, `auth/`, `authz/` podkatalogi) | -| `tests/integration/` | Testy cross-module + stan DB | -| `tests/e2e/` | Playwright UI tests | -| `tests/protocols-e2e/` | MCP/A2A protocol e2e | -| `tests/translator/` | Translator-specific tests | -| `tests/security/` | Security regressions | -| `tests/load/` | Load / stress tests | -| `tests/golden-set/` | Reference outputs for translator regressions | -| `tests/helpers/`, `tests/fixtures/`, `tests/manual/`, `tests/scratch_test.mjs` | Support | +| Katalog | Typ | +| ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | +| `tests/unit/` | Testy jednostkowe przez Node native test runner (1821 plików, plus `api/`, `auth/`, `authz/` podkatalogi) | +| `tests/integration/` | Testy cross-module + stan DB | +| `tests/e2e/` | Playwright UI tests | +| `tests/protocols-e2e/` | MCP/A2A protocol e2e | +| `tests/translator/` | Translator-specific tests | +| `tests/security/` | Security regressions | +| `tests/load/` | Load / stress tests | +| `tests/golden-set/` | Reference outputs for translator regressions | +| `tests/helpers/`, `tests/fixtures/`, `tests/manual/` | Support | Common commands: diff --git a/docs/i18n/pl/docs/architecture/sqlite-coupling-inventory.md b/docs/i18n/pl/docs/architecture/sqlite-coupling-inventory.md deleted file mode 100644 index d7e65b52fa..0000000000 --- a/docs/i18n/pl/docs/architecture/sqlite-coupling-inventory.md +++ /dev/null @@ -1,226 +0,0 @@ ---- -title: "Inwentaryzacja sprzężenia z SQLite" -status: measured-snapshot -lastUpdated: 2026-07-23 ---- - -# Inwentaryzacja sprzężenia z SQLite - -- **Tracking issue:** [#8075](https://github.com/diegosouzapw/OmniRoute/issues/8075) -- **Snapshot revision:** `9a3b605f3420ae3ab08bd93d6443034f03a1bcbc` -- **Scanned-corpus SHA-256:** `72334620a7a18a42bcede1643fb2fdf95da6eae9ffa66a891ae14ed633ad43f6` -- **Cel:** Zmierz aktualne linie cięcia warstwy persystencji przed zaproponowaniem interfejsów repozytoriów -- **Wpływ na runtime:** Brak; ten dokument i jego skrypt audytu nie zmieniają zachowania bazy danych - -## Jak odtworzyć - -Z katalogu głównego repozytorium: - -```bash -node scripts/check/audit-sqlite-coupling.mjs -node scripts/check/audit-sqlite-coupling.mjs --json -node --test scripts/check/audit-sqlite-coupling.test.mjs -``` - -Skrypt odczytuje śledzone pliki z Gita, skanuje źródła inne niż testowe w `src/`, `open-sse/`, -`electron/` i `bin/` oraz skanuje SQL migracji w `src/lib/db/migrations/`. Wyklucza -drzewo testów najwyższego poziomu, współlokalizowane katalogi testów, pliki źródłowe test/spec oraz ścieżki poza tymi -skonfigurowanymi korzeniami źródeł (w tym dokumentację i skrypty). - -Skrypt odmawia uruchomienia, jeśli śledzone pliki w tych korzeniach źródeł różnią się od `HEAD`. Raportuje -zarówno rewizję narzędzia audytu, jak i SHA-256 nad uporządkowanym korpusem ścieżka/treść. Powyższy snapshot -został wykonany z wymienionej rewizji źródeł; ten PR zmienia wyłącznie wykluczone ścieżki dokumentacji i skryptów, -więc ponowne uruchomienie z czystej gałęzi PR daje ten sam digest korpusu. - -To jest **inwentaryzacja leksykalna**, a nie semantyczna analiza TypeScript lub SQL: - -- liczby to wystąpienia zdefiniowanych wzorców, a nie liczby odrębnych instrukcji SQL; -- wzorce wywołań adaptera i bezpośredniego singletona najpierw maskują komentarze i treści literałów; -- treści literałów szablonowych, w tym osadzone wyrażenia, są wykluczone z tych zliczeń - składni kodu; -- lekki masker nie jest parserem JavaScript, więc nietypowa składnia literałów wyrażeń regularnych - może nadal wymagać ręcznego przeglądu; -- komentarze i literały łańcuchowe mogą wnosić wkład do zliczeń sygnałów dialektu, które celowo przeszukują - surowy tekst pod kątem osadzonego SQL; -- dopasowanie `.prepare()` poza `src/lib/db/` to trop do przeglądu, a nie dowód, że wywołanie należy przenieść; -- wywołania ukryte za inaczej nazwaną nakładką mogą nie być zliczane; -- liczby plików są deduplikowane, natomiast liczby wystąpień — nie. - -Wyjście JSON obejmuje każdą pasującą ścieżkę, dzięki czemu recenzenci mogą sprawdzić lub przeklasyfikować poszczególne -wyniki zamiast opierać się wyłącznie na sumach. - -## Zakres snapshota - -W zapisanej rewizji skrypt przeskanował: - -- 3 830 śledzonych plików źródłowych innych niż testowe; -- 129 plików SQL migracji. - -Liczba plików źródłowych jest celowo szeroka, ponieważ celem jest znalezienie sprzężenia persystencji, które -wyszło poza nominalny katalog bazy danych, w tym kod CLI oraz proxy/runtime. - -## Sygnały granic - -| Signal | Files | Occurrences | -| -------------------------------------------------------------------------------- | ----: | ----------: | -| Direct `getDbInstance()` call syntax outside comments/literals and `src/lib/db/` | 45 | 150 | -| `localDb` import consumers | 211 | — | -| `SqliteAdapter` type consumers outside comments/literals and `src/lib/db/` | 3 | — | - -Barrel `localDb` już daje wielu wywołującym szew funkcji domenowych, ale -`src/lib/localDb.ts` pozostaje warstwą re-eksportu, a nie kontraktem backendu. 45 bezpośrednich -konsumentów singletona to najczytelniejszy pierwszy zestaw do przeglądu, ponieważ omijają ten logiczny szew i -trzymają bezpośrednio uchwyt o kształcie adaptera. - -Trzy pliki źródłowe inne niż testowe poza `src/lib/db/`, które w składni kodu wspominają typ `SqliteAdapter`, -to: - -- `src/app/api/db-backups/import/route.ts`; -- `src/lib/compliance/index.ts`; -- `src/lib/compliance/noLog.ts`. - -To nie są równoważne zadania migracyjne. Import kopii zapasowej jest specyficzny dla możliwości; persystencja -compliance może być przenośnym stanem domenowym. Przyszła granica powinna je sklasyfikować, a nie -przenosić wszystkie trzy mechanicznie. - -## Składnia wywołań o kształcie adaptera - -| Signal | Occurrences | Files | Outside `src/lib/db/` occurrences | Outside files | -| ----------------- | ----------: | ----: | --------------------------------: | ------------: | -| `.prepare()` | 1,219 | 163 | 252 | 52 | -| `.transaction()` | 62 | 40 | 12 | 10 | -| `.immediate()` | 3 | 3 | 0 | 0 | -| `.pragma()` | 39 | 11 | 6 | 4 | -| `.backup()` | 6 | 5 | 3 | 3 | -| `.checkpoint()` | 0 | 0 | 0 | 0 | -| `lastInsertRowid` | 15 | 7 | 1 | 1 | - -Ta tabela pokazuje, dlaczego `SqliteAdapter` jest warstwą zgodności runtime SQLite, a nie przenośną -abstrakcją backendu. Jego synchroniczny kształt instrukcji i transakcji jest szeroko używany, a część -tego kształtu jest widoczna poza nominalną warstwą bazy danych. - -Główni bezpośredni konsumenci `getDbInstance()` poza `src/lib/db/` w tej rewizji to: - -| File | Occurrences | -| -------------------------------------------------- | ----------: | -| `src/lib/proxySubscription/subscriptionService.ts` | 12 | -| `src/lib/semanticCache.ts` | 10 | -| `src/lib/usage/callLogs.ts` | 9 | -| `src/lib/cloudAgent/db.ts` | 8 | -| `src/lib/memory/store.ts` | 8 | -| `src/lib/memory/vectorStore.ts` | 8 | -| `src/lib/modelsDevSync.ts` | 8 | -| `src/lib/gamification/badges.ts` | 5 | -| `src/lib/memory/retrieval.ts` | 5 | -| `src/lib/pricingSync.ts` | 5 | -| `src/lib/skills/registry.ts` | 5 | -| `src/lib/usage/usageHistory.ts` | 5 | - -Lista obejmuje konfigurację control-plane, dane usage/audit, cache, wyszukiwanie memory/vector, skills, -gamification oraz wsparcie CLI/provider. Jeden generyczny adapter SQL utrwaliłby ten rozrzut; -repozytoria domenowe dają sposób na jego redukcję plaster po plasterku. - -## Sygnały dialektu SQLite i cyklu życia - -| Signal | Occurrences | Files | -| --------------------- | ----------: | ----: | -| `PRAGMA` text | 97 | 41 | -| `sqlite_master` | 14 | 11 | -| `BEGIN IMMEDIATE` | 2 | 2 | -| `INSERT OR REPLACE` | 83 | 45 | -| `AUTOINCREMENT` | 34 | 24 | -| `datetime('now')` | 171 | 68 | -| `VACUUM` | 39 | 10 | -| `wal_checkpoint` | 13 | 7 | -| `fts5` | 43 | 8 | -| `vec0` | 7 | 1 | -| `last_insert_rowid()` | 1 | 1 | - -Te wartości to sygnały tekstowe i obejmują komentarze, jeśli występują. Są przydatne do lokalizowania -pracy nad przenośnością, a nie do szacowania nakładu implementacji przez mnożenie. - -Zweryfikowane obszary wysokiego sprzężenia obejmują: - -- `src/lib/db/core.ts`: cykl życia singletona, ścieżki plików SQLite, checkpoint WAL, recovery, schemat, - kompaktowanie i tworzenie kopii zapasowych; -- `src/lib/db/migrationRunner.ts`: wykonywanie ponumerowanych migracji SQL, `sqlite_master`, - `PRAGMA table_info`, zachowanie transakcji oraz opcjonalna obsługa FTS5; -- `src/lib/db/optimizationSettings.ts`: ustawienia page/cache, auto-vacuum, przejścia WAL oraz - `VACUUM`; -- `src/lib/db/backup.ts`: cykl życia kopii zapasowej i przywracania bazy danych; -- `src/lib/db/schemaColumns.ts`: introspekcja schematu SQLite i kolumny zgodności; -- `src/lib/memory/vectorStore.ts` oraz `src/lib/memory/retrieval.ts`: zachowanie `vec0` i FTS5; -- `src/lib/db/adapters/`: implementacje zgodności dla obsługiwanych runtime'ów SQLite. - -Tych obszarów nie należy forsować przez interfejs repozytorium najniższego wspólnego mianownika. Potrzebują -wyraźnych możliwości SQLite albo osobnych implementacji backendu. - -## Sprzężenie migracji - -Snapshot zawiera 129 śledzonych plików SQL migracji. `src/lib/db/migrationRunner.ts` robi więcej -niż wykonywanie uporządkowanych plików: posiada odkrywanie migracji, historię wersji, bezpieczeństwo duplikatów wersji, -sondy schematu, sprawdzenia możliwości FTS5, bezpieczeństwo przed migracją oraz wykonywanie transakcji SQLite. - -W konsekwencji: - -- inny dialekt SQL nie może bezpiecznie ponownie użyć plików migracji bez zmian; -- zewnętrzne backendy potrzebują własnej implementacji migracji i historii schematu; -- logiczne kamienie milowe migracji mogą być współdzielone, ale fizyczny SQL i sondy możliwości pozostają - specyficzne dla backendu; -- praca multi-replica wymaga własności migracji lub blokad, zanim zewnętrzny backend zostanie - uznany za gotowy. - -## Rekomendowane linie cięcia - -### 1. Zachowaj nienaruszoną zgodność runtime SQLite - -Nie zastępuj `SqliteAdapter` ani kaskady driverów w pierwszym PR dotyczącym repozytoriów. Zachowaj odzyskiwanie plików, -WAL, backup, optymalizację, FTS5 i zachowanie wektorów za bieżącą implementacją SQLite. - -### 2. Zacznij od bezpośrednich konsumentów singletona - -Użyj listy 45 plików bezpośrednich konsumentów jako początkowej kolejki przeglądu. Sklasyfikuj każdy plik jako: - -- przenośny stan domenowy; -- konserwację lub wyszukiwanie specyficzne dla backendu; -- stan lokalny dla procesu lub możliwy do odbudowy; -- dostęp legacy, który powinien wywoływać istniejący moduł domenowy. - -Klasyfikacja musi poprzedzać projekt interfejsu. Samo pojawienie się ścieżki w inwentaryzacji nie jest -nakazem utworzenia repozytorium. - -### 3. Najpierw udowodnij repozytoria na SQLite - -Dla jednej ograniczonej domeny: - -1. zdefiniuj operacje repozytorium zorientowane na zachowanie; -2. zaadaptuj bieżące zapytania SQLite za tym repozytorium; -3. uruchom testy zgodności zachowania i transakcji względem SQLite; -4. zmigruj wywołujących bez zmiany domyślnego runtime; -5. dopiero potem zaimplementuj to samo repozytorium dla zewnętrznego backendu. - -### 4. Oddziel przenośny stan control-plane od danych specyficznych dla możliwości - -Połączenia providerów, klucze API, combos i konfiguracja routingu są kandydatami na pierwszy -przenośny plaster, z zastrzeżeniem zatwierdzenia przez maintainerów i przeglądu ownership tabel. Wyszukiwanie wektorowe memory, -backup/odzyskiwanie plików SQLite oraz optymalizacja bazy danych to słabe pierwsze plastry, ponieważ ich zachowanie -jest celowo specyficzne dla SQLite. - -### 5. Traktuj usage, quota, affinity i audit jako późniejszy plaster koordynacji - -Te domeny mają semantykę współbieżności i wolumenu wykraczającą poza CRUD. Ich kontrakty repozytoriów powinny -być projektowane razem z testami transakcji multi-replica, lease, retencji i trybów awarii, a nie -kopiowane mechanicznie z bieżącego SQL. - -## Czego ta inwentaryzacja nie rozstrzyga - -Ta inwentaryzacja nie: - -- zatwierdza wsparcia PostgreSQL ani MySQL; -- definiuje interfejsów TypeScript repozytoriów; -- wybiera pierwszej tabeli ani domeny do migracji; -- twierdzi, że każde dopasowanie leksykalne jest defektem; -- twierdzi, że obecne granice modułów są nieskuteczne; -- zmienia SQLite, migracji, backupu, wyszukiwania ani zachowania runtime. - -Jej celem jest uczynienie kolejnej dyskusji projektowej opartej na dowodach i odtwarzalnej. diff --git a/docs/i18n/pl/docs/combo-context-requirements.md b/docs/i18n/pl/docs/combo-context-requirements.md deleted file mode 100644 index 8c4c292594..0000000000 --- a/docs/i18n/pl/docs/combo-context-requirements.md +++ /dev/null @@ -1,262 +0,0 @@ -# Funkcja wymagań kontekstu combo (Context Requirements) - -## Przegląd - -Funkcja Context Requirements pozwala konfiguracjom combo filtrować i sortować cele (targets) na podstawie rozmiaru okna kontekstu. Jest to przydatne w przypadkach użycia wymagających dużych okien kontekstu, takich jak: - -- Przetwarzanie długich dokumentów (100k+ tokenów) -- Analiza dużych baz kodu -- Rozbudowane historie rozmów -- Przeglądy kodu obejmujące wiele plików - -## Konfiguracja - -### Schemat - -Dodaj `contextRequirements` do runtime config swojego combo: - -```json -{ - "contextRequirements": { - "minContextWindow": 128000, - "preferLargeContext": true, - "contextFilterMode": "strict" - } -} -``` - -### Pola - -#### `minContextWindow` (opcjonalne) - -- **Typ**: `number` (0 do 10,000,000) -- **Domyślnie**: `undefined` (bez filtrowania) -- **Opis**: Odfiltrowuje modele z oknami kontekstu poniżej tego progu - -**Przykłady**: - -- `32000` - Odfiltruj modele z kontekstem <32K -- `128000` - Wymagaj kontekstu 128K+ (GPT-4 Turbo, Claude 3) -- `200000` - Wymagaj kontekstu 200K+ (Claude 3 Opus) -- `1000000` - Wymagaj kontekstu 1M+ (Gemini 1.5 Pro) - -#### `preferLargeContext` (opcjonalne) - -- **Typ**: `boolean` -- **Domyślnie**: `false` -- **Opis**: Gdy `true`, sortuje pozostałe cele według rozmiaru kontekstu (malejąco). Modele z dużym kontekstem są próbowane jako pierwsze. - -#### `contextFilterMode` (opcjonalne) - -- **Typ**: `"strict"` | `"lenient"` -- **Domyślnie**: `"lenient"` -- **Opis**: Sposób obsługi modeli z nieznanymi limitami okna kontekstu - - `"strict"`: Wyklucza modele z nieznanymi limitami kontekstu - - `"lenient"`: Uwzględnia modele z nieznanymi limitami kontekstu - -## Zachowanie - -### Potok filtrowania - -Wymagania kontekstu są stosowane po `filterTargetsByRequestCompatibility()`: - -1. **Filtrowanie zgodności żądania** - Usuwa modele niekompatybilne z żądaniem (tools, vision, structured output) -2. **Filtrowanie wymagań kontekstu** - Stosuje `minContextWindow` i `contextFilterMode` -3. **Sortowanie według kontekstu** - Jeśli `preferLargeContext` jest true, sortuje malejąco według rozmiaru kontekstu - -### Logika trybu filtrowania - -Gdy ustawiono `minContextWindow`: - -**Tryb lenient** (domyślny): - -- ✅ Uwzględnia modele z kontekstem >= minContextWindow -- ✅ Uwzględnia modele z nieznanymi limitami kontekstu -- ❌ Wyklucza modele z kontekstem < minContextWindow - -**Tryb strict**: - -- ✅ Uwzględnia modele z kontekstem >= minContextWindow -- ❌ Wyklucza modele z nieznanymi limitami kontekstu -- ❌ Wyklucza modele z kontekstem < minContextWindow - -### Logika sortowania - -Gdy `preferLargeContext` jest true: - -- Modele są sortowane według rozmiaru okna kontekstu (malejąco) -- Modele z nieznanym kontekstem trafiają na koniec -- Oryginalna kolejność strategii służy jako rozstrzygnięcie remisów - -## Przypadki użycia - -### Przykład 1: Przetwarzanie długich dokumentów - -```json -{ - "name": "Document Analysis", - "strategy": "fusion", - "config": { - "contextRequirements": { - "minContextWindow": 128000, - "preferLargeContext": true, - "contextFilterMode": "strict" - } - } -} -``` - -Ta konfiguracja: - -- Wymaga okna kontekstu 128K+ -- Preferuje modele z większym kontekstem (Gemini 1.5 Pro > Claude 3 Opus > GPT-4 Turbo) -- Wyklucza modele z nieznanymi limitami kontekstu - -### Przykład 2: Analiza dużej bazy kodu - -```json -{ - "name": "Code Review", - "strategy": "auto", - "config": { - "contextRequirements": { - "minContextWindow": 200000, - "preferLargeContext": true, - "contextFilterMode": "lenient" - } - } -} -``` - -Ta konfiguracja: - -- Wymaga okna kontekstu 200K+ -- Preferuje modele z większym kontekstem -- Uwzględnia modele z nieznanymi limitami (lenient) - -### Przykład 3: Preferencja dużego kontekstu bez ścisłych wymagań - -```json -{ - "name": "Flexible Chat", - "strategy": "weighted", - "config": { - "contextRequirements": { - "preferLargeContext": true - } - } -} -``` - -Ta konfiguracja: - -- Brak minimalnego wymagania (wszystkie modele kwalifikują się) -- Sortuje według rozmiaru kontekstu (największy najpierw) -- Przydatne, gdy duży kontekst jest preferowany, ale nie wymagany - -## Odpowiedź API - -Gdy wymagania kontekstu filtrują cele, logger combo wypisuje: - -``` -[COMBO] Context requirements: filtered 10 → 3 targets (minContextWindow: 128000, mode: strict) -[COMBO] Context requirements: kept models gemini-1.5-pro, claude-3-opus-20240229, gpt-4-turbo -[COMBO] Context requirements: sorted by context size (descending): gemini-1.5-pro(1000000), claude-3-opus-20240229(200000), gpt-4-turbo(128000) -``` - -## Szczegóły implementacji - -### Moduł backendu - -`open-sse/services/combo/contextRequirements.ts`: - -- `applyContextRequirements()` - Główna funkcja filtrowania -- `getTargetContextWindow()` - Pomocnicza funkcja wyszukiwania kontekstu -- Używa `getModelContextLimit()` z `modelCapabilities.ts` - -### Punkt integracji - -`open-sse/services/combo.ts` linia 1187: - -```typescript -orderedTargets = filterTargetsByRequestCompatibility(orderedTargets, body, log); -orderedTargets = applyContextRequirements(orderedTargets, config.contextRequirements, log); -``` - -### Definicja schematu - -`src/shared/validation/schemas/combo.ts`: - -```typescript -contextRequirements: z - .object({ - minContextWindow: z.coerce.number().int().min(0).max(10_000_000).optional(), - preferLargeContext: z.boolean().optional(), - contextFilterMode: z.enum(["strict", "lenient"]).optional(), - }) - .strict() - .optional(), -``` - -## Testowanie - -### Uruchamianie testów - -```bash -# Unit tests (schema + logic) -npm test tests/unit/combo-context-requirements.test.ts - -# Integration tests (end-to-end) -npm test tests/unit/combo/context-requirements-integration.test.ts -``` - -### Pokrycie testami - -- Walidacja schematu: 6 testów -- Logika filtrowania: 6 testów -- Integracja: 5 testów -- **Razem**: 17/17 przechodzi ✅ - -## Rozwiązywanie problemów - -### Wszystkie cele odfiltrowane - -**Problem**: Wszystkie cele usunięte, combo zwraca „no compatible models” - -**Rozwiązania**: - -1. Obniż próg `minContextWindow` -2. Przełącz na tryb `"lenient"`, aby uwzględnić modele z nieznanym kontekstem -3. Usuń `minContextWindow` i używaj wyłącznie `preferLargeContext` - -### Modele z nieznanym kontekstem wykluczone - -**Problem**: Niestandardowe/nowe modele wykluczone, mimo że mają duży kontekst - -**Rozwiązania**: - -1. Przełącz na tryb `"lenient"` (domyślny) -2. Dodaj limit kontekstu modelu w `modelCapabilities.ts` -3. Usuń filtrowanie kontekstu i polegaj na kolejności strategii - -### Sortowanie nie jest stosowane - -**Problem**: `preferLargeContext` nie zmienia kolejności - -**Sprawdź**: - -1. Zweryfikuj `preferLargeContext: true` w config -2. Sprawdź, czy wszystkie cele mają nieznany kontekst (wszystkie sortują się równo) -3. Upewnij się, że po filtrowaniu pozostało wiele celów - -## Powiązane - -- [Strategie routingu Auto-Combo](./routing/AUTO-COMBO.md) -- [Przewodnik po odporności (Resilience)](./architecture/RESILIENCE_GUIDE.md) - -## Historia wersji - -- **v3.8.47**: Pierwsza implementacja - - Dodano config `contextRequirements` - - Utworzono backendowy moduł filtrowania - - Pełne pokrycie testami (brak jeszcze dedykowanego UI w dashboardzie — konfiguracja przez combo JSON) diff --git a/docs/i18n/pl/docs/getting-started/TROUBLESHOOTING.md b/docs/i18n/pl/docs/getting-started/TROUBLESHOOTING.md deleted file mode 100644 index a188a45a45..0000000000 --- a/docs/i18n/pl/docs/getting-started/TROUBLESHOOTING.md +++ /dev/null @@ -1,517 +0,0 @@ ---- -title: "Rozwiązywanie problemów" -version: 3.8.40 -lastUpdated: 2026-06-28 ---- - -# Rozwiązywanie problemów - -> **Dla użytkowników**: Szukasz szybkich poprawek? Zobacz [Szybki przewodnik](#quick-reference) poniżej. - -🌐 **Languages:** 🇺🇸 [English](./TROUBLESHOOTING.md) | 🇧🇷 [Português (Brasil)](../i18n/pt-BR/docs/guides/TROUBLESHOOTING.md) | 🇪🇸 [Español](../i18n/es/docs/guides/TROUBLESHOOTING.md) | 🇫🇷 [Français](../i18n/fr/docs/guides/TROUBLESHOOTING.md) | 🇮🇹 [Italiano](../i18n/it/docs/guides/TROUBLESHOOTING.md) | 🇷🇺 [Русский](../i18n/ru/docs/guides/TROUBLESHOOTING.md) | 🇨🇳 [中文 (简体)](../i18n/zh-CN/docs/guides/TROUBLESHOOTING.md) | 🇩🇪 [Deutsch](../i18n/de/docs/guides/TROUBLESHOOTING.md) | 🇮🇳 [हिन्दी](../i18n/in/docs/guides/TROUBLESHOOTING.md) | 🇹🇭 [ไทย](../i18n/th/docs/guides/TROUBLESHOOTING.md) | 🇺🇦 [Українська](../i18n/uk-UA/docs/guides/TROUBLESHOOTING.md) | 🇸🇦 [العربية](../i18n/ar/docs/guides/TROUBLESHOOTING.md) | 🇯🇵 [日本語](../i18n/ja/docs/guides/TROUBLESHOOTING.md) | 🇻🇳 [Tiếng Việt](../i18n/vi/docs/guides/TROUBLESHOOTING.md) | 🇧🇬 [Български](../i18n/bg/docs/guides/TROUBLESHOOTING.md) | 🇩🇰 [Dansk](../i18n/da/docs/guides/TROUBLESHOOTING.md) | 🇫🇮 [Suomi](../i18n/fi/docs/guides/TROUBLESHOOTING.md) | 🇮🇱 [עברית](../i18n/he/docs/guides/TROUBLESHOOTING.md) | 🇭🇺 [Magyar](../i18n/hu/docs/guides/TROUBLESHOOTING.md) | 🇮🇩 [Bahasa Indonesia](../i18n/id/docs/guides/TROUBLESHOOTING.md) | 🇰🇷 [한국어](../i18n/ko/docs/guides/TROUBLESHOOTING.md) | 🇲🇾 [Bahasa Melayu](../i18n/ms/docs/guides/TROUBLESHOOTING.md) | 🇳🇱 [Nederlands](../i18n/nl/docs/guides/TROUBLESHOOTING.md) | 🇳🇴 [Norsk](../i18n/no/docs/guides/TROUBLESHOOTING.md) | 🇵🇹 [Português (Portugal)](../i18n/pt/docs/guides/TROUBLESHOOTING.md) | 🇷🇴 [Română](../i18n/ro/docs/guides/TROUBLESHOOTING.md) | 🇵🇱 [Polski](../i18n/pl/docs/guides/TROUBLESHOOTING.md) | 🇸🇰 [Slovenčina](../i18n/sk/docs/guides/TROUBLESHOOTING.md) | 🇸🇪 [Svenska](../i18n/sv/docs/guides/TROUBLESHOOTING.md) | 🇵🇭 [Filipino](../i18n/phi/docs/guides/TROUBLESHOOTING.md) | 🇨🇿 [Čeština](../i18n/cs/docs/guides/TROUBLESHOOTING.md) - -Typowe problemy i rozwiązania dla OmniRoute. - ---- - -## Szybki przewodnik - -**Nowy w OmniRoute?** Zacznij tutaj — te wskazówki rozwiązują 90% problemów: - -| Widzę to | Co to oznacza | Co zrobić | -| ----------------------- | ---------------------------------- | ------------------------------------------------------------------------------------ | -| "Can't connect" | OmniRoute nie działa | Uruchom `omniroute` lub `docker restart omniroute` | -| "Invalid API key" | Klucz jest błędny lub wygasł | Skopiuj ponownie klucz ze strony providera | -| "Rate limit exceeded" | Wysyłasz zbyt wiele żądań | Poczekaj 1 minutę albo użyj `model: "auto"` do automatycznego fallbacku | -| "Quota exceeded" | Wykorzystałeś darmowy/płatny limit | Podłącz więcej providerów albo użyj darmowych (Kiro, Pollinations) | -| "Slow responses" | Provider jest obciążony lub daleko | Użyj `model: "auto/fast"` albo podłącz szybszego providera (Groq, Cerebras) | -| "Wrong provider used" | `auto` wybrał innego providera | To normalne! `auto` wybiera najlepszego. Wymuś konkretnego: `model: "openai/gpt-4o"` | -| "502 Bad Gateway" | Provider nie działa | Poczekaj i spróbuj ponownie albo użyj `model: "auto"`, aby przełączyć providera | -| "401 Unauthorized" | Błędne dane uwierzytelniające | Sprawdź klucz API albo ponownie uwierzytelnij się przez OAuth | -| "429 Too Many Requests" | Limit zapytań | Poczekaj 1 minutę albo podłącz więcej providerów | - -**Nadal utknąłeś?** Zobacz [Szybkie poprawki](#quick-fixes) poniżej albo zapytaj na [Discordzie](https://discord.gg/U47eFqAXCn). - ---- - -## Ostrzeżenia npm install (ERESOLVE / peer / deprecated) - -Po `npm install -g omniroute` możesz zobaczyć lawinę ostrzeżeń typu `npm warn ERESOLVE`, komunikaty o peer-dependency oraz `deprecated`. **Są one oczekiwane i nieszkodliwe.** Instalacja się powiodła, jeśli w wyniku widać `added packages`. - -Ostrzeżenia pochodzą z przestarzałych zakresów peer-dependency w pakietach firm trzecich, których OmniRoute nie kontroluje: - -1. **`marked-terminal` chce `marked >=1 <16`, znaleziono `marked@18`** — w praktyce działa poprawnie; zakres peer po stronie upstream jest po prostu nieaktualny. -2. **`deprecated prebuild-install@7.1.3`** — helper do pobierania natywnych binarek. Istotny dopiero później, jeśli provider web-cookie zgłosi brak natywnej binarki `tls-client-node` (osobny problem, nie spowodowany tym ostrzeżeniem). - -**Nie trzeba nic robić** — ostrzeżeń nie da się w pełni wyciszyć bez forka pakietów upstream. - ---- - -## Szybkie poprawki - -| Problem | Rozwiązanie | -| --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Pierwsze logowanie nie działa | Ustaw `INITIAL_PASSWORD` w `.env` (brak wbudowanego domyślnego hasła) | -| Dashboard otwiera się na złym porcie | Ustaw `PORT=20128` i `NEXT_PUBLIC_BASE_URL=http://localhost:20128` | -| Brak logów na dysku | Ustaw `APP_LOG_TO_FILE=true` i upewnij się, że przechwytywanie call log jest włączone | -| EACCES: permission denied | Ustaw `DATA_DIR=/path/to/writable/dir`, aby nadpisać `~/.omniroute` | -| Strategia routingu się nie zapisuje | Zaktualizuj do najnowszego wydania v3.x (poprawka schematu Zod dla persystencji ustawień weszła we wcześniejszych wersjach) | -| Crash logowania / pusta strona | Sprawdź wersję Node.js — zobacz [Zgodność z Node.js](#nodejs-compatibility) poniżej | -| `dlopen` / `slice is not valid mach-o file` (macOS) | Uruchom `cd $(npm root -g)/omniroute/app && npm rebuild better-sqlite3 && omniroute` — zobacz [przebudowa modułu natywnego na macOS](#macos-native-module-rebuild) poniżej | -| Proxy "fetch failed" | Upewnij się, że konfiguracja proxy jest ustawiona na właściwym poziomie — zobacz [Problemy z proxy](#proxy-issues) poniżej | - ---- - -## Zgodność z Node.js - - - -### Strona logowania się wykrzacza lub pokazuje błąd "Module self-registration" - -**Przyczyna:** Uruchamiasz wersję Node.js poniżej zatwierdzonego bezpiecznego poziomu runtime OmniRoute. Najczęstszy przypadek to starszy patch Node 22 lub 24 poniżej wymaganego przez OmniRoute poziomu bezpieczeństwa. - -**Objawy:** - -- Strona logowania pokazuje pusty ekran lub błąd serwera -- Konsola pokazuje `Error: Module did not self-register` lub podobne błędy natywnych bindingów -- Strona logowania pokazuje **pomarańczowy baner ostrzegawczy** z Twoją wersją Node, jeśli runtime jest poza wspieraną bezpieczną polityką - -**Naprawa:** - -1. Zainstaluj wspierane wydanie Node.js LTS (zalecane: Node.js 24.x): - ```bash - nvm install 24 - nvm use 24 - ``` -2. Sprawdź wersję: `node --version` powinno pokazać `v24.0.0` lub nowsze w linii LTS 24.x -3. Zainstaluj ponownie OmniRoute: `npm install -g omniroute` -4. Uruchom ponownie: `omniroute` - -> **Wspierane bezpieczne wersje:** `>=22.22.2 <23` lub `>=24.0.0 <27`. Node.js 24.x LTS (Krypton) oraz Node.js 26 są w pełni wspierane. - -### macOS: `dlopen` / "slice is not valid mach-o file" - - - -**Przyczyna:** Po globalnym `npm install -g omniroute` natywna binarka `better-sqlite3` w pakiecie mogła zostać skompilowana pod inną architekturę lub ABI Node.js niż ta, która działa lokalnie. To częste na macOS (Apple Silicon i Intel), gdy prebuilt nie pasuje do środowiska. - -**Objawy:** - -- Serwer pada natychmiast przy starcie z błędem `dlopen` -- Błąd zawiera `slice is not valid mach-o file` -- Pełny przykład: - -``` -dlopen(/Users//.nvm/versions/node/v24.14.1/lib/node_modules/omniroute/app/node_modules/better-sqlite3/build/Release/better_sqlite3.node, 0x0001): tried: '...' (slice is not valid mach-o file) -``` - -**Naprawa — przebuduj pod lokalne środowisko (bez downgrade Node.js):** - -```bash -cd $(npm root -g)/omniroute/app -npm rebuild better-sqlite3 -omniroute -``` - -> **Uwaga:** To rekompiluje natywny binding względem lokalnej wersji Node.js i architektury CPU, usuwając niedopasowanie binarki. Oficjalnie wspierany zakres runtime to **`>=22.22.2 <23` lub `>=24.0.0 <27`** (`SUPPORTED_NODE_RANGE` w `src/shared/utils/nodeRuntimeSupport.ts`, zgodny z polem `engines` w `package.json`). Node.js 24.x LTS (Krypton) oraz Node.js 26 są w pełni wspierane z `better-sqlite3` v12.x. - ---- - -## Problemy z proxy - - - -### Walidacja providera pokazuje "fetch failed" - -**Przyczyna:** Endpoint walidacji klucza API (`POST /api/providers/validate`) wcześniej omijał konfigurację proxy, co powodowało błędy w środowiskach wymagających routingu przez proxy. - -**Naprawa (v3.5.5+):** To już naprawione. Walidacja providera idzie przez `runWithProxyContext` i automatycznie respektuje ustawienia proxy na poziomie providera oraz globalne. - -### Token health check kończy się "fetch failed" - -**Przyczyna:** Tło odświeżania tokenów OAuth nie rozwiązywało konfiguracji proxy per połączenie. - -**Naprawa (v3.5.5+):** Scheduler token health check rozwiązuje teraz config proxy per połączenie przed odświeżeniem. Zaktualizuj do v3.5.5+. - -### Proxy SOCKS5 zwraca "invalid onRequestStart method" - -**Przyczyna:** Na Node.js 22 dispatcher undici@8 jest niekompatybilny z wbudowaną implementacją `fetch()` w Node. - -**Naprawa (v3.5.5+):** OmniRoute używa teraz własnej funkcji `fetch()` z undici, gdy aktywny jest dispatcher proxy, co zapewnia spójne zachowanie. Zaktualizuj do v3.5.5+. - ---- - -## Problemy z providerami - -### "Language model did not provide messages" - -**Przyczyna:** Wyczerpany limit (quota) providera. - -**Naprawa:** - -1. Sprawdź tracker limitu w dashboardzie -2. Użyj combo z poziomami fallback -3. Przełącz się na tańszy/darmowy tier - -### Rate limiting - -**Przyczyna:** Wyczerpany limit subskrypcji. - -**Naprawa:** - -- Dodaj fallback: `cc/claude-opus-4-6 → glm/glm-4.7 → if/qwen3.8-max-preview` -- Użyj GLM/MiniMax jako taniego zapasowego - -### Wygasły token OAuth - -OmniRoute automatycznie odświeża tokeny. Jeśli problemy trwają: - -1. Dashboard → Provider → Reconnect -2. Usuń i dodaj ponownie połączenie providera - -### Kiro multi-account: drugie konto unieważnia pierwsze - -**Przyczyna:** Backend Kiro wymusza jedną aktywną sesję na rejestrację klienta OIDC. -Gdy dwa konta współdzielą tego samego zarejestrowanego klienta (połączenia zaimportowane przed v3.8.0), -odświeżenie tokenu jednego konta unieważnia refresh token drugiego. - -**Naprawa (v3.8.0+):** Zaimportuj ponownie dotknięte połączenia. -Od v3.8.0 każde nowe połączenie Kiro utworzone przez **Import Token**, -**Google/GitHub social login** lub **Auto-Import** automatycznie rejestruje własnego -dedykowanego klienta OIDC. Połączenie jest więc w pełni izolowane i odświeżenie jednego -konta nie wpływa na żadne inne. - -Połączenia zaimportowane _przed_ v3.8.0 nie niosą rejestracji klienta per połączenie. -Te połączenia nadal używają współdzielonego endpointu odświeżania social-auth. -Aby uzyskać izolację, usuń stare połączenie z Dashboard → Providers i dodaj je ponownie -przez dowolny z trzech przepływów importu. - -Pełne szczegóły i instrukcja krok po kroku dodawania dwóch kont Kiro obok siebie: -zobacz [`docs/guides/KIRO_SETUP.md`](../guides/KIRO_SETUP.md). - ---- - -## Problemy z chmurą - -### Błędy synchronizacji chmury - -1. Sprawdź, czy `BASE_URL` wskazuje na działającą instancję (np. `http://localhost:20128`) -2. Sprawdź, czy `CLOUD_URL` wskazuje na endpoint chmury (np. `https://omniroute.dev`) -3. Utrzymuj wartości `NEXT_PUBLIC_*` zgodne z wartościami po stronie serwera - -### Cloud `stream=false` zwraca 500 - -**Objaw:** `Unexpected token 'd'...` na endpoincie chmury przy wywołaniach bez streamingu. - -**Przyczyna:** Upstream zwraca payload SSE, a klient oczekuje JSON. - -**Obejście:** Użyj `stream=true` przy bezpośrednich wywołaniach cloud. Lokalny runtime ma fallback SSE→JSON. - -### Cloud pokazuje Connected, ale "Invalid API key" - -1. Utwórz świeży klucz z lokalnego dashboardu (`/api/keys`) -2. Uruchom synchronizację chmury: Enable Cloud → Sync Now -3. Stare/niesynchronizowane klucze mogą nadal zwracać `401` w chmurze - ---- - -## Problemy z Dockerem - -### Narzędzie CLI pokazuje Not Installed - -1. Sprawdź pola runtime: `curl http://localhost:20128/api/cli-tools/runtime/codex | jq` -2. Dla trybu portable: użyj targetu obrazu `runner-cli` (dołączone CLI) -3. Dla trybu host mount: ustaw `CLI_EXTRA_PATHS` i zamontuj katalog bin hosta jako tylko do odczytu -4. Jeśli `installed=true` i `runnable=false`: binarka znaleziona, ale healthcheck się nie powiódł - -### Szybka walidacja runtime - -```bash -curl -s http://localhost:20128/api/cli-tools/codex-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}' -curl -s http://localhost:20128/api/cli-tools/claude-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}' -curl -s http://localhost:20128/api/cli-tools/openclaw-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}' -``` - ---- - -## Problemy z kosztami - -### Wysokie koszty - -1. Sprawdź statystyki użycia w Dashboard → Usage -2. Przełącz model główny na GLM/MiniMax -3. Używaj darmowego tieru (Qoder, Kiro) do mniej krytycznych zadań -4. Ustaw budżety kosztów per klucz API: Dashboard → API Keys → Budget - ---- - -## Debugowanie - -### Włącz pliki logów - -Ustaw `APP_LOG_TO_FILE=true` w pliku `.env`. Logi aplikacji trafiają do `logs/`. -Artefakty żądań są przechowywane w `${DATA_DIR}/call_logs/`, gdy pipeline call log jest -włączony w ustawieniach. -Gdy przechwytywanie pipeline jest włączone, ustaw `CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS=false`, aby pominąć -payloady chunków streamu, albo dostrój `CALL_LOG_PIPELINE_MAX_SIZE_KB`, aby zmienić limit artefaktu w KB. - -### Sprawdź zdrowie providerów - -```bash -# Health dashboard -http://localhost:20128/dashboard/health - -# API health check -curl http://localhost:20128/api/monitoring/health -``` - -### Przechowywanie w runtime - -- Stan główny: `${DATA_DIR}/storage.sqlite` (providers, combos, aliases, keys, settings) -- Użycie: tabele SQLite w `storage.sqlite` (`usage_history`, `call_logs`, `proxy_logs`) + opcjonalnie `${DATA_DIR}/call_logs/` -- Logi aplikacji: `/logs/...` (gdy `APP_LOG_TO_FILE=true`) -- Artefakty call log: `${DATA_DIR}/call_logs/YYYY-MM-DD/...` gdy pipeline call log jest włączony - -Akcja **Clean history** na stronie Request Logs czyści `call_logs`, legacy -`request_detail_logs` oraz lokalny katalog artefaktów `${DATA_DIR}/call_logs/`. - ---- - -## Problemy z circuit breakerem - -### Provider utknął w stanie OPEN - -Gdy circuit breaker providera jest OPEN, żądania są blokowane do wygaśnięcia cooldownu. - -**Naprawa:** - -1. Przejdź do **Dashboard → Settings → Resilience** -2. Sprawdź kartę circuit breakera dla dotkniętego providera -3. Kliknij **Reset All**, aby wyczyścić wszystkie breakery, albo poczekaj na wygaśnięcie cooldownu -4. Upewnij się, że provider jest faktycznie dostępny przed resetem - -### Provider wciąż wyzwala circuit breaker - -Jeśli provider wielokrotnie wchodzi w stan OPEN: - -1. Sprawdź **Dashboard → Health → Provider Health** pod kątem wzorca awarii -2. Przejdź do **Settings → Resilience → Provider Profiles** i zwiększ próg awarii -3. Sprawdź, czy provider zmienił limity API lub wymaga ponownego uwierzytelnienia -4. Przejrzyj telemetrię opóźnień — wysoka latencja może powodować awarie oparte na timeoutach - ---- - -## Problemy z transkrypcją audio - -### Błąd "Unsupported model" - -- Upewnij się, że używasz właściwego prefiksu: `deepgram/nova-3` lub `assemblyai/best` -- Sprawdź, czy provider jest podłączony w **Dashboard → Providers** - -### Transkrypcja zwraca pusto lub się nie udaje - -- Sprawdź wspierane formaty audio: `mp3`, `wav`, `m4a`, `flac`, `ogg`, `webm` -- Upewnij się, że rozmiar pliku mieści się w limitach providera (zazwyczaj < 25MB) -- Sprawdź ważność klucza API na karcie providera - ---- - -## Debugowanie translatora - -Użyj **Dashboard → Translator**, aby debugować problemy z tłumaczeniem formatów: - -| Tryb | Kiedy używać | -| ---------------- | ---------------------------------------------------------------------------------------------- | -| **Playground** | Porównaj formaty wejścia/wyjścia obok siebie — wklej padające żądanie, by zobaczyć tłumaczenie | -| **Chat Tester** | Wysyłaj żywe wiadomości i przeglądaj pełny payload request/response wraz z nagłówkami | -| **Test Bench** | Uruchamiaj testy wsadowe na kombinacjach formatów, by znaleźć zepsute tłumaczenia | -| **Live Monitor** | Obserwuj przepływ żądań w czasie rzeczywistym, by wyłapać przerywane problemy z tłumaczeniem | - -### Typowe problemy z formatami - -- **Brak tagów thinking** — Sprawdź, czy docelowy provider wspiera thinking i ustawienie thinking budget -- **Znikające tool calls** — Niektóre tłumaczenia formatów mogą usuwać nieobsługiwane pola; sprawdź w trybie Playground -- **Brak system prompt** — Claude i Gemini obsługują system prompts inaczej; sprawdź wynik tłumaczenia -- **SDK zwraca surowy string zamiast obiektu** — Naprawione w v1.x; sanitizer odpowiedzi usuwa niestandardowe pola (`x_groq`, `usage_breakdown` itd.), które powodują błędy walidacji Pydantic w OpenAI SDK. Jeśli nadal to widzisz na v3.x+, zgłoś issue. -- **GLM/ERNIE odrzuca rolę `system`** — Naprawione w v1.x; normalizer ról automatycznie scala wiadomości system w user dla niekompatybilnych modeli. Jeśli nadal to widzisz na v3.x+, zgłoś issue. -- **Rola `developer` nierozpoznana** — Naprawione w v1.x; automatycznie konwertowana na `system` dla providerów spoza OpenAI. Jeśli nadal to widzisz na v3.x+, zgłoś issue. -- **`json_schema` nie działa z Gemini** — Naprawione w v1.x; `response_format` jest teraz konwertowany na `responseMimeType` + `responseSchema` Gemini. Jeśli nadal to widzisz na v3.x+, zgłoś issue. - ---- - -## Ustawienia odporności (Resilience) - -### Auto rate-limit się nie uruchamia - -- Auto rate-limit dotyczy tylko providerów z kluczem API (nie OAuth/subskrypcja) -- Sprawdź, czy **Settings → Resilience → Provider Profiles** ma włączony auto-rate-limit -- Sprawdź, czy provider zwraca kody `429` lub nagłówki `Retry-After` - -### Dostrajanie exponential backoff - -Profile providerów wspierają te ustawienia: - -- **Base delay** — Początkowy czas oczekiwania po pierwszej awarii (domyślnie: 1s) -- **Max delay** — Górny limit czasu oczekiwania (domyślnie: 30s) -- **Multiplier** — O ile zwiększać opóźnienie przy kolejnych awariach (domyślnie: 2x) - -### Anti-thundering herd - -Gdy wiele równoległych żądań trafia w providera z limitem zapytań, OmniRoute używa mutexa + auto rate-limiting, aby serializować żądania i zapobiegać awariom kaskadowym. Działa to automatycznie dla providerów z kluczem API. - ---- - -## Opcjonalna taksonomia awarii RAG / LLM (16 problemów) - -Część użytkowników OmniRoute stawia bramkę przed stackami RAG lub agentów. W takich setupach często widać dziwny wzorzec: OmniRoute wygląda na zdrowe (providery w górze, profile routingu OK, brak alertów rate limit), a ostateczna odpowiedź i tak jest błędna. - -W praktyce te incydenty zwykle pochodzą z downstreamowego pipeline'u RAG, a nie z samej bramki. - -Jeśli chcesz wspólnego słownika do opisu tych awarii, możesz użyć WFGY ProblemMap — zewnętrznego zasobu tekstowego na licencji MIT, który definiuje szesnaście powtarzających się wzorców awarii RAG / LLM. Na wysokim poziomie obejmuje: - -- drift retrieval i zerwane granice kontekstu -- puste lub nieaktualne indeksy i magazyny wektorów -- niedopasowanie embeddingów do semantyki -- składanie promptów i problemy z oknem kontekstu -- zapaść logiki i nadmiernie pewne odpowiedzi -- awarie długich łańcuchów i koordynacji agentów -- dryf pamięci i ról w multi-agent -- problemy z deploymentem i kolejnością bootstrapu - -Idea jest prosta: - -1. Gdy badziesz złą odpowiedź, zbierz: - - zadanie użytkownika i żądanie - - trasę lub combo providerów w OmniRoute - - kontekst RAG użyty downstream (pobrane dokumenty, tool calls itd.) -2. Zmapuj incydent na jeden lub dwa numery WFGY ProblemMap (`No.1` … `No.16`). -3. Zapisz numer we własnym dashboardzie, runbooku lub trackerze incydentów obok logów OmniRoute. -4. Użyj odpowiadającej strony WFGY, by zdecydować, czy zmienić stack RAG, retriever, czy strategię routingu. - -Pełny tekst i konkretne przepisy są tutaj (licencja MIT, tylko tekst): - -- [WFGY ProblemMap README](https://github.com/onestardao/WFGY/blob/main/ProblemMap/README.md) - -Możesz zignorować tę sekcję, jeśli nie uruchamiasz pipeline'ów RAG ani agentów za OmniRoute. - ---- - -## Znane problemy v3.8.0 - -Problemy specyficzne dla wydania v3.8.0 i ich obecne obejścia. Gdy poprawka wejdzie w późniejszym patchu, wpis zostanie zaktualizowany lub usunięty. - -### Przepływ OAuth Windsurf kończy się 401 - -**Objawy:** - -- "401 unauthorized" podczas kończenia przepływu OAuth Windsurf z dashboardu -- Karta providera Windsurf zostaje w stanie "needs reconnection" po callbacku - -**Przyczyny:** - -- Brakująca lub pusta zmienna środowiskowa `WINDSURF_FIREBASE_API_KEY` -- `WINDSURF_API_KEY` źle skonfigurowany lub wskazujący na nieaktualny token -- Lokalna zapora/proxy blokuje callback OAuth - -**Naprawa:** - -1. Sprawdź, że zarówno `WINDSURF_FIREBASE_API_KEY`, jak i `WINDSURF_API_KEY` są ustawione w `.env` -2. Zrestartuj OmniRoute, aby nowe wartości env zostały wczytane -3. Ponów przepływ OAuth z **Dashboard → Providers → Windsurf → Reconnect** - -### Błędy auth Devin CLI - -**Objawy:** - -- "Devin CLI not found" lub "auth failed" przy wywoływaniu narzędzi opartych o Devin -- Sprawdzenie runtime CLI raportuje `installed=false` - -**Przyczyny:** - -- `CLI_DEVIN_BIN` wskazuje na nieistniejącą ścieżkę -- Devin CLI nie jest zainstalowany na hoście - -**Naprawa:** - -1. Zainstaluj Devin CLI dla swojej platformy -2. Ustaw `CLI_DEVIN_BIN=/usr/local/bin/devin` (lub rzeczywistą ścieżkę) w `.env` -3. Zrestartuj OmniRoute i przetestuj ponownie w **Dashboard → CLI Tools** - -### Cooldown modelu utknął (ręczny reset) - -**Objawy:** - -- Model pozostaje na liście cooldown nawet po upływie czasu wygaśnięcia -- Żądania nadal pomijają model w routingu combo mimo że znacznik czasu jest w przeszłości - -**Ręczny reset:** - -- **Dashboard:** **Settings → Model Cooldowns** → kliknij **Re-enable** na dotkniętej karcie -- **API:** `DELETE /api/resilience/model-cooldowns` z nagłówkami auth zarządzania - -### Połączenie providera Command Code kończy się 403 - -**Objawy:** - -- 403 przy testowaniu połączenia providera Command Code -- Karta providera pokazuje "unauthorized" po świeżym dodaniu - -**Przyczyna:** Przepływ OAuth nie zakończył się (callback nieodebrany lub token niezapisany). - -**Naprawa:** - -- Uruchom `omniroute providers` z CLI, aby ponownie wywołać przepływ OAuth, albo -- Ponów OAuth z **Dashboard → Providers → Command Code → Reconnect** - -### ModelScope zwraca agresywne cooldowny 429 - -**Objawy:** - -- Bardzo krótkie lub natychmiastowe cooldowny na ModelScope po małej serii żądań -- Routing combo pomija ModelScope wcześniej niż oczekiwano - -**Przyczyna:** ModelScope emituje specyficzne dla providera nagłówki `Retry-After`. v3.8.0 zawiera dedykowaną obsługę tych nagłówków, więc starsze wersje odczytują je jako generyczne wskazówki rate-limit. - -**Naprawa:** - -- Upewnij się, że jesteś na v3.8.0 lub nowszej -- Sprawdź, że przełącznik `useUpstream429BreakerHints` jest włączony w **Settings → Resilience** - -### Brak OMNIROUTE_WS_BRIDGE_SECRET w produkcji - -**Objawy:** - -- 401 na każdym żądaniu mostka WebSocket Codex/Responses na zdalnym hoście produkcyjnym -- Handshake mostka WebSocket zamyka się natychmiast po połączeniu - -**Przyczyna:** Zmienna środowiskowa `OMNIROUTE_WS_BRIDGE_SECRET` nie jest ustawiona w środowisku produkcyjnym. - -**Naprawa:** - -1. Wygeneruj losowy sekret: `openssl rand -hex 32` -2. Ustaw `OMNIROUTE_WS_BRIDGE_SECRET=` w env serwera produkcyjnego (oraz każdego klienta łączącego się z mostkiem) -3. Zrestartuj OmniRoute - -### Responses API: tryb background zdegradowany do synchronicznego - -**Objawy:** - -- Zalogowane ostrzeżenie: `background mode degraded to synchronous` -- Żądanie z `background: true` zwraca zwykłą odpowiedź synchroniczną zamiast uchwytu zadania w tle - -**Przyczyna:** v3.8.0 celowo degraduje `background: true` w Responses API do wykonania synchronicznego z ostrzeżeniem. Pełne asynchroniczne wykonanie w tle to przyszła funkcjonalność. - -**Naprawa:** - -- Dostosuj klienta, aby wywoływał bez `background`, albo -- Poczekaj na późniejsze wydanie z pełnym trybem async background (śledź changelog) - ---- - -## Nadal utknąłeś? - -- **GitHub Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **Architektura**: Zobacz [`docs/architecture/ARCHITECTURE.md`](../architecture/ARCHITECTURE.md) po szczegóły wewnętrzne -- **API Reference**: Zobacz [`docs/reference/API_REFERENCE.md`](../reference/API_REFERENCE.md) po wszystkie endpointy -- **Health Dashboard**: Sprawdź **Dashboard → Health** pod kątem statusu systemu w czasie rzeczywistym -- **Translator**: Użyj **Dashboard → Translator** do debugowania problemów z formatami diff --git a/docs/i18n/pl/docs/guides/FEATURES.md b/docs/i18n/pl/docs/guides/FEATURES.md index ba08e3e829..c1c034674d 100644 --- a/docs/i18n/pl/docs/guides/FEATURES.md +++ b/docs/i18n/pl/docs/guides/FEATURES.md @@ -22,7 +22,7 @@ Cykl v3.7.x → v3.8.0 dodał auto-routing bez konfiguracji, nowych providerów, - 🆕 **Provider Command Code** (#2199) — rejestracja pierwszej klasy z katalogiem modeli i śledzeniem quota - 🆕 **Provider Z.AI** — nowy provider w darmowym tierze z etykietami quota - 🎬 **Rozszerzenie mediów KIE** — rozszerzony katalog, w tym modele generacji wideo -- 🔐 **Przepływy OAuth Windsurf + Devin CLI** (#2168) — logowanie przeglądarkowe end-to-end +- 🔐 **Uwierzytelnianie Devin** — Desktop importuje istniejący klucz API Devin; CLI używa lokalnych poświadczeń `devin auth login` - 🆓 **8 nowych darmowych providerów** — LLM7, Lepton, UncloseAI, BazaarLink, Completions, Enally, FreeTheAi, Command Code - 🎯 **Manifest-aware tier routing W1–W4** — manifesty providerów sterują ważonym wyborem tierów - 🎨 **Pełna zgodność Cursor z OpenAI** — tool calls, streaming, zarządzanie sesjami end-to-end @@ -142,7 +142,7 @@ Dashboard do odkrywania i zarządzania agentami CLI. Pokazuje siatkę 16 wbudowa - **Odznakami protokołów** — stdio, HTTP itd. - **Własnymi agentami** — Rejestruj dowolne narzędzie CLI przez formularz (nazwa, binary, polecenie wersji, argumenty spawn) - **CLI Fingerprint Matching** — Przełącznik per provider dopasowujący natywne sygnatury żądań CLI, zmniejszający ryzyko bana przy zachowaniu IP proxy -- **Agentami opartymi o OAuth** — Windsurf i Devin CLI używają teraz przeglądarkowych przepływów OAuth do uwierzytelniania (v3.8.0+) +- **Lokalne uwierzytelnianie Devin** — Devin CLI używa `devin auth login`; przepływ OAuth w przeglądarce nie jest wymagany --- diff --git a/docs/i18n/pl/docs/guides/TIERS.md b/docs/i18n/pl/docs/guides/TIERS.md index ea0f235aa4..8b3228df68 100644 --- a/docs/i18n/pl/docs/guides/TIERS.md +++ b/docs/i18n/pl/docs/guides/TIERS.md @@ -21,7 +21,7 @@ wygaśnie. | OpenAI Codex (ChatGPT subscription) | Plus/Team obejmuje quotę Codex | | GitHub Copilot | Per-seat — quota resetuje się co miesiąc | | Cursor IDE | Quota planu Pro | -| Antigravity / Windsurf | Wbudowane quoty | +| Antigravity / Devin Desktop | Wbudowane quoty | **Strategia**: kieruj tutaj najpierw każde żądanie pasujące do mocnych stron modelu. Tracker quoty monitoruje zbliżający się reset; strategie combo diff --git a/docs/i18n/pl/docs/guides/TROUBLESHOOTING.md b/docs/i18n/pl/docs/guides/TROUBLESHOOTING.md index c6a0b916e6..e4bee59b1d 100644 --- a/docs/i18n/pl/docs/guides/TROUBLESHOOTING.md +++ b/docs/i18n/pl/docs/guides/TROUBLESHOOTING.md @@ -500,25 +500,6 @@ Możesz pominąć tę sekcję, jeśli nie uruchamiasz pipeline’ów RAG ani age Problemy specyficzne dla wydania v3.8.0 i aktualne obejścia. Gdy poprawka wyląduje w późniejszym patchu, wpis zostanie zaktualizowany lub usunięty. -### Flow OAuth Windsurf pada z 401 - -**Objawy:** - -- "401 unauthorized" podczas kończenia flow OAuth Windsurf z dashboardu -- Karta providera Windsurf zostaje w stanie "needs reconnection" po callbacku - -**Przyczyny:** - -- Brakująca lub pusta zmienna env `WINDSURF_FIREBASE_API_KEY` -- `WINDSURF_API_KEY` źle skonfigurowany albo wskazuje na stary token -- Lokalny firewall/proxy blokuje callback OAuth - -**Naprawa:** - -1. Sprawdź, czy `WINDSURF_FIREBASE_API_KEY` i `WINDSURF_API_KEY` są ustawione w `.env` -2. Zrestartuj OmniRoute, by nowe wartości env weszły w życie -3. Ponów flow OAuth z **Dashboard → Providers → Windsurf → Reconnect** - ### Awaria auth Devin CLI **Objawy:** diff --git a/docs/i18n/pl/docs/ops/MATURITY_REEVAL.md b/docs/i18n/pl/docs/ops/MATURITY_REEVAL.md deleted file mode 100644 index 12a5d2f1c3..0000000000 --- a/docs/i18n/pl/docs/ops/MATURITY_REEVAL.md +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: "Ponowna ocena dojrzałości quality-gate (Fase 9)" ---- - -# Ponowna ocena dojrzałości — po falach 0–3 (Quality-Gate v2) - -> **Czym jest ten dokument.** Ponowny pomiar dojrzałości systemu quality-gates -> **po** falach 0–3 programu Quality-Gate v2, w porównaniu z baseline zapisanym w -> [`QUALITY_GATE_PLAYBOOK.md`](./QUALITY_GATE_PLAYBOOK.md) (2026-06-16). Mierzy, co się zmieniło, -> względem DSOMM L5 / OpenSSF Scorecard 9 / SLSA L3, rozdzielając to, co jest **mierzalne w CI** -> (już dostarczone / możliwe do dostarczenia kodem) od tego, co jest **procesem/właścicielem** (ustawienia organizacji). -> -> **Data:** 2026-06-30. Wygenerowano ze rzeczywistego stanu repozytorium, nie z pamięci. -> **Benchmarki:** OWASP DSOMM · OpenSSF Scorecard · SLSA · SonarQube "Clean as You Code". - ---- - -## 1. Zaktualizowany werdykt - -**Ocena ogólna: A− → A („Advanced”, top ~5%).** **Dwie największe słabości strukturalne** -baseline z 06-16 — _fast-gates gap_ oraz _mutation-score-not-a-ratchet_ — zostały **zamknięte**. -Pozostałe luki do „absolutnego maksimum” są niemal wyłącznie **zależne od właściciela/infrastruktury** (branch-protection, -SLSA L3, CodeQL advanced); strona kodowa programu jest zasadniczo ukończona. - -| Framework referencyjny | Baseline 06-16 | Teraz 06-30 | Ruch | Dowód | -| --------------------------------- | ---------------------------- | -------------------------------------------------------------------- | ---- | --------------------------------------------------------------------------- | -| **OWASP DSOMM** (5 levels) | L3→L4 | **L4** w _Test Intensity_ i _Static Depth_; solidne L3 w pozostałych | ▲ | blocking mutation-ratchet + deterministic suite at merge gate | -| **OpenSSF Scorecard** | ~7–8/10 | ~7–8/10 (bez zmian — bramka to **właściciel**) | = | brak Branch-Protection na `main` (ustawienie właściciela) + actions pinning | -| **SLSA** | L2→L3 | **L2** (zbliżanie się do L3) | = | brak hermetic/reproducible builder (infra/właściciel) | -| **SonarQube "Clean as You Code"** | Zgodne z zastrzeżeniem | Zgodne z zastrzeżeniem | = | zastrzeżenie _sprawl_ (~46+ gates) nadal — przegląd ROI w toku | -| **Quality-Ratchet pattern** | Exemplar | **Exemplar+** | ▲ | nowy `dedicatedGate` dla `mutationScore` (direction up) | -| **Mutation testing** | „Almost there” (nie ratchet) | **Active ratchet** | ▲▲ | `check-mutation-ratchet.mjs` + seeded baseline + blocking nightly job | - ---- - -## 2. Delty od 2026-06-16 (co dostarczyły fale 0–3) - -### 2.1 🔴→✅ Luka fast-gates ZAMKNIĘTA (była słabość strukturalna #1) - -Baseline ostrzegał: `quality.yml` (PR→`release/**`) uruchamiał **tylko filesystem gates** — bez -typecheck, tests ani build —, więc deterministyczne regresje wybuchały dopiero przy PR→`main`. -**Dziś** `.github/workflows/quality.yml` uruchamia w jobie _Fast Quality Gates_: `typecheck:core`, -**blocking impacted unit tests (TIA) z fail-safe do pełnego suite**, -vitest fast-path oraz unit shards. Bramka działa teraz **tam, gdzie następuje merge** (shift-left), -dokładnie zgodnie z zasadą cross-cutting przepisaną w playbooku. - -### 2.2 🟠→✅ Mutation score stał się RATCHETEM (była słabość #3 / P0 #1) - -Najsilniejsze antidotum na coverage-gaming było **advisory**. **Dziś**: - -- `scripts/check/check-mutation-ratchet.mjs` (domyślnie advisory, `--ratchet` blocking, graceful skip); -- `config/quality/quality-baseline.json` ma zaseedowane wpisy `mutationScore.` (`direction: up`, `dedicatedGate`); -- `.github/workflows/nightly-mutation.yml` ma job **"Mutation score ratchet (blocking)"**, który unifikuje raporty batch i ratchetuje scalone wyniki per-module. - -Skutek: per-module mutation score **nie może regredować** — coverage przestał być vanity metric. - -### 2.3 ✅ Bramki quick-win (Phase 6A/7) dostarczone - -- **a11y axe-core „fake-green” naprawione:** `@axe-core/playwright` w devDeps; `a11y.spec.ts` z warunkowym skip `REQUIRE_AXE`; job w `nightly-resilience.yml`. -- **complexity skanuje `bin/`+`electron`:** `check-complexity.mjs` obejmuje te katalogi w `ESLINT_ARGS`. -- **tracked-artifacts w pre-commit + pre-push:** `.husky/pre-commit` + `pre-push` blokują przypadkowo śledzone artefakty. - ---- - -## 3. 12 kategorii — status (ukierunkowany na delty) - -| # | Kategoria | Status 06-30 | -| --- | -------------------------------- | ----------------------------------------------------------------------------------------- | -| 1 | Style & formatting | ✅ bez zmian (Prettier+ESLint lint-staged) | -| 2 | Types | ✅ **wzmocnione** — `typecheck:core` teraz także w bramce PR→release | -| 3 | Tests (intensity) | ✅ **wzmocnione** — mutation testing stał się ratchetem; deterministic suite w merge gate | -| 4 | Test policy (anti-gaming) | ✅ bez zmian (pr-test-policy/test-masking/pr-evidence) | -| 5 | Complexity & health | ✅ **wzmocnione** — complexity skanuje bin/electron | -| 6 | Static security (SAST+secrets) | 🟡 CodeQL default-setup (advanced = właściciel); semgrep cloud nie wersjonowany | -| 7 | Supply-chain (deps) | ✅ bez zmian (osv/audit/Trivy/Dependabot + allowlist) | -| 8 | Supply-chain (build/release) | 🟡 SLSA L2 (L3 = hermetic builder, właściciel/infra) | -| 9 | Contracts & API | 🟡 oasdiff/osv advisory (kandydaci na blocking-with-scope, P1) | -| 10 | Docs & i18n (anti-rot) | ✅ **wzmocnione** — `fabricated-docs --strict` blocking (exit 0 zweryfikowany) | -| 11 | Anti-hallucination / consistency | ✅ bez zmian (known-symbols/fetch-targets/docs-symbols/db-rules) | -| 12 | Resilience & domain | ✅ bez zmian (chaos/heap/k6/promptfoo/garak nightly) | - ---- - -## 4. Pozostałe luki do „absolutnego maksimum” - -### 4.1 Mierzalne w CI / możliwe do dostarczenia kodem (backlog tego programu) - -- **P1 — osv/oasdiff → blocking z właściwym zakresem:** osv tylko `CRITICAL`+fixable (dwuetapowo jak Trivy); oasdiff blokuje zmiany łamiące kontrakt. -- **P1 — `require-tighten` blocking (koniec cyklu):** blokuje zyski metryk (zapobiega poluzowaniu baseline bez zapisu). -- **P1/P2 — przegląd ROI / gate sprawl:** konsolidacja micro-gates doc-sync; pomiar czasu per-gate w `ci-summary` (walka z zmęczeniem — zastrzeżenie SonarQube/DORA). Odroczone merge ROI (unified complexity; unified `/api` anti-hallucination) trafiają tutaj. -- **P2 — CodeQL config w repo + semgrep wersjonowany:** więcej kontroli/reprodukowalności. - -### 4.2 Proces / właściciel (CI nie może ruszyć — ustawienia organizacji) - -- **Branch-protection na `main`** (podnosi Scorecard, zamyka lukę DSOMM). Zob. [`BRANCH_PROTECTION_MAIN.md`](./BRANCH_PROTECTION_MAIN.md). -- **CodeQL Default → Advanced setup.** -- **SLSA L3** — hermetic/reproducible builder (GitHub SLSA generator). Stretch (malejące zwroty). - -### 4.3 Wyraźnie poza zakresem - -- **DSOMM L5** jest w dużej mierze **na poziomie org / procesu** (nie da się zakodować w CI). -- **SLSA L4** (reprodukowalność bit-for-bit) to zadeklarowany stretch goal. - ---- - -## 5. Elementy odroczone / usunięte (porządkowanie ogona) - -- **`semcheck.yaml` (warstwa LLM na semantic drift docs↔code) — USUNIĘTE.** Było **osierocone** - (żaden workflow/skrypt go nie wywoływał) i miało nieaktualne liczniki w regułach. Deterministyczne pokrycie - już istnieje (`check:fabricated-docs --strict` + `check:docs-counts-sync` + `check:docs-symbols`), - a zastrzeżenie _gate sprawl_ zniechęca do dodawania bramki LLM advisory z kosztem cyklicznym. - Może zostać ponownie wprowadzone w przyszłości jako opt-in nightly job, jeśli semantic drift stanie się realnym problemem. -- **`agent-lsp` scaffold — ODROCZONE / opt-in nie włączone.** Istnieje jako wzmianka w docs - (`docs/architecture/QUALITY_GATES.md`, CHANGELOG), ale **bez podpięcia** i bez `.mcp.json.example` - w repo. Pozostaje udokumentowanym scaffoldem opt-in; nie jest aktywną bramką ani luką dojrzałości. diff --git a/docs/i18n/pl/docs/proxy-port-clash-report.md b/docs/i18n/pl/docs/proxy-port-clash-report.md deleted file mode 100644 index 533a041f0e..0000000000 --- a/docs/i18n/pl/docs/proxy-port-clash-report.md +++ /dev/null @@ -1,83 +0,0 @@ -# Analiza konfliktu portów proxy - -## Podsumowanie - -W systemie proxy auto-select / proxyFallback / proxyEgress **nie ma konfliktu portów**. -Podsystem proxy używa **wcześniej przypisanych portów z rejestru** — nigdy nie bindowuje -się bezpośrednio do portów TCP. Prawdziwa historia EADDRINUSE leży w warstwie -**process supervisor**, gdzie główny port nasłuchu serwera może kolidować podczas -restartów w pętli awarii (crash-loop). - ---- - -## Podsystem proxy: brak bindowania portów - -| Moduł | Co robi | -| ---------------------- | ----------------------------------------------------------------------------------------------------- | -| `proxyAutoSelector.ts` | Wybiera konfigurację proxy z DB, stosując health scores i grupy rotacji | -| `proxyFallback.ts` | Implementuje strategie retry/fallback, gdy wybrane proxy zawodzi (spróbuj innego proxy, potem direct) | -| `proxyEgress.ts` | Sondowanie/propagacja informacji o egress IP do logowania — używa HTTP echo, nie bindowania portów | -| `proxyDispatcher.ts` | Tworzy dispatchery `undici.ProxyAgent` — to poziom HTTP (forward proxy), nie gniazda nasłuchu TCP | -| `proxyFetch.ts` | Spatchowany globalny fetch, który stosuje dispatchery proxy na poziomie undici | - -Żaden z tych modułów nie wywołuje `net.createServer()`, `http.createServer()` ani `app.listen()`. -Zarządzanie portami odbywa się wyłącznie w cyklu życia żądania — undici zarządza pulą -połączeń TCP wewnętrznie. - -**Przepływ fallback** (z `proxyFetch.ts` `runWithProxyContext`): - -1. Spróbuj przypisanego proxy → proxy dispatcher -2. Jeśli nieosiągalne → direct fallback (bez dispatchera) -3. Jeśli nadal zawodzi → błąd propagowany w górę - -W tym przepływie nie następuje alokacja ani zwalnianie portów. - ---- - -## Prawdziwa przyczyna EADDRINUSE: wyścig restartu w crash-loop - -Rzeczywisty konflikt portów był w **process supervisor** (`bin/cli/runtime/`): - -| Plik | Rola | -| ----------------------- | --------------------------------------------------------------------------------- | -| `processSupervisor.mjs` | `ServerSupervisor` — uruchamia proces potomny, monitoruje kod wyjścia, restartuje | -| `supervisorPolicy.mjs` | `waitUntilPortFree()`, `isPortFree()`, stałe polityki restartu | - -**Przyczyna główna:** Gdy proces potomny serwera ulegał awarii i był natychmiast restartowany, -OS nie zdążył jeszcze zwolnić gniazda nasłuchu (TIME_WAIT / TCP lingering). Próba restartu -bindowała ten sam port i natychmiast kończyła się `EADDRINUSE`, powodując -kolejną awarię → kolejny restart → wyczerpany budżet restartów → gateway martwy. - -**Poprawka (#4425, w `supervisorPolicy.mjs`):** - -1. Dodano `isPortFree(port)` — próbuje `net.createServer().listen()` na docelowym - porcie; zwraca `false` przy EADDRINUSE. -2. Dodano `waitUntilPortFree(port, timeoutMs=10000, intervalMs=250)` — odpytuje co 250ms - przez maks. 10s, aż port będzie wolny, dopiero potem pozwala na restart. -3. Podniesiono `RESTART_RESET_MS` z 30s → 60s — okno awarii było zbyt krótkie, co powodowało - szybkie kaskadowe restarty w obrębie okna. -4. Podniesiono `DEFAULT_MAX_RESTARTS` z 2 → 3 — większy zapas na przejściowe awarie. - -Narzędzia `writePidFile()` / `killAllSubprocesses()` / `cleanupPidFile()` w -`bin/cli/utils/pid.mjs` zapewniają czysty cykl życia pliku PID. - -## Powiązane: Live-Dashboard EADDRINUSE (#6324) - -Równoległa poprawka (`live-ws-eaddrinuse-6324.test.ts`) gwarantuje, że `startLiveDashboardServer()` -odrzuca z właściwym błędem `EADDRINUSE` (zamiast nieobsłużonego zdarzenia socket 'error', -które crashowałoby proces). Serwer dashboardu używa osobnego portu względem głównego -serwera API, więc gdy oba są skonfigurowane na ten sam port, drugie bindowanie kończy się -niepowodzeniem w sposób kontrolowany (gracefully). - ---- - -## Stan obecny - -| Ryzyko | Status | Pozostało | -| -------------------------------------------- | ----------------------- | --------- | -| Supervisor restart EADDRINUSE | **Naprawione** (#4425) | Brak | -| LiveWS port clash | **Naprawione** (#6324) | Brak | -| Proxy selection port clash | **Nigdy nie dotyczyło** | Brak | -| Two Redis CLIENT factories bind no TCP ports | **Nigdy nie dotyczyło** | Brak | - -Nie są potrzebne dalsze działania w sprawie konfliktu portów. diff --git a/docs/i18n/pl/docs/proxy-subscriptions.md b/docs/i18n/pl/docs/proxy-subscriptions.md deleted file mode 100644 index 38c628c5f1..0000000000 --- a/docs/i18n/pl/docs/proxy-subscriptions.md +++ /dev/null @@ -1,370 +0,0 @@ -# Subskrypcje proxy operatora (styl Karing) - -> Notatki projektowe i implementacyjne dla operatorowego przepływu subskrypcji -> proxy w OmniRoute. To jest cięcie v1: pojedynczy operator wkleja linki -> subskrypcji, wybiera tryb (global lub rule), a OmniRoute wiąże wynikową pulę -> proxy z istniejącą rezolucją scope. Multi-tenant per-API-key, zaawansowane -> reguły ruchu, wagi per-rule sterowane latencją itd. są jawnie poza zakresem -> i wymienione w §7. - ---- - -## 1. Motywacja - -Dziś pula proxy OmniRoute jest ręcznie kuratorowana: każdy węzeł żyje w -`proxy_registry` z ręcznie wpisanym host/port/credentials, a każde powiązanie z -upstreamowymi dispatcherami (account → provider → combo → global → direct) to -ręczny wiersz `proxy_assignments`. Operatorzy, którzy już utrzymują subskrypcję -Clash/V2Ray/sing-box (np. z usługi airport), muszą przepisywać każdy węzeł do -OmniRoute i ponownie je wiązać przy każdej zmianie listy upstream. - -Celem v1 jest uczynienie OmniRoute first-class dla subskrypcji -**dostarczanych przez operatora**, podobnie jak Karing / Clash / sing-box -pozwalają wkleić URL `https://...` i zostawić zarządzanie cyklem życia klientowi. - -## 2. Historie użytkownika - -| # | Jako | Chcę | Aby | -| --- | -------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | -| U1 | Operator | wkleić URL subskrypcji raz | nie przepisywać węzłów przy każdym odświeżeniu airport | -| U2 | Operator | włączać/wyłączać subskrypcję | móc wrócić do direct bez usuwania URL | -| U3 | Operator | wybrać tryb **global** | cały ruch każdego providera wychodził przez subskrypcję | -| U4 | Operator | wybrać tryb **rule** i wskazać konkretnych providerów | tylko wybrani providerzy szli przez proxy; pozostali zostawali direct | -| U5 | Operator | podać lokalny endpoint SOCKS5 sing-box/clash | węzły SS/VMess/Trojan/VLESS (których dispatcher OmniRoute nie mówi natywnie) stawały się używalne przez lokalny mostek kernela | -| U6 | Operator | widzieć status pobrania i niedawną zredagowaną (redacted) sumę węzłów | debugować „dlaczego pusto / błąd” bez wycieku credentials | - -## 3. Poza zakresem (v1) - -- Nadpisania subskrypcji per-API-key (multi-tenant). v1 jest wyłącznie operatorskie. -- Reguły ruchu per-provider poza `global` / `rule-on-selected-providers`. -- Inteligentny routing oparty o latencję między węzłami subskrypcji a innymi pulami - (istniejące `resolveProxyForConnectionFromRegistry` już to robi dla puli - globalnej; v1 tylko dokłada do niej węzły subskrypcji). -- Auto-import URL/hasła z nagłówków lub query params. -- Mitygacja SSRF poza endpointami local-core wyłącznie na loopback (sam URL - subskrypcji jest kontrolowany przez operatora, więc ufamy mu tak samo jak - dzisiejszym URL-om providerów upstream). - -## 4. Architektura - -``` - ┌─────────────────────────────────────────┐ - │ dashboard / settings / 代理 / 订阅代理 │ - │ (client component, SubscriptionTab) │ - └──────────────────┬──────────────────────┘ - │ fetch - ▼ - ┌────────────────────────────────────────────────────────┐ - │ /api/v1/management/proxy-subscriptions │ - │ ├ GET list │ - │ ├ POST create │ - │ ├ GET /:id │ - │ ├ PATCH /:id │ - │ ├ DELETE /:id │ - │ ├ POST /:id/refresh │ - │ └ GET /:id/nodes │ - └────────────────────────┬───────────────────────────────┘ - │ uses - ▼ - ┌────────────────────────────────────────────────────────┐ - │ src/lib/proxySubscription/ │ - │ ├ parse.ts (Clash YAML / V2Ray JSON / URIs) │ - │ ├ subscriptionService.ts │ - │ │ CRUD, sync, apply, unapply, scheduler │ - │ └ index.ts (barrel) │ - └──────────┬─────────────────────────────┬───────────────┘ - │ upsert/scope-bind │ DB - ▼ ▼ - ┌─────────────────────────┐ ┌──────────────────────────┐ - │ proxy_registry │ │ proxy_subscriptions │ - │ (existing) + │ │ (NEW — subscription │ - │ subscription_id column │ │ metadata + scheduler │ - │ + status/health checks │ │ state) │ - └─────────────────────────┘ └──────────────────────────┘ - │ - ▼ (existing) - resolveProxyForConnectionFromRegistry - hasBlockingProxyAssignment (fail-closed) - proxyDispatcher (open-sse/utils/proxyDispatcher) -``` - -Kluczowa decyzja projektowa: **nie wymyślamy nowego scope ani pipeline’u routingu**. -Upsertujemy węzły pochodzące z subskrypcji do `proxy_registry` z `source = -'subscription'` + `subscription_id`, a następnie `applySubscription()` przechodzi -istniejące API `addProxyToScopePool(scope, scopeId, proxyId)`. Dzięki temu: - -- Istniejąca rotacja, health checki i strażniki fail-closed działają „za darmo”. -- Istniejące dashboardy (ProxyPoolTab, SourceToggleBar, GlobalConfigTab) działają - bez zmian — węzły subskrypcji po prostu pojawiają się w puli z odznaką `source`. -- Usunięcie/wyłączenie subskrypcji czysto usuwa jej powiązania bez - ruszania ręcznych proxy. - -## 5. Model danych - -### 5.1 Nowa tabela `proxy_subscriptions` - -| Column | Type | Notes | -| ------------------------- | -------------------------------- | ---------------------------------------------------------------------- | -| `id` | TEXT PK | UUID | -| `name` | TEXT NOT NULL | nazwa wyświetlana | -| `url` | TEXT NOT NULL | URL subskrypcji | -| `enabled` | INTEGER NOT NULL DEFAULT 0 | 1 = aktywna | -| `mode` | TEXT NOT NULL DEFAULT `'global'` | `'global'` lub `'rule'` | -| `rule_providers` | TEXT NULL | tablica JSON ID providerów (tylko mode='rule') | -| `local_core_endpoint` | TEXT NULL | loopback SOCKS5/HTTP dla SS/VMess/itd. (np. `socks5://127.0.0.1:2080`) | -| `update_interval_minutes` | INTEGER NOT NULL DEFAULT 60 | kadencja odświeżania w tle | -| `last_fetched_at` | TEXT NULL | znacznik czasu ISO ostatniego udanego pobrania | -| `status` | TEXT NOT NULL DEFAULT `'empty'` | `'ok'` / `'error'` / `'empty'` | -| `error` | TEXT NULL | ostatni tekst błędu / ostrzeżenia (zredagowany) | -| `last_nodes` | TEXT NULL | tablica JSON, zredagowane podsumowania węzłów | -| `created_at` | TEXT NOT NULL | ISO | -| `updated_at` | TEXT NOT NULL | ISO | - -Indeks: `idx_proxy_subscriptions_enabled (enabled)` na tick schedulera. - -### 5.2 Rozszerzone `proxy_registry` - -Dodana jedna kolumna: - -| Column | Type | Notes | -| ----------------- | --------- | ------------------------------------------------------------------------------------ | -| `subscription_id` | TEXT NULL | FK z konwencji (bez wymuszanego FK; wiersz subskrypcji żyje w `proxy_subscriptions`) | - -Istniejące wiersze po upgrade: `subscription_id = NULL`, zachowanie bez zmian. -Migracja: `ALTER TABLE proxy_registry ADD COLUMN subscription_id TEXT;` -(stosowana jako `131_proxy_subscriptions.sql`, idempotentna dzięki semantyce -`ALTER` w migration runnerze). - -### 5.3 Izolacja testów rozszerzonego `proxy_subscriptions` - -Migration runner stosuje nowe migracje automatycznie; jedyne miejsca, które -muszą znać nową kolumnę, to `types.ts` i `mappers.ts` (po jednym dodatkowym -polu) oraz `proxies.ts` (3 instrukcje SQL: INSERT/UPDATE/SELECT). - -## 6. Tryby - -### 6.1 Tryb global - -- Pula powiązana z `scope='global', scope_id=NULL`. -- Ustawienie `proxyEnabled` wymuszane na `true`, gdy aktywna jest jakakolwiek - subskrypcja (lub jakiekolwiek globalne proxy spoza subskrypcji). -- Cały ruch providerów wychodzi przez pulę subskrypcji, z rotacją/health - stosowanymi przez istniejące `resolveProxyForConnectionFromRegistry`. - -### 6.2 Tryb rule - -- Pula powiązana z `scope='provider', scope_id=` dla każdego - wybranego providera. -- Providerzy spoza listy przechodzą na direct (własne proxy na poziomie - providera albo brak proxy). -- Przełączenie subskrypcji z global → rule najpierw wywołuje `unapplySubscription`, - by odłączyć poprzednie powiązania globalne, a potem ponownie synchronizuje. - -## 7. Wsparcie protokołów - -Istniejący `proxyDispatcher` mówi tylko **http / https / socks5 / vercel / -deno / cloudflare**. v1 idzie za tym: - -| Parser-detected type | Goes into pool directly? | Needs `localCoreEndpoint`? | -| --------------------------------- | ------------------------ | -------------------------------------- | -| `http` / `https` | yes | no | -| `socks5` | yes | no | -| `ss` / `ssr` | no | yes (sing-box/clash → loopback SOCKS5) | -| `vmess` / `vless` | no | yes | -| `trojan` | no | yes | -| `hysteria` / `tuic` / `wireguard` | no | yes | -| `relay` (vercel/deno/cloudflare) | yes | no | - -Bez `localCoreEndpoint` węzły klasy SS pojawiają się w statusie jako -ostrzeżenie, ale **nie są routowane**. To odpowiada polityce „fail-closed, ale -nie kłam o możliwościach”: nigdy cicho nie gubimy ruchu; raportujemy -nieroutowalne węzły i zostawiamy decyzję operatorowi. - -## 8. Parser (`src/lib/proxySubscription/parse.ts`) - -Ręcznie napisany, bez zewnętrznej zależności. Akceptowane wejścia: - -1. **Clash / Clash.Meta YAML** — tablica `proxies:`, z dispatch po `type`. -2. **Lista URI owinięta Base64** — `parseSubscription` wykrywa base64 po długości - i zestawie znaków, dekoduje, potem parsuje URI. -3. **JSON-array-of-URI w stylu V2RayN** — używa URI `vmess://` / `vless://`. -4. **Zwykła lista URI** — `ss://`, `vmess://`, `vless://`, `trojan://`, - `hysteria://`, `tuic://`, `wireguard://`, `socks5://`, `http(s)://`. - -Wyjście: - -```ts -type ParsedSubscription = { - nodes: DirectlyUsableNode[]; // http/https/socks5/relay - needsCore: NeedsCoreNode[]; // ss/vmess/... — redacted summary - rawProtocols: string[]; // for diagnostics - parserWarnings: string[]; // per-line parse errors, redacted -}; - -type DirectlyUsableNode = { - name: string; - type: "http" | "https" | "socks5" | "vercel" | "deno" | "cloudflare"; - host: string; - port: number; - username?: string; - password?: string; -}; -``` - -`redactedNodeSummary` zwraca serializowalną do JSON tablicę `{name, type, -host, port, hasCredentials}` z pominiętymi credentials. To trafia do -`last_nodes` na potrzeby UI operatora. - -## 9. Bezpieczeństwo - -- **SSRF na `localCoreEndpoint`**: jedyna powierzchnia SSRF to lokalny - endpoint core (sam URL subskrypcji dostarcza operator). Dozwolone - hosty: `127.0.0.1`, `::1`, `localhost`. Każdy inny host jest odrzucany przy - parsowaniu ze statusem `subscription_needs_core_endpoint_invalid`. -- **Brak outboundu do hostów wewnętrznych operatora** z URL subskrypcji. Pobranie - URL idzie przez `fetch` Node (ten sam model zaufania co istniejące - health checki `proxyLatency` i taski ping providerów). Operator - już ufa URL, bo go wkleił. -- **Fail-closed**: jeśli proxy subskrypcji jest martwe, ale nadal powiązane ze - scope, `hasBlockingProxyAssignment` zwraca true i ruch kończy się fail-closed — - zgodnie z istniejącą polityką dla dowolnego proxy z puli. Operator zawsze może - wyłączyć subskrypcję lub usunąć powiązanie. -- **Brak echa sekretów**: `last_nodes` jest zredagowane; UI nigdy nie odsyła - sekretów. `password` / `username` są przechowywane zaszyfrowane at rest przez - istniejący tor szyfrowania `proxy_registry`. -- **Brak zapisu cross-tenant**: trasy API są strzeżone przez `requireManagementAuth` - (sesja dashboardu LUB klucz API ze scope manage). Nadpisania per-API-key są - jawnie poza zakresem. - -## 10. UI - -Nowa podzakładka **"订阅代理"** w `dashboard / settings / 代理`, umieszczona po -„documentation”. Widok listy pokazuje: - -- Name + URL (obcięty, pełny URL w atrybucie `title`) -- Odznaka statusu: `ok` / `error` / `empty` -- Przełącznik Enabled (optimistic toggle) -- Przyciski akcji: edit / refresh / delete - -Formularz edycji ma: - -- Name (tekst, wymagane) -- URL (tekst, wymagane, walidowane jako URL) -- Przełącznik Mode (global / rule) -- Multi-select providerów (widoczny tylko w trybie rule; zasilany z - `/api/providers`) -- Local core endpoint (tekst, opcjonalny; placeholder `socks5://127.0.0.1:2080`) -- Update interval (liczba, domyślnie 60 minut) -- Przełącznik Enabled - -Gdy `status === 'error'`, baner ostrzeżenia inline pokazuje `subscription.error`. -Gdy `status === 'ok'` i są węzły wymagające local core, miękki -baner ostrzeżenia pokazuje, które protokoły pominięto. - -## 11. Migracja i rollout - -1. Nowa migracja `131_proxy_subscriptions.sql` uruchamia się przy pierwszym otwarciu DB po - upgrade (auto-wykrywana przez istniejący migration runner). -2. Migracja jest **idempotentna**: `ALTER TABLE … ADD COLUMN …` na już - zmigrowanej DB to no-op w SQLite, gdy owinięte w ścieżkę runnera - „ignore duplicate column”. Zob. istniejące precedensy - `040_oneproxy_proxy_fields.sql` i `093_proxy_enable_toggles.sql`. -3. Bez backfill: istniejące wiersze dostają `subscription_id = NULL`, co serwis - traktuje jako „manual, not subscription-managed”. -4. UI ukrywa zakładkę przy zerze subskrypcji, ale API jest zawsze - dostępne — to celowe, by operatorzy headless mogli zarządzać - subskrypcjami wyłącznie przez API. - -## 12. Auto-odświeżanie - -`startSubscriptionScheduler()` jest idempotentny i: - -- Pomija przeglądarkę (`typeof window !== "undefined"`). -- Pomija przy `NODE_ENV=test`. -- W przeciwnym razie startuje 60s `setInterval`, który: - - Listuje włączone subskrypcje. - - Dla każdej liczy `due = now - lastFetchedAt >= updateIntervalMinutes * 60_000`. - - Wywołuje `syncSubscription` dla zaległych, połykając błędy (logowane). -- Timer interwału ma `.unref()`, więc nigdy nie blokuje wyjścia procesu. - -Scheduler startuje przy: - -- Pierwszym `GET /api/v1/management/proxy-subscriptions` (otwarcie dashboardu). -- Dowolnym wywołaniu `syncSubscription` (defensywnie — dla ścieżek CLI / automacji, - które omijają GET). - -## 13. Strategia testów - -`tests/unit/proxySubscription.parse.test.ts` — 7 czystych przypadków parsera, bez DB, -uruchamialne w <1s: - -1. Clash YAML z węzłami `direct` (http) i `needsCore` (ss). -2. Lista URI owinięta Base64 (poprawnie zdekodowana). -3. V2Ray JSON-array-of-URI (vmess / vless). -4. Zwykła lista URI (mieszane protokoły). -5. Outboundy Clash.Meta (socks5). -6. Puste / nieznane wejście → `nodes=[]`, `needsCore=[]`, parserWarnings wypełnione. -7. `redactedNodeSummary` usuwa credentials. - -`tests/unit/proxySubscription.service.test.ts` — 4 testy integracyjne używające -`process.env.DATA_DIR` + `core.resetDbInstance()`: - -1. **Global**: utwórz włączoną subskrypcję global → `syncSubscription` → - zweryfikuj wiersze puli w `proxy_registry` z ustawionym `subscription_id` → - `resolveProxyForConnectionFromRegistry` zwraca jeden z tych wierszy → - `proxyEnabled` jest true. -2. **Rule**: utwórz włączoną subskrypcję rule na providerze P1 → zweryfikuj, że tylko - scope P1 jest powiązany, scope P2 nietknięty. -3. **Fail-closed**: URL pobrania subskrypcji jest nieosiągalny → `status='error'`, - pula pusta, a jeśli kiedykolwiek miała wiersze, są wyczyszczone; - `hasBlockingProxyAssignment` zwraca false (brak martwych proxy w żadnym scope). -4. **Delete**: usuń subskrypcję → wiersze rejestru dla tej subskrypcji są - usuwane z `force: true` (ręczne usunięcia nie mogą zablokować kaskady) → - `proxyEnabled` przeliczone. - -Komenda uruchomienia testów: - -```bash -node --import tsx/esm \ - --import ./open-sse/utils/setupPolyfill.ts \ - --import ./tests/_setup/isolateDataDir.ts \ - --test \ - tests/unit/proxySubscription.parse.test.ts \ - tests/unit/proxySubscription.service.test.ts -``` - -## 14. Prace przyszłe (NIE w v1) - -- Nadpisania subskrypcji per-API-key (multi-tenant; wymaga tabeli `key_subscription_overrides`). -- Reguły ruchu per-provider z matcherami domen (weszłyby w istniejącą tabelę `interceptionRules`). -- Rotacja ważona latencją między pulami subskrypcji (mamy już `ProxyRotationStrategy = "latency"`; wystarczy wystawić w UI). -- Proxyowanie samego pobrania subskrypcji przez osobny egress (by operatorzy mogli pobierać zza firmowego firewalla). -- Podgląd sparsowanej subskrypcji po stronie przeglądarki przed zapisem (dziś trzeba save → wait → see nodes). - -## 15. Pliki dodane / zmienione - -**Dodane (nowe):** - -- `src/lib/proxySubscription/parse.ts` -- `src/lib/proxySubscription/subscriptionService.ts` -- `src/lib/proxySubscription/index.ts` -- `src/lib/db/migrations/131_proxy_subscriptions.sql` -- `src/app/api/v1/management/proxy-subscriptions/route.ts` -- `src/app/api/v1/management/proxy-subscriptions/[id]/route.ts` -- `src/app/api/v1/management/proxy-subscriptions/[id]/refresh/route.ts` -- `src/app/api/v1/management/proxy-subscriptions/[id]/nodes/route.ts` -- `src/app/(dashboard)/dashboard/settings/components/proxy/SubscriptionTab.tsx` -- `tests/unit/proxySubscription.parse.test.ts` -- `tests/unit/proxySubscription.service.test.ts` -- `docs/proxy-subscriptions.md` (ten plik) - -**Zmodyfikowane (minimalnie):** - -- `src/lib/db/proxies/types.ts` — `+ subscriptionId: string | null` na - `ProxyRegistryRecord`; `+ subscriptionId?: string | null` na `ProxyPayload`. -- `src/lib/db/proxies/mappers.ts` — `mapProxyRow` czyta - `subscription_id` z wiersza. -- `src/lib/db/proxies.ts` — INSERT / UPDATE / SELECT dodają `subscription_id`. -- `src/app/(dashboard)/dashboard/settings/components/ProxyTab.tsx` — dodaje - jedną nową podzakładkę ("订阅代理") + fallback `literal` dla etykiet, których - jeszcze nie ma w katalogu i18n. diff --git a/docs/i18n/pl/docs/redis-production-config.md b/docs/i18n/pl/docs/redis-production-config.md deleted file mode 100644 index a2bd407fa1..0000000000 --- a/docs/i18n/pl/docs/redis-production-config.md +++ /dev/null @@ -1,178 +0,0 @@ -# Przewodnik konfiguracji Redis w produkcji - -## Przegląd - -Redis to **opcjonalna, miękka zależność** w OmniRoute — aplikacja degraduje się łagodnie (fallbacki -w pamięci), gdy Redis jest niedostępny. W produkcji strojenie Redis zmniejsza opóźnienia dla trzech -odrębnych obciążeń: - -| Obciążenie | Sterownik | Fabryka klienta | Wzorzec kluczy | -| ------------- | -------------------- | ----------------------------------------------- | --------------------------------- | -| Rate limiting | `rateLimiter.ts` | `getRedisClient()` — leniwy singleton `ioredis` | Okna rate limit z atomowością Lua | -| Cache auth | `apiKeys.ts` | Ponownie używa klienta `rateLimiter` | `auth:api_key:` z TTL | -| Magazyn quota | `redisQuotaStore.ts` | Osobny singleton `getRedisClient(url)` | Konfigurowalny per instancja | - ---- - -## Bieżąca konfiguracja (domyślne wartości w kodzie) - -| Ustawienie | Wartość | Gdzie | -| -------------------------------------------- | ---------------------------------------------------------- | ------------------------------------ | -| Zmienna środowiskowa `REDIS_URL` | `redis://redis:6379` (compose), opcjonalna | `rateLimiter.ts:5`, `.env.example` | -| Zmienna środowiskowa `QUOTA_STORE_REDIS_URL` | osobna, może różnić się od `REDIS_URL` | `quota/storeFactory.ts` | -| `QUOTA_STORE_DRIVER` | `"sqlite"` (domyślnie), `"redis"` opcjonalnie | `quota/storeFactory.ts` | -| ioredis `maxRetriesPerRequest` | `3` | tworzenie klienta w `rateLimiter.ts` | -| `enableReadyCheck` | nieustawione (domyślnie ioredis: `true`) | — | -| `lazyConnect` | nieustawione (domyślnie ioredis: `false`) | — | -| `retryStrategy` | nieustawione (domyślnie ioredis: baza 200 ms, wykładniczo) | — | -| TLS / hasło / indeks DB | **nieskonfigurowane** | — | -| Sentinel / Cluster | **nieskonfigurowane** — tylko samodzielny pojedynczy węzeł | — | - ---- - -## Zalecane strojenie produkcyjne - -### 1. Pula połączeń / opcje klienta (konstruktor ioredis `Redis`) - -Obecny kod tworzy pojedyncze `new Redis(url)` bez własnych opcji. W produkcyjnych -wdrożeniach multi‑replica przekaż fabrykę klienta w kodzie albo owiń `getRedisClient()`: - -```typescript -const redis = new Redis(REDIS_URL, { - maxRetriesPerRequest: null, // no retry limit; let retryStrategy decide - enableReadyCheck: true, // verify server is ready before accepting calls - lazyConnect: true, // don't connect on construction; wait for first call - retryStrategy: (times) => { - if (times > 10) return null; // give up after 10 retries → reconnect later - return Math.min(times * 200, 5000); // 200ms, 400ms, …, 5s cap - }, - enableAutoPipelining: true, // coalesce concurrent commands into one TCP write - keepAlive: 10000, // TCP keep‑alive every 10s -}); -``` - -**Kluczowe kompromisy:** - -- `maxRetriesPerRequest: null` + `retryStrategy` — preferowane w produkcji, aby chwilowe - restarty Redis nie powodowały natychmiastowej awarii każdego żądania. Fallback w pamięci w - `checkRateLimit()` obsługuje ścieżkę błędu. -- `lazyConnect: true` — unika zależności startowej od dostępności Redis, zanim serwer - zacznie przyjmować połączenia. -- `enableAutoPipelining: true` — zmniejsza liczbę round-tripów przy współbieżnych sprawdzeniach rate-limit; - korzystne przy >50 RPS na jednym połączeniu. - -### 2. Konfiguracja serwera Redis (`redis.conf`) - -``` -# Memory -maxmemory 80% # leave room for OS page cache -maxmemory-policy allkeys-lru # evict stale auth cache entries under pressure - -# Persistence (optional — OmniRoute is crash‑safe without it) -save 300 1 # snapshot at least every 5 min if ≥1 key changed -appendonly no # AOF not needed; data is regeneratable -appendfsync no # no fsync overhead (RDB is sufficient) - -# Networking -timeout 0 # no idle disconnect -tcp-keepalive 300 # 5 min keep‑alive -tcp-backlog 511 # connection backlog for bursty load - -# Performance -hz 10 # default; 100 for latency‑sensitive -activedefrag yes # auto‑defragment when fragmentation >10% -``` - -**Kompromis dla `maxmemory-policy allkeys-lru`:** Wpisy cache auth mogą zostać usunięte przy -presji pamięci. To bezpieczne — `setCachedApiKey` zawsze uzupełnia cache przy miss, a -fallback SQLite jest autorytatywny. Skrypt Lua rate-limitera tworzy małe klucze, które z -założenia są krótkotrwałe. - -### 3. Ustawienia Docker Compose - -Produkcyjny compose (`docker-compose.prod.yml`) używa `redis:8.6.2-alpine`. Dodaj: - -```yaml -redis: - image: redis:8.6.2-alpine - command: - [ - "redis-server", - "--maxmemory", - "512mb", - "--maxmemory-policy", - "allkeys-lru", - "--activedefrag", - "yes", - "--save", - "300 1", - ] - healthcheck: - test: ["CMD", "redis-cli", "ping"] - interval: 10s - timeout: 3s - retries: 3 - start_period: 5s -``` - -### 4. Uwagi dotyczące wielu instancji / skalowania - -**Jeden Redis dla wszystkich replik** — skrypt Lua rate-limitera zależy od jednej -autorytatywnej przestrzeni kluczy. Wiele instancji Redis za replikami straciłoby atomowość -i podwoiłoby budżet. Używaj jednego Redis (lub klastra Redis Sentinel z failover) dla -wszystkich replik aplikacji. - -**Liczba połączeń:** Każda replika aplikacji otwiera **2 połączenia TCP** do Redis -(klient rate limitera + klient magazynu quota). Przy 10 replikach → 20 połączeń, znacznie -poniżej domyślnego limitu 10k połączeń instancji Redis. - -### 5. Monitoring - -Udostępnij przez endpoint health-check: - -```typescript -// src/app/api/monitoring/health/route.ts already calls rateLimiter functions -// Add Redis-specific checks: -// 1. PING latency via ioredis .ping() -// 2. Memory usage via INFO memory -// 3. Connection count via INFO clients -// 4. Hit rate for maxmemory-policy (evicted_keys / keyspace_hits) -``` - -Kluczowe metryki do obserwacji: - -- **Evicted keys / sec** — jeśli trwale niezerowe, zwiększ `maxmemory` -- **Blocked clients** — wartość niezerowa sugeruje wolne skrypty Lua lub wysoką kontencję -- **Rejected connections** — osiągnięty limit połączeń; rzadkie przy 20 połączeniach - ---- - -## Diagram architektury - -```mermaid -flowchart LR - subgraph App["App Replica"] - RL[rateLimiter.ts] - AK[apiKeys.ts] - QS[redisQuotaStore.ts] - end - RL -- "REDIS_URL" --> R1[(Redis\nshared)] - AK -- "reuses RL's client" --> R1 - QS -- "QUOTA_STORE_REDIS_URL" --> R2[(Redis\nquota store)] - R1 --> R2 -- "can be same instance" --> R1 -``` - ---- - -## Odnośniki - -| Plik | Przeznaczenie | -| ---------------------------------- | -------------------------------------------------------------- | -| `src/shared/utils/rateLimiter.ts` | Główny klient Redis, skrypt Lua rate-limit, fallback w pamięci | -| `src/lib/db/apiKeys.ts` | Cache auth — fallback Redis→SQLite | -| `src/lib/quota/redisQuotaStore.ts` | Osobny klient Redis dla opcjonalnego magazynu quota | -| `src/lib/quota/storeFactory.ts` | Przełącza sterowniki quota między `sqlite` a `redis` | -| `docker-compose.prod.yml` | Kontener Redis w prod (obraz `redis:8.6.2-alpine`) | -| `.env.example` | Dokumentacja zmiennych środowiskowych Redis | -| `src/app/api/local/redis/` | Trasy API do orkiestracji kontenera dev | -| `bin/cli/commands/redis.mjs` | Komendy CLI do orkiestracji kontenera dev | diff --git a/docs/i18n/pl/docs/security/PUBLIC_CREDS.md b/docs/i18n/pl/docs/security/PUBLIC_CREDS.md index 66bec76830..f22b2cb258 100644 --- a/docs/i18n/pl/docs/security/PUBLIC_CREDS.md +++ b/docs/i18n/pl/docs/security/PUBLIC_CREDS.md @@ -17,7 +17,7 @@ lastUpdated: 2026-06-28 - [OAuth 2.0 for native apps (PKCE)](https://developers.google.com/identity/protocols/oauth2/native-app) — OAuth client_id / client_secret dla zainstalowanych aplikacji są publiczne; rzeczywiste bezpieczeństwo zapewnia PKCE. - [Firebase API keys](https://firebase.google.com/docs/projects/api-keys) — identyfikatory klientów Web są publiczne z założenia. -OmniRoute musi osadzać te wartości, aby użytkownicy, którzy nie konfigurują `.env`, nadal mieli działający flow OAuth od razu po uruchomieniu. Bez wbudowanego fallbacku providerzy Gemini / Antigravity / Windsurf przestają działać dla każdego, kto idzie ścieżką „po prostu sklonuj i uruchom”. +OmniRoute musi osadzać te wartości, aby użytkownicy, którzy nie konfigurują `.env`, nadal mieli działający flow OAuth od razu po uruchomieniu. Bez wbudowanego fallbacku providerzy Gemini / Antigravity przestają działać dla każdego, kto idzie ścieżką „po prostu sklonuj i uruchom”. Jednak literały w stylu `AIzaSy…`, `GOCSPX-…`, `…apps.googleusercontent.com` są łapane przez **GitHub Secret Scanning**, **Semgrep** i podobne skanery wzorców. Każdy release zamienia się w szum fałszywych alarmów, push protection blokuje legalne commity, a operatorzy tracą zaufanie do feedu alertów. diff --git a/docs/i18n/pl/llm.txt b/docs/i18n/pl/llm.txt index b2dc9c9fbf..e47af25132 100644 --- a/docs/i18n/pl/llm.txt +++ b/docs/i18n/pl/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/pt-BR/docs/architecture/ARCHITECTURE.md b/docs/i18n/pt-BR/docs/architecture/ARCHITECTURE.md index ed3b8add5a..dbee332a36 100644 --- a/docs/i18n/pt-BR/docs/architecture/ARCHITECTURE.md +++ b/docs/i18n/pt-BR/docs/architecture/ARCHITECTURE.md @@ -74,7 +74,7 @@ Capacidades principais: - Middleware de proteção contra injeção de prompt - Pipeline de compressão de prompt com Caveman, RTK, pipelines empilhados, combos de compressão, pacotes de idioma e análises - Registro de ACP (Agent Communication Protocol) -- Provedores OAuth modulares (14 módulos individuais sob `src/lib/oauth/providers/`) +- Provedores OAuth modulares (22 módulos individuais sob `src/lib/oauth/providers/`) - Scripts de desinstalação/desinstalação completa - Ação de reparo de ambiente OAuth - Ponte WebSocket para clientes WS compatíveis com OpenAI (`/v1/ws`) @@ -329,10 +329,10 @@ Módulos da camada de domínio: - Executor de avaliação: `src/lib/domain/evalRunner.ts` - Persistência do estado do domínio: `src/lib/db/domainState.ts` — CRUD SQLite para cadeias de fallback, orçamentos, histórico de custos, estado de bloqueio, disjuntores -Módulos do provedor OAuth (14 arquivos individuais em `src/lib/oauth/providers/`): +Módulos do provedor OAuth (22 arquivos individuais em `src/lib/oauth/providers/`): - Índice do registro: `src/lib/oauth/providers/index.ts` -- Provedores individuais: `claude.ts`, `codex.ts`, `gemini.ts`, `antigravity.ts`, `qoder.ts`, `qwen.ts`, `kimi-coding.ts`, `github.ts`, `kiro.ts`, `cursor.ts`, `kilocode.ts`, `cline.ts`, `windsurf.ts`, `gitlab-duo.ts` +- Provedores individuais: `agy.ts`, `antigravity.ts`, `claude.ts`, `cline.ts`, `codebuddy-cn.ts`, `codex.ts`, `cursor.ts`, `devin-desktop.ts`, `ghe-copilot.ts`, `github.ts`, `gitlab-duo.ts`, `grok-cli-oauth.ts`, `grok-cli.ts`, `kilocode.ts`, `kimi-coding.ts`, `kiro.ts`, `qoder.ts`, `raycast.ts`, `trae.ts`, `xai-oauth.ts`, `zed-hosted.ts`, `zed.ts` - Wrapper fino: `src/lib/oauth/providers.ts` — re-exportações de módulos individuais ## Subsistemas Principais (v3.8.0) @@ -908,7 +908,7 @@ Cada provedor tem um executor especializado que estende `BaseExecutor` (em `open | `PuterExecutor` | Puter | Integração de provedor baseada em navegador | | `QoderExecutor` | Qoder AI | Suporte a PAT e OAuth, nível gratuito multi-modelo | | `VertexExecutor` | Google Vertex AI | Autenticação de conta de serviço, endpoints baseados em região | -| `WindsurfExecutor` | Windsurf (Codeium) | Atualização de token de sessão + OAuth do Codeium | +| `DevinDesktopExecutor` | Devin Desktop | Chave de API importada + streaming de chat Connect-protobuf | Todos os outros provedores (incluindo nós compatíveis personalizados) usam o `DefaultExecutor`. @@ -962,9 +962,9 @@ Todos os outros provedores (incluindo nós compatíveis personalizados) usam o ` | GLMT (preset) | claude | Chave de API | ✅ | ✅ | ❌ | ⚠️ Por solicitação | | Kimi Coding | openai | OAuth / Chave de API | ✅ | ✅ | ✅ | ❌ | | KIE | openai | Chave de API | ✅ | ✅ | ❌ | ❌ | -| Windsurf | openai | OAuth (Codeium) | ✅ | ✅ | ✅ | ⚠️ Por solicitação | +| Devin Desktop | openai | Chave de API importada | ✅ (Connect→SSE) | ✅ | ❌ | ⚠️ Por solicitação | | GitLab Duo | openai | OAuth (GitLab) | ✅ | ✅ | ✅ | ❌ | -| Devin CLI | openai | OAuth | ✅ | ✅ | ✅ | ✅ API de Tarefas | +| Devin CLI | openai | Login local da CLI | ✅ | ✅ | ❌ | ✅ API de Tarefas | | Codex Cloud | openai-responses | OAuth | ✅ | ❌ | ✅ | ✅ Limites de taxa | | Jules | openai | OAuth | ✅ | ✅ | ✅ | ✅ API de Tarefas | | AgentRouter | openai | Chave de API | ✅ | ✅ | ❌ | ❌ | diff --git a/docs/i18n/pt-BR/llm.txt b/docs/i18n/pt-BR/llm.txt index c89a273b7d..2ea921f25e 100644 --- a/docs/i18n/pt-BR/llm.txt +++ b/docs/i18n/pt-BR/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/pt/llm.txt b/docs/i18n/pt/llm.txt index b29bbb630c..185f5badfe 100644 --- a/docs/i18n/pt/llm.txt +++ b/docs/i18n/pt/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/ro/llm.txt b/docs/i18n/ro/llm.txt index 1910de17e7..aa9f7446e3 100644 --- a/docs/i18n/ro/llm.txt +++ b/docs/i18n/ro/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/ru/llm.txt b/docs/i18n/ru/llm.txt index 4ed0d7286e..3f008ce8c7 100644 --- a/docs/i18n/ru/llm.txt +++ b/docs/i18n/ru/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/sk/llm.txt b/docs/i18n/sk/llm.txt index 8547faa1df..dda73b9e77 100644 --- a/docs/i18n/sk/llm.txt +++ b/docs/i18n/sk/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/sv/llm.txt b/docs/i18n/sv/llm.txt index 9c6c24b4db..9fcf0081fe 100644 --- a/docs/i18n/sv/llm.txt +++ b/docs/i18n/sv/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/sw/llm.txt b/docs/i18n/sw/llm.txt index 6549c8f5f3..69650fcc5c 100644 --- a/docs/i18n/sw/llm.txt +++ b/docs/i18n/sw/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/ta/llm.txt b/docs/i18n/ta/llm.txt index d1f7d8967f..f2660ef9a5 100644 --- a/docs/i18n/ta/llm.txt +++ b/docs/i18n/ta/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/te/llm.txt b/docs/i18n/te/llm.txt index bb2fee59c7..8e04cb2e9f 100644 --- a/docs/i18n/te/llm.txt +++ b/docs/i18n/te/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/th/llm.txt b/docs/i18n/th/llm.txt index 430442fdb2..2b6ae43aeb 100644 --- a/docs/i18n/th/llm.txt +++ b/docs/i18n/th/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/tr/llm.txt b/docs/i18n/tr/llm.txt index 91092cff9f..0c1c41eb05 100644 --- a/docs/i18n/tr/llm.txt +++ b/docs/i18n/tr/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/uk-UA/llm.txt b/docs/i18n/uk-UA/llm.txt index 7b70b0553a..5a7213ed4a 100644 --- a/docs/i18n/uk-UA/llm.txt +++ b/docs/i18n/uk-UA/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/ur/llm.txt b/docs/i18n/ur/llm.txt index fa189b93fa..95720495f8 100644 --- a/docs/i18n/ur/llm.txt +++ b/docs/i18n/ur/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/vi/llm.txt b/docs/i18n/vi/llm.txt index 21fdc5fc78..b4c9ccbe4d 100644 --- a/docs/i18n/vi/llm.txt +++ b/docs/i18n/vi/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/zh-CN/SECURITY.md b/docs/i18n/zh-CN/SECURITY.md index a4ce8ea52a..463f45bc74 100644 --- a/docs/i18n/zh-CN/SECURITY.md +++ b/docs/i18n/zh-CN/SECURITY.md @@ -46,7 +46,7 @@ Request → CORS → Authz pipeline (classify → policies → enforce) | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | | **管理面板登录** | 基于密码的认证,使用 JWT Token(HttpOnly Cookie) | | **API Key 认证** | 带 CRC 校验的 HMAC 签名密钥 | -| **OAuth 2.0 + PKCE** | 14 个服务商(Claude、Codex、GitHub、Cursor、Antigravity、Gemini、Kimi Coding、Kilo Code、Cline、Qwen、Kiro、Qoder、Windsurf、GitLab Duo) | +| **OAuth 2.0 + PKCE** | 服务商专用的浏览器/设备 OAuth 在支持时使用 PKCE;仅导入的 Devin 凭据单独处理。 | | **Token 刷新** | OAuth Token 到期前自动刷新 | | **安全 Cookie** | HTTPS 环境设置 `AUTH_COOKIE_SECURE=true` | | **授权管线** | 路由分类(PUBLIC / CLIENT_API / MANAGEMENT)— 参见 `docs/architecture/AUTHZ_GUIDE.md` | diff --git a/docs/i18n/zh-CN/docs/architecture/ARCHITECTURE.md b/docs/i18n/zh-CN/docs/architecture/ARCHITECTURE.md index eba7d6ad13..7ea48138f4 100644 --- a/docs/i18n/zh-CN/docs/architecture/ARCHITECTURE.md +++ b/docs/i18n/zh-CN/docs/architecture/ARCHITECTURE.md @@ -68,7 +68,7 @@ OmniRoute 是基于 Next.js 构建的本地 AI 路由网关和控制台。 - 提示注入防护中间件 - 提示压缩管线,含 Caveman、RTK、级联管线、压缩 Combo、语言包和分析 - ACP(Agent Communication Protocol)注册表 -- 模块化 OAuth 服务商(`src/lib/oauth/providers/` 下 16 个独立模块) +- 模块化 OAuth 服务商(`src/lib/oauth/providers/` 下 22 个独立模块) - 卸载/完全卸载脚本 - OAuth 环境修复操作 - OpenAI 兼容 WebSocket 客户端的 WebSocket 桥接(`/v1/ws`) @@ -323,10 +323,10 @@ flowchart LR - 评估运行器:`src/lib/evals/evalRunner.ts` - 域状态持久化:`src/lib/db/domainState.ts` — SQLite CRUD,管理容灾链、预算、成本历史、锁定状态、熔断器 -OAuth 服务商模块(`src/lib/oauth/providers/` 下 16 个独立文件): +OAuth 服务商模块(`src/lib/oauth/providers/` 下 22 个独立文件): - 注册表索引:`src/lib/oauth/providers/index.ts` -- 独立服务商:`claude.ts`, `codex.ts`, `gemini.ts`, `antigravity.ts`, `agy.ts`, `qoder.ts`, `qwen.ts`, `kimi-coding.ts`, `github.ts`, `kiro.ts`, `cursor.ts`, `kilocode.ts`, `cline.ts`, `windsurf.ts`, `gitlab-duo.ts`, `trae.ts` +- 独立服务商:`agy.ts`, `antigravity.ts`, `claude.ts`, `cline.ts`, `codebuddy-cn.ts`, `codex.ts`, `cursor.ts`, `devin-desktop.ts`, `ghe-copilot.ts`, `github.ts`, `gitlab-duo.ts`, `grok-cli-oauth.ts`, `grok-cli.ts`, `kilocode.ts`, `kimi-coding.ts`, `kiro.ts`, `qoder.ts`, `raycast.ts`, `trae.ts`, `xai-oauth.ts`, `zed-hosted.ts`, `zed.ts` - 薄封装层:`src/lib/oauth/providers.ts` — 从独立模块重新导出 ## 5) 嵌入式服务(v3.8.4) @@ -925,7 +925,7 @@ flowchart LR | `PuterExecutor` | Puter | 基于浏览器的服务商集成 | | `QoderExecutor` | Qoder AI | PAT 和 OAuth 支持、多模型免费层 | | `VertexExecutor` | Google Vertex AI | 服务帐户认证、基于区域的端点 | -| `WindsurfExecutor` | Windsurf (Codeium) | Codeium OAuth + 会话 Token 刷新 | +| `DevinDesktopExecutor` | Devin Desktop | 导入的 API 密钥 + Connect-protobuf 聊天流 | 其余所有服务商(含自定义兼容节点)使用 `DefaultExecutor`。 @@ -979,9 +979,9 @@ flowchart LR | GLMT (preset) | claude | API Key | ✅ | ✅ | ❌ | ⚠️ 每请求 | | Kimi Coding | openai | OAuth / API Key | ✅ | ✅ | ✅ | ❌ | | KIE | openai | API Key | ✅ | ✅ | ❌ | ❌ | -| Windsurf | openai | OAuth (Codeium) | ✅ | ✅ | ✅ | ⚠️ 每请求 | +| Devin Desktop | openai | 导入的 API 密钥 | ✅ (Connect→SSE) | ✅ | ❌ | ⚠️ 每请求 | | GitLab Duo | openai | OAuth (GitLab) | ✅ | ✅ | ✅ | ❌ | -| Devin CLI | openai | OAuth | ✅ | ✅ | ✅ | ✅ 任务 API | +| Devin CLI | openai | 本地 CLI 登录 | ✅ | ✅ | ❌ | ✅ 任务 API | | Codex Cloud | openai-responses | OAuth | ✅ | ❌ | ✅ | ✅ 速率限制 | | Jules | openai | OAuth | ✅ | ✅ | ✅ | ✅ 任务 API | | AgentRouter | openai | API Key | ✅ | ✅ | ❌ | ❌ | diff --git a/docs/i18n/zh-CN/docs/architecture/CODEBASE_DOCUMENTATION.md b/docs/i18n/zh-CN/docs/architecture/CODEBASE_DOCUMENTATION.md index 44baf063a1..40da1196eb 100644 --- a/docs/i18n/zh-CN/docs/architecture/CODEBASE_DOCUMENTATION.md +++ b/docs/i18n/zh-CN/docs/architecture/CODEBASE_DOCUMENTATION.md @@ -610,17 +610,17 @@ bin/ ## 7. `tests/` -| 目录 | 类型 | -| -------------------------------------------------------------------------------- | ------------------------------------------------------------ | -| `tests/unit/` | Node 原生测试运行器的单元测试(1821 个文件,含 `api/`、`auth/`、`authz/` 子目录)| -| `tests/integration/` | 跨模块 + DB 状态测试 | -| `tests/e2e/` | Playwright UI 测试 | -| `tests/protocols-e2e/` | MCP/A2A 协议端到端 | -| `tests/translator/` | 翻译器专用测试 | -| `tests/security/` | 安全回归测试 | -| `tests/load/` | 负载 / 压力测试 | -| `tests/golden-set/` | 翻译器回归参考输出 | -| `tests/helpers/`、`tests/fixtures/`、`tests/manual/`、`tests/scratch_test.mjs` | 支撑 | +| 目录 | 类型 | +| ---------------------------------------------------- | --------------------------------------------------------------------------------- | +| `tests/unit/` | Node 原生测试运行器的单元测试(1821 个文件,含 `api/`、`auth/`、`authz/` 子目录) | +| `tests/integration/` | 跨模块 + DB 状态测试 | +| `tests/e2e/` | Playwright UI 测试 | +| `tests/protocols-e2e/` | MCP/A2A 协议端到端 | +| `tests/translator/` | 翻译器专用测试 | +| `tests/security/` | 安全回归测试 | +| `tests/load/` | 负载 / 压力测试 | +| `tests/golden-set/` | 翻译器回归参考输出 | +| `tests/helpers/`、`tests/fixtures/`、`tests/manual/` | 支撑 | 常用命令: diff --git a/docs/i18n/zh-CN/docs/guides/FEATURES.md b/docs/i18n/zh-CN/docs/guides/FEATURES.md index 29635bf8a5..883bf97a0f 100644 --- a/docs/i18n/zh-CN/docs/guides/FEATURES.md +++ b/docs/i18n/zh-CN/docs/guides/FEATURES.md @@ -22,7 +22,7 @@ v3.7.x → v3.8.0 版本周期引入了零配置自动路由、新的服务商 - 🆕 **Command Code 服务商** (#2199) — 一线注册,含模型目录和配额追踪 - 🆕 **Z.AI 服务商** — 新增免费层服务商,带配额标签 - 🎬 **KIE 媒体扩展** — 扩展目录,包含视频生成模型 -- 🔐 **Windsurf + Devin CLI OAuth 流程** (#2168) — 端到端浏览器登录 +- 🔐 **Devin 认证** — Desktop 导入现有的 Devin API 密钥;CLI 使用本地 `devin auth login` 凭据 - 🆓 **9 个新的免费服务商** — LLM7、Lepton、Kluster、UncloseAI、BazaarLink、Completions、Enally、FreeTheAi、Command Code - 🎯 **Manifest 感知层级路由 W1–W4** — 服务商 Manifest 驱动加权层级选择 - 🎨 **Cursor 完全兼容 OpenAI 格式** — 工具调用、流式传输、会话管理端到端打通 @@ -142,7 +142,7 @@ CLI 智能体发现与管理控制台。以网格形式展示 17 个内置智能 - **协议 Badge** — stdio、HTTP 等 - **自定义智能体** — 通过表单注册任意 CLI 工具(名称、二进制文件、版本命令、启动参数) - **CLI 指纹匹配** — 按服务商切换,匹配原生 CLI 请求签名,降低封禁风险同时保留代理 IP -- **OAuth 支持的智能体** — Windsurf 与 Devin CLI 现使用浏览器 OAuth 流程进行认证(v3.8.0+) +- **本地 Devin 认证** — Devin CLI 使用 `devin auth login`;无需浏览器 OAuth 流程 --- diff --git a/docs/i18n/zh-CN/docs/guides/TROUBLESHOOTING.md b/docs/i18n/zh-CN/docs/guides/TROUBLESHOOTING.md index f5157951e5..ab1ee5a625 100644 --- a/docs/i18n/zh-CN/docs/guides/TROUBLESHOOTING.md +++ b/docs/i18n/zh-CN/docs/guides/TROUBLESHOOTING.md @@ -382,25 +382,6 @@ curl http://localhost:20128/api/monitoring/health v3.8.0 版本特有的问题及其当前临时方案。如果后续补丁中得到了修复,对应条目将更新或移除。 -### Windsurf OAuth 流程报 401 - -**症状:** - -- 从仪表盘完成 Windsurf OAuth 流程时出现 "401 unauthorized" -- OAuth 回调后 Windsurf 服务商卡片持续显示"需要重新连接"状态 - -**原因:** - -- `WINDSURF_FIREBASE_API_KEY` 环境变量缺失或为空 -- `WINDSURF_API_KEY` 配置错误或指向了过期的 Token -- 本地防火墙/代理阻止了 OAuth 回调 - -**修复:** - -1. 验证 `.env` 中已设置 `WINDSURF_FIREBASE_API_KEY` 和 `WINDSURF_API_KEY` -2. 重启 OmniRoute 使新的环境变量生效 -3. 从 **仪表盘 → Providers → Windsurf → Reconnect** 重新运行 OAuth 流程 - ### Devin CLI 认证失败 **症状:** diff --git a/docs/i18n/zh-CN/docs/reference/ENVIRONMENT.md b/docs/i18n/zh-CN/docs/reference/ENVIRONMENT.md index 993c030728..72d0e9af42 100644 --- a/docs/i18n/zh-CN/docs/reference/ENVIRONMENT.md +++ b/docs/i18n/zh-CN/docs/reference/ENVIRONMENT.md @@ -440,7 +440,6 @@ CLI_CLAUDE_BIN=/host-cli/bin/claude | `ANTIGRAVITY_OAUTH_CLIENT_ID` | Antigravity (Google) | 需要匹配的 `_SECRET`。 | | `ANTIGRAVITY_OAUTH_CLIENT_SECRET` | Antigravity (Google) | — | | `GITHUB_OAUTH_CLIENT_ID` | GitHub Copilot | 公共客户端。 | -| `WINDSURF_FIREBASE_API_KEY` | Windsurf / Devin (v3.8) | Windsurf 安全 Token 服务用于刷新的公共 Firebase Web API key。客户端凭证(非密钥)。长期导入 Token 完全跳过此步骤。来源:从 Devin CLI 二进制文件中提取。 | | `WINDSURF_API_KEY` | Windsurf / Devin (v3.8) | 无每个连接凭证时 `open-sse/executors/devin-cli.ts` 使用的 API key 回退。可选。 | | `CLI_DEVIN_BIN` | Devin CLI (v3.8) | Devin CLI 二进制文件(`devin`)的自定义路径。由 `open-sse/executors/devin-cli.ts` 解析。 | | `GITLAB_DUO_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | GitLab Duo 的 OAuth client ID。在 `https://gitlab.com/-/profile/applications` 注册应用,redirect URI 为 `/callback`,权限域为 `api, read_user, openid, profile, email`。回退到 `GITLAB_OAUTH_CLIENT_ID`。 | diff --git a/docs/i18n/zh-CN/llm.txt b/docs/i18n/zh-CN/llm.txt index cdd5e17b39..22c88dc845 100644 --- a/docs/i18n/zh-CN/llm.txt +++ b/docs/i18n/zh-CN/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/i18n/zh-TW/SECURITY.md b/docs/i18n/zh-TW/SECURITY.md index e05040e52b..7adf3d7f9f 100644 --- a/docs/i18n/zh-TW/SECURITY.md +++ b/docs/i18n/zh-TW/SECURITY.md @@ -42,7 +42,7 @@ OmniRoute 採用多層式安全模型: | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | **儀表板登入** | 基於密碼的身分驗證,搭配 JWT Token(HttpOnly Cookie) | | **API 金鑰驗證** | HMAC 簽署金鑰搭配 CRC 驗證 | -| **OAuth 2.0 + PKCE** | 13 個提供者(Claude、Codex、GitHub、Cursor、Antigravity、Gemini、Kimi Coding、Kilo Code、Cline、Kiro、Qoder、Windsurf、GitLab Duo) | +| **OAuth 2.0 + PKCE** | 提供者專用的瀏覽器/裝置 OAuth 在支援時使用 PKCE;僅匯入的 Devin 憑證會單獨處理。 | | **Token 更新** | 自動在 OAuth Token 到期前進行更新 | | **安全 Cookie** | 在 HTTPS 環境下設定 `AUTH_COOKIE_SECURE=true` | | **授權管道** | 路由分類(PUBLIC / CLIENT_API / MANAGEMENT)— 請參閱 `docs/architecture/AUTHZ_GUIDE.md` | diff --git a/docs/i18n/zh-TW/docs/architecture/ARCHITECTURE.md b/docs/i18n/zh-TW/docs/architecture/ARCHITECTURE.md index 8fd293242c..0e9b525be0 100644 --- a/docs/i18n/zh-TW/docs/architecture/ARCHITECTURE.md +++ b/docs/i18n/zh-TW/docs/architecture/ARCHITECTURE.md @@ -66,7 +66,7 @@ OmniRoute 是一個建構於 Next.js 上的本地 AI 路由閘道與儀表板。 - 提示注入防護中介軟體 - 提示壓縮管線,含 Caveman、RTK、堆疊管線、壓縮組合、語言套件與分析功能 - ACP(代理通訊協定)註冊表 -- 模組化 OAuth 提供者(19 個獨立模組,位於 `src/lib/oauth/providers/`) +- 模組化 OAuth 提供者(22 個獨立模組,位於 `src/lib/oauth/providers/`) - 解除安裝/完整解除安裝指令碼 - OAuth 環境修復動作 - WebSocket 橋接,供 OpenAI 相容的 WS 客戶端使用(`/v1/ws`) @@ -319,10 +319,10 @@ flowchart LR - 評估執行器:`src/lib/evals/evalRunner.ts` - 領域狀態持久化:`src/lib/db/domainState.ts` — 備援鏈、預算、成本歷史、鎖定狀態、斷路器的 SQLite CRUD -OAuth 提供者模組(`src/lib/oauth/providers/` 下的 16 個個別檔案): +OAuth 提供者模組(`src/lib/oauth/providers/` 下的 22 個個別檔案): - 註冊表索引:`src/lib/oauth/providers/index.ts` -- 個別提供者:`claude.ts`、`codex.ts`、`gemini.ts`、`antigravity.ts`、`agy.ts`、`qoder.ts`、`qwen.ts`、`kimi-coding.ts`、`github.ts`、`kiro.ts`、`cursor.ts`、`kilocode.ts`、`cline.ts`、`windsurf.ts`、`gitlab-duo.ts`、`trae.ts` +- 個別提供者:`agy.ts`, `antigravity.ts`, `claude.ts`, `cline.ts`, `codebuddy-cn.ts`, `codex.ts`, `cursor.ts`, `devin-desktop.ts`, `ghe-copilot.ts`, `github.ts`, `gitlab-duo.ts`, `grok-cli-oauth.ts`, `grok-cli.ts`, `kilocode.ts`, `kimi-coding.ts`, `kiro.ts`, `qoder.ts`, `raycast.ts`, `trae.ts`, `xai-oauth.ts`, `zed-hosted.ts`, `zed.ts` - 薄包裝層:`src/lib/oauth/providers.ts` — 從個別模組重新匯出 ## 5) 嵌入式服務(v3.8.4) @@ -902,7 +902,7 @@ flowchart LR | `PuterExecutor` | Puter | 基於瀏覽器的提供者整合 | | `QoderExecutor` | Qoder AI | PAT 與 OAuth 支援、多模型免費方案 | | `VertexExecutor` | Google Vertex AI | 服務帳戶驗證、基於區域的端點 | -| `WindsurfExecutor` | Windsurf(Codeium) | Codeium OAuth + 工作階段令牌刷新 | +| `DevinDesktopExecutor` | Devin Desktop | 匯入的 API 金鑰 + Connect-protobuf 聊天串流 | 所有其他提供者(包括自訂相容節點)使用 `DefaultExecutor`。 @@ -955,9 +955,9 @@ flowchart LR | GLMT(預設) | claude | API 金鑰 | ✅ | ✅ | ❌ | ⚠️ 每次請求 | | Kimi Coding | openai | OAuth / API 金鑰 | ✅ | ✅ | ✅ | ❌ | | KIE | openai | API 金鑰 | ✅ | ✅ | ❌ | ❌ | -| Windsurf | openai | OAuth(Codeium) | ✅ | ✅ | ✅ | ⚠️ 每次請求 | +| Devin Desktop | openai | 匯入的 API 金鑰 | ✅ (Connect→SSE) | ✅ | ❌ | ⚠️ 每次請求 | | GitLab Duo | openai | OAuth(GitLab) | ✅ | ✅ | ✅ | ❌ | -| Devin CLI | openai | OAuth | ✅ | ✅ | ✅ | ✅ 任務 API | +| Devin CLI | openai | 本機 CLI 登入 | ✅ | ✅ | ❌ | ✅ 任務 API | | Codex Cloud | openai-responses | OAuth | ✅ | ❌ | ✅ | ✅ 速率限制 | | Jules | openai | OAuth | ✅ | ✅ | ✅ | ✅ 任務 API | | AgentRouter | openai | API 金鑰 | ✅ | ✅ | ❌ | ❌ | diff --git a/docs/i18n/zh-TW/docs/architecture/CODEBASE_DOCUMENTATION.md b/docs/i18n/zh-TW/docs/architecture/CODEBASE_DOCUMENTATION.md index 3c2ed68284..7aaf870691 100644 --- a/docs/i18n/zh-TW/docs/architecture/CODEBASE_DOCUMENTATION.md +++ b/docs/i18n/zh-TW/docs/architecture/CODEBASE_DOCUMENTATION.md @@ -627,17 +627,17 @@ bin/ ## 7. `tests/` -| 目錄 | 類型 | -| ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------- | -| `tests/unit/` | 透過 Node 原生測試執行器的單元測試(1821 個檔案,加上 `api/`、`auth/`、`authz/` 子目錄) | -| `tests/integration/` | 跨模組 + 資料庫狀態測試 | -| `tests/e2e/` | Playwright UI 測試 | -| `tests/protocols-e2e/` | MCP/A2A 協定 e2e 測試 | -| `tests/translator/` | 翻譯器專用測試 | -| `tests/security/` | 安全性回歸測試 | -| `tests/load/` | 負載/壓力測試 | -| `tests/golden-set/` | 翻譯器回歸測試的參考輸出 | -| `tests/helpers/`、`tests/fixtures/`、`tests/manual/`、`tests/scratch_test.mjs` | 支援 | +| 目錄 | 類型 | +| ---------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `tests/unit/` | 透過 Node 原生測試執行器的單元測試(1821 個檔案,加上 `api/`、`auth/`、`authz/` 子目錄) | +| `tests/integration/` | 跨模組 + 資料庫狀態測試 | +| `tests/e2e/` | Playwright UI 測試 | +| `tests/protocols-e2e/` | MCP/A2A 協定 e2e 測試 | +| `tests/translator/` | 翻譯器專用測試 | +| `tests/security/` | 安全性回歸測試 | +| `tests/load/` | 負載/壓力測試 | +| `tests/golden-set/` | 翻譯器回歸測試的參考輸出 | +| `tests/helpers/`、`tests/fixtures/`、`tests/manual/` | 支援 | 常用命令: diff --git a/docs/i18n/zh-TW/docs/guides/FEATURES.md b/docs/i18n/zh-TW/docs/guides/FEATURES.md index f78269ae30..09555b39fc 100644 --- a/docs/i18n/zh-TW/docs/guides/FEATURES.md +++ b/docs/i18n/zh-TW/docs/guides/FEATURES.md @@ -22,7 +22,7 @@ v3.7.x → v3.8.0 版本週期新增了零設定自動路由、新提供者、OA - 🆕 **Command Code 提供者**(#2199)— 一級支援,含模型目錄及配額追蹤 - 🆕 **Z.AI 提供者** — 新增免費方案提供者,附配額標籤 - 🎬 **KIE 媒體擴展** — 擴充目錄,納入影片生成模型 -- 🔐 **Windsurf + Devin CLI OAuth 流程**(#2168)— 端到端瀏覽器登入 +- 🔐 **Devin 驗證** — Desktop 匯入現有的 Devin API 金鑰;CLI 使用本機 `devin auth login` 憑證 - 🆓 **8 個新的免費提供者** — LLM7、Lepton、UncloseAI、BazaarLink、Completions、Enally、FreeTheAi、Command Code - 🎯 **清單感知分層路由 W1–W4** — 提供者清單驅動加權層級選擇 - 🎨 **Cursor 完整 OpenAI 相容性** — 工具呼叫、串流、階段管理端到端 @@ -142,7 +142,7 @@ OpenRouter 連線可在「進階設定」中儲存各連線的 `preset`。設定 - **協定徽章** — stdio、HTTP 等 - **自訂代理** — 透過表單註冊任何 CLI 工具(名稱、二進位檔、版本指令、啟動參數) - **CLI 指紋比對** — 各提供者開關,用於比對原生 CLI 請求特徵,降低被封風險同時保留代理 IP -- **OAuth 支援代理** — Windsurf 與 Devin CLI 現使用瀏覽器 OAuth 流程進行驗證(v3.8.0+) +- **本機 Devin 驗證** — Devin CLI 使用 `devin auth login`;不需要瀏覽器 OAuth 流程 --- diff --git a/docs/i18n/zh-TW/docs/guides/TROUBLESHOOTING.md b/docs/i18n/zh-TW/docs/guides/TROUBLESHOOTING.md index b9a69d8e08..39a1e38812 100644 --- a/docs/i18n/zh-TW/docs/guides/TROUBLESHOOTING.md +++ b/docs/i18n/zh-TW/docs/guides/TROUBLESHOOTING.md @@ -432,25 +432,6 @@ curl http://localhost:20128/api/monitoring/health v3.8.0 版本特有的問題及其目前的解決方法。如果後續修補版本中提供了修復,本條目將會更新或移除。 -### Windsurf OAuth 流程失敗,顯示 401 - -**症狀:** - -- 從儀表板完成 Windsurf OAuth 流程時出現「401 unauthorized」 -- 回呼後 Windsurf 提供者卡片仍停留在「需要重新連線」狀態 - -**原因:** - -- `WINDSURF_FIREBASE_API_KEY` 環境變數遺失或為空 -- `WINDSURF_API_KEY` 設定錯誤或指向過期的 Token -- 本地防火牆/Proxy 阻擋了 OAuth 回呼 - -**修復方式:** - -1. 確認 `.env` 中已設定 `WINDSURF_FIREBASE_API_KEY` 和 `WINDSURF_API_KEY` -2. 重新啟動 OmniRoute 以載入新的環境變數值 -3. 從**儀表板 → 提供者 → Windsurf → 重新連線**重新執行 OAuth 流程 - ### Devin CLI 認證失敗 **症狀:** diff --git a/docs/i18n/zh-TW/llm.txt b/docs/i18n/zh-TW/llm.txt index e5a59d9617..13149ea8d1 100644 --- a/docs/i18n/zh-TW/llm.txt +++ b/docs/i18n/zh-TW/llm.txt @@ -4,7 +4,8 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. + +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -12,13 +13,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -26,7 +27,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -45,7 +46,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -98,7 +99,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -169,7 +170,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -186,7 +187,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -212,11 +213,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -228,7 +229,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -267,8 +268,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -279,15 +280,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -316,7 +317,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -346,13 +347,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -373,7 +374,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -385,7 +386,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -439,7 +440,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -447,7 +448,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -480,10 +481,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/docs/issues/plugin-browser-pool-proposal.md b/docs/issues/plugin-browser-pool-proposal.md deleted file mode 100644 index f462fa325c..0000000000 --- a/docs/issues/plugin-browser-pool-proposal.md +++ /dev/null @@ -1,168 +0,0 @@ -# [Feature] Pluginization Phase 1: Extract Playwright/CloakBrowser Browser Pool - -**Labels:** `enhancement`, `plugin`, `architecture` - -## Problem / Use Case - -OmniRoute's Playwright/CloakBrowser dependency is a **large, non-essential dependency** (~1500+ LOC across 22 source files + ~35 test files) pulled into every installation regardless of whether the user needs browser-backed chat. Users who run OmniRoute purely as a proxy/router (the majority) pay for: - -- **Disk space**: ~200+ MB from Playwright browsers + Chromium binaries (installed via `npx playwright install`) -- **Build complexity**: Turbopack must handle the `cloakbrowser` package -- **Bundle size**: All browser-pool code is compiled into the main codebase -- **Surface area**: 7 files with direct Playwright imports (4 dynamic, 3 static type imports) -- **CI/cache impact**: Playwright installs in CI pipelines even when not needed - -Currently, only environment variables (`OMNIROUTE_BROWSER_POOL=off`) gate _runtime_ execution — the code still loads, imports get resolved, and Playwright must be installed. - -## Proposed Solution - -Extract the Playwright/CloakBrowser browser pool into an **optional package** loaded via dynamic `import()` at runtime, following the existing pattern used for `cloakbrowser` (computed-string dynamic import to avoid resolution). The core retains thin interface stubs that gracefully degrade when the optional package is absent. - -### Architecture - -``` -open-sse/ - interfaces/ - browserPool.ts ← NEW: BrowserPoolProvider interface + types - services/ - browserPool.ts ← BECOMES: thin stub, delegates to optional package - browserBackedChat.ts ← BECOMES: thin stub, delegates to optional package - grokClearance.ts ← BECOMES: thin stub - -packages/browser-pool/ ← NEW: optional package - index.ts ← exports BrowserPoolProvider implementation - src/ - browserPool.ts ← extracted from open-sse/services/browserPool.ts - browserBackedChat.ts ← extracted from open-sse/services/browserBackedChat.ts - grokClearance.ts ← extracted from open-sse/services/grokClearance.ts - claudeTurnstileSolver.ts ← extracted (tightly coupled, moved as-is) - inAppLoginService.ts ← extracted (own Playwright instance, separate lifecycle) - package.json - tsconfig.json -``` - -### Phase Breakdown - -**Phase 1 — Core pool extraction (this issue):** - -1. Define `BrowserPoolProvider` interface in `packages/browser-pool/src/interfaces.ts` -2. Extract `browserPool.ts` (~502 LOC), `browserBackedChat.ts` (~270 LOC), `grokClearance.ts` (~84 LOC) into `packages/browser-pool/` -3. Replace core files with thin stubs that try `import('../../../packages/browser-pool')` with graceful fallback -4. Keep `poolTools.ts` importing the core stub (unchanged from consumer perspective) -5. Make Playwright an optional dependency (not in root `package.json`) -6. Typecheck core passes with and without the package installed -7. All existing tests pass (with plugin installed) - -**Phase 2 — Turnstile solver extraction (future):** - -- Extract `claudeTurnstileSolver.ts` (~212 LOC) — has static Playwright type imports, needs type interface -- Move `claudeWebAutoRefresh.ts` (depends on turnstile solver) - -**Phase 3 — Standalone Playwright instances (future):** - -- Extract `inAppLoginService.ts` (~257 LOC) -- Refactor `gemini-web.ts` executor's own Playwright path (~553 LOC) - -### Interface Design (Phase 1) - -```typescript -// packages/browser-pool/src/interfaces.ts -export interface BrowserPoolProvider { - acquireBrowserContext(options?: BrowserPoolContextOptions): Promise; - releaseBrowserContext(ctx: PooledContext): Promise; - getBrowserPoolMetrics(): BrowserPoolMetrics; - shutdownPool(): Promise; - isPoolEnabled(): boolean; - openPage(url: string, ctx?: PooledContext): Promise<{ page: any }>; - readPageResponseBody(page: any): Promise; - getBrowserPoolStatus(): BrowserPoolStatus; -} -``` - -### Stub Pattern - -```typescript -// open-sse/services/browserPool.ts — thin stub -let _impl: BrowserPoolProvider | null = null; - -async function getImpl(): Promise { - if (!_impl) { - try { - const { createBrowserPoolProvider } = await import("../../packages/browser-pool"); - _impl = createBrowserPoolProvider(); - } catch { - // Graceful fallback — disabled - _impl = createNullBrowserPoolProvider(); - } - } - return _impl; -} - -export async function acquireBrowserContext(...args) { - return (await getImpl()).acquireBrowserContext(...args); -} -``` - -## Alternatives Considered - -1. **Existing hook-based PluginManager**: Rejected. The current PluginManager operates via child-process IPC and request-pipeline hooks (`onRequest`, `onResponse`, `onError`). A browser pool is an in-process runtime service with composable lifecycle — not a request pipeline hook. Forcing it through IPC would add ~50ms+ per browser operation and break the existing synchronous pool pattern. - -2. **Keep as-is, just lazy-load the import**: Minimal improvement — the dependency tree still references Playwright types, requiring it to be available. Doesn't reduce bundle size or simplify CI. - -3. **Replace Playwright with a protocol-level abstraction**: Too ambitious and would change the behavior of the pool. Playwright's CDP capabilities (context isolation, cookies, screenshots) are fundamental to how the pool works. - -4. **Monorepo workspace**: Too heavy for this scope. A simple extracted package avoids workspace tooling changes. - -## Acceptance Criteria - -1. `packages/browser-pool/src/interfaces.ts` exists and exports `BrowserPoolProvider`, `PooledContext`, `BrowserPoolMetrics` types -2. `open-sse/services/browserPool.ts` becomes a thin stub with zero Playwright imports -3. `packages/browser-pool/` contains all extracted implementation (browserPool, browserBackedChat, grokClearance) -4. Core typecheck (`npm run typecheck:core`) passes with 0 errors **without** the browser-pool package installed -5. Core typecheck passes with the package installed -6. All existing tests pass when the browser-pool package is installed -7. `poolTools.ts` `omniroute_browser_pool_status` tool works end-to-end when the package is installed -8. Graceful degradation: when the package is absent, `getBrowserPoolStatus()` returns `{ enabled: false }` without crashing -9. Playwright is moved from root `dependencies` to optional/peer in the extracted package -10. Documentation updated in `docs/reference/ENVIRONMENT.md` - -## Expected Test Plan - -- Unit tests for the stub fallback path (simulate import failure, verify graceful degradation) -- Unit tests moved to the extracted package -- Verify `tests/unit/browser-pool-optional-import.test.ts` passes (still validates cloakbrowser isn't statically resolved) -- Verify `tests/unit/browserPool-proxy.test.ts` passes -- Verify `tests/unit/browserBackedChat-matcher.test.ts` passes -- E2E: `npm run typecheck:core` without the package installed → 0 errors -- E2E: `npm run test:coverage` (with package installed) → existing coverage gates pass - -## Additional Context - -Current dependency graph (simplified): - -``` -open-sse/services/browserPool.ts (502 LOC, singleton Playwright/CloakBrowser pool) - ├── open-sse/services/browserBackedChat.ts (270 LOC, browser-backed chat runner) - │ ├── open-sse/executors/claude-web.ts (imports tryBackedChat) - │ └── open-sse/executors/duckduckgo-web.ts (imports tryBackedChat) - ├── open-sse/services/grokClearance.ts (84 LOC, CF clearance via browser) - └── open-sse/mcp-server/tools/poolTools.ts (imports getBrowserPoolMetrics) - -Standalone Playwright users (separate, future phases): - ├── open-sse/services/claudeTurnstileSolver.ts (212 LOC, static Playwright type imports) - ├── open-sse/services/inAppLoginService.ts (257 LOC, own browser lifecycle) - └── open-sse/executors/gemini-web.ts (553 LOC, private Playwright path) - -Kill switches: OMNIROUTE_BROWSER_POOL, WEB_COOKIE_USE_BROWSER (both env vars) -``` - -Total extracted in Phase 1: ~856 LOC, 3 files. -Total deferred to Phase 2/3: ~1022 LOC, 4 files. - -This is the first pluginization step. Future targets (separate issues): memory/compression plugin, additional provider support extraction. - -## Related References - -- PR #8219 (model catalog connection filter + cache TTL) — same baseline `release/v3.8.49` -- `docs/reference/ENVIRONMENT.md` — browser pool env vars documentation -- Plugin system docs at `docs/PLUGINS.md` — existing PluginManager (not used here, referenced for contrast) diff --git a/docs/dev/CONTRIBUTION_GOLDEN_PATH.md b/docs/ops/CONTRIBUTION_GOLDEN_PATH.md similarity index 98% rename from docs/dev/CONTRIBUTION_GOLDEN_PATH.md rename to docs/ops/CONTRIBUTION_GOLDEN_PATH.md index 76168e7c56..8a404963d7 100644 --- a/docs/dev/CONTRIBUTION_GOLDEN_PATH.md +++ b/docs/ops/CONTRIBUTION_GOLDEN_PATH.md @@ -13,7 +13,7 @@ change type to its contracts, focused checks, and CI coverage. 1. **Choose the base before editing.** Find the highest active `release/v*` branch and branch from its tip. Target that branch, not `main`. If a release freeze is active, do not target the frozen branch; use the next active cycle described in - [Branching & Release Model](../ops/BRANCHING_MODEL.md). + [Branching & Release Model](BRANCHING_MODEL.md). 2. **Name the contracts.** Identify every catalog, schema, generated artifact, public API, or user interface that the change affects. The table below gives the minimum starting set. 3. **Write or update focused tests.** Production changes in `src/`, `open-sse/`, `electron/`, or @@ -225,5 +225,5 @@ Before requesting review: - Never weaken assertions or drop required tests merely to match a moved base. For release-freeze and retargeting rules, use -[Branching & Release Model](../ops/BRANCHING_MODEL.md). For the complete CI inventory, use +[Branching & Release Model](BRANCHING_MODEL.md). For the complete CI inventory, use [Quality Gates Reference](../architecture/QUALITY_GATES.md). diff --git a/docs/ops/MATURITY_REEVAL.md b/docs/ops/MATURITY_REEVAL.md deleted file mode 100644 index ca5ff658e1..0000000000 --- a/docs/ops/MATURITY_REEVAL.md +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: "Quality-Gate Maturity Re-evaluation (Fase 9)" ---- - -# Maturity Re-evaluation — post-Waves 0–3 (Quality-Gate v2) - -> **What this document is.** A re-measurement of the quality-gates system maturity -> **after** Waves 0–3 of the Quality-Gate v2 program, compared to the baseline recorded in -> [`QUALITY_GATE_PLAYBOOK.md`](./QUALITY_GATE_PLAYBOOK.md) (2026-06-16). Measures what changed, -> against DSOMM L5 / OpenSSF Scorecard 9 / SLSA L3, separating what is **CI-measurable** -> (already delivered / deliverable by code) from what is **process/owner** (organization settings). -> -> **Date:** 2026-06-30. Generated from the actual state of the repository, not from memory. -> **Benchmarks:** OWASP DSOMM · OpenSSF Scorecard · SLSA · SonarQube "Clean as You Code". - ---- - -## 1. Updated verdict - -**Overall grade: A− → A ("Advanced", top ~5%).** The **two biggest structural weaknesses** -of the 06-16 baseline — the _fast-gates gap_ and the _mutation-score-not-a-ratchet_ — have been **closed**. -The residual gaps for "absolute maximum" are almost all **owner/infra-gated** (branch-protection, -SLSA L3, CodeQL advanced); the code side of the program is essentially complete. - -| Reference framework | Baseline 06-16 | Now 06-30 | Movement | Evidence | -| --------------------------------- | ------------------------------ | ----------------------------------------------------------------- | -------- | --------------------------------------------------------------------- | -| **OWASP DSOMM** (5 levels) | L3→L4 | **L4** in _Test Intensity_ and _Static Depth_; solid L3 in others | ▲ | blocking mutation-ratchet + deterministic suite at merge gate | -| **OpenSSF Scorecard** | ~7–8/10 | ~7–8/10 (unchanged — gate is the **owner**) | = | missing Branch-Protection on `main` (owner setting) + actions pinning | -| **SLSA** | L2→L3 | **L2** (approaching L3) | = | missing hermetic/reproducible builder (infra/owner) | -| **SonarQube "Clean as You Code"** | Aligned with caveat | Aligned with caveat | = | _sprawl_ caveat (~46+ gates) persists — ROI review pending | -| **Quality-Ratchet pattern** | Exemplar | **Exemplar+** | ▲ | new `dedicatedGate` for `mutationScore` (direction up) | -| **Mutation testing** | "Almost there" (not a ratchet) | **Active ratchet** | ▲▲ | `check-mutation-ratchet.mjs` + seeded baseline + blocking nightly job | - ---- - -## 2. Deltas since 2026-06-16 (what Waves 0–3 delivered) - -### 2.1 🔴→✅ Fast-gates gap CLOSED (was structural weakness #1) - -The baseline warned: `quality.yml` (PR→`release/**`) ran **only filesystem gates** — no -typecheck, tests, or build —, so deterministic regressions only exploded on PR→`main`. -**Today** `.github/workflows/quality.yml` runs, in the _Fast Quality Gates_ job: `typecheck:core`, -**blocking impacted unit tests (TIA) with fail-safe to the full suite**, the -vitest fast-path, and unit shards. The gate now runs **where the merge happens** (shift-left), -exactly the cross-cutting principle the playbook prescribes. - -### 2.2 🟠→✅ Mutation score became a RATCHET (was weakness #3 / P0 #1) - -The strongest antidote against coverage-gaming was **advisory**. **Today**: - -- `scripts/check/check-mutation-ratchet.mjs` (advisory by default, `--ratchet` blocking, graceful skip); -- `config/quality/quality-baseline.json` has seeded `mutationScore.` entries (`direction: up`, `dedicatedGate`); -- `.github/workflows/nightly-mutation.yml` has the **"Mutation score ratchet (blocking)"** job that unifies batch reports and ratchets merged per-module scores. - -Result: the per-module mutation score **cannot regress** — coverage has ceased to be a vanity metric. - -### 2.3 ✅ Quick-win gates (Phase 6A/7) delivered - -- **a11y axe-core "fake-green" fixed:** `@axe-core/playwright` in devDeps; `a11y.spec.ts` with conditional `REQUIRE_AXE` skip; job in `nightly-resilience.yml`. -- **complexity scans `bin/`+`electron`:** `check-complexity.mjs` includes those directories in `ESLINT_ARGS`. -- **tracked-artifacts in pre-commit + pre-push:** `.husky/pre-commit` + `pre-push` block accidentally tracked artifacts. - ---- - -## 3. The 12 categories — status (delta-focused) - -| # | Category | Status 06-30 | -| --- | -------------------------------- | ---------------------------------------------------------------------------------------- | -| 1 | Style & formatting | ✅ unchanged (Prettier+ESLint lint-staged) | -| 2 | Types | ✅ **reinforced** — `typecheck:core` now also in the PR→release gate | -| 3 | Tests (intensity) | ✅ **reinforced** — mutation testing became a ratchet; deterministic suite at merge gate | -| 4 | Test policy (anti-gaming) | ✅ unchanged (pr-test-policy/test-masking/pr-evidence) | -| 5 | Complexity & health | ✅ **reinforced** — complexity scans bin/electron | -| 6 | Static security (SAST+secrets) | 🟡 CodeQL default-setup (advanced = owner); semgrep cloud not versioned | -| 7 | Supply-chain (deps) | ✅ unchanged (osv/audit/Trivy/Dependabot + allowlist) | -| 8 | Supply-chain (build/release) | 🟡 SLSA L2 (L3 = hermetic builder, owner/infra) | -| 9 | Contracts & API | 🟡 oasdiff/osv advisory (candidates for blocking-with-scope, P1) | -| 10 | Docs & i18n (anti-rot) | ✅ **reinforced** — `fabricated-docs --strict` blocking (exit 0 verified) | -| 11 | Anti-hallucination / consistency | ✅ unchanged (known-symbols/fetch-targets/docs-symbols/db-rules) | -| 12 | Resilience & domain | ✅ unchanged (chaos/heap/k6/promptfoo/garak nightly) | - ---- - -## 4. Residual gaps for "absolute maximum" - -### 4.1 CI-measurable / deliverable by code (this program's backlog) - -- **P1 — osv/oasdiff → blocking with the right scope:** osv only `CRITICAL`+fixable (two-step like Trivy); oasdiff blocks contract-breaking changes. -- **P1 — `require-tighten` blocking (end of cycle):** locks metric gains (prevents loosening the baseline without recording). -- **P1/P2 — ROI review / gate sprawl:** consolidate doc-sync micro-gates; measure per-gate timing in `ci-summary` (combats fatigue — SonarQube/DORA caveat). Deferred ROI merges (unified complexity; unified `/api` anti-hallucination) fall here. -- **P2 — CodeQL config committed + semgrep versioned:** more control/reproducibility. - -### 4.2 Process / owner (CI cannot move — organization settings) - -- **Branch-protection on `main`** (raises Scorecard, closes the DSOMM gap). See [`BRANCH_PROTECTION_MAIN.md`](./BRANCH_PROTECTION_MAIN.md). -- **CodeQL Default → Advanced setup.** -- **SLSA L3** — hermetic/reproducible builder (GitHub SLSA generator). Stretch (diminishing returns). - -### 4.3 Explicitly out of scope - -- **DSOMM L5** is largely **org-level / process** (not CI-encodable). -- **SLSA L4** (bit-for-bit reproducibility) is a declared stretch goal. - ---- - -## 5. Deferred / removed items (tail housekeeping) - -- **`semcheck.yaml` (LLM layer for semantic drift docs↔code) — REMOVED.** It was **orphaned** - (no workflow/script invoked it) and had stale counts in the rules. Deterministic coverage - already exists (`check:fabricated-docs --strict` + `check:docs-counts-sync` + `check:docs-symbols`), - and the _gate sprawl_ caveat discourages adding an LLM advisory gate with recurring cost. - It may be re-introduced in the future as an opt-in nightly job if semantic drift becomes a real problem. -- **`agent-lsp` scaffold — DEFERRED / opt-in not enabled.** Exists as a mention in docs - (`docs/architecture/QUALITY_GATES.md`, CHANGELOG) but **without wiring** and without `.mcp.json.example` - in the repo. Remains as a documented opt-in scaffold; it is not an active gate nor a maturity gap. diff --git a/docs/ops/QUALITY_GATE_PLAYBOOK.md b/docs/ops/QUALITY_GATE_PLAYBOOK.md index 040b6f3a8e..0e46849976 100644 --- a/docs/ops/QUALITY_GATE_PLAYBOOK.md +++ b/docs/ops/QUALITY_GATE_PLAYBOOK.md @@ -11,6 +11,10 @@ title: "Quality Gate Playbook" > > Benchmarks: OWASP DSOMM · OpenSSF Scorecard · SLSA · SonarQube "Clean as You Code" · > Quality-Ratchet pattern · DORA 2024 · OWASP LLM Top 10 (2025) · mutation-testing best practices. +> +> For the gate-by-gate authoritative reference (what each gate validates, CI job, ratchet vs +> policy, blocking vs advisory), see the +> [Quality Gates Reference](../architecture/QUALITY_GATES.md). --- diff --git a/docs/redis-production-config.md b/docs/ops/REDIS_PRODUCTION_CONFIG.md similarity index 100% rename from docs/redis-production-config.md rename to docs/ops/REDIS_PRODUCTION_CONFIG.md diff --git a/docs/ops/meta.json b/docs/ops/meta.json index d02f8e2677..12fe625ea6 100644 --- a/docs/ops/meta.json +++ b/docs/ops/meta.json @@ -3,11 +3,21 @@ "pages": [ "RELEASE_CHECKLIST", "RELEASE_GREEN", + "BRANCHING_MODEL", + "BRANCH_PROTECTION_MAIN", + "MERGE_TRAIN", + "HOMOLOGATION", + "QUALITY_GATE_PLAYBOOK", + "RUNNER_BOX", "VM_DEPLOYMENT_GUIDE", "FLY_IO_DEPLOYMENT_GUIDE", "TUNNELS_GUIDE", "PROXY_GUIDE", + "DATABASE_GUIDE", "SQLITE_RUNTIME", + "REDIS_PRODUCTION_CONFIG", + "MONITORING_GUIDE", + "CONTRIBUTION_GOLDEN_PATH", "COVERAGE_PLAN" ] } diff --git a/docs/proposals/TELEGRAM-MINIAPP.md b/docs/proposals/TELEGRAM-MINIAPP.md deleted file mode 100644 index 884e5c4959..0000000000 --- a/docs/proposals/TELEGRAM-MINIAPP.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: "Feasibility — Telegram Mini App Integration" -version: 3.8.49 -lastUpdated: 2026-08-08 ---- - -# Telegram Mini App Integration — Feasibility Analysis - -**Status: FEASIBLE with moderate effort (estimated 2–4 dev-days for a working slice)** - -## 1. What "Telegram Mini App" means here - -A Telegram Mini App is an iframe-hosted web app opened inside Telegram (via -inline buttons / bot menu buttons) that talks to a bot backend through the -[Telegram WebApp SDK](https://core.telegram.org/bots/webapps). For OmniRoute -the natural shape is: - -- **Bot backend** (new): receives Telegram updates (webhook), validates the - Mini App's `initData` signature, and proxies chat requests to OmniRoute's - existing OpenAI-compatible `/v1/chat/completions` surface. -- **Mini App frontend** (new): a small chat UI served by OmniRoute (Next.js - route or `public/` static bundle), using the Telegram WebApp JS SDK. - -## 2. Current state of the codebase (verified against `main` @ 918fba5e3) - -### Already present — outbound notifications only - -| Piece | Location | What it does | -| ---------------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------- | -| Telegram webhook integration | `src/lib/webhooks/integrations/telegram.ts` | Builds `sendMessage` payloads for **outbound** gateway events (model, provider, latency, error) | -| Webhook dispatcher | `src/lib/webhookDispatcher.ts` | Routes by kind; decrypts `botToken` from DB metadata for telegram | -| Webhook kinds | `src/lib/db/webhooks.ts` | `slack \| telegram \| discord \| custom` | -| Webhook CRUD + test | `src/app/api/webhooks/*` | Create/update/test; telegram kind skips `url` (uses bot token + chat_id) | -| Bot token validation | `telegram.ts:18` | `BOT_TOKEN_RE = /^\d+:[A-Za-z0-9_-]{35,}$/` | -| Encryption requirement | `webhooks/route.ts:77` | Telegram webhooks require DB encryption enabled (bot tokens stored at rest) | - -### Missing — what a Mini App needs that does not exist yet - -| Gap | Detail | -| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Inbound Bot API listener** | No `setWebhook` registration, no `/bot/getUpdates` polling, no update handling anywhere. Only the `sendMessage` direction exists. | -| **WebApp `initData` validation** | No HMAC-SHA256 check of `initData` against the bot token (`WebAppData` hash validation from the Bot API docs). | -| **Telegram bot library** | `package.json` has no `telegraf`/`grammy`/`telegram-bot-api` dependency. Would need to add one or hand-roll the (small) HMAC + fetch logic. | -| **Mini App hosting surface** | `public/` exists (static assets) and Next.js routes exist; no `/miniapp` route or static bundle yet. | -| **Session → API key mapping** | Mini App users need to authenticate to `/v1/chat/completions`. Two options: per-user generated OmniRoute API keys (via `src/lib/db/apiKeys`) or a bot-side proxy that injects a shared key. | - -## 3. Constraints - -### 3.1 Architectural - -- **No existing inbound-bot layer.** The webhook system is strictly - event→outbound. A Mini App needs a _new_ Bot API webhook endpoint - (`POST /api/telegram/webhook/` or a dedicated route) plus - update dispatch. This is additive — no conflicts with the existing - `webhooks/` subsystem, but the two must not share the `botToken` storage - semantics blindly (webhooks store bot tokens for _outbound_; the Mini App - needs the same token for _inbound_ signature checks — same token, new use). -- **Public HTTPS required.** Telegram only delivers updates to an HTTPS - endpoint with a valid cert. Self-hosted OmniRoute behind Tailscale/ngrok - needs a public tunnel or Cloudflare Tunnel for the webhook path - (`TELEGRAM_WEBHOOK_URL`-style env). The dashboard can render the current - public origin (`OMNIROUTE_PUBLIC_BASE_URL`) but no webhook registration - helper exists. -- **Encryption gate.** `webhooks/route.ts:77` already refuses telegram - kinds without DB encryption. The Mini App bot token has the same - sensitivity (it _is_ the HMAC secret for initData validation) — same gate - applies, which is a _good_ constraint (no plaintext tokens). - -### 3.2 Telegram platform - -- **initData is the only trust anchor.** Mini App auth = verify - `hash` field of `initData` using HMAC-SHA256(key = SHA256(bot_token), - data = sorted `key=value` pairs minus `hash`). Must be implemented - server-side; never trust the client. -- **No inbound push to arbitrary users.** Telegram bots cannot initiate - conversations. The Mini App works for users who _already_ have the bot — - or you add a `/start` command handler + deep-link (`t.me/bot?startapp=`). -- **Rate limits.** Bot API ~30 msg/s per bot, 20 msg/min per chat group. - Chat responses via `sendMessage`/`answerWebAppQuery` are fine at gateway - scale, but streaming must be emulated (send progressive edits or chunked - messages) — no native SSE into Telegram. -- **WebApp SDK quirks.** `Telegram.WebApp.ready()` must be called; theme - params come from the SDK; the mini app is sandboxed iframe (no - `window.open` to external, clipboard limited). For a chat UI this is fine. - -### 3.3 Security / policy - -- **Per-user key issuance is the clean model.** Rather than exposing the - admin's own API keys, mint a scoped OmniRoute API key per Telegram user - (`apiKeys` table + `isModelAllowedForKey` policy), or proxy with a single - gateway key and map `user_id` → account. Recommendation: per-user keys so - existing rate-limit / model-allowlist / policy code applies unchanged. -- **initData expiry.** `auth_date` in initData must be checked (Telegram - recommends < 24h; short TTLs for chat flows). -- **Secret handling.** Bot token must stay in the encrypted DB / env — - mirror the existing `isEncryptionEnabled()` gate. - -## 4. Required next steps (implementation plan) - -### Phase 0 — Spike (½–1 dev-day) - -1. Add `grammy` or `telegraf` (or ~60 lines of hand-rolled HMAC + fetch). -2. Implement `src/lib/telegram/initData.ts` — `verifyInitData(initData, botToken)`. -3. Stand up a throwaway `POST /api/telegram/miniapp/webhook` route behind - `TELEGRAM_WEBHOOK_SECRET`; register via `setWebhook` once, locally. - -### Phase 1 — Minimal chat slice (1–2 dev-days) - -1. **Webhook endpoint** `POST /api/telegram/bot/update` (or - `/api/telegram/miniapp/update`): parse Update, verify initData, dispatch. -2. **Command handler**: `/start` → reply with deep link - `https://t.me/?startapp=`; `startapp` param carries a - one-time token that maps to a generated OmniRoute API key. -3. **Chat proxy**: map `initData.user.id` → API key → call - `handleChat` (same path as `/v1/chat/completions`) → reply via - `sendMessage` (non-stream) or chunked edits (fake streaming). -4. **Mini App page**: `src/app/(dashboard)/miniapp/page.tsx` (or static - bundle in `public/miniapp/`) — Telegram WebApp SDK init + minimal chat - UI posting to the bot webhook. -5. **Config**: `TELEGRAM_BOT_TOKEN` env (or reuse webhook metadata), - `OMNIROUTE_PUBLIC_BASE_URL` for webhook URL display; doc in - `.env.example` + `ENVIRONMENT.md` (env-doc-sync check). - -### Phase 2 — Production hardening (1 dev-day) - -- Streaming emulation (message edits), error/backpressure mapping to Bot API - limits, per-user key revocation (`/logout` command → revoke API key), - usage/rate-limit surfacing (reuse `enforceApiKeyPolicy`), webhook - registration helper in dashboard settings, i18n for the mini app UI. - -## 5. Verdict - -**Feasible.** The gateway already exposes the exact API a Mini App chat -needs (`/v1/chat/completions` with per-key policy), and the outbound -Telegram webhook shows the team already handles bot tokens safely -(encryption gate + token format validation). The genuinely new surface is -small: an inbound update webhook + initData HMAC verification + a thin -chat proxy + a static Mini App page. No changes to the core SSE/relay -pipeline are required. - -**Primary risks:** (1) public HTTPS requirement for the webhook (tunnel -needed on self-hosted installs), (2) no native streaming to Telegram -(UX tradeoff), (3) initData trust must be strictly server-side. diff --git a/docs/providers/CHATGPT_WEB.md b/docs/providers/CHATGPT_WEB.md index 188f626712..fc78731766 100644 --- a/docs/providers/CHATGPT_WEB.md +++ b/docs/providers/CHATGPT_WEB.md @@ -123,3 +123,99 @@ If you changed the credential contract (new storage key, new cookie name, change | Token missing from live request | Request is not authenticated | Sign in and send a chat message first | | 401 after Test Connection passed | Expired or rotated session | Re-copy from a fresh live request | | Chunked token fails | Only one chunk pasted | Select all `__Secure-next-auth.session-token.*` chunks | + +--- + +## ChatGPT Web (Codex) + +`ChatGPT Web (Codex)` is an additional provider. The existing +`ChatGPT Web (Plus/Pro)` provider described above stays unchanged for regular +chats, images, and its existing tool emulation. + +### Prerequisites + +- a full Cookie header from a signed-in ChatGPT session; +- Chrome or Chromium for npm, systemd, and PM2 installs; +- with the Docker `web` profile, the internal Chromium service from `docker-compose.yml`; +- an OpenAI tunnel and a ChatGPT custom connector for local Codex tools. + +The tunnel is only needed for tool turns. `pro` is read-only and does not need a +local tool connector. + +### Dashboard setup + +1. Open the **ChatGPT Web (Codex)** provider and add a connection. +2. Paste the full ChatGPT cookie, the tunnel ID, the runtime key, and the name of + the custom connector. +3. Start the check. OmniRoute opens a headless Temporary Chat and also detects + whether `pro` is available for the account. +4. Save the connection. OmniRoute replaces the pasted cookie with the verified + Playwright storage state and stores it together with the runtime key through + the encrypted credential abstraction. + +The raw cookie is not retained after a successful save. When the session expires, +open the connection, paste a fresh full cookie, and re-run the check. The doctor +status in the edit dialog reports browser, storage state, sign-in, Temporary +Chat, tunnel, connector, and tool round-trip separately. + +### Models and combos + +The fixed models are: + +- `chatgpt-web-codex/instant` +- `chatgpt-web-codex/medium` +- `chatgpt-web-codex/high` +- `chatgpt-web-codex/extra-high` +- `chatgpt-web-codex/pro` + +Add one of them to a combo like any other model. The Codex app sends only the +combo name as `model` to the regular Responses endpoint `/v1/responses`. There is +no special endpoint and no Codex-mode switch. + +`pro` does not run local tools. A forced tool makes that combo target +incompatible; with optional tools the turn runs read-only and reports that +limitation as commentary. + +### Security model + +- The native path requires a Responses request, a recognized Codex client, and + matching thread and turn identities. +- Workspace, sandbox, approval policy, and the tool catalog come from the native + Codex shell. Free-form prompt text is not an authority for them. +- ChatGPT receives only a short-lived capability per turn. The MCP broker accepts + only tools that Codex offered in exactly that turn. +- Auto-confirming "Allow once" only returns the tool request to Codex. Codex + alone decides on approval and execution. +- Before the first output, the combo may fall back to another compatible target. + After that, provider, model, connection, and browser turn stay pinned until the + turn completes. +- Cookies, runtime keys, storage state, and capability tokens do not appear in + provider responses or request logs. + +### Headless VPS and Docker + +For npm, systemd, and PM2 installs, OmniRoute detects common Chrome and Chromium +paths. Alternatively, set `CHATGPT_WEB_CODEX_CHROME_PATH`. + +The Docker `web` profile starts `chatgpt-web-codex-browser` on the internal +Compose network. Its CDP port is not published on the host. The protected profile +volume stays separate from the OmniRoute data volume, and the browser gets enough +shared memory. The internal CDP proxy listens only on the Compose network on port +`9223`; Chrome itself stays bound to loopback inside the sidecar. + +A supervisor lease under `DATA_DIR` prevents multiple OmniRoute processes from +owning the same tunnel and broker state. A conflict shows up in the doctor. + +### Interactive recovery + +The normal path is fully headless. When ChatGPT demands an interactive sign-in or +challenge, the existing VNC browser infrastructure can be used as a recovery +path. Browser UI and CDP must then only be reachable over loopback, an +authenticated management connection, or an SSH tunnel; noVNC stays disabled in +normal operation. + +### WebSocket fallback + +When a combo contains `ChatGPT Web (Codex)`, the Responses WebSocket bridge +requests the HTTP/SSE fallback before connecting upstream. The actual transfer +then goes through `/v1/responses`. diff --git a/docs/providers/CHATGPT_WEB_CODEX.md b/docs/providers/CHATGPT_WEB_CODEX.md deleted file mode 100644 index 9af963054d..0000000000 --- a/docs/providers/CHATGPT_WEB_CODEX.md +++ /dev/null @@ -1,94 +0,0 @@ -# ChatGPT Web (Codex) - -`ChatGPT Web (Codex)` ist ein zusätzlicher Provider. Der bestehende Provider -`ChatGPT Web (Plus/Pro)` bleibt für normale Chats, Bilder und dessen bisherige -Tool-Emulation unverändert. - -## Voraussetzungen - -- ein vollständiger Cookie-Header einer angemeldeten ChatGPT-Sitzung; -- Chrome oder Chromium bei npm-, systemd- und PM2-Installationen; -- beim Docker-Profil `web` der interne Chromium-Dienst aus `docker-compose.yml`; -- ein OpenAI-Tunnel und ein ChatGPT-Custom-Connector für lokale Codex-Tools. - -Der Tunnel ist nur für Tool-Runden nötig. `pro` ist read-only und benötigt keinen -lokalen Tool-Connector. - -## Einrichtung in der Weboberfläche - -1. Öffne den Provider `ChatGPT Web (Codex)` und füge eine Connection hinzu. -2. Füge den vollständigen ChatGPT-Cookie, die Tunnel-ID, den Runtime-Key und den - Namen des Custom Connectors ein. -3. Starte die Prüfung. OmniRoute öffnet headless einen Temporary Chat und erkennt - dabei auch, ob `pro` für das Konto verfügbar ist. -4. Speichere die Connection. OmniRoute ersetzt den eingegebenen Cookie durch den - geprüften Playwright-Storage-State und speichert ihn zusammen mit dem Runtime-Key - über die verschlüsselte Credential-Abstraktion. - -Der rohe Cookie wird nach erfolgreichem Speichern nicht zusätzlich aufbewahrt. -Wenn die Sitzung abläuft, öffne die Connection, gib einen frischen vollständigen -Cookie ein und prüfe sie erneut. Der Doctor-Status im Edit-Dialog zeigt Browser, -Storage-State, Anmeldung, Temporary Chat, Tunnel, Connector und Tool-Roundtrip -getrennt an. - -## Modelle und Combos - -Die festen Modelle sind: - -- `chatgpt-web-codex/instant` -- `chatgpt-web-codex/medium` -- `chatgpt-web-codex/high` -- `chatgpt-web-codex/extra-high` -- `chatgpt-web-codex/pro` - -Füge eines davon wie jedes andere Modell zu einer Combo hinzu. Die Codex-App -sendet nur den Combo-Namen als `model` an den normalen Responses-Endpunkt -`/v1/responses`. Es gibt keinen Sonderendpoint und keinen Codex-Modus-Schalter. - -`pro` führt keine lokalen Tools aus. Ein erzwungenes Tool macht dieses Combo-Ziel -inkompatibel; bei optionalen Tools läuft der Turn read-only und meldet diese -Einschränkung als Commentary. - -## Sicherheitsmodell - -- Der native Pfad verlangt einen Responses-Request, einen erkannten Codex-Client - sowie zusammenpassende Thread- und Turn-Identitäten. -- Workspace, Sandbox, Approval-Policy und Toolkatalog stammen aus der nativen - Codex-Hülle. Freier Prompttext ist dafür keine Autorität. -- ChatGPT erhält pro Turn nur eine kurzlebige Capability. Der MCP-Broker akzeptiert - ausschließlich Tools, die Codex in genau diesem Turn angeboten hat. -- Das automatische Bestätigen von „Allow once“ gibt nur den Tool-Wunsch an Codex - zurück. Codex allein entscheidet über Freigabe und Ausführung. -- Vor dem ersten Output darf die Combo auf ein anderes kompatibles Ziel fallen. - Danach bleiben Provider, Modell, Connection und Browserturn bis zum Abschluss - gepinnt. -- Cookies, Runtime-Keys, Storage-State und Capability-Tokens erscheinen nicht in - Providerantworten oder Request-Logs. - -## Headless VPS und Docker - -Bei npm-, systemd- und PM2-Betrieb erkennt OmniRoute übliche Chrome- und -Chromium-Pfade. Alternativ kann `CHATGPT_WEB_CODEX_CHROME_PATH` gesetzt werden. - -Das Docker-Profil `web` startet `chatgpt-web-codex-browser` im internen -Compose-Netz. Sein CDP-Port wird nicht auf dem Host veröffentlicht. Das geschützte -Profilvolume bleibt getrennt vom OmniRoute-Datenvolume und der Browser erhält -ausreichend Shared Memory. Der interne CDP-Proxy lauscht nur im Compose-Netz auf -Port `9223`; Chrome selbst bleibt im Sidecar an Loopback gebunden. - -Eine Supervisor-Lease unter `DATA_DIR` verhindert, dass mehrere OmniRoute-Prozesse -denselben Tunnel- und Brokerzustand besitzen. Ein Konflikt erscheint im Doctor. - -## Interaktive Wiederherstellung - -Der normale Pfad ist vollständig headless. Wenn ChatGPT eine interaktive -Anmeldung oder Challenge verlangt, kann die bestehende VNC-Browser-Infrastruktur -als Recovery-Weg verwendet werden. Browser-UI und CDP dürfen dabei nur über -Loopback, eine authentifizierte Managementverbindung oder einen SSH-Tunnel -erreichbar sein; noVNC bleibt im normalen Betrieb deaktiviert. - -## WebSocket-Fallback - -Enthält eine Combo `ChatGPT Web (Codex)`, fordert die Responses-WebSocket-Brücke -vor der Upstream-Verbindung den HTTP/SSE-Fallback an. Die eigentliche Übertragung -erfolgt dann über `/v1/responses`. diff --git a/docs/providers/meta.json b/docs/providers/meta.json index f408531954..82eec7eca7 100644 --- a/docs/providers/meta.json +++ b/docs/providers/meta.json @@ -4,6 +4,7 @@ "pages": [ "ALIBABA-QWEN-PROVIDER-FAMILIES", "CLAUDE_WEB", + "CHATGPT_WEB", "AGENTROUTER", "ZED-DOCKER", "CURSOR-DOCKER" diff --git a/docs/proxy-port-clash-report.md b/docs/proxy-port-clash-report.md deleted file mode 100644 index 5d09331fc2..0000000000 --- a/docs/proxy-port-clash-report.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: "Proxy Port Clash Investigation" -version: 3.8.50 -lastUpdated: 2026-08-06 ---- - -# Proxy Port Clash Investigation - -## Summary - -There is **no port clash** in the proxy auto-select / proxyFallback / proxyEgress system. -The proxy subsystem uses **pre-assigned registry ports** — it never binds to TCP ports -directly. The real EADDRINUSE history is in the **process supervisor** layer, where -the server's main listen port can clash during crash-loop restarts. - ---- - -## Proxy Subsystem: No Port Binding - -| Module | What It Does | -|---|---| -| `proxyAutoSelector.ts` | Selects a proxy config from the DB by applying health scores and rotation groups | -| `proxyFallback.ts` | Implements retry/fallback strategies when a selected proxy fails (try another proxy, then direct) | -| `proxyEgress.ts` | Probes/propagates egress IP info for logging — uses HTTP echo, not port binding | -| `proxyDispatcher.ts` | Creates `undici.ProxyAgent` dispatchers — these are HTTP-level (forward proxy), not TCP listen sockets | -| `proxyFetch.ts` | Patched global fetch that applies proxy dispatchers at the undici level | - -None of these modules call `net.createServer()`, `http.createServer()`, or `app.listen()`. -Port management is entirely within the request life cycle — undici manages the TCP -connection pool internally. - -**Fallback flow** (from `proxyFetch.ts` `runWithProxyContext`): -1. Try assigned proxy → proxy dispatcher -2. If unreachable → direct fallback (no dispatcher) -3. If still failing → error propagated up - -No port allocation or release happens in this flow. - ---- - -## Real EADDRINUSE Root Cause: Crash-Loop Restart Race - -The actual port clash was in the **process supervisor** (`bin/cli/runtime/`): - -| File | Role | -|---|---| -| `processSupervisor.mjs` | `ServerSupervisor` — spawns a child process, monitors exit code, restarts | -| `supervisorPolicy.mjs` | `waitUntilPortFree()`, `isPortFree()`, restart policy constants | - -**Root cause:** When the server child process crashed and was immediately restarted, the -OS had not yet released the listen socket (TIME_WAIT / TCP lingering). The restart -attempt would bind to the same port and immediately fail with `EADDRINUSE`, causing -another crash → another restart → exhausted restart budget → gateway dead. - -**Fix (#4425, in `supervisorPolicy.mjs`):** -1. Added `isPortFree(port)` — attempts a `net.createServer().listen()` on the target - port; resolves `false` if EADDRINUSE. -2. Added `waitUntilPortFree(port, timeoutMs=10000, intervalMs=250)` — polls every 250ms - for up to 10s until the port is free, then allows the restart. -3. Bumped `RESTART_RESET_MS` from 30s → 60s — the crash window was too short, causing - rapid cascading restarts inside the window. -4. Bumped `DEFAULT_MAX_RESTARTS` from 2 → 3 — more headroom for transient failures. - -The `writePidFile()` / `killAllSubprocesses()` / `cleanupPidFile()` utilities in -`bin/cli/utils/pid.mjs` ensure clean PID file lifecycle. - -## Related: Live-Dashboard EADDRINUSE (#6324) - -A parallel fix (`live-ws-eaddrinuse-6324.test.ts`) ensures `startLiveDashboardServer()` -rejects with a proper `EADDRINUSE` error (instead of an unhandled socket 'error' event -that would crash the process). The dashboard server uses a separate port from the main -API server, so when both are configured on the same port, the second bind fails -gracefully. - ---- - -## Current State - -| Risk | Status | Remaining | -|---|---|---| -| Supervisor restart EADDRINUSE | **Fixed** (#4425) | None | -| LiveWS port clash | **Fixed** (#6324) | None | -| Proxy selection port clash | **Never applicable** | None | -| Two Redis CLIENT factories bind no TCP ports | **Never applicable** | None | - -No further action needed on port clash. diff --git a/docs/proxy-subscriptions.md b/docs/proxy-subscriptions.md deleted file mode 100644 index 1a1e725029..0000000000 --- a/docs/proxy-subscriptions.md +++ /dev/null @@ -1,377 +0,0 @@ ---- -title: "Operator Proxy Subscriptions (Karing-style)" -version: 3.8.50 -lastUpdated: 2026-08-06 ---- - -# Operator Proxy Subscriptions (Karing-style) - -> Feature design + implementation notes for OmniRoute's operator-level proxy -> subscription flow. This is the v1 cut: a single operator pastes subscription -> links, picks a mode (global or rule), and OmniRoute binds the resulting proxy -> pool into the existing scope resolution. Multi-tenant per-API-key, advanced -> traffic rules, latency-driven per-rule weights, and so on are explicitly -> out-of-scope and listed in §7. - ---- - -## 1. Motivation - -Today, OmniRoute's proxy pool is hand-curated: every node lives in -`proxy_registry` with hand-written host/port/credentials, and every binding to -the upstream dispatchers (account → provider → combo → global → direct) is a -manual `proxy_assignments` row. Operators who already maintain a Clash/V2Ray/ -sing-box subscription (e.g. from an airport service) have to retype every node -into OmniRoute and re-bind them whenever the upstream list changes. - -The goal of v1 is to make OmniRoute first-class for **operator-supplied** -subscriptions, similar to how Karing / Clash / sing-box let users paste a -`https://...` URL and have the client manage the lifecycle. - -## 2. User stories - -| # | As a(n) | I want to | So that | -|---|---------|-----------|---------| -| U1 | Operator | paste a subscription URL once | I don't retype nodes every time the airport refreshes | -| U2 | Operator | toggle the subscription on/off | I can fall back to direct without deleting the URL | -| U3 | Operator | pick **global** mode | every provider's traffic exits via the subscription | -| U4 | Operator | pick **rule** mode and select specific providers | only selected providers route through the proxy; others stay direct | -| U5 | Operator | supply a local sing-box/clash SOCKS5 endpoint | SS/VMess/Trojan/VLESS nodes (which OmniRoute's dispatcher can't speak natively) become usable through a local kernel bridge | -| U6 | Operator | see fetch status and a recent redacted node summary | I can debug "why is this empty / erroring" without leaking credentials | - -## 3. Non-goals (v1) - -- Per-API-key subscription overrides (multi-tenant). v1 is operator-only. -- Per-provider traffic rules beyond `global` / `rule-on-selected-providers`. -- Latency-based smart routing between subscription nodes and other pools - (existing `resolveProxyForConnectionFromRegistry` already does this for the - global pool; v1 just feeds subscription nodes into it). -- Auto-importing URL/password from headers or query params. -- SSRF mitigation beyond loopback-only local-core endpoints (the subscription - URL itself is operator-controlled, so we trust it the same way we trust - upstream provider URLs today). - -## 4. Architecture - -``` - ┌─────────────────────────────────────────┐ - │ dashboard / settings / 代理 / 订阅代理 │ - │ (client component, SubscriptionTab) │ - └──────────────────┬──────────────────────┘ - │ fetch - ▼ - ┌────────────────────────────────────────────────────────┐ - │ /api/v1/management/proxy-subscriptions │ - │ ├ GET list │ - │ ├ POST create │ - │ ├ GET /:id │ - │ ├ PATCH /:id │ - │ ├ DELETE /:id │ - │ ├ POST /:id/refresh │ - │ └ GET /:id/nodes │ - └────────────────────────┬───────────────────────────────┘ - │ uses - ▼ - ┌────────────────────────────────────────────────────────┐ - │ src/lib/proxySubscription/ │ - │ ├ parse.ts (Clash YAML / V2Ray JSON / URIs) │ - │ ├ subscriptionService.ts │ - │ │ CRUD, sync, apply, unapply, scheduler │ - │ └ index.ts (barrel) │ - └──────────┬─────────────────────────────┬───────────────┘ - │ upsert/scope-bind │ DB - ▼ ▼ - ┌─────────────────────────┐ ┌──────────────────────────┐ - │ proxy_registry │ │ proxy_subscriptions │ - │ (existing) + │ │ (NEW — subscription │ - │ subscription_id column │ │ metadata + scheduler │ - │ + status/health checks │ │ state) │ - └─────────────────────────┘ └──────────────────────────┘ - │ - ▼ (existing) - resolveProxyForConnectionFromRegistry - hasBlockingProxyAssignment (fail-closed) - proxyDispatcher (open-sse/utils/proxyDispatcher) -``` - -Key design decision: **we do not invent a new scope or routing pipeline**. We -upsert subscription-derived nodes into `proxy_registry` with `source = -'subscription'` + `subscription_id`, and then `applySubscription()` walks the -existing `addProxyToScopePool(scope, scopeId, proxyId)` API. This means: - -- Existing rotation, health checks, and fail-closed guards apply for free. -- Existing dashboards (ProxyPoolTab, SourceToggleBar, GlobalConfigTab) work - unchanged — subscription nodes just appear in the pool with a `source` - badge. -- Deleting/disabling a subscription cleanly removes its bindings without - touching manual proxies. - -## 5. Data model - -### 5.1 New table `proxy_subscriptions` - -| Column | Type | Notes | -|---|---|---| -| `id` | TEXT PK | UUID | -| `name` | TEXT NOT NULL | display name | -| `url` | TEXT NOT NULL | subscription URL | -| `enabled` | INTEGER NOT NULL DEFAULT 0 | 1 = active | -| `mode` | TEXT NOT NULL DEFAULT `'global'` | `'global'` or `'rule'` | -| `rule_providers` | TEXT NULL | JSON array of provider IDs (mode='rule' only) | -| `local_core_endpoint` | TEXT NULL | loopback SOCKS5/HTTP for SS/VMess/etc. (e.g. `socks5://127.0.0.1:2080`) | -| `update_interval_minutes` | INTEGER NOT NULL DEFAULT 60 | background refresh cadence | -| `last_fetched_at` | TEXT NULL | ISO timestamp of last successful fetch | -| `status` | TEXT NOT NULL DEFAULT `'empty'` | `'ok'` / `'error'` / `'empty'` | -| `error` | TEXT NULL | last error / warning text (redacted) | -| `last_nodes` | TEXT NULL | JSON array, redacted node summaries | -| `created_at` | TEXT NOT NULL | ISO | -| `updated_at` | TEXT NOT NULL | ISO | - -Index: `idx_proxy_subscriptions_enabled (enabled)` for the scheduler tick. - -### 5.2 Extended `proxy_registry` - -Added one column: - -| Column | Type | Notes | -|---|---|---| -| `subscription_id` | TEXT NULL | FK by convention (no enforced FK; subscription row lives in `proxy_subscriptions`) | - -Existing rows on upgrade: `subscription_id = NULL`, behavior unchanged. -Migration: `ALTER TABLE proxy_registry ADD COLUMN subscription_id TEXT;` -(applied as `131_proxy_subscriptions.sql`, idempotent via the migration -runner's `ALTER` semantics). - -### 5.3 Extended `proxy_subscriptions` test isolation - -The migration runner applies new migrations automatically; the only places -that need to know about the new column are `types.ts` and `mappers.ts` (one -extra field each) and `proxies.ts` (3 SQL statements: INSERT/UPDATE/SELECT). - -## 6. Modes - -### 6.1 Global mode - -- Pool bound to `scope='global', scope_id=NULL`. -- `proxyEnabled` setting forced to `true` whenever any subscription (or any - non-subscription global proxy) is active. -- All provider traffic exits via the subscription pool, with rotation/health - applied by the existing `resolveProxyForConnectionFromRegistry`. - -### 6.2 Rule mode - -- Pool bound to `scope='provider', scope_id=` for each - selected provider. -- Providers NOT in the list fall through to direct (their own provider-level - proxy or no proxy). -- Toggling a subscription from global → rule first calls `unapplySubscription` - to detach the previous global bindings, then re-syncs. - -## 7. Protocol support - -The existing `proxyDispatcher` only speaks **http / https / socks5 / vercel / -deno / cloudflare**. v1 follows that: - -| Parser-detected type | Goes into pool directly? | Needs `localCoreEndpoint`? | -|---|---|---| -| `http` / `https` | yes | no | -| `socks5` | yes | no | -| `ss` / `ssr` | no | yes (sing-box/clash → loopback SOCKS5) | -| `vmess` / `vless` | no | yes | -| `trojan` | no | yes | -| `hysteria` / `tuic` / `wireguard` | no | yes | -| `relay` (vercel/deno/cloudflare) | yes | no | - -Without `localCoreEndpoint`, SS-class nodes are surfaced in the status as a -warning but **not routed**. This matches the "fail-closed, but don't lie about -capability" policy: we never silently drop traffic; we report unrouteable -nodes and let the operator decide. - -## 8. Parser (`src/lib/proxySubscription/parse.ts`) - -Hand-rolled, no external dependency. Inputs accepted: - -1. **Clash / Clash.Meta YAML** — `proxies:` array, with `type` dispatch. -2. **Base64-wrapped URI list** — `parseSubscription` detects base64 by length - and charset, decodes, then URI-parses. -3. **V2RayN-style JSON-array-of-URI** — uses `vmess://` / `vless://` URIs. -4. **Plain URI list** — `ss://`, `vmess://`, `vless://`, `trojan://`, - `hysteria://`, `tuic://`, `wireguard://`, `socks5://`, `http(s)://`. - -Output: - -```ts -type ParsedSubscription = { - nodes: DirectlyUsableNode[]; // http/https/socks5/relay - needsCore: NeedsCoreNode[]; // ss/vmess/... — redacted summary - rawProtocols: string[]; // for diagnostics - parserWarnings: string[]; // per-line parse errors, redacted -}; - -type DirectlyUsableNode = { - name: string; - type: "http" | "https" | "socks5" | "vercel" | "deno" | "cloudflare"; - host: string; - port: number; - username?: string; - password?: string; -}; -``` - -`redactedNodeSummary` returns a JSON-serializable array of `{name, type, -host, port, hasCredentials}` with credentials omitted. This is what gets -persisted in `last_nodes` for the operator UI. - -## 9. Security - -- **SSRF on `localCoreEndpoint`**: the only SSRF surface here is the local - core endpoint (the subscription URL itself is operator-supplied). Allowed - hosts: `127.0.0.1`, `::1`, `localhost`. Any other host is rejected at parse - time with a `subscription_needs_core_endpoint_invalid` status. -- **No outbound to operator-internal hosts** from a subscription URL. The URL - fetch goes through Node's `fetch` (same trust model as the existing - `proxyLatency` health checks and the provider ping tasks). The operator - already trusts the URL by pasting it. -- **Fail-closed**: if a subscription's proxy is dead but still bound to a - scope, `hasBlockingProxyAssignment` returns true and traffic fails closed — - matches existing policy for any pool proxy. The operator can always disable - the subscription or remove the binding. -- **No secret echo**: `last_nodes` is redacted; the UI never sends secrets - back. `password` / `username` are stored encrypted at rest by the existing - `proxy_registry` encryption path. -- **No cross-tenant write**: the API routes are gated by `requireManagementAuth` - (dashboard session OR a manage-scope API key). Per-API-key overrides are - explicitly out-of-scope. - -## 10. UI - -A new sub-tab **"订阅代理"** in `dashboard / settings / 代理`, placed after -"documentation". List view shows: - -- Name + URL (truncated, with full URL in `title` attribute) -- Status badge: `ok` / `error` / `empty` -- Enabled switch (optimistic toggle) -- Action buttons: edit / refresh / delete - -The edit form has: - -- Name (text, required) -- URL (text, required, validated as URL) -- Mode toggle (global / rule) -- Provider multi-select (visible only in rule mode; populated from - `/api/providers`) -- Local core endpoint (text, optional; placeholder `socks5://127.0.0.1:2080`) -- Update interval (number, default 60 minutes) -- Enabled toggle - -When `status === 'error'`, an inline warning banner shows `subscription.error`. -When `status === 'ok'` and there are nodes that needed a local core, a soft -warning banner shows which protocols were skipped. - -## 11. Migration & rollout - -1. New migration `131_proxy_subscriptions.sql` runs on first DB open after - upgrade (auto-discovered by the existing migration runner). -2. The migration is **idempotent**: `ALTER TABLE … ADD COLUMN …` against an - already-migrated DB is a no-op in SQLite when wrapped in the runner's - "ignore duplicate column" path. See the existing - `040_oneproxy_proxy_fields.sql` and `093_proxy_enable_toggles.sql` - precedents. -3. No backfill: existing rows get `subscription_id = NULL`, which the - service treats as "manual, not subscription-managed". -4. UI hides the tab when there are zero subscriptions, but the API is always - available — that's intentional, so headless operators can manage - subscriptions via API only. - -## 12. Auto-refresh - -`startSubscriptionScheduler()` is idempotent and: - -- Skips in the browser (`typeof window !== "undefined"`). -- Skips under `NODE_ENV=test`. -- Otherwise starts a 60s `setInterval` that: - - Lists enabled subscriptions. - - For each, computes `due = now - lastFetchedAt >= updateIntervalMinutes * 60_000`. - - Calls `syncSubscription` for due ones, swallowing errors (logged). -- The interval timer is `.unref()`'d so it never blocks process exit. - -The scheduler is started on: -- First `GET /api/v1/management/proxy-subscriptions` (dashboard open). -- Any `syncSubscription` call (defensive — for CLI / automation paths that - bypass the GET). - -## 13. Testing strategy - -`tests/unit/proxySubscription.parse.test.ts` — 7 pure-parser cases, no DB, -runnable in <1s: - -1. Clash YAML with `direct` (http) and `needsCore` (ss) nodes. -2. Base64-wrapped URI list (decoded correctly). -3. V2Ray JSON-array-of-URI (vmess / vless). -4. Plain URI list (mixed protocols). -5. Clash.Meta outbounds (socks5). -6. Empty / unknown input → `nodes=[]`, `needsCore=[]`, parserWarnings filled. -7. `redactedNodeSummary` strips credentials. - -`tests/unit/proxySubscription.service.test.ts` — 4 integration tests using -`process.env.DATA_DIR` + `core.resetDbInstance()`: - -1. **Global**: create enabled global subscription → `syncSubscription` → - verify pool rows in `proxy_registry` with `subscription_id` set → - `resolveProxyForConnectionFromRegistry` returns one of those rows → - `proxyEnabled` is true. -2. **Rule**: create enabled rule subscription on provider P1 → verify only - P1's scope is bound, P2's scope is untouched. -3. **Fail-closed**: subscription fetch URL is unreachable → `status='error'`, - pool is empty, but if pool ever had rows they are cleaned up; - `hasBlockingProxyAssignment` returns false (no dead proxies in any scope). -4. **Delete**: delete subscription → registry rows for that subscription are - removed with `force: true` (manual deletions can't cascade-block it) → - `proxyEnabled` recomputed. - -Test runner command: - -```bash -node --import tsx/esm \ - --import ./open-sse/utils/setupPolyfill.ts \ - --import ./tests/_setup/isolateDataDir.ts \ - --test \ - tests/unit/proxySubscription.parse.test.ts \ - tests/unit/proxySubscription.service.test.ts -``` - -## 14. Future work (NOT in v1) - -- Per-API-key subscription overrides (multi-tenant; needs a `key_subscription_overrides` table). -- Per-provider traffic rules with domain matchers (would slot into the existing `interceptionRules` table). -- Latency-weighted rotation across subscription pools (we already have `ProxyRotationStrategy = "latency"`; just expose it in the UI). -- Proxying the subscription fetch itself through a separate egress (so operators can fetch behind a corporate firewall). -- Browser-side preview of a parsed subscription before saving (currently must save → wait → see nodes). - -## 15. Files touched / added - -**Added (new):** - -- `src/lib/proxySubscription/parse.ts` -- `src/lib/proxySubscription/subscriptionService.ts` -- `src/lib/proxySubscription/index.ts` -- `src/lib/db/migrations/131_proxy_subscriptions.sql` -- `src/app/api/v1/management/proxy-subscriptions/route.ts` -- `src/app/api/v1/management/proxy-subscriptions/[id]/route.ts` -- `src/app/api/v1/management/proxy-subscriptions/[id]/refresh/route.ts` -- `src/app/api/v1/management/proxy-subscriptions/[id]/nodes/route.ts` -- `src/app/(dashboard)/dashboard/settings/components/proxy/SubscriptionTab.tsx` -- `tests/unit/proxySubscription.parse.test.ts` -- `tests/unit/proxySubscription.service.test.ts` -- `docs/proxy-subscriptions.md` (this file) - -**Modified (minimal):** - -- `src/lib/db/proxies/types.ts` — `+ subscriptionId: string | null` on - `ProxyRegistryRecord`; `+ subscriptionId?: string | null` on `ProxyPayload`. -- `src/lib/db/proxies/mappers.ts` — `mapProxyRow` reads - `subscription_id` from the row. -- `src/lib/db/proxies.ts` — INSERT / UPDATE / SELECT add `subscription_id`. -- `src/app/(dashboard)/dashboard/settings/components/ProxyTab.tsx` — adds - one new sub-tab ("订阅代理") + the `literal` fallback for labels that - aren't in the i18n catalog yet. \ No newline at end of file diff --git a/docs/reference/ENVIRONMENT.md b/docs/reference/ENVIRONMENT.md index 08c7c8f3ea..8be1263399 100644 --- a/docs/reference/ENVIRONMENT.md +++ b/docs/reference/ENVIRONMENT.md @@ -382,6 +382,8 @@ Controls how OmniRoute discovers and launches CLI sidecars (Claude Code, Codex, | `CLI_QODER_BIN` | `qoder` | `src/shared/services/cliRuntime.ts` | Custom path to Qoder CLI binary. | | `CLI_QWEN_BIN` | `qwen` | `src/shared/services/cliRuntime.ts` | Custom path to the Qwen Code CLI binary. | | `CLI_DEVIN_BIN` | `devin` | `open-sse/executors/devin-cli.ts` | Custom path to the Devin CLI binary (v3.8.0). Used by the Windsurf/Devin executor. | +| `DEVIN_DESKTOP_VERSION` | `3.6.27` | `open-sse/executors/devin-desktop.ts` | Devin Desktop `ide_version`. Overrides must use `x.y.z` format; invalid values fall back to the verified default. | +| `DEVIN_DESKTOP_EXTENSION_VERSION` | `1.48.2` | `open-sse/executors/devin-desktop.ts` | Bundled Codeium/language-server `extension_version`, distinct from Desktop `ide_version`. Overrides must use `x.y.z`; invalid values use the bundled default. | | `CLI_DEVIN_AGENTIC_BIN` | `devin` | `open-sse/executors/devin-cli-agentic.ts` | Agentic bridge-only Devin CLI override. The executor accepts only the local ACP stdio upstream. | | `DEVIN_AGENTIC_HOME` | _(required)_ | `open-sse/executors/devin-cli-agentic.ts` | Absolute isolated home for the agentic Devin subprocess; accepted bridge paths are `/home/bridge` and task-local `.sandbox` paths. | | `DEVIN_AGENTIC_ACP_TIMEOUT_MS` | `120000` | `open-sse/executors/devin-cli-agentic.ts` | Maximum duration of one Devin ACP turn before the bridge terminates the child and returns an explicit timeout. | @@ -507,7 +509,6 @@ Built-in credentials for **localhost development**. For remote deployments, regi | `ANTIGRAVITY_OAUTH_CLIENT_SECRET` | Antigravity (Google) | — | | `GITHUB_OAUTH_CLIENT_ID` | GitHub Copilot | Public client. | | `GHE_COPILOT_OAUTH_CLIENT_ID` | GHE Copilot | Optional override for GitHub Enterprise Copilot's OAuth client id. Falls back to `GITHUB_OAUTH_CLIENT_ID`'s public default when unset. | -| `WINDSURF_FIREBASE_API_KEY` | Windsurf / Devin (v3.8) | Public Firebase Web API key used by Windsurf's Secure Token Service to refresh short-lived browser-flow tokens. Client-side credential (not a secret). Long-lived import tokens skip this entirely. Source: extracted from Devin CLI binary. | | `WINDSURF_API_KEY` | Windsurf / Devin (v3.8) | API key fallback used by `open-sse/executors/devin-cli.ts` when no per-connection credential is available. Optional. | | `CLI_DEVIN_BIN` | Devin CLI (v3.8) | Custom path to the Devin CLI binary (`devin`). Resolved by `open-sse/executors/devin-cli.ts`. | | `GITLAB_DUO_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | OAuth client ID for GitLab Duo. Register an app at `https://gitlab.com/-/profile/applications` with redirect URI `/callback` and scopes `api, read_user, openid, profile, email`. Falls back to `GITLAB_OAUTH_CLIENT_ID`. | @@ -1474,3 +1475,13 @@ Globale Defaults für den headless Browser und den ausgehenden Tool-Tunnel. Im D | `CHATGPT_WEB_CODEX_TUNNEL_ID` | _(unset)_ | `open-sse/executors/chatgpt-web-codex.ts` | Globale OpenAI-Tunnel-ID für lokale Codex-Tool-Runden. | | `CHATGPT_WEB_CODEX_RUNTIME_KEY` | _(unset)_ | `open-sse/executors/chatgpt-web-codex.ts` | Globaler Tunnel Runtime-Key; niemals in Logs ausgeben. | | `CHATGPT_WEB_CODEX_CONNECTOR_NAME` | _(unset)_ | `open-sse/executors/chatgpt-web-codex.ts` | Name des ChatGPT-Custom-Connectors für die MCP-Brücke. | +--- + +## OmniConductor Bridge + +Long-lived SSE consumer that mirrors OmniConductor hub tasks into the local A2A TaskManager (`src/lib/conductor/`). Opt-in — the bridge only starts when `CONDUCTOR_HUB_URL` is set. Server-side only: the hub token must never reach the browser. + +| Variable | Default | Source File | Description | +| --------------------- | ---------- | ---------------------------- | ------------------------------------------------------------------------------------------------------- | +| `CONDUCTOR_HUB_URL` | _(empty)_ | `src/lib/conductor/boot.ts` | Base URL of the OmniConductor hub (e.g. `http://127.0.0.1:7910`). Unset = bridge disabled. | +| `CONDUCTOR_HUB_TOKEN` | _(empty)_ | `src/lib/conductor/boot.ts` | Hub credential for the SSE feed — emit a `spokesperson`-kind peer on the hub (`POST /v1/peers`, admin). | diff --git a/docs/reference/PROVIDER_REFERENCE.md b/docs/reference/PROVIDER_REFERENCE.md index 257f55690a..613209bb49 100644 --- a/docs/reference/PROVIDER_REFERENCE.md +++ b/docs/reference/PROVIDER_REFERENCE.md @@ -1,20 +1,21 @@ --- title: "Provider Reference" version: 3.8.50 -lastUpdated: 2026-08-05 +lastUpdated: 2026-08-12 --- # Provider Reference > **Auto-generated** from `src/shared/constants/providers.ts` — do not edit by hand. > Regenerate with: `npm run gen:provider-reference` -> **Last generated:** 2026-08-05 +> **Last generated:** 2026-08-12 -Total providers: **291**. See category breakdown below. +Total providers: **338**. See category breakdown below. ## Categories - **Free** — free tier with API key (configured via dashboard) +- **No-auth** — public endpoints that require no key or sign-in at all - **OAuth** — sign-in flow handled by OmniRoute, no API key needed - **Web cookie** — wraps the provider's web app via cookie auth - **API key** — paid provider configured via API key (free credits may apply) @@ -33,7 +34,22 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each --- -## OAuth Providers (23) +## No-auth Providers (no key required) (10) + +| ID | Alias | Name | Tags | Website | Notes | Tool calling | +|----|-------|------|------|---------|-------|--------------| +| `aihorde` | `horde` | AI Horde | No-auth | [link](https://aihorde.net) | No API key required — uses AI Horde's documented anonymous key. Adding a free aihorde.net key is optional and only buys higher queue priority (kudos). | — | +| `auggie` | `aug` | Augment (Auggie CLI) | No-auth | [link](https://augmentcode.com) | No API key stored by OmniRoute. Install the Auggie CLI and run `auggie login` on this machine, then OmniRoute spawns it locally for each request. | — | +| `chipotle` | `pepper` | Chipotle Pepper AI (Free) | No-auth | [link](https://amelia.chipotle.com) | No credentials required. Uses Chipotle's public support chatbot via reverse-engineered SockJS/STOMP protocol. | — | +| `devin-cli-agentic` | `dva` | Devin CLI Agentic Bridge | No-auth | [link](https://docs.devin.ai/work-with-devin/devin-cli) | Authentication is owned by the official Devin CLI in its isolated bridge volume. | emulated | +| `duckduckgo-web` | `ddgw` | DuckDuckGo AI Chat | No-auth | [link](https://duckduckgo.com/duckchat) | No credentials required — DuckDuckGo AI Chat is anonymous and free. | emulated | +| `felo-web` | `felo` | Felo | No-auth | [link](https://felo.ai) | No credentials required — Felo is a free, no-signup chat/search aggregator. | — | +| `mimocode` | `mcode` | MiMoCode (Free) | No-auth | [link](https://mimo.mi.com) | No API key required. The executor auto-generates JWT tokens via device fingerprint bootstrap. | — | +| `opencode` | `oc` | OpenCode Free | No-auth | [link](https://opencode.ai) | No API key required — uses OpenCode's public free endpoint. | — | +| `theoldllm` | `tllm` | The Old LLM (Free) | No-auth | [link](https://theoldllm.vercel.app) | No credentials required. The executor auto-generates access tokens via an embedded Playwright browser instance. | — | +| `veoaifree-web` | `veo-free` | Veo AI Free | No-auth, video | [link](https://veoaifree.com) | No auth required. Rate limited to 6 requests/hour per IP. | — | + +## OAuth Providers (25) | ID | Alias | Name | Tags | Website | Notes | |----|-------|------|------|---------|-------| @@ -46,7 +62,8 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `codebuddy-cn` | `cbcn` | CodeBuddy CN | OAuth | [link](https://copilot.tencent.com) | Tencent CodeBuddy CN (copilot.tencent.com). Sign in via the official CLI device-code flow, or paste a direct API key (sent as Authorization: Bearer). Catalog: GLM / Kimi / MiniMax / DeepSeek / Hunyuan. | | `codex` | `cx` | OpenAI Codex | OAuth | — | — | | `cursor` | `cu` | Cursor IDE | OAuth | — | — | -| `devin-cli` | `dv` | Devin CLI (Official) | OAuth | [link](https://cli.devin.ai) | Requires the Devin CLI binary. Run `devin auth login` to authenticate, or provide your WINDSURF_API_KEY. Install: https://cli.devin.ai | +| `devin-cli` | `dv` | Devin CLI | OAuth | [link](https://cli.devin.ai) | Requires the Devin CLI binary. Run `devin auth login` to authenticate, or provide your WINDSURF_API_KEY. Install: https://cli.devin.ai | +| `devin-desktop` | — | Devin Desktop | OAuth | [link](https://devin.ai) | Paste an existing Devin API key from an authenticated Devin session. Key export availability and steps vary by Devin version and account. | | `ghe-copilot` | `ghe-copilot` | GitHub Enterprise Copilot | OAuth | — | Enter your GHE instance URL (e.g., https://ghe.company.com) in provider settings, then authenticate via device flow. | | `github` | `gh` | GitHub Copilot | OAuth | — | — | | `gitlab-duo` | `gitlab-duo` | GitLab Duo | OAuth | [link](https://docs.gitlab.com/user/duo_agent_platform/code_suggestions/) | GitLab Duo OAuth is not configured. Register an OAuth application at https://gitlab.com/-/profile/applications with redirect URI http://localhost:20128/callback and scopes "ai_features read_user", then set GITLAB_DUO_OAUTH_CLIENT_ID (and optionally GITLAB_DUO_OAUTH_CLIENT_SECRET) and restart. | @@ -54,14 +71,15 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `kilocode` | `kc` | Kilo Code | OAuth | — | — | | `kimi-coding` | `kmc` | Kimi Code CLI | OAuth | [link](https://www.kimi.com/code?aff=omniroute) | Sign in with the same Kimi account used by Kimi Code CLI. OmniRoute uses the CLI OAuth flow and Kimi Coding Plan endpoints. | | `kiro` | `kr` | Kiro AI | OAuth | — | Free tier: 50 credits/month (~25K–100K tokens). ⚠️ Kiro ToS prohibits third-party proxy/harness use. | +| `openference` | `of` | Openference | OAuth | [link](https://openference.com) | Sign in with your Openference account to route requests through api.openference.com. An active plan is required for inference — OAuth may authenticate but return 402 without one. | | `qoder` | `if` | Qoder | OAuth | — | — | +| `raycast` | `rc` | Raycast Pro AI | OAuth | [link](https://raycast.com/ai) | Unofficial integration — uses your Raycast Pro subscription via credentials from the macOS app (Auto-Import or manual capture). May break on Raycast updates. Not for redistribution; personal use only. | | `trae` | `tr` | Trae | OAuth | [link](https://trae.ai) | Trae is an AI-native IDE by ByteDance (SOLO remote agent). Authorize via trae.ai in the popup, or sign in at solo.trae.ai and paste the Cloud-IDE-JWT (sent as 'Authorization: Cloud-IDE-JWT ', ~14-day lifetime) as the access token; web_id/biz_user_id/user_unique_id/scope/tenant/region propagate via providerSpecificData. No headless refresh for pasted tokens — re-paste on expiry. | -| `windsurf` | `ws` | Windsurf (Devin CLI) | OAuth | [link](https://windsurf.com) | In the Windsurf / VS Code IDE, open the command palette and run `Windsurf: Provide Auth Token` (or click the Jupyter "Get Windsurf Authentication Token" button), then copy the shown token and paste it here. Note: opening windsurf.com/show-auth-token directly only renders a "Redirecting" page — the IDE must initiate the flow (it adds a `?state=...` param) for the token to appear. | | `xai-oauth` | `xao` | xAI OAuth (Grok) | OAuth | [link](https://x.ai) | Sign in with xAI to use api.x.ai models such as Grok 4.5. This is separate from Grok Build JWT sessions, which use cli-chat-proxy.grok.com and grok-build model aliases. | | `zed` | `zd` | Zed IDE | OAuth | [link](https://zed.dev) | Zed stores LLM provider credentials (OpenAI, Anthropic, Google, Mistral, xAI) in the OS keychain. Use the Import button below to discover and import them automatically. | | `zed-hosted` | — | Zed Hosted Models | OAuth | [link](https://zed.dev) | Sign in with your Zed account (native-app sign-in). OmniRoute generates a one-time RSA keypair and opens zed.dev to authorize it — on a remote/headless install, copy the resulting 127.0.0.1 callback URL from your browser's address bar and paste it back here. Distinct from the 'Zed IDE' credential-import entry above: this proxies chat completions through Zed's own hosted model aggregator (cloud.zed.dev), fronting Anthropic/OpenAI/Google/xAI models under your Zed plan. | -## Web Cookie Providers (31) +## Web Cookie Providers (34) | ID | Alias | Name | Tags | Website | Notes | Tool calling | |----|-------|------|------|---------|-------|--------------| @@ -69,9 +87,11 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `adobe-firefly` | `firefly` | Adobe Firefly (Image/Video) | Web cookie | [link](https://firefly.adobe.com) | RECOMMENDED: firefly.adobe.com signed-in → F12 → Network → click firefly-3p.ff.adobe.io (generate-async or models/discovery) → Request Headers → Authorization → copy the token AFTER 'Bearer ' (starts with eyJ…). Cookie-only from firefly.adobe.com mints a GUEST token → 401/403; only multi-domain IMS cookies (adobelogin.com) or that Bearer JWT work. Unofficial/experimental media + Limits. | — | | `blackbox-web` | `bb-web` | Blackbox Web (Subscription) | Web cookie | [link](https://app.blackbox.ai) | Paste your __Secure-authjs.session-token value or full cookie header from app.blackbox.ai | emulated | | `chatgpt-web` | `cgpt-web` | ChatGPT Web (Plus/Pro) | Web cookie | [link](https://chatgpt.com) | Paste your __Secure-next-auth.session-token cookie value from chatgpt.com | emulated | +| `chatgpt-web-codex` | `cgpt-codex` | ChatGPT Web (Codex) | Web cookie | [link](https://chatgpt.com) | Paste the full ChatGPT Cookie header. OmniRoute verifies it in an isolated headless browser profile. | native | | `claude-web` | `cw` | Claude Web | Web cookie | [link](https://claude.ai) | Paste your session cookie from claude.ai | none | +| `conol-web` | `cnl` | Conol (Unofficial/Experimental) | Web cookie | [link](https://conol.ai) | Use browser sign-in, or paste the full Cookie header from conol.ai. The __Secure-better-auth.session_token cookie is required. | — | | `copilot-m365-web` | `m365copilot` | Microsoft 365 Copilot (BizChat) | Web cookie | [link](https://m365.cloud.microsoft/chat) | Sign in at m365.cloud.microsoft/chat, then open DevTools → Network → filter 'WS' → click the Chathub WebSocket connection. Copy both the access_token query parameter AND the account-specific Chathub path segment from its request URL (wss://…/Chathub/?…&access_token=…). It is NOT an Authorization: Bearer header on an XHR/Fetch request. The token is short-lived; this is an unofficial integration. | — | -| `copilot-web` | `copilot` | Microsoft Copilot Web | Web cookie | [link](https://copilot.microsoft.com) | Paste your access_token from copilot.microsoft.com (or export a .har file from DevTools while logged in) | — | +| `copilot-web` | `copilot` | Microsoft Copilot Web | Web cookie | [link](https://copilot.microsoft.com) | Paste the access_token from an authenticated copilot.microsoft.com request (DevTools → Network → Authorization), or export a HAR while logged in | — | | `deepseek-web` | `ds-web` | DeepSeek Web | Web cookie | [link](https://chat.deepseek.com) | Paste your userToken from chat.deepseek.com — DevTools → Application → Local Storage → userToken | emulated | | `doubao-web` | `db` | Dola Web (ByteDance) | Web cookie | [link](https://www.dola.com) | Paste the full Cookie header from www.dola.com. It should include sessionid, ttwid, and s_v_web_id. If s_v_web_id is unavailable, fp=verify_... from a chat/completion request URL can be used as a fallback. | — | | `gemini-business` | `gembiz` | Gemini Business (Enterprise) | Web cookie | [link](https://business.gemini.google) | From your enterprise account: open business.gemini.google/home/cid/{your-cid}, then copy __Secure-1PSID and __Secure-1PSIDTS cookies from DevTools → Application → Cookies. Paste as a cookie header below. | — | @@ -91,19 +111,20 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `promptql` | `pql` | PromptQL (Unofficial/Experimental) | Web cookie | [link](https://prompt.ql.app) | Paste the Bearer JWT from prompt.ql.app DevTools → Network → graphql → Authorization (token only). Optional projectId + session Cookie for refresh. | — | | `qwen-web` | `qwen-web` | Qwen Web (Free) | Web cookie | [link](https://chat.qwen.ai) | Open chat.qwen.ai, log in, then open DevTools → Application → Local Storage → copy the "token" value (or use tongyi_sso_ticket cookie as Bearer token). | emulated | | `t3-web` | `t3chat` | t3.chat (Pro/Free) | Web cookie | [link](https://t3.chat) | Open t3.chat in your browser, log in, then open DevTools → Application → Local Storage → https://t3.chat. Copy the value of 'convex-session-id'. Also open DevTools → Network, copy the Cookie header from any request. Paste both values here. See provider setup docs for a step-by-step guide. | emulated | +| `tinycms-web` | `tcw` | TinyCMS Web (Free/Sub) | Web cookie | [link](https://site.tinycms.xyz) | Go to site.tinycms.xyz, open DevTools → Application → Local Storage, copy the value of 'app-config-uuid' (starts with 'R'), and paste it here. | — | | `v0-vercel-web` | `v0-vercel-web` | v0 Vercel Web (Code Gen) | Web cookie | [link](https://v0.dev) | Paste your session cookie from v0.dev (DevTools → Application → Cookies) | — | | `venice-web` | `ven` | Venice Web (Privacy) | Web cookie | [link](https://venice.ai) | Paste your session cookie from venice.ai (DevTools → Application → Cookies) | — | | `yuanbao-web` | `ybw` | Tencent Yuanbao (Free) | Web cookie | [link](https://yuanbao.tencent.com) | Log in to yuanbao.tencent.com, then paste the full Cookie header (DevTools → Network → any /api request → Request Headers → Cookie). It must contain hy_user and hy_token. | — | -| `zai-web` | `zw` | Z.ai Web (Free) | Web cookie | [link](https://chat.z.ai) | Paste the full Cookie header from chat.z.ai (must include the token= cookie) | — | +| `zai-web` | `zw` | Z.ai Web | Web cookie | [link](https://chat.z.ai) | Copy the "token" value from chat.z.ai → DevTools → Application → Local Storage. Do not copy cookies; OmniRoute handles the per-request CAPTCHA through its browser transport. | — | | `zenmux-free` | `zmf` | ZenMux Free (Web) | Web cookie | [link](https://zenmux.ai) | Login at zenmux.ai, then export all cookies using EditThisCookie or Cookie-Editor and paste the full Cookie header string here. Refresh every ~30 days. | — | -## API Key Providers (paid / paid-with-free-credits) (196) +## API Key Providers (paid / paid-with-free-credits) (227) | ID | Alias | Name | Tags | Website | Notes | |----|-------|------|------|---------|-------| | `360ai` | `360ai` | 360 AI | API key | [link](https://ai.360.cn) | Get API key at ai.360.cn | | `agentrouter` | `agentrouter` | AgentRouter | API key, aggregator | [link](https://agentrouter.org) | $200 free credits on signup - multi-model routing gateway | -| `agnes` | `agnes` | Agnes AI | API key | [link](https://agnes-ai.com) | Get API key at agnes-ai.com | +| `agnes` | `agnes` | Agnes AI | API key, video | [link](https://agnes-ai.com) | Get API key at agnes-ai.com | | `ai21` | `ai21` | AI21 Labs | API key | [link](https://www.ai21.com) | $10 trial credits on signup (valid 3 months), no credit card required | | `aimlapi` | `aiml` | AI/ML API | API key, aggregator | [link](https://aimlapi.com) | Free tier paused (2026) — AI/ML API is now pay-as-you-go only (min $20 top-up); no recurring free credits. | | `ainative` | `ainative` | AINative Studio | API key | [link](https://ainative.studio) | Create a free API key at ainative.studio (no card), then paste it here as a Bearer token. | @@ -112,8 +133,10 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `alibaba-cn` | `ali-cn` | Alibaba (China) | API key | [link](https://dashscope.console.aliyun.com/) | — | | `ant-ling` | `ling` | Ant Ling / Ring (inclusionAI) | API key | [link](https://developer.ant-ling.com/en/docs/) | Register and create an API key at the Ant Ling API console (https://chat.ant-ling.com/open), then paste it here. OmniRoute routes chat traffic to https://api.ant-ling.com/v1/chat/completions; the provider is OpenAI-compatible and also exposes an Anthropic-compatible surface. | | `anthropic` | `anthropic` | Anthropic | API key | [link](https://platform.claude.com) | — | +| `anyapi` | `anyapi` | AnyAPI AI | API key, aggregator | [link](https://anyapi.ai) | Free plan: 100,000 ANY Tokens/day and 100 RPM for eligible Free/Basic models; no credit card required. | | `api-airforce` | `af` | Api.airforce | API key | [link](https://api.airforce) | 55 free tier models including Grok-3, Claude 3.7, Qwen3, Kimi-K2, Gemini 2.5 Flash, DeepSeek-V3 | | `arcee-ai` | `arcee` | Arcee AI | API key | [link](https://arcee.ai) | Get API key at arcee.ai | +| `auriko` | `auriko` | Auriko | API key, aggregator | [link](https://www.auriko.ai) | Free plan publishes 1,000 Platform RPM and 10,000 BYOK RPM. Platform inference still passes through provider cost; this is not a free-token pool or unlimited free inference. | | `azure-ai` | `azure-ai` | Azure AI Foundry | API key, enterprise | [link](https://learn.microsoft.com/azure/ai-foundry) | Use your Azure AI Foundry key. Base URL can be https://.services.ai.azure.com/openai/v1/ or https://.openai.azure.com/openai/v1/. | | `azure-openai` | `azure` | Azure OpenAI | API key, enterprise | [link](https://azure.microsoft.com/products/ai-services/openai-service) | Use your Azure OpenAI API key. Base URL should be your resource endpoint, for example https://my-resource.openai.azure.com. | | `bai` | `bai` | b.ai | API key | [link](https://b.ai) | Bearer API key for the b.ai OpenAI-compatible LLM gateway (distinct from TheB.AI). Create a key at https://docs.b.ai, then use https://api.b.ai/v1 as the OpenAI-compatible base URL. | @@ -130,10 +153,13 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `bytez` | `bytez` | Bytez | API key | [link](https://bytez.com) | $1 free credits, refreshes every 4 weeks | | `cerebras` | `cerebras` | Cerebras | API key | [link](https://inference.cerebras.ai) | Free Trial: 1M tokens/day, 30K TPM, 5 RPM — no credit card. | | `charm-hyper` | `charm-hyper` | Charm Hyper | API key | [link](https://hyper.charm.land) | 100 free monthly Hypercredits on signup | +| `chat-oripe` | `chat-oripe` | Chat Oripe | API key, aggregator | [link](https://api.oriper.com) | Official metadata advertises 2M tokens/month, but the public site and documentation were blocked during audit; treat the quota and brand mapping as unconfirmed. | +| `chatanywhere` | `chatanywhere` | ChatAnywhere | API key, aggregator | [link](https://chatanywhere.tech) | Personal, educational or research use only: public documentation cites 10,000 points/day and 200 requests/day per IP/key; do not use for commercial traffic. | | `cheaperinference` | `cinf` | Cheaper Inference | API key | [link](https://cheaperinference.com/?utm_source=omniroute) | — | | `chenzk` | `chenzk` | Chenzk API | API key | [link](https://chenzk.top) | — | | `chutes` | `chutes` | Chutes.ai | API key, aggregator | [link](https://chutes.ai) | Bearer API key for the Chutes OpenAI-compatible gateway. | | `clarifai` | `clarifai` | Clarifai | API key, enterprise | [link](https://docs.clarifai.com) | Use your Clarifai PAT or app-specific API key. OmniRoute targets the OpenAI-compatible endpoint at https://api.clarifai.com/v2/ext/openai/v1 and authenticates with Authorization: Key . | +| `cloudcode-one` | `cloudcode-one` | CloudCode.ONE | API key, aggregator | [link](https://cloudcode.one) | Published free models include glm-4.7-flash and glm-4.6v-flash; no numeric quota is published, and key creation may require credit or a coupon. | | `cloudflare-ai` | `cf` | Cloudflare Workers AI | API key | [link](https://developers.cloudflare.com/workers-ai) | Requires API Token AND Account ID (found at dash.cloudflare.com) | | `clova-studio` | `clova` | Naver CLOVA Studio | API key | [link](https://api.ncloud-docs.com/docs/en/ai-naver-clovastudio-summary) | — | | `codestral` | `codestral` | Codestral | API key | [link](https://mistral.ai) | — | @@ -141,9 +167,10 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `command-code` | `cmd` | Command Code | API key | [link](https://commandcode.ai/) | Use a Command Code API key. Requests are sent to Command Code's /alpha/generate endpoint. | | `coze` | `coze` | Coze | API key | [link](https://coze.com) | Get API key at coze.com/open/api | | `crof` | `crof` | CrofAI | API key | [link](https://crof.ai) | — | -| `dahl` | `dahl` | Dahl | API key | [link](https://inference.dahl.global) | Click 'Add Account' to auto-generate a token. | +| `dahl` | `dahl` | Dahl | API key | [link](https://inference.dahl.global) | Click 'Add Account' to auto-generate a token, or add a manual API key. | | `databricks` | `databricks` | Databricks | API key, enterprise | [link](https://www.databricks.com) | — | | `datarobot` | `datarobot` | DataRobot | API key, enterprise | [link](https://docs.datarobot.com) | Use your DataRobot API token. Optional Base URL can be the account root (for LLM Gateway) or a deployment URL under /api/v2/deployments/. | +| `deepai` | `deepai` | DeepAI | API key, image | [link](https://deepai.org) | Use your DeepAI API key. Get one at deepai.org — requires a Pro subscription ($9.99/mo). | | `deepinfra` | `deepinfra` | DeepInfra | API key | [link](https://deepinfra.com) | Free signup credits for API testing and model exploration | | `deepseek` | `ds` | DeepSeek | API key | [link](https://platform.deepseek.com) | 5M free tokens on signup - no credit card required | | `dgrid` | `dgrid` | DGrid | API key | [link](https://dgrid.ai) | DGrid Free Models Router: 10 requests/minute and 100 requests/day. A $5 lifetime top-up unlocks up to 20 requests/minute and 1,000 requests/day. | @@ -151,13 +178,18 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `digitalocean` | `digitalocean` | DigitalOcean | API key | [link](https://docs.digitalocean.com/products/ai-platform/) | — | | `dit` | `dai` | DIT.ai | API key | [link](https://dit.ai) | Use your dit.ai API key in Authorization: Bearer . Fully OpenAI-compatible — a drop-in replacement, just change the base URL to https://api.dit.ai/v1. | | `doubao` | `doubao` | Doubao | API key | [link](https://doubao.com) | Get API key at console.volcengine.com | +| `dxnt` | `dxnt` | DXNT / DX Token | API key, aggregator | [link](https://www.dxnt.com) | Free accounts are documented at 100 calls/day; the quota may increase through invitations and can vary by account. | +| `electronhub` | `electronhub` | Electron Hub | API key, aggregator | [link](https://www.electronhub.ai) | Free plan: 5 RPM, $0.25 weekly credits and 10 Neutrinos/day for :free models; family budgets also apply. | | `empower` | `empower` | Empower | API key, aggregator | [link](https://docs.empower.dev) | Bearer API key for the Empower OpenAI-compatible endpoint. | | `factory` | `factory` | Factory | API key | [link](https://factory.ai) | Bearer API key for the Factory OpenAI-compatible gateway. | | `fal-ai` | `fal` | Fal.ai | API key, image | [link](https://fal.ai) | — | +| `fastrouter` | `fastrouter` | FastRouter | API key, aggregator | [link](https://fastrouter.ai) | Models with the :free suffix allow 10 requests/day per organization and model; availability may change. | | `featherless-ai` | `featherless` | Featherless AI | API key | [link](https://featherless.ai) | Free tier available — no credit card required | | `fenayai` | `fenayai` | FenayAI | API key, aggregator | [link](https://fenayai.com) | Bearer API key for the FenayAI OpenAI-compatible gateway. | | `fireworks` | `fireworks` | Fireworks AI | API key | [link](https://fireworks.ai) | $1 free starter credits on signup for API testing | +| `free-ai` | `free-ai` | Free.ai | API key, aggregator | [link](https://free.ai) | 30,000 tokens/day cover self-hosted models after email verification. Usage beyond the pool can bill at raw cost, and premium external models are paid. | | `freeaiapikey` | `faik` | FreeAIAPIKey | API key | [link](https://freeaiapikey.com) | — | +| `freeinference` | `freeinference` | FreeInference | API key, aggregator | [link](https://freeinference.org) | Free research access without a card; non-Harvard applicants require manual approval and no numeric quota is publicly guaranteed. | | `freemodel-dev` | `fmd` | FreeModel.dev | API key | [link](https://freemodel.dev) | $300 free credits on signup — no credit card required. Access GPT-5.4 and GPT-5.5 (OpenAI's latest flagship models) through an OpenAI-compatible API. | | `freepik` | `fpk` | Freepik (Mystic) | API key, image | [link](https://freepik.com) | Get API key at freepik.com/developers (Mystic image endpoint) | | `freetheai` | `fta` | FreeTheAi | API key, aggregator | [link](https://freetheai.xyz) | Join the FreeTheAi Discord to get your free API key. | @@ -171,7 +203,6 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `gemini` | `gemini` | Gemini (Google AI Studio) | API key | [link](https://aistudio.google.com) | Free forever: 1,500 req/day for Gemini 2.5 Flash — no credit card, get key at aistudio.google.com | | `getgoapi` | `ggo` | GoAPI | API key, aggregator | [link](https://api.getgoapi.com) | — | | `gigachat` | `gigachat` | GigaChat (Sber) | API key | [link](https://developers.sber.ru) | — | -| `github-models` | `ghm` | GitHub Models | API key | [link](https://github.com/marketplace/models) | Create a GitHub PAT with 'models: read' scope at github.com/settings/tokens | | `gitlab` | `gitlab` | GitLab Duo PAT | API key | [link](https://docs.gitlab.com/user/duo_agent_platform/code_suggestions/) | GitLab personal access token for the public Code Suggestions API. Configure a self-hosted base URL when not using gitlab.com. | | `gitlawb` | `glb` | Gitlawb Opengateway (MiMo) | API key | [link](https://opengateway.gitlawb.com) | Free MiMo (xiaomi/mimo-v2.5) revoked 2026-05 — Opengateway is now a pay-as-you-go credit gateway; no recurring free model. | | `gitlawb-gmi` | `glb-gmi` | Gitlawb Opengateway (GMI Cloud) | API key | [link](https://opengateway.gitlawb.com) | Free Nemotron promo ended 2026-06 — the GMI Cloud route is now pay-as-you-go credit only. | @@ -182,6 +213,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `hackclub` | `hc` | Hackclub AI | API key, aggregator | [link](https://ai.hackclub.com) | Sign in with your Hack Club account at ai.hackclub.com. | | `haiper` | `hp` | Haiper | API key, video | [link](https://haiper.ai) | Get API key at haiper.ai/haiper-api | | `hcnsec` | `hcnsec` | Huancheng Public API | API key | [link](https://api.hcnsec.cn) | Get API key at api.hcnsec.cn | +| `helyxai` | `helyxai` | Helyx AI | API key, aggregator | [link](https://helyxai.space) | Operational Free plan documents 100,000 tokens/day; the site's separate 2M+ marketing claim conflicts and is not treated as a quota guarantee. | | `heroku` | `heroku` | Heroku AI | API key, enterprise | [link](https://www.heroku.com) | — | | `huggingface` | `hf` | HuggingFace | API key | [link](https://huggingface.co) | Free Inference API for thousands of models (Whisper, VITS, SDXL…) | | `hyperbolic` | `hyp` | Hyperbolic | API key | [link](https://hyperbolic.xyz) | $1-5 trial credits on signup for serverless inference | @@ -201,20 +233,29 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `laozhang` | `lz` | LaoZhang AI | API key, aggregator | [link](https://api.laozhang.ai) | — | | `leonardo` | `leo` | Leonardo AI | API key, video | [link](https://leonardo.ai) | Get API key at leonardo.ai/developer | | `liquid` | `liquid` | Liquid AI | API key | [link](https://liquid.ai) | Get API key at liquid.ai | +| `literouter` | `literouter` | LiteRouter | API key, aggregator | [link](https://literouter.com) | Free model variants use the :free suffix; daily credit limits vary by model and free input is capped at 5,000 tokens. | | `llamagate` | `llamagate` | LlamaGate | API key | [link](https://llamagate.ai) | — | -| `llm7` | `llm7` | LLM7.io | API key | [link](https://llm7.io) | No signup required - 2 req/s, 20 RPM, 100 req/hr free tier | +| `llm-kiwi` | `llmkiwi` | LLM.Kiwi | API key, aggregator | [link](https://llm.kiwi) | Free plan exposes auto and hrLLM; the published 40 requests/hour limit applies to hrLLM. | +| `llm7` | `llm7` | LLM7.io | API key | [link](https://llm7.io) | Use any non-empty key (for example 'unused'). If older built-in models return model_unavailable, use Available Models → Import from /models or Auto-Sync; verified live model: gemini-3.1-flash-lite. | +| `llmgateway` | `llmgateway` | LLM Gateway | API key, aggregator | [link](https://llmgateway.io) | Hosted Free plan: free-priced models are limited to 5 requests per 10 minutes when the account has no credits. | | `longcat` | `lc` | LongCat AI | API key | [link](https://longcat.chat/platform/docs) | Free: one-time 10M-token grant after account signup + KYC verification (LongCat-2.0). One-time only — not a recurring daily/monthly allowance. | | `maritalk` | `maritalk` | Maritalk | API key | [link](https://www.maritaca.ai) | — | +| `meganova-ai` | `meganova-ai` | MegaNova AI | API key, aggregator | [link](https://meganova.ai) | Free signup without a card. Published Tier 1 per-model quotas total 550 requests/day; they are not a shared global pool, and paid overage can apply if enabled. | | `meta-llama` | `meta` | Meta Llama API | API key | [link](https://llama.developer.meta.com) | — | | `minimax` | `minimax` | Minimax Coding | API key, video | [link](https://www.minimax.io) | — | | `minimax-cn` | `minimax-cn` | Minimax (China) | API key | [link](https://www.minimaxi.com) | — | | `mistral` | `mistral` | Mistral | API key | [link](https://mistral.ai) | Free Experiment tier: rate-limited access to all models, no credit card required | | `mixedbread` | `mxbai` | Mixedbread AI | API key | [link](https://www.mixedbread.com) | Bearer API key for the Mixedbread embeddings API. | +| `mixlayer` | `mixlayer` | Mixlayer | API key, aggregator | [link](https://www.mixlayer.com) | The qwen/qwen3.5-4b-free model is free for prototyping and rate-limited; no fixed public RPM or daily quota is confirmed. | +| `mnn-ai` | `mnn-ai` | MNN AI | API key, aggregator | [link](https://mnnai.ru) | Free plan: $1 monthly credits, 10 RPM and access only to models marked Free. | | `modal` | `mdl` | Modal | API key, enterprise | [link](https://modal.com/docs) | Use the bearer token that protects your Modal deployment, if enabled. Base URL should point to your OpenAI-compatible Modal app, for example https://--.modal.run/v1. | | `modelscope` | `ms` | ModelScope | API key | [link](https://modelscope.cn) | Free tier via ModelScope API-Inference — Alibaba account required. | | `monsterapi` | `monster` | MonsterAPI | API key | [link](https://monsterapi.ai) | Get API key at monsterapi.ai | | `moonshot` | `moonshot` | Kimi | API key | [link](https://platform.kimi.ai?aff=omniroute) | — | | `morph` | `morph` | Morph | API key | [link](https://morphllm.com) | Free tier: 250K credits/month, $0 | +| `muse-code` | `mc` | Muse Code (Meta) | API key | [link](https://github.com/meta-llama/llama-stack) | Use your META_API_KEY env var as a Bearer token. Muse Code CLI uses the OpenAI Responses API wire format (POST /responses). | +| `naga-ac` | `naga` | Naga.ac | API key, aggregator | [link](https://naga.ac) | Get API key at naga.ac — Google/GitHub/Discord signup available. | +| `naga-ai` | `naga-ai` | Naga AI | API key, aggregator | [link](https://naga.ac) | Models marked :free are publicly listed, but no numeric quota is confirmed. Naga's policy warns that free-tier prompts and outputs may be collected or used for training. | | `nanogpt` | `nanogpt` | NanoGPT | API key | [link](https://nano-gpt.com) | — | | `nara` | `nara` | NaraRouter | API key | [link](https://bynara.id) | Get a free API key via NaraRouter's Telegram channel, then paste it here as a Bearer token. | | `navy` | `navy` | NavyAI | API key | [link](https://api.navy) | Create a free API key from the NavyAI dashboard, then paste it here as a Bearer token. | @@ -227,11 +268,13 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `nube` | `nube` | Nube.sh | API key | [link](https://nube.sh) | — | | `nvidia` | `nvidia` | NVIDIA NIM | API key | [link](https://build.nvidia.com) | Free dev access: ~40 RPM, 70+ models (Kimi K2.5, GLM 4.7, DeepSeek V3.2...) | | `oci` | `oci` | OCI Generative AI | API key, enterprise | [link](https://www.oracle.com/artificial-intelligence/generative-ai) | Use your OCI Generative AI API key or IAM bearer token. Base URL can be https://inference.generativeai..oci.oraclecloud.com/openai/v1/. | +| `ofoxai` | `ofoxai` | OfoxAI | API key, aggregator | [link](https://ofox.ai) | The current catalog advertises 10+ free models without a public numeric quota; review upstream provenance, retention and training terms before production use. | | `ollama-cloud` | `ollamacloud` | Ollama Cloud | API key | [link](https://ollama.com/settings/keys) | — | | `openadapter` | `oad` | OpenAdapter | API key | [link](https://openadapter.dev) | Use your OpenAdapter API key in Authorization: Bearer sk-cv-. Fully OpenAI-compatible. API base URL: https://api.openadapter.in/v1. | | `openai` | `openai` | OpenAI | API key | [link](https://platform.openai.com) | — | | `opencode-go` | `opencode-go` | OpenCode Go | API key | [link](https://opencode.ai/go) | — | | `opencode-zen` | `opencode-zen` | OpenCode Zen | API key | [link](https://opencode.ai/zen) | — | +| `openference-api` | `ofa` | Openference API | API key | [link](https://openference.com) | Free plan: 3-day trial with open-source models — no credit card required | | `openrouter` | `openrouter` | OpenRouter | API key, aggregator | [link](https://openrouter.ai) | Free models at $0/token with :free suffix - 20 RPM / 200 RPD | | `openvecta` | `openvecta` | OpenVecta | API key | [link](https://openvecta.com) | Free credits on signup for OpenAI-compatible inference across LLMs, embeddings, and reasoning models | | `orcarouter` | `orcarouter` | OrcaRouter | API key | [link](https://www.orcarouter.ai) | — | @@ -241,7 +284,9 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `pioneer` | `pn` | Pioneer AI | API key | [link](https://pioneer.ai) | $75 free usage credits — no credit card required | | `plamo` | `plamo` | PLaMo | API key | [link](https://plamo.preferredai.jp/api) | — | | `poe` | `poe` | Poe | API key, aggregator | [link](https://creator.poe.com/api-reference) | Bearer API key for the Poe OpenAI-compatible API. | -| `pollinations` | `pol` | Pollinations AI | API key, video | [link](https://pollinations.ai) | Free keyless tier: openai, openai-fast, openai-large, qwen-coder, mistral, deepseek, grok, gemini-flash-lite-3.1, perplexity-fast, perplexity-reasoning. Premium models (claude, gemini, midijourney) require a Pollinations API key from enter.pollinations.ai. | +| `poixe-ai` | `poixe-ai` | Poixe AI | API key, aggregator | [link](https://poixe.com) | Current public free limits are small and model-group specific: 2 RPM/5 RPD for large-cup models and 20 RPM/50 RPD for small-cup models. | +| `pollinations` | `pol` | Pollinations AI | API key, video | [link](https://pollinations.ai) | Anonymous/keyless access to the documented free models is best-effort. Local v3.8.50 verification (2026-07-31) returned 401 via OmniRoute and Cloudflare 1010 on direct upstream probes from the same network. Premium models still require a Pollinations API key from enter.pollinations.ai. | +| `poolside` | `poolside` | Poolside | API key | [link](https://poolside.ai) | Laguna S 2.1 and XS 2.1 are free during Preview; no public numeric quota is published. | | `predibase` | `predibase` | Predibase | API key | [link](https://predibase.com) | ⚠️ **DEPRECATED.** serving.app.predibase.com no longer resolves (sweep 2026-06-19); the managed serving API appears discontinued. | | `publicai` | `publicai` | PublicAI | API key | [link](https://publicai.co) | Requires an API key — one-time signup credit, then paid | | `puter` | `pu` | Puter AI | API key | [link](https://puter.com) | Get token at puter.com/dashboard → Copy Auth Token | @@ -250,6 +295,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `qwen-cloud` | `qwc` | Qwen Cloud | API key | [link](https://www.qwencloud.com/) | — | | `qwen-cloud-token-plan` | `qct` | Qwen Cloud Token Plan | API key | [link](https://www.qwencloud.com/pricing/token-plan) | — | | `recraft` | `recraft` | Recraft | API key, image | [link](https://recraft.ai) | — | +| `regolo` | `regolo` | Regolo AI | API key | [link](https://regolo.ai) | Get your Regolo API key from regolo.ai, then paste it here as a Bearer token. | | `reka` | `reka` | Reka | API key | [link](https://docs.reka.ai/chat/overview) | Use your Reka API key. OmniRoute supports the OpenAI-compatible base URL https://api.reka.ai/v1 and sends both Authorization and X-Api-Key headers for compatibility. | | `requesty` | `requesty` | Requesty | API key | [link](https://requesty.ai) | Free tier ~200 requests/day - multi-model routing gateway (300+ models) | | `routeway` | `routeway` | Routeway | API key | [link](https://routeway.ai) | Create a free API key at routeway.ai, then paste it here as a Bearer token. | @@ -264,6 +310,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `siliconflow` | `siliconflow` | SiliconFlow | API key | [link](https://cloud.siliconflow.com) | $1 free credits plus permanently free models after identity verification | | `snowflake` | `snowflake` | Snowflake Cortex | API key, enterprise | [link](https://www.snowflake.com) | — | | `sparkdesk` | `sparkdesk` | SparkDesk | API key | [link](https://xinghuo.xfyun.cn) | Get API key at console.xfyun.cn | +| `speka` | `speka` | Speka AI | API key, aggregator | [link](https://speka.me) | Free plan: $1 monthly usage, 10 RPM, one API key and access to open models and the playground; no card required. | | `stability-ai` | `stability` | Stability AI | API key, image | [link](https://stability.ai) | — | | `stepfun` | `stepfun` | StepFun | API key | [link](https://stepfun.com) | Get API key at platform.stepfun.com | | `sumopod` | `sumopod` | SumoPod | API key | [link](https://ai.sumopod.com) | Use your SumoPod API key (sk-...) in Authorization: Bearer . Fully OpenAI-compatible. API base URL: https://ai.sumopod.com/v1. | @@ -273,11 +320,13 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `thebai` | `thebai` | TheB.AI | API key, aggregator | [link](https://theb.ai) | Bearer API key for the TheB.AI OpenAI-compatible gateway. | | `tinyfish` | `tf` | TinyFish Fetch | API key | [link](https://docs.tinyfish.ai/fetch-api) | X-API-Key from agent.tinyfish.ai/api-keys | | `together` | `together` | Together AI | API key, video | [link](https://www.together.ai) | — | +| `tokenreply` | `tokenreply` | TokenReply | API key, aggregator | [link](https://www.tokenreply.com) | Free-tagged models have model- and campaign-specific daily limits; no fixed global free quota is published. | | `tokenrouter` | `trk` | TokenRouter | API key | [link](https://tokenrouter.com) | Use your TokenRouter API key in Authorization: Bearer . Fully OpenAI-compatible. API base URL: https://api.tokenrouter.com/v1. | | `topaz` | `topaz` | Topaz | API key, image | [link](https://topazlabs.com) | — | | `typhoon` | `typhoon` | Typhoon | API key | [link](https://docs.opentyphoon.ai) | Free API key with a 5 req/s and 200 req/m rate limit. | | `udio` | `udio` | Udio | API key | [link](https://udio.com) | Paste session cookie from udio.com (Supabase auth) | -| `uncloseai` | `unc` | UncloseAI | API key | [link](https://uncloseai.com) | No auth required. API accepts any non-empty string as key for identification. | +| `uncloseai` | `unc` | UncloseAI | API key | [link](https://uncloseai.com) | No auth required. API accepts any non-empty string as key for identification. If older built-in models return 404, use Available Models → Import from /models or Auto-Sync; verified live model: solidrust/Hermes-3-Llama-3.1-8B-AWQ. | +| `unorouter` | `unorouter` | UnoRouter | API key, aggregator | [link](https://unorouter.ai) | Models with the :free suffix do not debit balance; limit is 1 request/minute per free model per user. | | `upstage` | `upstage` | Upstage | API key | [link](https://www.upstage.ai) | — | | `v0-vercel` | `v0` | v0 (Vercel) | API key | [link](https://v0.dev) | — | | `venice` | `venice` | Venice.ai | API key | [link](https://venice.ai) | — | @@ -295,8 +344,11 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `xiaomi-mimo` | `mimo` | Xiaomi MiMo | API key | [link](https://mimo.mi.com) | — | | `xiaomi-mimo-token-plan` | `mimotp` | Xiaomi MiMo Token Plan | API key | [link](https://mimo.mi.com) | — | | `yi` | `yi` | Yi (01.AI) | API key | [link](https://01.ai) | Get API key at platform.lingyiwanwu.com | +| `yolo-auto` | `yolo-auto` | Yolo-Auto | API key, aggregator | [link](https://yolo-auto.com) | Free API access is request-limited and intended for testing; no numeric daily quota is published and free access is not promised indefinitely. | | `zai` | `zai` | Z.AI | API key | [link](https://open.bigmodel.cn) | — | | `zenmux` | `zm` | ZenMux | API key | [link](https://zenmux.ai) | Use your ZenMux API key in Authorization: Bearer . ZenMux is fully OpenAI-compatible. Base URL: https://zenmux.ai/api/v1. | +| `zerolimitai` | `zerolimitai` | ZeroLimitAI | API key, aggregator | [link](https://www.zerolimitai.com) | Temporary free trial is advertised, but official pages conflict between 3 and 7 days; a 100-calls/day claim is not treated as permanent. | +| `zylo-api` | `zylo` | Zylo API | API key, aggregator | [link](https://zyloai.net) | Basic plan: 10 RPM, 7,200 requests/day and 200,000 tokens/day; limited to Basic text models. | ## Local Providers (12) @@ -321,7 +373,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each |----|-------|------|------|---------|-------| | `brave-search` | `brave-search` | Brave Search | Search | [link](https://brave.com/search/api) | Subscription token from Brave Search API dashboard | | `exa-search` | `exa-search` | Exa Search | Search | [link](https://exa.ai) | API key from dashboard.exa.ai | -| `firecrawl` | `fc` | Firecrawl | Search | [link](https://firecrawl.dev) | — | +| `firecrawl` | `fc` | Firecrawl | Search | [link](https://firecrawl.dev) | API key from firecrawl.dev/app/api-keys (or set your self-hosted Firecrawl base URL) | | `google-pse-search` | `google-pse` | Google Programmable Search | Search | [link](https://developers.google.com/custom-search/v1/overview) | Requires a Google API key and your Programmable Search Engine ID (cx) | | `linkup-search` | `linkup` | Linkup Search | Search | [link](https://docs.linkup.so) | Bearer API key from the Linkup dashboard | | `ollama-search` | `ollama-search` | Ollama Search | Search | [link](https://ollama.com/settings/keys) | Same API key as Ollama Cloud (from ollama.com/settings/keys) | @@ -332,7 +384,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `tavily-search` | `tavily-search` | Tavily Search | Search | [link](https://tavily.com) | API key from app.tavily.com (format: tvly-...) | | `youcom-search` | `youcom-search` | You.com Search | Search | [link](https://you.com/business/api/) | X-API-Key from the You.com platform dashboard | -## Audio-only Providers (11) +## Audio-only Providers (12) | ID | Alias | Name | Tags | Website | Notes | |----|-------|------|------|---------|-------| @@ -346,6 +398,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `inworld` | `inworld` | Inworld | Audio | [link](https://inworld.ai) | — | | `playht` | `playht` | PlayHT | Audio | [link](https://play.ht) | — | | `rev-ai` | `revai` | Rev AI | Audio | [link](https://www.rev.ai) | — | +| `soniox` | `sx` | Soniox | Audio | [link](https://soniox.com) | — | | `speechmatics` | `sm` | Speechmatics | Audio | [link](https://www.speechmatics.com) | Free tier — 8 hours/month, no credit card required. Batch (async) mode only. | ## Upstream Proxy Providers (2) @@ -373,7 +426,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each - Catalog: [`src/shared/constants/providers.ts`](../../src/shared/constants/providers.ts) - Registry (per-model details): [`open-sse/config/providerRegistry.ts`](../../open-sse/config/providerRegistry.ts) -- Executors: [`open-sse/executors/`](../../open-sse/executors/) (31 files) +- Executors: [`open-sse/executors/`](../../open-sse/executors/) (101 implementations) - Translators: [`open-sse/translator/`](../../open-sse/translator/) ## See Also diff --git a/docs/reference/meta.json b/docs/reference/meta.json index 83b8179b0f..cff028c28e 100644 --- a/docs/reference/meta.json +++ b/docs/reference/meta.json @@ -7,6 +7,9 @@ "FEATURE_FLAGS", "FREE_TIERS", "FREE_PROXIES_API", - "PROVIDER_REFERENCE" + "PROVIDER_REFERENCE", + "PROVIDER_PLUGIN_MANIFEST", + "RELAY_BACKEND_STRATEGY", + "RELAY_TROUBLESHOOTING" ] } diff --git a/docs/routing/AUTO-COMBO.md b/docs/routing/AUTO-COMBO.md index 1b42354be7..7a0b387191 100644 --- a/docs/routing/AUTO-COMBO.md +++ b/docs/routing/AUTO-COMBO.md @@ -161,11 +161,11 @@ The detection helper lives in `src/lib/combos/modelNameCollision.ts`. ## How It Works (Persisted Auto-Combos) -The Auto-Combo Engine dynamically selects the best provider/model for each request using a **13-factor scoring function** (defined in `open-sse/services/autoCombo/scoring.ts` → `DEFAULT_WEIGHTS`). All weights sum to **1.0**. +The Auto-Combo Engine dynamically selects the best provider/model for each request using a **14-factor scoring function** (defined in `open-sse/services/autoCombo/scoring.ts` → `DEFAULT_WEIGHTS`). Weights form a normalized distribution (custom weights are renormalized by `normalizeScoringWeights()`). -![Auto-Combo 12-factor scoring](../diagrams/exported/auto-combo-12factor.svg) +![Auto-Combo 14-factor scoring](../diagrams/exported/auto-combo-12factor.svg) -> Source: [diagrams/auto-combo-12factor.mmd](../diagrams/auto-combo-12factor.mmd) (regenerate via `npm run docs:render-diagrams`). Diagram/filename predate the `cacheAffinity` factor added by #8008 and still show 12 factors. +> Source: [diagrams/auto-combo-12factor.mmd](../diagrams/auto-combo-12factor.mmd) (regenerate via `npm run docs:render-diagrams`). The filename predates the current factor set; the diagram shows 13 of the 14 factors (missing `sessionAvailability`). | Factor | Default Weight | Description | | :-------------------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | @@ -179,11 +179,12 @@ The Auto-Combo Engine dynamically selects the best provider/model for each reque | `tierAffinity` | 0.05 | Affinity between the candidate's tier and the manifest-recommended tier | | `specificityMatch` | 0.05 | Match between request specificity (manifest hint) and model tier | | `contextAffinity` | 0.05 | Affinity between the request's context-window need and the model's context window | +| `sessionAvailability` | 0.05 | OAuth session availability of the candidate connection for this session (`getOAuthSessionAvailability()`; non-OAuth connections score 1.0) | | `connectionDensity` | 0.05 | Spreads load across connections of the same provider (anti-concentration) | | `cacheAffinity` | 0.00 | Rendezvous-hash affinity toward the connection likeliest to already hold this request's prompt-cache prefix (`open-sse/services/combo/promptCacheAffinity.ts`); disabled by default (#8008) | | `resetWindowAffinity` | 0.00 | Bias toward connections whose quota reset window is favorable (disabled by default) | -**Sum:** `0.20 + 0.15 + 0.15 + 0.12 + 0.08 + 0.05 + 0.05 + 0.05 + 0.05 + 0.05 + 0.05 + 0.00 + 0.00 = 1.0` (validated by `validateWeights()`). +**Sum:** `0.20 + 0.15 + 0.15 + 0.12 + 0.08 + 0.05 + 0.05 + 0.05 + 0.05 + 0.05 + 0.05 + 0.05 + 0.00 + 0.00 = 1.05` as literally declared in `DEFAULT_WEIGHTS`; user-configured weights are renormalized into a distribution by `normalizeScoringWeights()` before scoring. ## Mode Packs @@ -654,7 +655,7 @@ Including the bare `auto` (default) plus the 6 `AutoVariant` values declared in ## How tiers fit Auto-Combo -The 12-factor scoring function (`open-sse/services/autoCombo/scoring.ts`) treats tier +The 14-factor scoring function (`open-sse/services/autoCombo/scoring.ts`) treats tier membership as two signals: `tierPriority` (0.05) and `tierAffinity` (0.05). See the canonical [scoring factor table](#how-it-works-persisted-auto-combos) above for the full `DEFAULT_WEIGHTS` set — the per-pack overrides (ship-fast/cost-saver/quality-first/ diff --git a/docs/routing/meta.json b/docs/routing/meta.json index b785a1b930..32299e1f0b 100644 --- a/docs/routing/meta.json +++ b/docs/routing/meta.json @@ -1,4 +1,4 @@ { "title": "Routing", - "pages": ["AUTO-COMBO", "QUOTA_SHARE", "REASONING_REPLAY"] + "pages": ["AUTO-COMBO", "QUOTA_SHARE", "REASONING_REPLAY", "REASONING_ROUTING"] } diff --git a/docs/security/PUBLIC_CREDS.md b/docs/security/PUBLIC_CREDS.md index ec8c8970e6..8e8e7ff19b 100644 --- a/docs/security/PUBLIC_CREDS.md +++ b/docs/security/PUBLIC_CREDS.md @@ -1,14 +1,14 @@ --- title: "Public Credentials Handling" -version: 3.8.40 -lastUpdated: 2026-06-28 +version: 3.8.50 +lastUpdated: 2026-08-07 --- # Public Credentials Handling > **Source of truth:** `open-sse/utils/publicCreds.ts` > **Tests:** `tests/unit/publicCreds.test.ts` -> **Last updated:** 2026-06-28 — v3.8.40 +> **Last updated:** 2026-08-07 — v3.8.50 > **Audience:** Engineers integrating providers that ship public OAuth client_id / client_secret / Firebase Web API keys in their public CLIs. > **Status:** **MANDATORY** for all new code that embeds upstream identifiers. @@ -18,7 +18,7 @@ lastUpdated: 2026-06-28 - [OAuth 2.0 for native apps (PKCE)](https://developers.google.com/identity/protocols/oauth2/native-app) — OAuth client_id / client_secret for installed apps are public; PKCE provides the actual security. - [Firebase API keys](https://firebase.google.com/docs/projects/api-keys) — Web client identifiers are public by design. -OmniRoute must embed these values so users who do not configure `.env` still get a working OAuth flow out of the box. Without an embedded fallback, the Gemini / Antigravity / Windsurf providers stop working for any user who follows the "just clone and run" path. +OmniRoute must embed these values so users who do not configure `.env` still get a working OAuth flow out of the box. Without an embedded fallback, the Gemini / Antigravity providers stop working for any user who follows the "just clone and run" path. However, literal values like `AIzaSy…`, `GOCSPX-…`, `…apps.googleusercontent.com` are matched by **GitHub Secret Scanning**, **Semgrep**, and similar pattern scanners. Every release becomes a noisy stream of false positives, push protection blocks legitimate commits, and operators stop trusting the alert feed. diff --git a/docs/security/meta.json b/docs/security/meta.json index acfb4c28c4..33ab9c576e 100644 --- a/docs/security/meta.json +++ b/docs/security/meta.json @@ -6,8 +6,12 @@ "ERROR_SANITIZATION", "ROUTE_GUARD_TIERS", "BAN_DETECTION", + "AGENTROUTER_WAF", + "CORS", "STEALTH_GUIDE", "EGRESS_POLICY", + "MITM-TPROXY-DECRYPT", + "SUPPLY_CHAIN", "COMPLIANCE", "SOCKET_DEV_FINDINGS", "CLI_TOKEN" diff --git a/docs/sessions/20260714-issue-agent-executable-triage/00_SESSION_OVERVIEW.md b/docs/sessions/20260714-issue-agent-executable-triage/00_SESSION_OVERVIEW.md deleted file mode 100644 index ee14070eb6..0000000000 --- a/docs/sessions/20260714-issue-agent-executable-triage/00_SESSION_OVERVIEW.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: "Issue-Agent Executable Triage: Session Overview" -version: 3.8.50 -lastUpdated: 2026-08-06 ---- - -# Issue-Agent Executable Triage: Session Overview - -Machine status: `in_progress` -Updated at: `2026-07-14` -Issue: `https://github.com/diegosouzapw/OmniRoute/issues/5980` -PR: `https://github.com/diegosouzapw/OmniRoute/pull/7002` - -## Goal - -Deliver GitHub issue #5980 as a production issue-agent workflow. The workflow -must execute recorded GitHub triage through OmniRoute routing, persist a complete -audit trail, return an actionable result, and cover all terminal outcomes. - -## Current State - -| artifact_id | requirement | status | current evidence | next proof | -| ----------- | ---------------------------------------------------------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | -| AC1 | configured provider/model/policy use normal chat routing | `implemented_pending_acceptance` | `623e0d541`, `fa2c1d7c6`; real-route test invokes the issue-agent route and mocks only provider HTTP | prove routing-policy semantics and terminal failure handling | -| AC2 | persist lifecycle, request, output, usage/cost/runtime, terminal error | `not_started` | audit JSONL currently records only pre-execution run context | lifecycle persistence tests | -| AC3 | return actionable triage result | `not_started` | route forwards raw completion body | result contract and integration test | -| AC4 | success, provider failure, timeout, budget stop | `not_started` | only success-route coverage exists | terminal-outcome test matrix | -| release | CI/review evidence | `in_progress` | route-validation and focused tests have prior passing evidence | rerun final gates on PR head | - -## Decisions - -| decision_id | decision | rationale | status | -| ----------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ------------- | -| DEC-001 | Use the in-process `POST` export from `/api/v1/chat/completions` | preserves existing admission, initialization, guardrails, and provider routing | `implemented` | -| DEC-002 | Keep issue-agent execution opt-in with `OMNIROUTE_ISSUE_AGENT_ENABLED=true` | prevents unrequested autonomous execution | `implemented` | -| DEC-003 | Treat AC1 as incomplete until policy and error semantics are verified end-to-end | request construction alone does not prove the chat route consumes the policy or returns correct terminal state | `active` | - -## Traceability - -The canonical WBS is `03_DAG_WBS.md`; the canonical QA matrix is -`06_TESTING_STRATEGY.md`. Every status change must identify its commit SHA, -exact command, observed result, and PR head. diff --git a/docs/sessions/20260714-issue-agent-executable-triage/01_RESEARCH.md b/docs/sessions/20260714-issue-agent-executable-triage/01_RESEARCH.md deleted file mode 100644 index 242e08186d..0000000000 --- a/docs/sessions/20260714-issue-agent-executable-triage/01_RESEARCH.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: "Issue-Agent Executable Triage: Research" -version: 3.8.50 -lastUpdated: 2026-08-06 ---- - -# Issue-Agent Executable Triage: Research - -Machine status: `complete_for_current_phase` - -## In-Repository Findings - -| research_id | source | finding | consequence | -| ----------- | ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| RES-001 | `src/app/api/issue-agent/runs/route.ts` | the endpoint validates body, rejects unsupported mode/disabled execution, builds recorded context, writes audit JSONL, then delegates non-dry runs | execution behavior is centralized at the issue-agent route | -| RES-002 | `src/app/api/v1/chat/completions/route.ts` | standard chat entrypoint exports `POST` and owns the normal chat request path | AC1 must exercise this export rather than a fake internal seam | -| RES-003 | `src/lib/issueAgent/execution.ts` | provider and model are resolved into the chat request; policy is only encoded as `X-OmniRoute-Mode` | an implementation review must establish that this header is a consumed routing-policy contract | -| RES-004 | `src/lib/issueAgent/audit.ts` | audit persistence occurs before execution and writes run context/steps only | AC2 is unsatisfied: no transition, completion, usage/cost/runtime, or terminal-error record exists | -| RES-005 | `tests/unit/issue-agent-route-execution.test.ts` | live route test initializes isolated DB, calls the actual issue-agent `POST`, and mocks only `globalThis.fetch` at provider boundary | strong AC1 path evidence, but it verifies success only and does not prove policy consumption | - -## Validation Evidence - -| evidence_id | command | observed | scope | evidence_sha | -| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ----------------------------------------------------- | ------------ | -| EVD-001 | `bun test tests/unit/issue-agent-execution.test.ts tests/unit/issue-agent-route-execution.test.ts tests/unit/issue-agent-runs-route.test.ts` | prior focused run reported green | AC1 focused path | `fa2c1d7c6` | -| EVD-002 | `npm run check:route-validation:t06` | prior run reported pass | request route validation | `e6a63eb33` | -| EVD-003 | `npm run typecheck:core` | unresolved `omniglyph` declarations outside issue-agent paths | release gate blocked by pre-existing unrelated errors | pre-existing | - -## Research Conclusions - -The normal chat route is correctly selected as the AC1 integration seam. The -remaining design work must use a persisted run-lifecycle model rather than -extending the pre-execution JSONL row. No external API research was needed: -the implementation uses existing in-repository routes and provider adapters. diff --git a/docs/sessions/20260714-issue-agent-executable-triage/02_SPECIFICATIONS.md b/docs/sessions/20260714-issue-agent-executable-triage/02_SPECIFICATIONS.md deleted file mode 100644 index 5024487d7b..0000000000 --- a/docs/sessions/20260714-issue-agent-executable-triage/02_SPECIFICATIONS.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "Issue-Agent Executable Triage: Specifications" -version: 3.8.50 -lastUpdated: 2026-08-06 ---- - -# Issue-Agent Executable Triage: Specifications - -Machine status: `in_progress` - -## Acceptance Contract - -| ac_id | requirement | acceptance evidence | status | -| ----- | --------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | -| AC1 | Non-dry recorded triage executes through normal chat routing with selected provider, model, and policy | actual issue-agent route reaches chat `POST`; provider-boundary mock observes selected target; policy is proven consumed by routing | `implemented_pending_acceptance` | -| AC2 | Persist `accepted`, `running`, and terminal state plus sanitized request/prompt, model output, usage, cost, runtime, and terminal error | durable queryable record contains each field for success and failures | `pending` | -| AC3 | API returns a useful, structured triage result derived from model output | response has stable triage schema and is not a raw opaque provider payload | `pending` | -| AC4 | Tests cover success, provider/model failure, timeout, and budget stop | each outcome asserts HTTP response and persisted terminal record | `pending` | - -## API Contract (Target) - -| field | rule | -| ------------------- | -------------------------------------------------------------------------------------------------------------------------- | -| `mode` | must be `recorded-triage` | -| execution selection | accepts configured `provider`, `model`, `routingPolicy`, and bounded `timeoutMs` | -| `runId` | stable execution identifier returned for every accepted run | -| result | includes structured triage decision/summary/actions and execution metadata | -| errors | return sanitized terminal error with explicit terminal status; never leak provider credentials or unredacted issue content | - -## Persistence Contract (Target) - -| field group | required values | -| -------------- | --------------------------------------------------------------------------------------------------------- | -| identity | run ID, issue URL/repository/number, mode, timestamps | -| lifecycle | `accepted`, `running`, `succeeded`, `failed`, `timed_out`, or `budget_stopped` with transition timestamps | -| input | redacted recorded context and rendered prompt fingerprint/content according to retention policy | -| routing | requested provider/model/policy and resolved execution target | -| output | sanitized model output and structured triage result | -| accounting | input/output/total tokens, cost, and runtime when available | -| terminal error | normalized code/message for failure, timeout, and budget stop | - -## Assumptions, Risks, Uncertainties - -| aru_id | type | statement | mitigation | status | -| ------- | ----------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------ | -| ARU-001 | risk | `X-OmniRoute-Mode` may not be a consumed routing-policy input in the chat route | trace the policy contract and test an observable policy effect | `open` | -| ARU-002 | risk | current catch maps all thrown execution errors to HTTP 400 and does not persist them | introduce typed terminal outcomes and persistence before response mapping | `open` | -| ARU-003 | risk | current audit row is emitted before execution and cannot represent final execution state | replace/extend with append-only lifecycle records or durable run storage | `open` | -| ARU-004 | uncertainty | provider response metadata may differ by adapter | normalize accounting fields and preserve unknowns explicitly | `open` | diff --git a/docs/sessions/20260714-issue-agent-executable-triage/03_DAG_WBS.md b/docs/sessions/20260714-issue-agent-executable-triage/03_DAG_WBS.md deleted file mode 100644 index 959660d714..0000000000 --- a/docs/sessions/20260714-issue-agent-executable-triage/03_DAG_WBS.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "Issue-Agent Executable Triage: DAG and WBS" -version: 3.8.50 -lastUpdated: 2026-08-06 ---- - -# Issue-Agent Executable Triage: DAG and WBS - -Machine status: `in_progress` - -| id | phase | acceptance criterion | status | source paths | test paths | evidence_sha | depends_on | -| ------- | ----------- | ---------------------------------------------------------------- | -------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | --------------------------- | ------------------------- | -| WBS-001 | contract | AC1-AC4 | complete | `src/app/api/issue-agent/runs/route.ts` | `tests/unit/issue-agent-runs-route.test.ts` | `a4378a26d` | - | -| WBS-002 | execution | AC1: execute through normal chat-completions routing/policy seam | pending | `src/app/api/issue-agent/runs/route.ts`; `src/app/api/v1/chat/completions/route.ts` | `tests/unit/issue-agent-runs-route.test.ts` | `e6a` (reconciled baseline) | WBS-001 | -| WBS-003 | persistence | AC2: persist lifecycle, input, output, usage, and terminal error | pending | `src/lib/issueAgent/*`; `src/app/api/issue-agent/runs/route.ts` | `tests/unit/issue-agent-audit.test.ts`; `tests/unit/issue-agent-runner.test.ts` | `e6a` (reconciled baseline) | WBS-002 | -| WBS-004 | result | AC3: return an actionable triage result from execution | pending | `src/lib/issueAgent/*`; `src/app/api/issue-agent/runs/route.ts` | `tests/unit/issue-agent-runner.test.ts`; `tests/unit/issue-agent-runs-route.test.ts` | `e6a` (reconciled baseline) | WBS-002, WBS-003 | -| WBS-005 | acceptance | AC4: cover success, provider failure, timeout, and budget stop | pending | `src/lib/issueAgent/*` | `tests/unit/issue-agent-*.test.ts` | `e6a` (reconciled baseline) | WBS-002, WBS-003, WBS-004 | -| WBS-006 | release | PR validation and maintainer review | pending | `.github/workflows/*` | CI checks | `a4378a26d` | WBS-005 | - -## Dependency Graph - -`WBS-001 -> WBS-002 -> WBS-003 -> WBS-004 -> WBS-005 -> WBS-006` - -`a4378a26d` is a prerequisite validation repair: it validates the issue-agent request body through the shared route validator and passes `npm run check:route-validation:t06` (535 routes). It does not satisfy AC1-AC4. - -## Machine Evidence Contract - -Every WBS item must maintain: `id`, `acceptance_criterion`, `status`, `source_paths`, `test_paths`, `command`, `expected`, `observed`, `evidence_sha`, `updated_at`, and `pr_url`. - -PR: `https://github.com/diegosouzapw/OmniRoute/pull/7002` -Issue: `https://github.com/diegosouzapw/OmniRoute/issues/5980` diff --git a/docs/sessions/20260714-issue-agent-executable-triage/04_IMPLEMENTATION_STRATEGY.md b/docs/sessions/20260714-issue-agent-executable-triage/04_IMPLEMENTATION_STRATEGY.md deleted file mode 100644 index 42909529c2..0000000000 --- a/docs/sessions/20260714-issue-agent-executable-triage/04_IMPLEMENTATION_STRATEGY.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: "Issue-Agent Executable Triage: Implementation Strategy" -version: 3.8.50 -lastUpdated: 2026-08-06 ---- - -# Issue-Agent Executable Triage: Implementation Strategy - -Machine status: `in_progress` - -## Phase Plan - -| phase | work package | dependency | exit evidence | status | -| ----- | ----------------------------------------------------------- | ----------------- | ----------------------------------------------------------------------- | ------------- | -| P1 | verify/finish routing-policy contract and failure semantics | existing AC1 seam | actual chat route test proves policy consumption and non-2xx mapping | `in_progress` | -| P2 | introduce durable execution lifecycle persistence | P1 | records transitions, request/prompt, output, accounting, terminal error | `pending` | -| P3 | normalize actionable triage result | P2 | stable API result schema derived from completion | `pending` | -| P4 | implement terminal outcome controls | P2 | provider failure, timeout, budget stop transition tests | `pending` | -| P5 | release validation and PR review | P1-P4 | focused tests, route gate, relevant typecheck/CI evidence | `pending` | - -## Architecture - -1. Keep `src/app/api/issue-agent/runs/route.ts` as the API adapter: validation, - feature gate, and response formatting only. -2. Keep the standard chat `POST` as the routing boundary; do not add a parallel - provider invocation path. -3. Extract lifecycle persistence and result normalization into focused - `src/lib/issueAgent/` modules. Do not overload the existing pre-execution audit - writer with unrelated transport behavior. -4. Use typed execution outcomes so provider failure, abort/timeout, and budget - termination are distinguishable before HTTP mapping and persistence. -5. Add tests from the actual route down to a mocked external provider boundary; - use unit tests for pure normalization and lifecycle state transitions. - -## Quality Controls - -| control | command or review | threshold | -| ------------------ | ----------------------------------------------------- | ---------------------------------------------------------- | -| route contract | `npm run check:route-validation:t06` | pass | -| AC1 route behavior | focused `bun test` issue-agent route/execution suites | policy and provider/model assertions pass | -| AC2-AC4 | lifecycle/result/terminal-outcome suites | all required states persist and API matches | -| static safety | `npm run typecheck:core` | distinguish new failures from existing `omniglyph` blocker | -| patch integrity | `git diff --check origin/main...HEAD` | pass | diff --git a/docs/sessions/20260714-issue-agent-executable-triage/05_KNOWN_ISSUES.md b/docs/sessions/20260714-issue-agent-executable-triage/05_KNOWN_ISSUES.md deleted file mode 100644 index 45e24ca42a..0000000000 --- a/docs/sessions/20260714-issue-agent-executable-triage/05_KNOWN_ISSUES.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "Issue-Agent Executable Triage: Known Issues" -version: 3.8.50 -lastUpdated: 2026-08-06 ---- - -# Issue-Agent Executable Triage: Known Issues - -Machine status: `open` - -| issue_id | severity | status | evidence | impact | resolution owner | -| -------- | -------- | ------ | ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------- | -| KI-001 | P1 | `open` | `execution.ts` places `routingPolicy` in `X-OmniRoute-Mode`; the researched chat route has no observed consumer in the AC1 path | AC1 does not yet prove configured routing policy affects routing | AC1 implementation/review | -| KI-002 | P1 | `open` | issue-agent route catches execution errors and returns `{ error }` with HTTP 400 after writing only pre-execution audit | provider failure, timeout, and budget stop lack correct terminal semantics and persistence | AC2/AC4 implementation | -| KI-003 | P1 | `open` | `audit.ts` serializes only run context/steps before execution | AC2 fields for lifecycle, prompt, output, token/cost/runtime, and error are missing | AC2 implementation | -| KI-004 | P1 | `open` | API returns raw `completion.body` | AC3 has no stable actionable triage result contract | AC3 implementation | -| KI-005 | P2 | `open` | `npm run typecheck:core` has unresolved `omniglyph` declarations in `open-sse/services/compression/*` | full typecheck cannot be used as issue-agent completion evidence until separately resolved or excluded with provenance | release validation | - -## Resolved/Verified - -| issue_id | status | evidence | -| -------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------- | -| KI-R001 | `verified` | `fa2c1d7c6` adds an isolated test that invokes the actual issue-agent route and mocks only provider HTTP for the success path | -| KI-R002 | `verified` | `e6a63eb33` applies shared request-body validation to the issue-agent route; prior route-validation gate passed | - -No workaround in this document changes the acceptance contract. Open P1 items -block declaring AC1-AC4 complete. diff --git a/docs/sessions/20260714-issue-agent-executable-triage/06_TESTING_STRATEGY.md b/docs/sessions/20260714-issue-agent-executable-triage/06_TESTING_STRATEGY.md deleted file mode 100644 index 5ecdc9cc8f..0000000000 --- a/docs/sessions/20260714-issue-agent-executable-triage/06_TESTING_STRATEGY.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "Issue-Agent Executable Triage: Testing Strategy" -version: 3.8.50 -lastUpdated: 2026-08-06 ---- - -# Issue-Agent Executable Triage: Testing Strategy - -Machine status: `in_progress` - -## QA Matrix - -| qa_id | AC | scenario | command | expected | observed | status | evidence_sha | -| ------ | ------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | ----------------------------------------------------- | --------------------------------------- | ------------- | ------------ | -| QA-001 | prerequisite | request schema validation | `npm run check:route-validation:t06` | all routes pass | 535 routes scanned; pass | pass | `a4378a26d` | -| QA-002 | AC1 | selected provider/model/policy reaches normal chat-completions seam | `bun test tests/unit/issue-agent-runs-route.test.ts` | captured request uses configured routing inputs | not implemented | pending | `e6a` | -| QA-003 | AC2 | run lifecycle persists input, output, usage, terminal error | `bun test tests/unit/issue-agent-audit.test.ts tests/unit/issue-agent-runner.test.ts` | durable records for every terminal state | not implemented | pending | `e6a` | -| QA-004 | AC3 | successful execution returns actionable triage output | `bun test tests/unit/issue-agent-runner.test.ts tests/unit/issue-agent-runs-route.test.ts` | output derives from routed execution, not placeholder | not implemented | pending | `e6a` | -| QA-005 | AC4 | provider/model failure | `bun test tests/unit/issue-agent-runner.test.ts` | failed lifecycle and sanitized error persisted | missing coverage | pending | `e6a` | -| QA-006 | AC4 | timeout | `bun test tests/unit/issue-agent-runner.test.ts` | timed-out lifecycle and terminal error persisted | missing coverage | pending | `e6a` | -| QA-007 | AC4 | budget stop | `bun test tests/unit/issue-agent-runner.test.ts` | budget stop is explicit and persisted | missing coverage | pending | `e6a` | -| QA-008 | release | core type safety | `npm run typecheck:core` | pass | pending rerun after dependency recovery | pending | `e6a` | -| QA-009 | release | whitespace integrity | `git diff --check origin/main...HEAD` | no errors | passed before remote rewrite | pass/reverify | `a4378a26d` | - -## Test Rules - -Tests must mock only the external provider boundary. AC1 must exercise the in-process `POST` export from `src/app/api/v1/chat/completions/route.ts` so admission, policy, translator initialization, and routing remain in the execution path. Each terminal outcome asserts both API behavior and persisted audit state. - -## Evidence Requirements - -Before a WBS item is marked complete, record the exact command output, commit SHA, test identifiers, and whether the test environment had a lockfile-compatible dependency set. The current recovered environment has incomplete dependencies due to `npm ci` disk exhaustion; no pending test may be reported as passing until rerun. diff --git a/docs/superpowers/plans/2026-07-27-devin-claude-bridge.md b/docs/superpowers/plans/2026-07-27-devin-claude-bridge.md deleted file mode 100644 index 3afd97bbe1..0000000000 --- a/docs/superpowers/plans/2026-07-27-devin-claude-bridge.md +++ /dev/null @@ -1,252 +0,0 @@ -# Devin Claude Bridge Implementation Plan - -> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. - -**Goal:** Build a fail-closed `devin-cli-agentic` provider that serves local Anthropic Messages requests through Devin CLI ACP stdio while preserving Claude Code tool-use semantics. - -**Architecture:** Add a separate Claude-format provider and executor instead of changing the existing OpenAI-format `devin-cli` summarizer. Keep parsing, prompt serialization, Anthropic response rendering, and ACP process handling in focused files under `open-sse/executors/devin-agentic/`, then wire them into the existing provider and executor registries. - -**Tech Stack:** TypeScript ES modules, Node child process stdio, Anthropic Messages JSON/SSE, JSON-RPC 2.0 ACP, Node test runner. - ---- - -### Task 1: Agentic Bridge Core - -**Files:** -- Create: `open-sse/executors/devin-agentic/types.ts` -- Create: `open-sse/executors/devin-agentic/serializer.ts` -- Create: `open-sse/executors/devin-agentic/toolParser.ts` -- Create: `open-sse/executors/devin-agentic/anthropicResponse.ts` -- Test: `tests/unit/executor-devin-cli-agentic-core.test.ts` - -- [ ] **Implement and prove serialization, parsing, validation, and Anthropic rendering** - -Interfaces: - -```ts -export function serializeAnthropicForDevin(body: unknown): DevinPrompt; -export function parseDevinToolRequest(text: string, tools: AnthropicTool[]): ParsedToolRequest | null; -export function buildClaudeTextResponse(args: ClaudeResponseArgs): Record; -export function buildClaudeToolUseResponse(args: ClaudeToolUseArgs): Record; -export function buildClaudeSseFrames(message: Record): string; -``` - -Invariants: - -- Preserve `text`, `tool_use`, `tool_result`, `thinking`, and `redacted_thinking`. -- Reject `image` with a clear error. -- Reject unknown content block types. -- Allow only one tool request per model turn. -- Validate tool arguments against object JSON Schema with `required`, `type`, `properties`, `additionalProperties`, `enum`, `items`, and scalar types. -- Generate deterministic ids from tool name and canonicalized arguments. - -Run: `node --import tsx/esm --test tests/unit/executor-devin-cli-agentic-core.test.ts` -Expected: core tests pass after dependencies are installed. - -### Task 2: ACP Executor And Provider Wiring - -**Files:** -- Create: `open-sse/executors/devin-cli-agentic.ts` -- Modify: `open-sse/executors/index.ts` -- Create: `open-sse/config/providers/registry/devin-cli-agentic/index.ts` -- Modify: `open-sse/config/providers/index.ts` -- Test: `tests/unit/executor-devin-cli-agentic-acp.test.ts` - -- [ ] **Implement and prove fail-closed ACP execution** - -Behavior: - -- `buildUrl()` returns `devin://acp/stdio`. -- `buildHeaders()` returns `{}`. -- `execute()` spawns only `devin acp` by default or the explicit `CLI_DEVIN_AGENTIC_BIN`/`CLI_DEVIN_BIN` override. -- The child environment removes Anthropic and Claude routing credentials before spawn. -- The executor sends `initialize`, `session/new`, and `session/prompt`. -- The executor collects `agent_message_chunk` text and `session/prompt` final result. -- Non-streaming Claude clients receive native Anthropic JSON. -- Streaming Claude clients receive native Anthropic SSE lifecycle frames. -- Spawn failure, ACP error, timeout, and early exit produce non-2xx responses with sanitized messages. - -Run: `node --import tsx/esm --test tests/unit/executor-devin-cli-agentic-acp.test.ts` -Expected: ACP mock tests pass after dependencies are installed. - -### Task 3: Isolation Scripts And Documentation - -**Files:** -- Create: `scripts/devin-bridge/verify-anthropic-isolation` -- Create: `scripts/devin-bridge/test-unit` -- Create: `scripts/devin-bridge/launch` -- Create: `docs/DEVIN_CLAUDE_BRIDGE.md` -- Modify: `.gitignore` - -- [ ] **Implement offline guardrails and operator docs** - -Behavior: - -- `verify-anthropic-isolation` fails if `CLAUDE_CONFIG_DIR` is missing, points outside an isolated path, or if Anthropic routing env vars are present. -- `test-unit` runs the focused unit tests. -- `launch` refuses to start unless `ENABLE_LIVE_DEVIN_TESTS=1` for live Devin or `DEVIN_BRIDGE_OFFLINE=1` for offline mock mode. -- Documentation distinguishes tested offline behavior from live Devin opt-in behavior. - -Run: `./scripts/devin-bridge/verify-anthropic-isolation` with explicit isolated env. -Expected: exits 0 with isolated env and non-zero without it. - -### Task 4: Verification - -**Files:** -- No additional source files. - -- [ ] **Run proportional checks and capture real output** - -Commands: - -```bash -./scripts/devin-bridge/test-unit -npm test -``` - -Expected in this workspace before installing dependencies: both commands fail with `ERR_MODULE_NOT_FOUND` for `tsx`. Expected after `npm install`: focused tests pass; `npm test` outcome must be reported from real output. - -### Task 5: Close Core Security And Protocol Gaps - -**Files:** -- Modify: `open-sse/executors/devin-cli-agentic.ts` -- Modify: `open-sse/executors/devin-agentic/*.ts` -- Modify: `tests/unit/executor-devin-cli-agentic-*.test.ts` - -- [ ] **Prove environment allowlisting, response-id correlation, strict standalone tool envelopes, unique ids, bounded repair, size limits, cancellation cleanup, sanitized errors, and explicit `devin://acp/stdio` validation** - -Run with `HOME`, `DATA_DIR`, and `SQLITE_FILE` under `.sandbox`; expected: all focused tests pass and an outside-path test fails closed. - -### Task 6: Build Reproducible Containers And Network Guard - -**Files:** -- Create: `docker/devin-bridge/Dockerfile` -- Create: `docker/devin-bridge/compose.yml` -- Create: `docker/devin-bridge/network-guard/*` -- Create: `docker/devin-bridge/mock-devin/*` -- Create: `.env.devin-bridge.example` - -- [ ] **Pin Claude Code 2.1.220 and Devin CLI 3000.2.17, create non-root offline/live profiles, separate auth/config volumes, explicit env allowlist, no host credential mounts, and denied-domain telemetry** - -Run: `docker compose -f docker/devin-bridge/compose.yml --profile offline config`; expected: no forbidden mounts/env inheritance and only internal runtime networks. - -### Task 7: Deliver Isolation And Operator Scripts - -**Files:** -- Create/modify: `scripts/devin-bridge/{build,test-unit,test-contract,test-e2e-mock,verify-anthropic-isolation,login-devin,test-live-devin,launch,clean}` - -- [ ] **Make every command idempotent, sandbox-scoped, fail-closed, and secret-safe** - -Run: `./scripts/devin-bridge/verify-anthropic-isolation`; expected: positive offline proof passes and each deliberately removed guard returns non-zero. - -### Task 8: Real Claude Code Offline E2E - -**Files:** -- Create: `tests/fixtures/devin-bridge/e2e-workspace/*` -- Create: `tests/e2e/devin-claude-bridge.e2e.*` - -- [ ] **Run pinned Claude Code in the offline container through local `/v1/messages` and mock ACP, proving CLAUDE.md, skill, command, hook, Read/Edit/Bash, tests, multi-turn continuation, and no Anthropic traffic** - -Run: `./scripts/devin-bridge/test-e2e-mock`; expected: workspace diff and tests prove Claude Code executed tools while mock Devin only requested them. - -### Task 9: Regression, Documentation, Live Gate, And Delivery - -**Files:** -- Modify: `docs/DEVIN_CLAUDE_BRIDGE.md` -- Create: `docs/DEVIN_CLAUDE_BRIDGE_PROGRESS.md` - -- [ ] **Run focused suites, typecheck, lint, build, docs checks, offline E2E, and isolation proof with fresh output; then run live only after official in-container Devin login** - -If login is unavailable, record live as not tested and expose exactly `./scripts/devin-bridge/login-devin` followed by `./scripts/devin-bridge/test-live-devin`. Commit each reversible unit; do not merge or publish until all offline critical checks are green. - -### Task 10: Close The Authenticated Live Runtime - -**Files:** -- Modify: `open-sse/executors/devin-cli-agentic.ts` -- Modify: `docker/devin-bridge/compose.yml` -- Create: `docker/devin-bridge/network-guard/policy.mjs` -- Modify: `docker/devin-bridge/network-guard/proxy.mjs` -- Modify: `scripts/devin-bridge/select-live-model.mjs` -- Modify: `scripts/devin-bridge/common` -- Modify: `scripts/devin-bridge/login-devin` -- Modify: `scripts/devin-bridge/test-live-devin` -- Modify: `scripts/devin-bridge/verify-anthropic-isolation` -- Modify: `tests/unit/executor-devin-cli-agentic-acp.test.ts` -- Create: `tests/unit/devin-bridge-live-runtime.test.ts` - -- [ ] **Implement and prove the authenticated network, auth, and catalog boundaries with block-level TDD** - -Invariants: - -- The ACP child receives proxy variables only when `DEVIN_BRIDGE_PROXY_URL` is exactly - `http://network-guard:8080`; arbitrary inherited proxy and credential variables stay absent. -- The guard permits suffixes `.devin.ai` and `.cognition.ai`, exact hosts - `server.codeium.com` and `unleash.codeium.com`, and nothing else. -- Claude services cannot mount `devin-auth`; non-Claude services cannot mount the Claude config. -- A zero exit from `devin auth status` is insufficient when output contains a server-fetch failure. -- `family_uid: swe-1.7-lightning` resolves to catalog id `swe-1-7-lightning`; unknown normalized - values fail instead of becoming model ids. -- Login uses the official manual-token flow so no container loopback callback is required. - -Run: - -```bash -./scripts/devin-bridge/test-unit -node --import tsx/esm --test tests/unit/devin-bridge-live-runtime.test.ts -./scripts/devin-bridge/verify-anthropic-isolation --static -``` - -Expected: focused tests and static isolation pass; deliberate untrusted proxy, host, mount, auth -status, and model fixtures fail closed. - -- [ ] **Commit the reversible live-runtime repair** - -```bash -git add open-sse/executors/devin-cli-agentic.ts docker/devin-bridge \ - scripts/devin-bridge tests/unit/devin-bridge-live-runtime.test.ts \ - tests/unit/executor-devin-cli-agentic-acp.test.ts -git commit -m "fix: close Devin bridge live runtime gaps" -``` - -### Task 11: Prove Offline And Live Completion - -**Files:** -- Modify: `docker/devin-bridge/run-claude-live-e2e.sh` -- Modify: `docs/DEVIN_CLAUDE_BRIDGE.md` -- Modify: `docs/DEVIN_CLAUDE_BRIDGE_PROGRESS.md` - -- [ ] **Run the complete deterministic bridge proof before any paid request** - -```bash -./scripts/devin-bridge/test-unit -./scripts/devin-bridge/test-contract -./scripts/devin-bridge/test-e2e-mock -./scripts/devin-bridge/verify-anthropic-isolation -npm run typecheck:core -npm run lint -npm run build -npm run check:docs-all -``` - -Expected: all bridge-specific checks, typecheck, lint, build, and documentation checks pass with -isolated data paths. Any unrelated full-suite infrastructure hang is recorded separately and is -not converted into a pass. - -- [ ] **Run exactly the three authorized live scenarios and the no-fallback failure probe** - -```bash -ENABLE_LIVE_DEVIN_TESTS=1 ./scripts/devin-bridge/test-live-devin -``` - -Expected: dynamic discovery selects a returned Devin catalog model; Claude Code reads without -editing, then edits and runs the fixture test, then executes the fixture command. Evidence shows -native tool use by Claude Code, only `devin-cli-agentic` routing, no allowed non-Devin egress, -and an Anthropic-shaped error after the Devin backend is deliberately made unavailable. - -- [ ] **Update verified documentation and commit the evidence-backed delivery state** - -```bash -git add docker/devin-bridge/run-claude-live-e2e.sh docs/DEVIN_CLAUDE_BRIDGE.md \ - docs/DEVIN_CLAUDE_BRIDGE_PROGRESS.md -git commit -m "docs: record verified Devin bridge live delivery" -``` diff --git a/docs/superpowers/specs/2026-07-27-devin-claude-bridge-design.md b/docs/superpowers/specs/2026-07-27-devin-claude-bridge-design.md deleted file mode 100644 index 2d19519b9f..0000000000 --- a/docs/superpowers/specs/2026-07-27-devin-claude-bridge-design.md +++ /dev/null @@ -1,134 +0,0 @@ -# Devin Claude Bridge Design - -## Baseline - -- Branch: `release/v3.8.49` -- HEAD: `ed7db3ee5f89a144b2d931d8605534522f83de30` -- Package version: `3.8.49` -- Node: `v26.0.0` -- npm: `11.12.1` -- Pre-existing worktree state: `.tug/` untracked -- Dependency state: `node_modules` is absent; the first focused test run failed before loading tests because `tsx` was not installed. -- Tugline state: `tug` exists, but `tug search` failed with MCP connection closed and `tug doctor` hung; it was interrupted. -- Upstream check: `git ls-remote` failed because GitHub DNS was unavailable. Web search of the public repository showed the existing `devin-cli` summarizer provider, but no evidence of `devin-cli-agentic`. - -## Source Anchors - -- `/v1/messages`: `src/app/api/v1/messages/route.ts` -- Existing Devin provider: `open-sse/config/providers/registry/devin-cli/index.ts` -- Existing Devin executor: `open-sse/executors/devin-cli.ts` -- Executor registry: `open-sse/executors/index.ts` -- Provider registry: `open-sse/config/providers/index.ts` -- Format detection: `open-sse/services/provider.ts` -- Claude non-streaming response conversion: `open-sse/handlers/responseTranslator.ts` -- Existing Devin ACP unit test: `tests/unit/executor-devin-cli-acp-protocol-8406.test.ts` - -## Findings - -The existing `devin-cli` provider is intentionally OpenAI-format and summarizer-oriented. Its executor spawns `devin acp --agent-type summarizer`, flattens the message history into a single text prompt, and emits OpenAI SSE text chunks. It does not preserve Anthropic `tool_use` and `tool_result` blocks. - -The safest implementation is a new provider id, `devin-cli-agentic`, with a separate executor. This leaves `devin-cli`, Anthropic OAuth, Claude OAuth, Claude Web, and all host Claude configuration code untouched. The new provider is fail-closed: it only resolves to `devin://acp/stdio`, uses the official Devin CLI ACP stdio path, and has no fallback provider. - -## Architecture - -Claude Code sends Anthropic Messages requests to local OmniRoute. OmniRoute resolves model ids prefixed with `devin-cli-agentic/` to a new Claude-format provider. The new executor translates the complete Anthropic request into an explicit text prompt for Devin ACP, including system text, structured message history, tool schemas, and prior tool results. - -Devin remains a model backend. The executor starts the official fixed no-tools summarizer -role with `devin acp --agent-type summarizer` and frames the serialized request as an -execution trace. Devin must request client-owned tool execution by emitting a strict -XML-wrapped JSON block: - -```xml - -{"name":"Read","arguments":{"file_path":"src/index.ts"}} - -``` - -The bridge parses exactly one tool request per model turn, validates that the tool name was supplied in the incoming request, validates arguments against a minimal JSON Schema validator, generates a stable `tool_devin_...` id, and returns a native Anthropic `tool_use` block. If no valid tool request is present, the bridge returns text with `stop_reason: "end_turn"`. - -## Error And Safety Rules - -- Unsupported Anthropic content blocks fail explicitly; images are rejected. -- Unknown tools fail explicitly. -- Invalid tool arguments fail explicitly. -- Invalid tool XML/JSON fails explicitly. -- Narrative claims that a tool was executed are returned as text, not actions. -- ACP spawn, timeout, early exit, and stderr-only failures return explicit Devin errors. -- The executor never reads `~/.claude`, `~/.claude.json`, macOS Keychain paths, or host Claude config. -- Live Devin is outside normal tests and remains opt-in via `ENABLE_LIVE_DEVIN_TESTS=1`. - -## Test Strategy - -Focused unit tests cover serialization, tool parsing, validation, Anthropic JSON, Anthropic SSE, malformed tool output, unknown tools, invalid arguments, image rejection, timeout, and spawn failure. Environment scripts provide an offline isolation verifier without reading host Claude credentials. - -## Mandatory Runtime Isolation - -The bridge runs only through `docker/devin-bridge/compose.yml`. The runtime image is non-root, uses a private `/home/bridge`, and mounts only disposable workspaces, evidence, and bridge harness files. Application source is copied into the image. It never mounts the host home, Docker socket, SSH, cloud credentials, or global Claude configuration. The container receives an explicit environment allowlist; the executor also constructs an allowlisted child environment instead of copying `process.env`. - -Build-time network access installs Claude Code `2.1.220` and Devin CLI `3000.2.17` with pinned integrity/checksum. Runtime profiles are separate: `offline` uses only an internal Compose network; `live-devin` exposes egress only through a proxy guard whose allowlist contains Devin/Cognition suffixes and whose default is denial. Devin authentication lives only in the named `devin-auth` volume. Claude configuration lives in a different named volume and is initialized empty. - -## Fail-Closed Routing - -`devin-cli-agentic` accepts only the synthetic `devin://acp/stdio` target and an explicit Devin binary path inside the container. It cannot use provider combos, auto routing, account fallback, fallback URLs, or an HTTP upstream. Model aliases resolve only to models returned by the Devin catalog or explicitly configured Devin model ids. An ACP failure, timeout, cancellation, invalid frame, unavailable model, or stopped sidecar becomes an Anthropic-shaped error response; no secondary provider is attempted. - -## Agentic Contract - -The serializer preserves request order, `system`, `tool_choice`, exact tool schemas, `text`, `tool_use`, `tool_result`, `thinking`, and `redacted_thinking`. It rejects unsupported blocks and caps large tool results with an explicit truncation marker and original size. The parser accepts exactly one standalone `` envelope, validates with Zod/JSON Schema infrastructure already present in OmniRoute, rejects unknown tools and mixed narrative/action output, and performs at most one bounded repair prompt. Tool ids combine a per-request nonce with canonical arguments so repeated identical calls remain unique while their association is stable within the turn. - -## Required Proof - -The offline profile must prove the ACP lifecycle, fragmented frames, stderr, early exit, hang/cancel, Anthropic JSON/SSE order, no fallback, and a real pinned Claude Code run that reads, edits, runs tests, observes `CLAUDE.md`, loads a skill and command, fires a hook, and completes at least one `tool_use -> tool_result -> continuation` loop. The isolation verifier checks env, mounts, UID, config paths, DNS/connection logs, local inference destination, selected provider, and fail-closed behavior. Live Devin is proved only by official in-container login and three isolated agentic scenarios. - -## Safety Incident During Baseline - -The first focused test was run without `DATA_DIR` isolation and initialized `/Users/lucasisrael/.omniroute/storage.sqlite`; logs reported schema-column additions. No Anthropic data was accessed. The external database will not be touched again or destructively rolled back. Every bridge command and test now must set `HOME`, `DATA_DIR`, `SQLITE_FILE`, and temporary directories inside `.sandbox`, and an automated guard must reject paths outside the task workspace. - -## Live Completion Repair - -The first authenticated live attempt disproved four assumptions in the initial container -design. The official CLI reports a valid login even when its server-status request fails; -that request uses the exact hosts `server.codeium.com` and `unleash.codeium.com`, which the -guard denied. The OmniRoute executor also built a fresh allowlisted child environment that -omitted the proxy, so `devin acp` could not leave the internal network. Model discovery emits -family identifiers such as `swe-1.7`, while the OmniRoute catalog uses canonical ids such as -`swe-1-7`. Finally, browser login redirects to a loopback listener inside the one-off -container, which is not reachable from the host browser. - -The repair keeps the fully containerized architecture and does not weaken the deny-by-default -network. The guard gains an exact-host allowlist for the two Codeium control-plane hosts while -retaining suffix-based access only for Devin and Cognition; telemetry destinations such as -Sentry remain denied. Compose supplies `DEVIN_BRIDGE_PROXY_URL` with the single accepted value -`http://network-guard:8080`, and the executor derives `HTTP_PROXY` and `HTTPS_PROXY` from that -explicit bridge setting instead of inheriting arbitrary host proxy variables. Claude services -mount only the Claude config volume, and only the OmniRoute live service mounts the Devin auth -volume. - -Fresh login uses the official `devin auth login --force-manual-token-flow`, which is intended -for remote environments where localhost redirects cannot work. The credential is pasted only -into the interactive CLI terminal and never appears in arguments, logs, evidence, or Git. -Authentication validation requires both the logged-in marker and the absence of a server-fetch -failure. Model discovery accepts the real `family_uid`/`model_uid` fields, maps punctuation to a -catalog id only after an exact normalized match, and prefers the already-proved lightning model -when available. - -Tests first prove the trusted proxy boundary, exact host policy, volume separation, strict auth -status gate, and catalog normalization. The live gate then runs three real Claude Code scenarios -through the authenticated in-container Devin CLI and requires local Read/Edit/Bash activity, -passing fixture tests, Devin-only routing, no allowed non-Devin egress, and an explicit error -when the Devin backend is stopped. - -## Final Live Result - -The default-agent design was rejected after live evidence showed that `ask` mode can still -emit Devin-owned ACP tool calls. The pinned CLI does not apply its top-level agent -configuration to `devin acp`, so an `allowed-tools: []` configuration could not create a -neutral backend. The fixed summarizer role is the only official ACP role in this version that -is structurally no-tools. - -The execution-trace adaptation passed the authenticated live gate with -`swe-1-7-lightning`. Three Claude Code processes completed analysis, edit/test, and local -command/skill scenarios. Structured evidence proved that Claude Code issued `Read`, `Edit`, -and `Bash` tool calls; two client-owned `npm test` calls succeeded. The guard audit proved -Devin-only outbound access and zero Claude egress. Intermediate summary-shaped responses and -transient ACP timeouts remain explicit failure modes; the adapter performs one bounded repair -and the harness spaces scenarios to avoid bursty session creation. diff --git a/docs/video-preset-generation.md b/docs/video-preset-generation.md deleted file mode 100644 index 163fa8856e..0000000000 --- a/docs/video-preset-generation.md +++ /dev/null @@ -1,113 +0,0 @@ -# Video Generation Through Preset Jobs - -Custom provider nodes whose `/videos` surface is an **async submit → poll → fetch-result API** (instead of a synchronous generation endpoint) can be wired into the `/api/v1/videos/generations` route without any new provider code. The model row carries a `generationConfig.preset`, and the dispatcher routes the request through a single job executor that is configured entirely by declarative preset data. - -## How dispatch works - -1. The route parses `model` as `provider/model` and resolves the provider node's credentials (`POST /api/v1/videos/generations`). -2. `handleVideoGeneration` (in `open-sse/handlers/videoGeneration.ts`) checks whether the provider is a **custom provider node** (no entry in the static video registry). -3. For custom nodes it reads the custom model row via `getCustomModelVideoPreset(provider, model)`: - - The model row has `generationConfig.preset` set (e.g. `"agnes-video-job"`) → dispatch through the **job executor** (`open-sse/handlers/videoGeneration/job.ts`). - - The preset name does not match any known preset → **502** `Unknown video job preset: ` (server-side misconfiguration). - - No preset configured → fall back to the generic OpenAI-compatible sync handler, mirroring the images route. -4. The job executor runs the preset pipeline: **submit** the job, **poll** for terminal status, **read** the finished video URL, and return the standard OpenAI-compatible response shape. - -The executor is one handler family; every provider-specific detail (paths, auth, body shape, status/result fields, poll cadence) is data in the preset definition. - -## Response contract - -Both the sync and job paths return the same shape: - -```json -{ - "created": 1234567890, - "data": [{ "url": "https://…", "format": "mp4" }] -} -``` - -This is the shape the media-generation consumer reads (`data.data[0].url`), so preset-job providers are drop-in replacements for sync providers. - -## Presets - -Presets live in `open-sse/handlers/videoGeneration/job.ts` (`VIDEO_JOB_PRESETS`). Each preset declares: - -| Field | Meaning | -| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `authHeaderName` / `authScheme` | `x-api-key` with `raw` value (Agnes, muapi) or `Authorization` with `Bearer` prefix (Sora). Missing credentials → request goes out without an auth header. | -| `baseUrlFallback` | Default base URL. Overridden by the provider connection's `providerSpecificData.baseUrl` (or top-level `baseUrl`), which wins when set. | -| `submit.path` / `submit.buildBody` | Where and how the job is submitted. `{model}` in the path is substituted with the encoded model id; the body is built from `model`/`prompt`/`duration` plus pass-through of every other request field. | -| `taskIdPath` | Dot path into the submit response identifying the job (e.g. `task_id`, `request_id`, `id`). Missing job id → **502**. | -| `poll.pathTemplate` | Poll URL template; `{taskId}` is substituted. | -| `statusPath` / `statusDone` / `statusFailed` | Where the job status lives and which values are terminal. | -| `resultPath` | Dot path into the poll response holding the finished video URL: a string, a string array, or an array of `{ url }` objects are all accepted. Completed job with no readable URL → **502**. | -| `maxPolls` / `pollIntervalMs` | Poll budget (default 60 polls × 2000 ms). Exhausted → **504** `Video job timed out`. | - -### `agnes-video-job` — Agnes Video V2.0 - -- Auth: `x-api-key: ` (raw). -- Base URL fallback: `https://apihub.agnes-ai.com`. -- Submit: `POST /v1/videos` with `{ model, prompt, ...extras }` — image, mode, `num_frames`, `frame_rate` and other provider knobs pass through untouched. -- Job id: `task_id` from the submit response. -- Poll: `GET /v1/videos/{taskId}`; status at `status` (`completed` / `failed`). -- Result: `metadata.url` — the completed video URL is returned as JSON metadata, not a binary body. - -### `muapi-video-job` — muapi.ai - -- Auth: `x-api-key: ` (raw). -- Base URL fallback: `https://api.muapi.ai`. -- Submit: `POST /api/v1/{model}` with `{ prompt, duration?, ...extras }`. -- Job id: `request_id` from the submit response. -- Poll: `GET /api/v1/predictions/{taskId}/result`; status at `status` (`completed` / `failed`). -- Result: `outputs` — an array of video URLs. - -### `sora-job` — OpenAI Sora - -- Auth: `Authorization: Bearer `. -- Base URL fallback: `https://api.openai.com`. -- Submit: `POST /v1/videos` with `{ model, prompt, seconds?, ...extras }`. `seconds` is a **string** enum (`"4" | "8" | "12"`) in the Sora API, so a numeric `duration` is stringified; size mapping is intentionally not forced. -- Job id: `id` from the submit response. -- Poll: `GET /v1/videos/{taskId}`; status at `status` (`completed` / `failed`). -- Result: `data` — an array whose entries are either a URL string or `{ url: "…" }`. - -## Setup - -1. **Register the provider node** as an OpenAI-compatible custom provider (`providerSpecificData.baseUrl` optional — the preset's `baseUrlFallback` is used when absent). -2. **Register a custom model** tagged with the `videos` endpoint and a `generationConfig`: - - ```json - { - "id": "super-video-v1", - "name": "Super Video v1", - "source": "manual", - "apiFormat": "chat-completions", - "supportedEndpoints": ["videos"], - "generationConfig": { "preset": "agnes-video-job" } - } - ``` - - `addCustomModel` (in `src/lib/db/models.ts`) accepts `generationConfig?: { preset: string }` as its final parameter and persists it on the model row; `updateCustomModel` forwards it the same way. The provider-models API accepts `generationConfig` on create and update. - -3. **Call the route** as usual: - - ```bash - curl -X POST http://localhost:8787/api/v1/videos/generations \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer $API_KEY" \ - -d '{ - "model": "my-custom-provider/super-video-v1", - "prompt": "a cat playing piano", - "duration": 5 - }' - ``` - -## Troubleshooting - -| Symptom | Cause | -| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | -| `400 Unknown video provider: …` | Non-custom provider not in the static registry; preset jobs only apply to custom provider nodes. | -| `502 Unknown video job preset: …` | `generationConfig.preset` does not match any preset in `VIDEO_JOB_PRESETS`. Fix the model row. | -| `502 Video provider did not return a job id (…)` | Submit succeeded but the response had no readable value at `taskIdPath`. | -| `502 Video job failed (…)` / `Video job completed but no result URL found (…)` | Poll reached a terminal `statusFailed` state, or `resultPath` held no readable URL. | -| `504 Video job timed out after 60 polls (…)` | Job never reached a terminal status within the poll budget. | -| Upstream 4xx/5xx passthrough | `fetchJson` returns the upstream status when the submit/poll request itself is not OK. | -| Requests go out without auth | No `apiKey`/`accessToken` on the provider connection; the executor sends `Content-Type` only. | diff --git a/llm.txt b/llm.txt index daed1b645f..470ad5f415 100644 --- a/llm.txt +++ b/llm.txt @@ -1,6 +1,6 @@ # OmniRoute -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 248 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (99 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex-cloud, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -8,13 +8,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.8.47 +**Current version:** 3.8.50 ## Tech Stack - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 110+ migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 144 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -22,7 +22,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Background jobs:** Custom token health check scheduler, 24h model auto-sync - **Streaming:** Server-Sent Events (SSE) for real-time proxy responses - **Proxy engine:** Custom pipeline with format translation, circuit breaker, rate limiting, auto-combo engine -- **i18n:** next-intl with 40+ languages +- **i18n:** next-intl with 43 languages - **Desktop:** Electron (cross-platform: Windows, macOS, Linux) - **Package:** Published on npm (`omniroute`) and Docker Hub (`diegosouzapw/omniroute`) @@ -41,7 +41,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── auto-combo/ # Auto-combo engine dashboard │ │ │ ├── cache/ # Cache dashboard (semantic cache stats) │ │ │ ├── cli-tools/ # CLI tool configuration (Claude Code, Codex, etc.) -│ │ │ ├── combos/ # Model combo management (18 strategies + 4 templates) +│ │ │ ├── combos/ # Model combo management (19 strategies + 4 templates) │ │ │ ├── costs/ # Cost tracking per provider/model │ │ │ ├── endpoint/ # Unified: Endpoint Proxy, MCP, A2A, API Endpoints tabs │ │ │ ├── health/ # System health (uptime, circuit breakers, latency) @@ -94,7 +94,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── configAudit.ts # Configuration auditing │ │ └── responses.ts # Domain response types │ ├── i18n/ # Internationalization -│ │ └── messages/ # 40+ language JSON files +│ │ └── messages/ # 43 language JSON files │ ├── lib/ # Core libraries │ │ ├── a2a/ # Agent-to-Agent v0.3 protocol server │ │ │ ├── skills/ # A2A skills (quotaManagement, smartRouting) @@ -165,7 +165,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (248), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -182,7 +182,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ├── open-sse/ # Standalone SSE server (npm workspace) │ ├── config/ # Model registries (providerRegistry, embedding, image, audio, video, │ │ # music, rerank, moderation, search, CLI fingerprints, Ollama models) -│ ├── executors/ # Provider-specific request executors (78 executor modules) +│ ├── executors/ # Provider-specific request executors (101 executor modules) │ │ ├── base.ts # Base executor with shared logic │ │ ├── default.ts # Default OpenAI-compatible executor │ │ ├── cursor.ts # Cursor IDE (protobuf + checksum) @@ -208,11 +208,11 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── moderations.ts # Content moderation │ │ ├── rerank.ts # Reranking API │ │ └── search.ts # Web search API -│ ├── mcp-server/ # Built-in MCP server (99 tools, 3 transports: stdio/SSE/streamable-HTTP) +│ ├── mcp-server/ # Built-in MCP server (105 tools, 3 transports: stdio/SSE/streamable-HTTP) │ │ ├── server.ts # MCP server core (tool registration, scope enforcement) │ │ ├── tools/ # Tool implementations (advancedTools, memoryTools, skillTools) │ │ ├── schemas/ # Zod input schemas (tools, audit, a2a) -│ │ ├── scopeEnforcement.ts # Scope-based access control (32 scopes) +│ │ ├── scopeEnforcement.ts # Scope-based access control (31 scopes) │ │ ├── audit.ts # Tool call audit logging │ │ ├── runtimeHeartbeat.ts # MCP runtime heartbeat │ │ └── httpTransport.ts # HTTP transport handler @@ -224,7 +224,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ ├── accountFallback.ts # Multi-account fallback │ │ ├── sessionManager.ts # Session management │ │ ├── wildcardRouter.ts # Wildcard model routing -│ │ ├── autoCombo/ # Auto-combo engine (12-factor scoring, bandit exploration) +│ │ ├── autoCombo/ # Auto-combo engine (14-factor scoring, bandit exploration) │ │ ├── intentClassifier.ts # Request intent classification │ │ ├── taskAwareRouter.ts # Task-aware routing │ │ ├── thinkingBudget.ts # Thinking budget management @@ -263,8 +263,8 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ ├── i18n/ # 43-language translated docs │ ├── architecture/ # ARCHITECTURE.md, CODEBASE_DOCUMENTATION.md, REPOSITORY_MAP.md, AUTHZ_GUIDE.md, RESILIENCE_GUIDE.md, QUALITY_GATES.md │ ├── reference/ # API_REFERENCE.md, PROVIDER_REFERENCE.md, CLI-TOOLS.md -│ ├── frameworks/ # MCP-SERVER.md (99 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md -│ ├── routing/ # AUTO-COMBO.md (12-factor scoring), REASONING_REPLAY.md +│ ├── frameworks/ # MCP-SERVER.md (105 tools), A2A-SERVER.md, SKILLS.md, MEMORY.md, CLOUD_AGENT.md, EVALS.md, WEBHOOKS.md +│ ├── routing/ # AUTO-COMBO.md (14-factor scoring), REASONING_REPLAY.md │ ├── security/ # GUARDRAILS.md, COMPLIANCE.md, STEALTH_GUIDE.md, PUBLIC_CREDS.md, ERROR_SANITIZATION.md │ ├── guides/ # USER_GUIDE.md, TROUBLESHOOTING.md, ELECTRON_GUIDE.md, I18N.md │ ├── ops/ # RELEASE_CHECKLIST.md, TUNNELS_GUIDE.md, VM deployment @@ -275,15 +275,15 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.8.47) +## Key Features (v3.8.50) ### Core Proxy -- **248 AI providers** with automatic format translation +- **338 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free - **Context Relay strategy**: Session handoff summaries on account rotation for continuity -- **Auto-combo engine**: Self-healing routing optimization with **12-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown +- **Auto-combo engine**: Self-healing routing optimization with **14-factor scoring** (see `docs/routing/AUTO-COMBO.md`), bandit exploration, progressive cooldown - **Semantic caching** with cache hit/miss headers - **Idempotency** with configurable dedup window - **3-layer resilience**: Provider Circuit Breaker / Connection Cooldown / Model Lockout @@ -312,7 +312,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ### Dashboard Pages (23 sections) - **Providers** — OAuth, API key, and free provider management with ProviderIcon SVG icons -- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 18 strategies +- **Combos** — Multi-model combo builder with 4 templates (Free Stack, High Availability, Cost Saver, Balanced) + 19 strategies - **Auto-Combo** — Auto-combo engine dashboard with scoring metrics - **Analytics** — Token consumption, cost, heatmaps, distributions - **Health** — Uptime, memory, latency percentiles, circuit breakers @@ -342,13 +342,13 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Gemini** — `/v1beta/models`, `/v1beta/models/{...path}` - **Ollama** — `/v1/api/chat`, `/api/tags` - **Search** — `/v1/search` (Perplexity, Serper, Brave, Exa, Tavily) -- **MCP** — 99-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) -- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 5 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report) +- **MCP** — 105-tool MCP server with scope-based auth (3 transports: stdio, SSE, streamable HTTP) +- **A2A** — Agent-to-Agent v0.3 protocol (JSON-RPC 2.0, 6 skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities) - **ACP** — Agent Communication Protocol registry and manager -### MCP Server (99 Tools) +### MCP Server (105 Tools) -99 tools across modules: **36 base** (health, combos, quotas, routing, cost, models, cache, +105 tools across modules: **43 base** (health, combos, quotas, routing, cost, models, cache, diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool**, **notion**, **obsidian**, **localCorpus**, **gamification**, and **plugin** modules. Full per-tool inventory: `docs/frameworks/MCP-SERVER.md`. @@ -369,7 +369,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool **Custom Providers:** OpenAI-compatible (`openai-compatible-*`) and Anthropic-compatible (`anthropic-compatible-*`) with custom base URLs ### Internationalization -- 40+ languages for UI (all dashboard pages) +- 43 languages for UI (all dashboard pages) - 40 translated documentation sets in docs/i18n/ - Language switcher in documentation @@ -381,7 +381,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 3. **Connection-based provider model:** Providers are stored as "connections" in SQLite. Each connection has an `id`, `provider`, `authType` (oauth/apikey/free), `isActive` flag, and credentials. Multiple connections per provider for multi-account rotation. -4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 18 strategies including auto-combo with self-healing and context-relay for session continuity. +4. **Combo system for fallback:** Users create "combos" — ordered lists of `provider/model` pairs. The proxy tries each in order until one succeeds. Supports 19 strategies including auto-combo with self-healing and context-relay for session continuity. 5. **SSE proxy pipeline:** The proxy pipeline is middleware-based: request → auth resolution → rate limiting → circuit breaker → format translation → upstream call → response translation → SSE streaming back to client. @@ -435,7 +435,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (99 domain-specific files, 117 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 144 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -443,7 +443,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ACP agents** are in `src/lib/acp/registry.ts` with detection cache. Custom agents stored via settings DB. -9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **12-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. +9. **Auto-combo engine** in `open-sse/services/autoCombo/` — **14-factor scoring** (weights and factors in `docs/routing/AUTO-COMBO.md`), 4 mode packs, bandit exploration, progressive cooldown. 10. **Docker:** Dockerfile has two targets: `runner-base` and `runner-cli`. `docker-compose.yml` for dev (3 profiles), `docker-compose.prod.yml` for production (port 20130). @@ -476,10 +476,10 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **248-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add -- **18 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` -- **12-factor Auto-Combo scoring** with bandit exploration and progressive cooldown -- **MCP server expanded to 99 tools / 32 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) +- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` +- **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown +- **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) - **Cloud Agents** (Codex Cloud, Devin, Jules), **Guardrails**, **Evals**, **Webhooks**, **Compliance** frameworks - **Embedded services** manager (install/start/stop bundled services from the dashboard) - **Prompt compression** (RTK + Caveman codecs) saving up to ~95% tokens on eligible traffic diff --git a/open-sse/config/constants.ts b/open-sse/config/constants.ts index ef4b9e818d..0ee89452aa 100644 --- a/open-sse/config/constants.ts +++ b/open-sse/config/constants.ts @@ -172,6 +172,7 @@ export const HTTP_STATUS = { NOT_FOUND: 404, NOT_ACCEPTABLE: 406, REQUEST_TIMEOUT: 408, + GONE: 410, RATE_LIMITED: 429, SERVER_ERROR: 500, BAD_GATEWAY: 502, diff --git a/open-sse/config/errorConfig.ts b/open-sse/config/errorConfig.ts index dcdf3bae9c..3081f53fb9 100644 --- a/open-sse/config/errorConfig.ts +++ b/open-sse/config/errorConfig.ts @@ -28,6 +28,7 @@ export const ERROR_TYPES: Record = { 403: { type: "permission_error", code: "insufficient_quota" }, 404: { type: "invalid_request_error", code: "model_not_found" }, 406: { type: "invalid_request_error", code: "model_not_supported" }, + 410: { type: "invalid_request_error", code: "model_shutdown" }, 429: { type: "rate_limit_error", code: "rate_limit_exceeded" }, 499: { type: "client_disconnected", code: "client_disconnected" }, 500: { type: "server_error", code: "internal_server_error" }, @@ -44,6 +45,7 @@ export const DEFAULT_ERROR_MESSAGES: Record = { 403: "You exceeded your current quota", 404: "Model not found", 406: "Model not supported", + 410: "Model has been shut down", 429: "Rate limit exceeded", 499: "Client disconnected", 500: "Internal server error", diff --git a/open-sse/config/providers/index.ts b/open-sse/config/providers/index.ts index 228d9e93ef..da7650e5c8 100644 --- a/open-sse/config/providers/index.ts +++ b/open-sse/config/providers/index.ts @@ -153,7 +153,7 @@ import { gitlab_duoProvider } from "./registry/gitlab-duo/index.ts"; import { command_codeProvider } from "./registry/command-code/index.ts"; import { novitaProvider } from "./registry/novita/index.ts"; import { regoloProvider } from "./registry/regolo/index.ts"; -import { windsurfProvider } from "./registry/windsurf/index.ts"; +import { devin_desktopProvider } from "./registry/devin-desktop/index.ts"; import { zed_hostedProvider } from "./registry/zed-hosted/index.ts"; import { nanogptProvider } from "./registry/nanogpt/index.ts"; import { scalewayProvider } from "./registry/scaleway/index.ts"; @@ -233,6 +233,32 @@ import { hyperagentProvider } from "./registry/hyperagent/index.ts"; import { muse_codeProvider } from "./registry/muse-code/index.ts"; import { naga_acProvider } from "./registry/naga-ac/index.ts"; import { chatanywhereProvider } from "./registry/chatanywhere/index.ts"; +import { zyloApiProvider } from "./registry/zylo-api/index.ts"; +import { poolsideProvider } from "./registry/poolside/index.ts"; +import { fastrouterProvider } from "./registry/fastrouter/index.ts"; +import { anyapiProvider } from "./registry/anyapi/index.ts"; +import { electronhubProvider } from "./registry/electronhub/index.ts"; +import { llmgatewayProvider } from "./registry/llmgateway/index.ts"; +import { llmKiwiProvider } from "./registry/llm-kiwi/index.ts"; +import { literouterProvider } from "./registry/literouter/index.ts"; +import { mnnAiProvider } from "./registry/mnn-ai/index.ts"; +import { meganovaAiProvider } from "./registry/meganova-ai/index.ts"; +import { mixlayerProvider } from "./registry/mixlayer/index.ts"; +import { spekaProvider } from "./registry/speka/index.ts"; +import { tokenreplyProvider } from "./registry/tokenreply/index.ts"; +import { yoloAutoProvider } from "./registry/yolo-auto/index.ts"; +import { dxntProvider } from "./registry/dxnt/index.ts"; +import { cloudcodeOneProvider } from "./registry/cloudcode-one/index.ts"; +import { ofoxaiProvider } from "./registry/ofoxai/index.ts"; +import { zerolimitaiProvider } from "./registry/zerolimitai/index.ts"; +import { helyxaiProvider } from "./registry/helyxai/index.ts"; +import { aurikoProvider } from "./registry/auriko/index.ts"; +import { poixeAiProvider } from "./registry/poixe-ai/index.ts"; +import { nagaAiProvider } from "./registry/naga-ai/index.ts"; +import { chatOripeProvider } from "./registry/chat-oripe/index.ts"; +import { freeinferenceProvider } from "./registry/freeinference/index.ts"; +import { freeAiProvider } from "./registry/free-ai/index.ts"; + export const REGISTRY: Record = { aimlapi: aimlapiProvider, @@ -385,7 +411,7 @@ export const REGISTRY: Record = { "command-code": command_codeProvider, novita: novitaProvider, regolo: regoloProvider, - windsurf: windsurfProvider, + "devin-desktop": devin_desktopProvider, "zed-hosted": zed_hostedProvider, nanogpt: nanogptProvider, scaleway: scalewayProvider, @@ -465,7 +491,33 @@ export const REGISTRY: Record = { promptql: promptqlProvider, hyperagent: hyperagentProvider, "muse-code": muse_codeProvider, + "zylo-api": zyloApiProvider, unorouter: unorouterProvider, "naga-ac": naga_acProvider, chatanywhere: chatanywhereProvider, + poolside: poolsideProvider, + fastrouter: fastrouterProvider, + anyapi: anyapiProvider, + electronhub: electronhubProvider, + llmgateway: llmgatewayProvider, + "llm-kiwi": llmKiwiProvider, + literouter: literouterProvider, + "mnn-ai": mnnAiProvider, + "meganova-ai": meganovaAiProvider, + mixlayer: mixlayerProvider, + speka: spekaProvider, + tokenreply: tokenreplyProvider, + "yolo-auto": yoloAutoProvider, + dxnt: dxntProvider, + "cloudcode-one": cloudcodeOneProvider, + ofoxai: ofoxaiProvider, + zerolimitai: zerolimitaiProvider, + helyxai: helyxaiProvider, + auriko: aurikoProvider, + "poixe-ai": poixeAiProvider, + "naga-ai": nagaAiProvider, + "chat-oripe": chatOripeProvider, + freeinference: freeinferenceProvider, + "free-ai": freeAiProvider, + }; diff --git a/open-sse/config/providers/registry/auriko/index.ts b/open-sse/config/providers/registry/auriko/index.ts new file mode 100644 index 0000000000..8e9319c9c5 --- /dev/null +++ b/open-sse/config/providers/registry/auriko/index.ts @@ -0,0 +1,11 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +export const aurikoProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "auriko", + alias: "auriko", + baseUrl: "https://api.auriko.ai/v1/chat/completions", + modelsUrl: "https://api.auriko.ai/v1/models", + models: [], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/chat-oripe/index.ts b/open-sse/config/providers/registry/chat-oripe/index.ts new file mode 100644 index 0000000000..4aac54edeb --- /dev/null +++ b/open-sse/config/providers/registry/chat-oripe/index.ts @@ -0,0 +1,12 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +// The upstream brand and hostname are ambiguous, so avoid unverified quota claims. +export const chatOripeProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "chat-oripe", + alias: "chat-oripe", + baseUrl: "https://api.oriper.com/v1/chat/completions", + modelsUrl: "https://api.oriper.com/v1/models", + models: [], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/chatanywhere/index.ts b/open-sse/config/providers/registry/chatanywhere/index.ts index 137cef8d05..6c99250b20 100644 --- a/open-sse/config/providers/registry/chatanywhere/index.ts +++ b/open-sse/config/providers/registry/chatanywhere/index.ts @@ -1,17 +1,12 @@ import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; -// ChatAnywhere (api.chatanywhere.tech) — OpenAI-compatible gateway from the -// chatanywhere/GPT_API_free project (~38.7k GitHub stars). Requires GitHub-account- -// gated API key. Free tier is for personal non-commercial use only. -export const chatanywhereProvider: RegistryEntry = { +// International endpoint; audited free access is limited to non-commercial use. +export const chatanywhereProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ id: "chatanywhere", - alias: "chtany", - format: "openai", - executor: "default", - baseUrl: "https://api.chatanywhere.tech/v1/chat/completions", - modelsUrl: "https://api.chatanywhere.tech/v1/models", - authType: "apikey", - authHeader: "bearer", - passthroughModels: true, + alias: "chatanywhere", + baseUrl: "https://api.chatanywhere.org/v1/chat/completions", + modelsUrl: "https://api.chatanywhere.org/v1/models", models: [], -}; \ No newline at end of file + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/cloudcode-one/index.ts b/open-sse/config/providers/registry/cloudcode-one/index.ts new file mode 100644 index 0000000000..e9f8bc211d --- /dev/null +++ b/open-sse/config/providers/registry/cloudcode-one/index.ts @@ -0,0 +1,20 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +/** + * CloudCode.ONE - OpenAI-compatible API with published free model aliases. + * + * The Anthropic-compatible endpoint is documented separately; this registry + * covers the OpenAI-compatible API surface audited for this migration. + */ +export const cloudcodeOneProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "cloudcode-one", + alias: "cloudcode-one", + baseUrl: "https://api.cloudcode.one/v1/chat/completions", + modelsUrl: "https://api.cloudcode.one/v1/models", + models: [ + { id: "glm-4.7-flash", name: "GLM 4.7 Flash" }, + { id: "glm-4.6v-flash", name: "GLM 4.6V Flash" }, + ], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/deepai/index.ts b/open-sse/config/providers/registry/deepai/index.ts index 4a3e46b6c4..966df64a39 100644 --- a/open-sse/config/providers/registry/deepai/index.ts +++ b/open-sse/config/providers/registry/deepai/index.ts @@ -1,4 +1,4 @@ -import type { RegistryEntry } from "../../shared"; +import type { RegistryEntry } from "../../shared.ts"; export const deepaiProvider: RegistryEntry = { id: "deepai", diff --git a/open-sse/config/providers/registry/devin-desktop/index.ts b/open-sse/config/providers/registry/devin-desktop/index.ts new file mode 100644 index 0000000000..146a001503 --- /dev/null +++ b/open-sse/config/providers/registry/devin-desktop/index.ts @@ -0,0 +1,14 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { DEVIN_MODEL_CATALOG } from "../devin/catalog.ts"; + +export const devin_desktopProvider: RegistryEntry = { + id: "devin-desktop", + format: "openai", + executor: "devin-desktop", + baseUrl: "https://server.codeium.com", + authType: "oauth", + authHeader: "Authorization", + authPrefix: "Bearer ", + defaultContextLength: 200000, + models: DEVIN_MODEL_CATALOG, +}; diff --git a/open-sse/config/providers/registry/devin/catalog.ts b/open-sse/config/providers/registry/devin/catalog.ts index 2ef8567890..8195d311cf 100644 --- a/open-sse/config/providers/registry/devin/catalog.ts +++ b/open-sse/config/providers/registry/devin/catalog.ts @@ -12,6 +12,12 @@ export const DEVIN_MODEL_CATALOG: RegistryModel[] = [ { id: "claude-5-fable-high", name: "Claude Fable 5 High", contextLength: 1000000 }, { id: "claude-5-fable-medium", name: "Claude Fable 5 Medium", contextLength: 1000000 }, { id: "claude-5-fable-low", name: "Claude Fable 5 Low", contextLength: 1000000 }, + // Claude Opus 5 + { id: "claude-opus-5-max", name: "Claude Opus 5 Max", contextLength: 1000000 }, + { id: "claude-opus-5-xhigh", name: "Claude Opus 5 XHigh", contextLength: 1000000 }, + { id: "claude-opus-5-high", name: "Claude Opus 5 High", contextLength: 1000000 }, + { id: "claude-opus-5-medium", name: "Claude Opus 5 Medium", contextLength: 1000000 }, + { id: "claude-opus-5-low", name: "Claude Opus 5 Low", contextLength: 1000000 }, // Claude Opus 4.8 { id: "claude-opus-4-8-max", name: "Claude Opus 4.8 Max", contextLength: 1000000 }, { id: "claude-opus-4-8-xhigh", name: "Claude Opus 4.8 XHigh", contextLength: 1000000 }, @@ -78,6 +84,10 @@ export const DEVIN_MODEL_CATALOG: RegistryModel[] = [ // Gemini { id: "gemini-3-1-pro-high", name: "Gemini 3.1 Pro High", contextLength: 1048576 }, { id: "gemini-3-1-pro-low", name: "Gemini 3.1 Pro Low", contextLength: 1048576 }, + { id: "gemini-3-6-flash-high", name: "Gemini 3.6 Flash High" }, + { id: "gemini-3-6-flash-medium", name: "Gemini 3.6 Flash Medium" }, + { id: "gemini-3-6-flash-low", name: "Gemini 3.6 Flash Low" }, + { id: "gemini-3-6-flash-minimal", name: "Gemini 3.6 Flash Minimal" }, { id: "gemini-3-5-flash-high", name: "Gemini 3.5 Flash High", contextLength: 1048576 }, { id: "gemini-3-5-flash-medium", name: "Gemini 3.5 Flash Medium", contextLength: 1048576 }, { id: "gemini-3-5-flash-low", name: "Gemini 3.5 Flash Low", contextLength: 1048576 }, @@ -91,8 +101,19 @@ export const DEVIN_MODEL_CATALOG: RegistryModel[] = [ { id: "glm-5-2-max", name: "GLM-5.2 Max" }, { id: "glm-5-2-1m", name: "GLM-5.2 High 1M", contextLength: 1000000 }, { id: "glm-5-2", name: "GLM-5.2 High" }, + // Kimi + { id: "kimi-k3-max", name: "Kimi K3 Max" }, + { id: "kimi-k3-high", name: "Kimi K3 High" }, + { id: "kimi-k3-low", name: "Kimi K3 Low" }, + { id: "kimi-k2-7", name: "Kimi K2.7", contextLength: 262144 }, + // Inkling + { id: "inkling-max", name: "Inkling Max" }, + { id: "inkling-xhigh", name: "Inkling XHigh" }, + { id: "inkling-high", name: "Inkling High" }, + { id: "inkling-medium", name: "Inkling Medium" }, + { id: "inkling-low", name: "Inkling Low" }, + { id: "inkling-none", name: "Inkling None" }, // Others { id: "deepseek-v4", name: "DeepSeek V4 Pro", contextLength: 1048576 }, { id: "nemotron-3-ultra-nvfp4", name: "Nemotron 3 Ultra", contextLength: 262144 }, - { id: "kimi-k2-7", name: "Kimi K2.7", contextLength: 262144 }, ]; diff --git a/open-sse/config/providers/registry/dxnt/index.ts b/open-sse/config/providers/registry/dxnt/index.ts new file mode 100644 index 0000000000..2a70c339c3 --- /dev/null +++ b/open-sse/config/providers/registry/dxnt/index.ts @@ -0,0 +1,17 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +/** + * DXNT - OpenAI-compatible API with a free account quota. + * + * Models are discovered from the provider's authenticated catalog rather than + * copied into a static list, so account-specific availability remains intact. + */ +export const dxntProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "dxnt", + alias: "dxnt", + baseUrl: "https://www.dxnt.com/v1/chat/completions", + modelsUrl: "https://www.dxnt.com/v1/models", + models: [], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/free-ai/index.ts b/open-sse/config/providers/registry/free-ai/index.ts new file mode 100644 index 0000000000..a055dab8db --- /dev/null +++ b/open-sse/config/providers/registry/free-ai/index.ts @@ -0,0 +1,11 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +export const freeAiProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "free-ai", + alias: "free-ai", + baseUrl: "https://api.free.ai/v1/chat/", + modelsUrl: "https://api.free.ai/v1/models", + models: [], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/freeinference/index.ts b/open-sse/config/providers/registry/freeinference/index.ts new file mode 100644 index 0000000000..25c02dbaad --- /dev/null +++ b/open-sse/config/providers/registry/freeinference/index.ts @@ -0,0 +1,11 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +export const freeinferenceProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "freeinference", + alias: "freeinference", + baseUrl: "https://freeinference.org/v1/chat/completions", + modelsUrl: "https://freeinference.org/v1/models", + models: [], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/helyxai/index.ts b/open-sse/config/providers/registry/helyxai/index.ts new file mode 100644 index 0000000000..e0b3fd1ea0 --- /dev/null +++ b/open-sse/config/providers/registry/helyxai/index.ts @@ -0,0 +1,11 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +export const helyxaiProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "helyxai", + alias: "helyxai", + baseUrl: "https://helyxai.space/v1/chat/completions", + modelsUrl: "https://helyxai.space/v1/models", + models: [], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/literouter/index.ts b/open-sse/config/providers/registry/literouter/index.ts new file mode 100644 index 0000000000..fd13e540eb --- /dev/null +++ b/open-sse/config/providers/registry/literouter/index.ts @@ -0,0 +1,11 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +export const literouterProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "literouter", + alias: "literouter", + baseUrl: "https://api.literouter.com/v1/chat/completions", + modelsUrl: "https://api.literouter.com/v1/models", + models: [], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/meganova-ai/index.ts b/open-sse/config/providers/registry/meganova-ai/index.ts new file mode 100644 index 0000000000..e5c61d01df --- /dev/null +++ b/open-sse/config/providers/registry/meganova-ai/index.ts @@ -0,0 +1,11 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +export const meganovaAiProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "meganova-ai", + alias: "meganova-ai", + baseUrl: "https://api.meganova.ai/v1/chat/completions", + modelsUrl: "https://api.meganova.ai/v1/models", + models: [], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/mixlayer/index.ts b/open-sse/config/providers/registry/mixlayer/index.ts new file mode 100644 index 0000000000..63f4ab7715 --- /dev/null +++ b/open-sse/config/providers/registry/mixlayer/index.ts @@ -0,0 +1,11 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +export const mixlayerProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "mixlayer", + alias: "mixlayer", + baseUrl: "https://models.mixlayer.ai/v1/chat/completions", + modelsUrl: "https://models.mixlayer.ai/v1/models", + models: [{ id: "qwen/qwen3.5-4b-free", name: "Qwen 3.5 4B (free)" }], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/mnn-ai/index.ts b/open-sse/config/providers/registry/mnn-ai/index.ts new file mode 100644 index 0000000000..f1d7e2317f --- /dev/null +++ b/open-sse/config/providers/registry/mnn-ai/index.ts @@ -0,0 +1,11 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +export const mnnAiProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "mnn-ai", + alias: "mnn-ai", + baseUrl: "https://api.mnnai.ru/v1/chat/completions", + modelsUrl: "https://api.mnnai.ru/v1/models", + models: [], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/naga-ai/index.ts b/open-sse/config/providers/registry/naga-ai/index.ts new file mode 100644 index 0000000000..3918bd5585 --- /dev/null +++ b/open-sse/config/providers/registry/naga-ai/index.ts @@ -0,0 +1,12 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +// Free access terms may permit data collection or training use; discover models dynamically. +export const nagaAiProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "naga-ai", + alias: "naga-ai", + baseUrl: "https://api.naga.ac/v1/chat/completions", + modelsUrl: "https://api.naga.ac/v1/models", + models: [], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/ofoxai/index.ts b/open-sse/config/providers/registry/ofoxai/index.ts new file mode 100644 index 0000000000..ada7b5eef2 --- /dev/null +++ b/open-sse/config/providers/registry/ofoxai/index.ts @@ -0,0 +1,11 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +export const ofoxaiProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "ofoxai", + alias: "ofoxai", + baseUrl: "https://api.ofox.ai/v1/chat/completions", + modelsUrl: "https://api.ofox.ai/v1/models", + models: [], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/poixe-ai/index.ts b/open-sse/config/providers/registry/poixe-ai/index.ts new file mode 100644 index 0000000000..7507e8580a --- /dev/null +++ b/open-sse/config/providers/registry/poixe-ai/index.ts @@ -0,0 +1,11 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +export const poixeAiProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "poixe-ai", + alias: "poixe-ai", + baseUrl: "https://api.poixe.com/v1/chat/completions", + modelsUrl: "https://api.poixe.com/v1/models", + models: [], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/speka/index.ts b/open-sse/config/providers/registry/speka/index.ts new file mode 100644 index 0000000000..04f1f17c7e --- /dev/null +++ b/open-sse/config/providers/registry/speka/index.ts @@ -0,0 +1,11 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +export const spekaProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "speka", + alias: "speka", + baseUrl: "https://speka.me/v1/chat/completions", + modelsUrl: "https://speka.me/v1/models", + models: [], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/tokenreply/index.ts b/open-sse/config/providers/registry/tokenreply/index.ts new file mode 100644 index 0000000000..835225c471 --- /dev/null +++ b/open-sse/config/providers/registry/tokenreply/index.ts @@ -0,0 +1,11 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +export const tokenreplyProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "tokenreply", + alias: "tokenreply", + baseUrl: "https://api.tokenreply.com/v1/chat/completions", + modelsUrl: "https://api.tokenreply.com/v1/models", + models: [], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/unorouter/index.ts b/open-sse/config/providers/registry/unorouter/index.ts index 771bde6a7c..a84c38387d 100644 --- a/open-sse/config/providers/registry/unorouter/index.ts +++ b/open-sse/config/providers/registry/unorouter/index.ts @@ -1,14 +1,11 @@ import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; -export const unorouterProvider: RegistryEntry = { +export const unorouterProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ id: "unorouter", alias: "unorouter", - format: "openai", - executor: "default", - baseUrl: "https://api.unorouter.ai/v1/chat/completions", - authType: "apikey", - authHeader: "bearer", - defaultContextLength: 128000, - models: [{ id: "auto", name: "Auto (Best Available)" }], + baseUrl: "https://api.unorouter.com/v1/chat/completions", + modelsUrl: "https://api.unorouter.com/v1/models", + models: [], passthroughModels: true, -}; +}); diff --git a/open-sse/config/providers/registry/windsurf/index.ts b/open-sse/config/providers/registry/windsurf/index.ts deleted file mode 100644 index be52eff3c2..0000000000 --- a/open-sse/config/providers/registry/windsurf/index.ts +++ /dev/null @@ -1,119 +0,0 @@ -import type { RegistryEntry } from "../../shared.ts"; - -export const windsurfProvider: RegistryEntry = { - id: "windsurf", - alias: "ws", - format: "windsurf", - executor: "windsurf", - // gRPC-web endpoint — handled entirely inside WindsurfExecutor. - // Model IDs are the canonical Windsurf catalog names (with dots), auto-synced - // from the Windsurf cloud via GetCascadeModelConfigs. Source: guanxiaol/WindsurfPoolAPI. - baseUrl: "https://server.self-serve.windsurf.com", - authType: "oauth", - authHeader: "Authorization", - authPrefix: "Bearer ", - defaultContextLength: 200000, - // Model IDs verified against model_configs_v2.bin from Devin CLI binary (2026.5.x). - // dot-notation = OmniRoute ID; executor MODEL_ALIAS_MAP maps it to Windsurf modelUid. - models: [ - // ── Cognition / SWE ────────────────────────────────────────────────── - { id: "swe-1.6-fast", name: "SWE-1.6 Fast" }, - { id: "swe-1.6", name: "SWE-1.6" }, - { id: "swe-1.5-fast", name: "SWE-1.5 Fast" }, - { id: "swe-1.5", name: "SWE-1.5" }, - // ── Claude Opus 4.7 — effort-tiered ───────────────────────────────── - { id: "claude-opus-4.7-max", name: "Claude Opus 4.7 Max", contextLength: 200000 }, - { id: "claude-opus-4.7-xhigh", name: "Claude Opus 4.7 XHigh", contextLength: 200000 }, - { id: "claude-opus-4.7-high", name: "Claude Opus 4.7 High", contextLength: 200000 }, - { id: "claude-opus-4.7-medium", name: "Claude Opus 4.7 Medium", contextLength: 200000 }, - { id: "claude-opus-4.7-low", name: "Claude Opus 4.7 Low", contextLength: 200000 }, - { id: "claude-opus-4.7-review", name: "Claude Opus 4.7 Review", contextLength: 200000 }, - // ── Claude Sonnet/Opus 4.6 ────────────────────────────────────────── - { - id: "claude-sonnet-4.6-thinking-1m", - name: "Claude Sonnet 4.6 Thinking 1M", - contextLength: 1000000, - }, - { id: "claude-sonnet-4.6-1m", name: "Claude Sonnet 4.6 1M", contextLength: 1000000 }, - { - id: "claude-sonnet-4.6-thinking", - name: "Claude Sonnet 4.6 Thinking", - contextLength: 200000, - }, - { id: "claude-sonnet-4.6", name: "Claude Sonnet 4.6", contextLength: 200000 }, - { id: "claude-opus-4.6-thinking", name: "Claude Opus 4.6 Thinking", contextLength: 200000 }, - { id: "claude-opus-4.6", name: "Claude Opus 4.6", contextLength: 200000 }, - // ── Claude 4.5 ────────────────────────────────────────────────────── - { id: "claude-opus-4.5-thinking", name: "Claude Opus 4.5 Thinking", contextLength: 200000 }, - { id: "claude-opus-4.5", name: "Claude Opus 4.5", contextLength: 200000 }, - { - id: "claude-sonnet-4.5-thinking", - name: "Claude Sonnet 4.5 Thinking", - contextLength: 200000, - }, - { id: "claude-sonnet-4.5", name: "Claude Sonnet 4.5", contextLength: 200000 }, - { id: "claude-haiku-4.5", name: "Claude Haiku 4.5", contextLength: 200000 }, - // ── GPT-5.5 — effort-tiered (+ fast/priority variants) ────────────── - { id: "gpt-5.5-xhigh-fast", name: "GPT-5.5 XHigh Fast", contextLength: 200000 }, - { id: "gpt-5.5-xhigh", name: "GPT-5.5 XHigh", contextLength: 200000 }, - { id: "gpt-5.5-high-fast", name: "GPT-5.5 High Fast", contextLength: 200000 }, - { id: "gpt-5.5-high", name: "GPT-5.5 High", contextLength: 200000 }, - { id: "gpt-5.5-medium-fast", name: "GPT-5.5 Medium Fast", contextLength: 200000 }, - { id: "gpt-5.5-medium", name: "GPT-5.5 Medium", contextLength: 200000 }, - { id: "gpt-5.5-low-fast", name: "GPT-5.5 Low Fast", contextLength: 200000 }, - { id: "gpt-5.5-low", name: "GPT-5.5 Low", contextLength: 200000 }, - { id: "gpt-5.5-none-fast", name: "GPT-5.5 None Fast", contextLength: 200000 }, - { id: "gpt-5.5-none", name: "GPT-5.5 None", contextLength: 200000 }, - // ── GPT-5.4 — effort-tiered (+ mini + fast variants) ──────────────── - { id: "gpt-5.4-xhigh-fast", name: "GPT-5.4 XHigh Fast", contextLength: 200000 }, - { id: "gpt-5.4-xhigh", name: "GPT-5.4 XHigh", contextLength: 200000 }, - { id: "gpt-5.4-high-fast", name: "GPT-5.4 High Fast", contextLength: 200000 }, - { id: "gpt-5.4-high", name: "GPT-5.4 High", contextLength: 200000 }, - { id: "gpt-5.4-medium-fast", name: "GPT-5.4 Medium Fast", contextLength: 200000 }, - { id: "gpt-5.4-medium", name: "GPT-5.4 Medium", contextLength: 200000 }, - { id: "gpt-5.4-low-fast", name: "GPT-5.4 Low Fast", contextLength: 200000 }, - { id: "gpt-5.4-low", name: "GPT-5.4 Low", contextLength: 200000 }, - { id: "gpt-5.4-none-fast", name: "GPT-5.4 None Fast", contextLength: 200000 }, - { id: "gpt-5.4-none", name: "GPT-5.4 None", contextLength: 200000 }, - { id: "gpt-5.4-mini-xhigh", name: "GPT-5.4 Mini XHigh", contextLength: 128000 }, - { id: "gpt-5.4-mini-high", name: "GPT-5.4 Mini High", contextLength: 128000 }, - { id: "gpt-5.4-mini-medium", name: "GPT-5.4 Mini Medium", contextLength: 128000 }, - { id: "gpt-5.4-mini-low", name: "GPT-5.4 Mini Low", contextLength: 128000 }, - // ── GPT-5.3 Codex — effort-tiered (+ fast variants) ───────────────── - { id: "gpt-5.3-codex-xhigh-fast", name: "GPT-5.3 Codex XHigh Fast", contextLength: 200000 }, - { id: "gpt-5.3-codex-xhigh", name: "GPT-5.3 Codex XHigh", contextLength: 200000 }, - { id: "gpt-5.3-codex-high-fast", name: "GPT-5.3 Codex High Fast", contextLength: 200000 }, - { id: "gpt-5.3-codex-high", name: "GPT-5.3 Codex High", contextLength: 200000 }, - { id: "gpt-5.3-codex-medium-fast", name: "GPT-5.3 Codex Medium Fast", contextLength: 200000 }, - { id: "gpt-5.3-codex-medium", name: "GPT-5.3 Codex Medium", contextLength: 200000 }, - { id: "gpt-5.3-codex-low-fast", name: "GPT-5.3 Codex Low Fast", contextLength: 200000 }, - { id: "gpt-5.3-codex-low", name: "GPT-5.3 Codex Low", contextLength: 200000 }, - // ── GPT-5.2 ───────────────────────────────────────────────────────── - { id: "gpt-5.2-xhigh", name: "GPT-5.2 XHigh", contextLength: 200000 }, - { id: "gpt-5.2-high", name: "GPT-5.2 High", contextLength: 200000 }, - { id: "gpt-5.2-medium", name: "GPT-5.2 Medium", contextLength: 200000 }, - { id: "gpt-5.2-low", name: "GPT-5.2 Low", contextLength: 200000 }, - { id: "gpt-5.2-none", name: "GPT-5.2 None", contextLength: 200000 }, - // ── GPT-5 ──────────────────────────────────────────────────────────── - { id: "gpt-5", name: "GPT-5", contextLength: 200000 }, - // ── GPT-4.1 / 4o ──────────────────────────────────────────────────── - { id: "gpt-4.1", name: "GPT-4.1", contextLength: 200000 }, - { id: "gpt-4.1-mini", name: "GPT-4.1 Mini", contextLength: 128000 }, - { id: "gpt-4.1-nano", name: "GPT-4.1 Nano", contextLength: 32000 }, - { id: "gpt-4o", name: "GPT-4o", contextLength: 128000 }, - { id: "gpt-4o-mini", name: "GPT-4o Mini", contextLength: 128000 }, - // ── Gemini ─────────────────────────────────────────────────────────── - { id: "gemini-3.1-pro-high", name: "Gemini 3.1 Pro High", contextLength: 1000000 }, - { id: "gemini-3.1-pro-low", name: "Gemini 3.1 Pro Low", contextLength: 1000000 }, - { id: "gemini-3.0-flash-high", name: "Gemini 3 Flash High", contextLength: 1000000 }, - { id: "gemini-3.0-flash-medium", name: "Gemini 3 Flash Medium", contextLength: 1000000 }, - { id: "gemini-3.0-flash-low", name: "Gemini 3 Flash Low", contextLength: 1000000 }, - { id: "gemini-3.0-flash-minimal", name: "Gemini 3 Flash Minimal", contextLength: 1000000 }, - { id: "gemini-2.5-pro", name: "Gemini 2.5 Pro", contextLength: 1000000 }, - // ── Others ─────────────────────────────────────────────────────────── - { id: "deepseek-v4", name: "DeepSeek V4", contextLength: 64000 }, - { id: "kimi-k2.6", name: "Kimi K2.6", contextLength: 131000 }, - { id: "kimi-k2.5", name: "Kimi K2.5", contextLength: 131000 }, - { id: "glm-5.1", name: "GLM-5.1", contextLength: 128000 }, - ], -}; diff --git a/open-sse/config/providers/registry/yolo-auto/index.ts b/open-sse/config/providers/registry/yolo-auto/index.ts new file mode 100644 index 0000000000..6b90dc1a75 --- /dev/null +++ b/open-sse/config/providers/registry/yolo-auto/index.ts @@ -0,0 +1,17 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +/** + * Yolo-Auto - OpenAI-compatible API with a request-limited free tier. + * + * The catalog is kept intentionally small: the documented free-tier model is + * seeded while passthrough discovery allows the service to publish updates. + */ +export const yoloAutoProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "yolo-auto", + alias: "yolo-auto", + baseUrl: "https://yolo-auto.com/v1/chat/completions", + modelsUrl: "https://yolo-auto.com/v1/models", + models: [{ id: "qwen3.6-35b-a3b", name: "Qwen 3.6 35B A3B" }], + passthroughModels: true, +}); diff --git a/open-sse/config/providers/registry/zai-web/index.ts b/open-sse/config/providers/registry/zai-web/index.ts index ab40af01ef..98901daab9 100644 --- a/open-sse/config/providers/registry/zai-web/index.ts +++ b/open-sse/config/providers/registry/zai-web/index.ts @@ -10,10 +10,34 @@ export const zai_webProvider: RegistryEntry = { // Distinct from the API-key `zai`/`glm` providers (api.z.ai). baseUrl: "https://chat.z.ai", authType: "apikey", - authHeader: "cookie", + authHeader: "bearer", + // Z.ai's visible "Tools" switch enables its internal VLM/MCP tools. It does + // not accept caller-supplied OpenAI `tools`, which remains disabled here. models: [ - { id: "glm-4.6", name: "GLM-4.6", toolCalling: false }, - { id: "glm-4.5", name: "GLM-4.5", toolCalling: false }, - { id: "glm-4.5v", name: "GLM-4.5V (Vision)", toolCalling: false }, + { + id: "glm-5.2", + name: "GLM-5.2", + toolCalling: false, + supportsReasoning: true, + }, + { + id: "GLM-5.1", + name: "GLM-5.1", + toolCalling: false, + supportsReasoning: true, + }, + { + id: "GLM-5-Turbo", + name: "GLM-5-Turbo", + toolCalling: false, + supportsReasoning: true, + }, + { + id: "GLM-5v-Turbo", + name: "GLM-5V-Turbo", + toolCalling: false, + supportsReasoning: true, + supportsVision: true, + }, ], }; diff --git a/open-sse/config/providers/registry/zerolimitai/index.ts b/open-sse/config/providers/registry/zerolimitai/index.ts new file mode 100644 index 0000000000..5ad779d6d7 --- /dev/null +++ b/open-sse/config/providers/registry/zerolimitai/index.ts @@ -0,0 +1,11 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +export const zerolimitaiProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "zerolimitai", + alias: "zerolimitai", + baseUrl: "https://www.zerolimitai.com/api/v1/chat/completions", + modelsUrl: "https://www.zerolimitai.com/api/v1/models", + models: [], + passthroughModels: true, +}); diff --git a/open-sse/executors/devin-desktop.ts b/open-sse/executors/devin-desktop.ts new file mode 100644 index 0000000000..8dc6ce2dc7 --- /dev/null +++ b/open-sse/executors/devin-desktop.ts @@ -0,0 +1,922 @@ +/** + * DevinDesktopExecutor — translates OpenAI chat requests to the direct Devin + * Desktop Connect-protobuf GetChatMessage stream. + * + * The upstream still identifies this client as Windsurf. That compatibility + * identity is intentionally kept private to this transport. + */ + +import { randomUUID } from "node:crypto"; +import { gunzipSync } from "node:zlib"; + +import { PROVIDERS } from "../config/constants.ts"; +import { buildErrorBody, sanitizeErrorMessage } from "../utils/error.ts"; +import { BaseExecutor, mergeUpstreamExtraHeaders, type ExecuteInput } from "./base.ts"; + +const DEVIN_DESKTOP_BASE_URL = "https://server.codeium.com"; +const DEVIN_DESKTOP_CHAT_PATH = "/exa.api_server_pb.ApiServerService/GetChatMessage"; +const DEVIN_DESKTOP_AUTH_PATH = "/exa.auth_pb.AuthService/GetUserJwt"; +const DEVIN_DESKTOP_CHAT_URL = `${DEVIN_DESKTOP_BASE_URL}${DEVIN_DESKTOP_CHAT_PATH}`; + +const DEVIN_UPSTREAM_IDE_NAME = "windsurf"; +const VERIFIED_DEVIN_DESKTOP_VERSION = "3.6.27"; +// The installed Desktop bundle exposes codeiumVersion 1.48.2. The exact runtime +// getter has not been independently proven, so keep this distinct from the app +// version and allow a validated override rather than claiming they are equal. +const DEFAULT_DEVIN_EXTENSION_VERSION = "1.48.2"; +const DEVIN_VERSION_PATTERN = /^\d+\.\d+\.\d+$/; +const DEVIN_LOCALE = "en-US"; +const CONNECT_COMPRESSED_FLAG = 0x01; +const CONNECT_END_STREAM_FLAG = 0x02; +const MAX_CONNECT_FRAME_BYTES = 16 * 1024 * 1024; +const MAX_AUTH_RESPONSE_BYTES = 1024 * 1024; + +export function resolveDevinDesktopVersion(): string { + const override = process.env.DEVIN_DESKTOP_VERSION?.trim() ?? ""; + return DEVIN_VERSION_PATTERN.test(override) ? override : VERIFIED_DEVIN_DESKTOP_VERSION; +} + +export function resolveDevinDesktopExtensionVersion(): string { + const override = process.env.DEVIN_DESKTOP_EXTENSION_VERSION?.trim() ?? ""; + return DEVIN_VERSION_PATTERN.test(override) ? override : DEFAULT_DEVIN_EXTENSION_VERSION; +} + +const TEXT_ENCODER = new TextEncoder(); +const TEXT_DECODER = new TextDecoder(); + +function encodeVarint(value: number): Uint8Array { + if (!Number.isSafeInteger(value) || value < 0) throw new Error("invalid protobuf varint"); + const bytes: number[] = []; + let remaining = value; + while (remaining >= 0x80) { + bytes.push((remaining % 0x80) | 0x80); + remaining = Math.floor(remaining / 0x80); + } + bytes.push(remaining); + return Uint8Array.from(bytes); +} + +function concatBytes(arrays: Uint8Array[]): Uint8Array { + const total = arrays.reduce((length, bytes) => length + bytes.length, 0); + const result = new Uint8Array(total); + let offset = 0; + for (const bytes of arrays) { + result.set(bytes, offset); + offset += bytes.length; + } + return result; +} + +function bodyArrayBuffer(bytes: Uint8Array): ArrayBuffer { + const copy = new Uint8Array(bytes.length); + copy.set(bytes); + return copy.buffer; +} + +function encodeField(fieldNumber: number, payload: Uint8Array): Uint8Array { + return concatBytes([encodeVarint((fieldNumber << 3) | 2), encodeVarint(payload.length), payload]); +} + +function encodeString(fieldNumber: number, value: string): Uint8Array { + return value ? encodeField(fieldNumber, TEXT_ENCODER.encode(value)) : new Uint8Array(0); +} + +function encodeVarintField(fieldNumber: number, value: number): Uint8Array { + return value === 0 + ? new Uint8Array(0) + : concatBytes([encodeVarint(fieldNumber << 3), encodeVarint(value)]); +} + +export type DevinDesktopToolCallInput = { + id: string; + name: string; + argumentsJson: string; +}; + +export type DevinDesktopPromptInput = { + messageId: string; + source: 1 | 2 | 4; + prompt: string; + toolCalls?: DevinDesktopToolCallInput[]; + toolCallId?: string; +}; + +export type DevinDesktopToolInput = { + name: string; + description: string; + jsonSchemaString: string; + strict: boolean; +}; + +export type DevinDesktopToolChoice = + | { optionName: "auto" | "none" | "required" } + | { + toolName: string; + }; + +export type DevinDesktopMetadataInput = { + apiKey: string; + sessionId: string; + userJwt?: string; + ideVersion?: string; + extensionVersion?: string; +}; + +export type DevinDesktopRequestInput = DevinDesktopMetadataInput & { + model: string; + systemPrompt: string; + prompts: DevinDesktopPromptInput[]; + cascadeId: string; + tools?: DevinDesktopToolInput[]; + disableParallelToolCalls?: boolean; + toolChoice?: DevinDesktopToolChoice; +}; + +function encodeMetadata(input: DevinDesktopMetadataInput): Uint8Array { + return concatBytes([ + encodeString(1, DEVIN_UPSTREAM_IDE_NAME), + encodeString(2, input.extensionVersion ?? resolveDevinDesktopExtensionVersion()), + encodeString(3, input.apiKey), + encodeString(4, DEVIN_LOCALE), + encodeString(7, input.ideVersion ?? resolveDevinDesktopVersion()), + encodeString(10, input.sessionId), + encodeString(12, DEVIN_UPSTREAM_IDE_NAME), + encodeString(21, input.userJwt ?? ""), + ]); +} + +/** Encode the unary GetUserJwtRequest (field 1 = Metadata), without an envelope. */ +export function encodeDevinDesktopAuthRequest(input: DevinDesktopMetadataInput): Uint8Array { + return encodeField(1, encodeMetadata(input)); +} + +function encodeChatToolCall(toolCall: DevinDesktopToolCallInput): Uint8Array { + return concatBytes([ + encodeString(1, toolCall.id), + encodeString(2, toolCall.name), + encodeString(3, toolCall.argumentsJson), + ]); +} + +function encodeChatMessagePrompt(prompt: DevinDesktopPromptInput): Uint8Array { + const fields: Uint8Array[] = [ + encodeString(1, prompt.messageId), + encodeVarintField(2, prompt.source), + encodeString(3, prompt.prompt), + ]; + for (const toolCall of prompt.toolCalls ?? []) { + fields.push(encodeField(6, encodeChatToolCall(toolCall))); + } + fields.push(encodeString(7, prompt.toolCallId ?? "")); + return concatBytes(fields); +} + +function encodeChatToolDefinition(tool: DevinDesktopToolInput): Uint8Array { + return concatBytes([ + encodeString(1, tool.name), + encodeString(2, tool.description), + encodeString(3, tool.jsonSchemaString), + encodeVarintField(12, tool.strict ? 1 : 0), + ]); +} + +function encodeChatToolChoice(choice: DevinDesktopToolChoice): Uint8Array { + return "optionName" in choice + ? encodeString(1, choice.optionName) + : encodeString(2, choice.toolName); +} + +/** Encode the verified exa.api_server_pb.GetChatMessageRequest wire schema. */ +export function encodeDevinDesktopRequest(input: DevinDesktopRequestInput): Uint8Array { + const fields: Uint8Array[] = [ + encodeField(1, encodeMetadata(input)), + encodeString(2, input.systemPrompt), + ]; + for (const prompt of input.prompts) fields.push(encodeField(3, encodeChatMessagePrompt(prompt))); + fields.push(encodeVarintField(7, 5)); // CHAT_MESSAGE_REQUEST_TYPE_CASCADE + for (const tool of input.tools ?? []) { + fields.push(encodeField(10, encodeChatToolDefinition(tool))); + } + if (input.disableParallelToolCalls) fields.push(encodeVarintField(11, 1)); + if (input.toolChoice) fields.push(encodeField(12, encodeChatToolChoice(input.toolChoice))); + fields.push( + encodeString(14, input.model), + encodeString(16, input.cascadeId), + encodeString(21, input.model) + ); + return concatBytes(fields); +} + +/** Connect streaming envelope: flags byte plus a big-endian uint32 length. */ +export function encodeDevinConnectEnvelope(payload: Uint8Array, flags = 0): Uint8Array { + const frame = new Uint8Array(5 + payload.length); + frame[0] = flags; + new DataView(frame.buffer).setUint32(1, payload.length, false); + frame.set(payload, 5); + return frame; +} + +type OpenAIMessage = { + role?: string; + content?: unknown; + tool_call_id?: string; + tool_calls?: Array<{ + id?: unknown; + type?: unknown; + function?: { name?: unknown; arguments?: unknown }; + }>; +}; + +function messageText(content: unknown): string { + if (typeof content === "string") return content; + if (!Array.isArray(content)) return ""; + let text = ""; + for (const part of content) { + if (part && typeof part === "object" && (part as Record).type === "text") { + text += String((part as Record).text ?? ""); + } + } + return text; +} + +function convertHistoryToolCalls( + toolCalls: OpenAIMessage["tool_calls"] +): DevinDesktopToolCallInput[] { + if (!Array.isArray(toolCalls)) return []; + const result: DevinDesktopToolCallInput[] = []; + for (const toolCall of toolCalls) { + if ( + toolCall?.type !== "function" || + typeof toolCall.id !== "string" || + typeof toolCall.function?.name !== "string" || + typeof toolCall.function.arguments !== "string" + ) { + continue; + } + result.push({ + id: toolCall.id, + name: toolCall.function.name, + argumentsJson: toolCall.function.arguments, + }); + } + return result; +} + +function convertMessages(messages: OpenAIMessage[]): { + systemPrompt: string; + prompts: DevinDesktopPromptInput[]; +} { + const systemParts: string[] = []; + const prompts: DevinDesktopPromptInput[] = []; + for (const message of messages) { + const role = String(message.role || "user"); + const prompt = messageText(message.content); + if (role === "system" || role === "developer") { + if (prompt) systemParts.push(prompt); + continue; + } + const source: 1 | 2 | 4 = role === "assistant" ? 2 : role === "tool" ? 4 : 1; + prompts.push({ + messageId: source === 2 ? `bot-${randomUUID()}` : randomUUID(), + source, + prompt, + ...(source === 2 ? { toolCalls: convertHistoryToolCalls(message.tool_calls) } : {}), + ...(source === 4 && message.tool_call_id ? { toolCallId: message.tool_call_id } : {}), + }); + } + return { systemPrompt: systemParts.join("\n\n"), prompts }; +} + +type OpenAIFunctionTool = { + type?: string; + function?: { + name?: unknown; + description?: unknown; + parameters?: unknown; + strict?: unknown; + }; +}; + +function convertTools(tools: unknown): DevinDesktopToolInput[] { + if (!Array.isArray(tools)) return []; + const result: DevinDesktopToolInput[] = []; + for (const tool of tools as OpenAIFunctionTool[]) { + if (tool?.type !== "function" || typeof tool.function?.name !== "string") continue; + result.push({ + name: tool.function.name, + description: typeof tool.function.description === "string" ? tool.function.description : "", + jsonSchemaString: JSON.stringify(tool.function.parameters ?? {}), + strict: tool.function.strict === true, + }); + } + return result; +} + +function convertToolChoice(choice: unknown): DevinDesktopToolChoice | undefined { + if (choice === "auto" || choice === "none" || choice === "required") { + return { optionName: choice }; + } + if (!choice || typeof choice !== "object") return undefined; + const record = choice as Record; + if (record.type !== "function" || !record.function || typeof record.function !== "object") { + return undefined; + } + const name = (record.function as Record).name; + return typeof name === "string" && name ? { toolName: name } : undefined; +} + +type ProtoField = + | { fieldNumber: number; wireType: 0; value: number } + | { fieldNumber: number; wireType: 1 | 2 | 5; value: Uint8Array }; + +function readVarint(bytes: Uint8Array, start: number): [number, number] { + let value = 0; + let multiplier = 1; + let offset = start; + for (let count = 0; count < 10 && offset < bytes.length; count++) { + const byte = bytes[offset++]; + value += (byte & 0x7f) * multiplier; + if (!Number.isSafeInteger(value)) throw new Error("protobuf varint exceeds safe range"); + if ((byte & 0x80) === 0) return [value, offset]; + multiplier *= 0x80; + } + throw new Error("truncated protobuf varint"); +} + +function decodeFields(bytes: Uint8Array): ProtoField[] { + const fields: ProtoField[] = []; + let offset = 0; + while (offset < bytes.length) { + let tag: number; + [tag, offset] = readVarint(bytes, offset); + const fieldNumber = Math.floor(tag / 8); + const wireType = tag & 0x07; + if (fieldNumber === 0) throw new Error("invalid protobuf field number"); + if (wireType === 0) { + let value: number; + [value, offset] = readVarint(bytes, offset); + fields.push({ fieldNumber, wireType: 0, value }); + continue; + } + if (wireType === 1) { + if (offset + 8 > bytes.length) throw new Error("truncated protobuf fixed64"); + fields.push({ fieldNumber, wireType: 1, value: bytes.slice(offset, offset + 8) }); + offset += 8; + continue; + } + if (wireType === 2) { + let length: number; + [length, offset] = readVarint(bytes, offset); + if (length > bytes.length - offset) throw new Error("truncated protobuf field"); + fields.push({ fieldNumber, wireType: 2, value: bytes.slice(offset, offset + length) }); + offset += length; + continue; + } + if (wireType === 5) { + if (offset + 4 > bytes.length) throw new Error("truncated protobuf fixed32"); + fields.push({ fieldNumber, wireType: 5, value: bytes.slice(offset, offset + 4) }); + offset += 4; + continue; + } + throw new Error(`unsupported protobuf wire type ${wireType}`); + } + return fields; +} + +type DevinAuthResponse = { userJwt: string; customApiServerUrl: string }; + +function decodeDevinAuthResponse(bytes: Uint8Array): DevinAuthResponse { + const result: DevinAuthResponse = { userJwt: "", customApiServerUrl: "" }; + for (const field of decodeFields(bytes)) { + if (field.wireType !== 2) continue; + if (field.fieldNumber === 1) result.userJwt = TEXT_DECODER.decode(field.value); + else if (field.fieldNumber === 2) { + // Deliberately decoded but not followed: an unchecked credential-derived + // URL would create an SSRF path. Enterprise custom endpoints remain a + // documented limitation until they have a strict validation policy. + result.customApiServerUrl = TEXT_DECODER.decode(field.value); + } + } + return result; +} + +async function readBoundedResponse(response: Response, limit: number): Promise { + const reader = response.body?.getReader(); + if (!reader) return new Uint8Array(0); + const chunks: Uint8Array[] = []; + let total = 0; + try { + while (true) { + const { done, value } = await reader.read(); + if (done) break; + if (!value?.length) continue; + total += value.length; + if (total > limit) { + await reader.cancel("response exceeds safety limit"); + throw new Error("Devin Desktop auth response exceeds the safety limit"); + } + chunks.push(value); + } + } finally { + reader.releaseLock(); + } + return concatBytes(chunks); +} + +type DevinUsage = { + inputTokens: number; + outputTokens: number; + cacheWriteTokens: number; + cacheReadTokens: number; +}; + +type DevinToolCallDelta = { id: string; name: string; arguments: string }; + +type DecodedResponse = { + text: string; + thinking: string; + stopReason: number; + usage: DevinUsage | null; + toolCalls: DevinToolCallDelta[]; +}; + +function decodeUsage(bytes: Uint8Array): DevinUsage { + const usage: DevinUsage = { + inputTokens: 0, + outputTokens: 0, + cacheWriteTokens: 0, + cacheReadTokens: 0, + }; + for (const field of decodeFields(bytes)) { + if (field.wireType !== 0) continue; + if (field.fieldNumber === 2) usage.inputTokens = field.value; + else if (field.fieldNumber === 3) usage.outputTokens = field.value; + else if (field.fieldNumber === 4) usage.cacheWriteTokens = field.value; + else if (field.fieldNumber === 5) usage.cacheReadTokens = field.value; + } + return usage; +} + +function decodeToolCall(bytes: Uint8Array): DevinToolCallDelta { + const result: DevinToolCallDelta = { id: "", name: "", arguments: "" }; + for (const field of decodeFields(bytes)) { + if (field.wireType !== 2) continue; + if (field.fieldNumber === 1) result.id = TEXT_DECODER.decode(field.value); + else if (field.fieldNumber === 2) result.name = TEXT_DECODER.decode(field.value); + else if (field.fieldNumber === 3) result.arguments = TEXT_DECODER.decode(field.value); + } + return result; +} + +function decodeGetChatMessageResponse(bytes: Uint8Array): DecodedResponse { + const result: DecodedResponse = { + text: "", + thinking: "", + stopReason: 0, + usage: null, + toolCalls: [], + }; + for (const field of decodeFields(bytes)) { + if (field.wireType === 2 && field.fieldNumber === 3) { + result.text += TEXT_DECODER.decode(field.value); + } else if (field.wireType === 0 && field.fieldNumber === 5) { + result.stopReason = field.value; + } else if (field.wireType === 2 && field.fieldNumber === 6) { + const toolCall = decodeToolCall(field.value); + if (toolCall.id) result.toolCalls.push(toolCall); + } else if (field.wireType === 2 && field.fieldNumber === 7) { + result.usage = decodeUsage(field.value); + } else if (field.wireType === 2 && field.fieldNumber === 9) { + result.thinking += TEXT_DECODER.decode(field.value); + } + } + return result; +} + +type ConnectTrailerError = { code: string; message: string }; + +function parseConnectTrailerError(payload: Uint8Array): ConnectTrailerError | null { + let parsed: unknown; + try { + parsed = JSON.parse(TEXT_DECODER.decode(payload).trim() || "{}"); + } catch { + return { code: "invalid_trailer", message: "Invalid Devin Desktop Connect trailer" }; + } + if (!parsed || typeof parsed !== "object" || !("error" in parsed)) return null; + const error = (parsed as { error?: unknown }).error; + if (!error || typeof error !== "object") { + return { code: "upstream_error", message: "Devin Desktop Connect stream failed" }; + } + const record = error as Record; + const code = typeof record.code === "string" ? record.code : "upstream_error"; + const message = typeof record.message === "string" ? record.message : "Connect stream failed"; + return { code, message }; +} + +function finishReason(stopReason: number, hasToolCalls: boolean): string { + if (hasToolCalls || stopReason === 10) return "tool_calls"; + if (stopReason === 3) return "length"; + if (stopReason === 11) return "content_filter"; + return "stop"; +} + +function serviceBaseUrl(baseUrl: string): string { + const normalized = baseUrl.replace(/\/+$/, ""); + for (const path of [DEVIN_DESKTOP_CHAT_PATH, DEVIN_DESKTOP_AUTH_PATH]) { + if (normalized.endsWith(path)) return normalized.slice(0, -path.length); + } + return normalized; +} + +function connectChatUrl(baseUrl: string): string { + return `${serviceBaseUrl(baseUrl)}${DEVIN_DESKTOP_CHAT_PATH}`; +} + +function authUrl(baseUrl: string): string { + return `${serviceBaseUrl(baseUrl)}${DEVIN_DESKTOP_AUTH_PATH}`; +} + +function jsonErrorResponse(status: number, message: string): Response { + return new Response(JSON.stringify(buildErrorBody(status, message)), { + status, + headers: { "Content-Type": "application/json" }, + }); +} + +export class DevinDesktopExecutor extends BaseExecutor { + constructor() { + super( + "devin-desktop", + PROVIDERS["devin-desktop"] || { id: "devin-desktop", baseUrl: DEVIN_DESKTOP_CHAT_URL } + ); + } + + buildUrl(): string { + return DEVIN_DESKTOP_CHAT_URL; + } + + buildHeaders(_credentials: { accessToken?: string; apiKey?: string }): Record { + // The raw imported key authenticates the GetUserJwt preflight through + // Metadata.api_key; chat then carries both that key and the returned JWT in + // Metadata. The proven flow does not construct a Basic Authorization header. + return { + "Content-Type": "application/connect+proto", + Accept: "application/connect+proto", + "Connect-Protocol-Version": "1", + "Connect-Accept-Encoding": "gzip", + "User-Agent": `windsurf/${resolveDevinDesktopVersion()}`, + }; + } + + transformRequest(): unknown { + return null; + } + + async execute({ + model, + body, + credentials, + signal, + log, + upstreamExtraHeaders, + }: ExecuteInput): Promise<{ + response: Response; + url: string; + headers: Record; + transformedBody: unknown; + }> { + const apiKey = credentials.accessToken || credentials.apiKey || ""; + const baseUrl = this.resolveBaseUrl(credentials, DEVIN_DESKTOP_BASE_URL); + const url = connectChatUrl(baseUrl); + const authEndpoint = authUrl(baseUrl); + const headers = this.buildHeaders(credentials); + mergeUpstreamExtraHeaders(headers, upstreamExtraHeaders); + if (!apiKey) { + return { + response: jsonErrorResponse(401, "Devin Desktop API key is required"), + url, + headers, + transformedBody: null, + }; + } + + const requestBody = (body ?? {}) as Record; + const messages = Array.isArray(requestBody.messages) + ? (requestBody.messages as OpenAIMessage[]) + : []; + const converted = convertMessages(messages); + if (converted.prompts.length === 0) { + converted.prompts.push({ messageId: randomUUID(), source: 1, prompt: "" }); + } + const sessionId = randomUUID(); + const cascadeId = + typeof requestBody.conversation_id === "string" && requestBody.conversation_id + ? requestBody.conversation_id + : randomUUID(); + + const authRequest = encodeDevinDesktopAuthRequest({ apiKey, sessionId }); + const authHeaders: Record = { + "Content-Type": "application/proto", + Accept: "*/*", + "Connect-Protocol-Version": "1", + }; + mergeUpstreamExtraHeaders(authHeaders, upstreamExtraHeaders); + + let authResponse: Response; + try { + authResponse = await fetch(authEndpoint, { + method: "POST", + headers: authHeaders, + body: bodyArrayBuffer(authRequest), + signal: signal ?? undefined, + }); + } catch (error) { + const aborted = signal?.aborted === true; + const safe = sanitizeErrorMessage(error instanceof Error ? error.message : String(error)); + log?.warn?.("DEVIN", `Devin Desktop authentication failed: ${safe}`); + return { + response: jsonErrorResponse( + aborted ? 499 : 502, + aborted ? "Devin Desktop request aborted" : "Devin Desktop authentication failed" + ), + url: authEndpoint, + headers: authHeaders, + transformedBody: null, + }; + } + if (!authResponse.ok) { + void authResponse.body?.cancel().catch(() => {}); + return { + response: jsonErrorResponse( + authResponse.status, + `Devin Desktop authentication returned HTTP ${authResponse.status}` + ), + url: authEndpoint, + headers: authHeaders, + transformedBody: null, + }; + } + + let userJwt: string; + try { + const authPayload = await readBoundedResponse(authResponse, MAX_AUTH_RESPONSE_BYTES); + const authData = decodeDevinAuthResponse(authPayload); + // Do not follow credential-derived custom_api_server_url values without a + // dedicated allowlist/SSRF policy; the operator-configured base URL remains authoritative. + userJwt = authData.userJwt; + if (!userJwt) throw new Error("Devin Desktop authentication returned an empty user JWT"); + } catch (error) { + const safe = sanitizeErrorMessage(error instanceof Error ? error.message : String(error)); + log?.warn?.("DEVIN", `Devin Desktop authentication response was invalid: ${safe}`); + return { + response: jsonErrorResponse(502, `Devin Desktop authentication failed: ${safe}`), + url: authEndpoint, + headers: authHeaders, + transformedBody: null, + }; + } + + const protobuf = encodeDevinDesktopRequest({ + apiKey, + userJwt, + model, + systemPrompt: converted.systemPrompt, + prompts: converted.prompts, + sessionId, + cascadeId, + tools: convertTools(requestBody.tools), + disableParallelToolCalls: requestBody.parallel_tool_calls === false, + toolChoice: convertToolChoice(requestBody.tool_choice), + }); + const framed = encodeDevinConnectEnvelope(protobuf); + log?.info?.("DEVIN", `Devin Desktop → ${model} (${converted.prompts.length} messages)`); + + let upstream: Response; + try { + upstream = await fetch(url, { + method: "POST", + headers, + body: bodyArrayBuffer(framed), + signal: signal ?? undefined, + }); + } catch (error) { + const aborted = signal?.aborted === true; + const safe = sanitizeErrorMessage(error instanceof Error ? error.message : String(error)); + log?.warn?.("DEVIN", `Devin Desktop Connect request failed: ${safe}`); + return { + response: jsonErrorResponse( + aborted ? 499 : 502, + aborted ? "Devin Desktop request aborted" : "Devin Desktop upstream connection failed" + ), + url, + headers, + transformedBody: protobuf, + }; + } + + if (!upstream.ok) { + void upstream.body?.cancel().catch(() => {}); + return { + response: jsonErrorResponse( + upstream.status, + `Devin Desktop upstream returned HTTP ${upstream.status}` + ), + url, + headers, + transformedBody: protobuf, + }; + } + + return { + response: this.transformToSSE(upstream, model), + url, + headers, + transformedBody: protobuf, + }; + } + + private transformToSSE(upstream: Response, model: string): Response { + const responseId = `chatcmpl-devin-desktop-${Date.now()}`; + const created = Math.floor(Date.now() / 1000); + let activeReader: ReadableStreamDefaultReader | null = null; + + const stream = new ReadableStream({ + async start(controller) { + const emit = (payload: unknown) => { + controller.enqueue(TEXT_ENCODER.encode(`data: ${JSON.stringify(payload)}\n\n`)); + }; + const emitChunk = (delta: Record, reason: string | null = null) => { + emit({ + id: responseId, + object: "chat.completion.chunk", + created, + model, + choices: [{ index: 0, delta, finish_reason: reason }], + }); + }; + const emitError = (message: string) => { + emit( + buildErrorBody(502, message, undefined, { + type: "devin_desktop_error", + code: "upstream_error", + }) + ); + controller.enqueue(TEXT_ENCODER.encode("data: [DONE]\n\n")); + }; + + let pending = new Uint8Array(0); + let roleEmitted = false; + let stopReason = 0; + const toolCallIndexes = new Map(); + let usage: DevinUsage | null = null; + let trailerError: ConnectTrailerError | null = null; + let sawEndStream = false; + + try { + activeReader = upstream.body?.getReader() ?? null; + if (!activeReader) throw new Error("Devin Desktop response body is empty"); + + const handleFrame = (flags: number, payload: Uint8Array): boolean => { + if ((flags & ~(CONNECT_COMPRESSED_FLAG | CONNECT_END_STREAM_FLAG)) !== 0) { + throw new Error("Invalid Devin Desktop Connect frame flags"); + } + const decodedPayload = + flags & CONNECT_COMPRESSED_FLAG + ? gunzipSync(payload, { maxOutputLength: MAX_CONNECT_FRAME_BYTES }) + : payload; + if (flags & CONNECT_END_STREAM_FLAG) { + if (sawEndStream) throw new Error("Duplicate Devin Desktop Connect end-stream frame"); + sawEndStream = true; + trailerError = parseConnectTrailerError(decodedPayload); + return true; + } + const response = decodeGetChatMessageResponse(decodedPayload); + stopReason = response.stopReason || stopReason; + usage = response.usage ?? usage; + if ((response.thinking || response.text || response.toolCalls.length) && !roleEmitted) { + emitChunk({ role: "assistant", content: "" }); + roleEmitted = true; + } + if (response.thinking) emitChunk({ reasoning_content: response.thinking }); + if (response.text) emitChunk({ content: response.text }); + for (const toolCall of response.toolCalls) { + const existingIndex = toolCallIndexes.get(toolCall.id); + const index = existingIndex ?? toolCallIndexes.size; + const firstDelta = existingIndex === undefined; + if (firstDelta) toolCallIndexes.set(toolCall.id, index); + const functionDelta: Record = {}; + if (toolCall.name) functionDelta.name = toolCall.name; + if (toolCall.arguments) functionDelta.arguments = toolCall.arguments; + emitChunk({ + tool_calls: [ + { + index, + ...(firstDelta ? { id: toolCall.id, type: "function" } : {}), + function: functionDelta, + }, + ], + }); + } + return false; + }; + + const drain = (): boolean => { + let offset = 0; + while (pending.length - offset >= 5) { + const length = new DataView( + pending.buffer, + pending.byteOffset + offset + 1, + 4 + ).getUint32(0, false); + if (length > MAX_CONNECT_FRAME_BYTES) { + throw new Error("Devin Desktop Connect frame exceeds the safety limit"); + } + if (pending.length - offset < 5 + length) break; + const flags = pending[offset]; + const terminal = handleFrame(flags, pending.slice(offset + 5, offset + 5 + length)); + offset += 5 + length; + if (terminal) { + if (pending.length !== offset) { + throw new Error("Data follows the Devin Desktop Connect end-stream frame"); + } + pending = new Uint8Array(0); + return true; + } + } + if (offset > 0) pending = pending.slice(offset); + return false; + }; + + while (true) { + const { done, value } = await activeReader.read(); + if (value?.length) { + pending = pending.length ? concatBytes([pending, value]) : Uint8Array.from(value); + if (drain()) { + await activeReader.cancel("Devin Desktop Connect end-stream received"); + break; + } + } + if (done) break; + } + if (!sawEndStream) drain(); + if (pending.length !== 0) throw new Error("Truncated Devin Desktop Connect frame"); + if (!sawEndStream) throw new Error("Devin Desktop Connect stream ended without trailers"); + if (trailerError) { + const detail = sanitizeErrorMessage(`${trailerError.code}: ${trailerError.message}`); + emitError(`Devin Desktop stream error: ${detail}`); + return; + } + + const finalPayload: Record = { + id: responseId, + object: "chat.completion.chunk", + created, + model, + choices: [ + { + index: 0, + delta: {}, + finish_reason: finishReason(stopReason, toolCallIndexes.size > 0), + }, + ], + }; + if (usage) { + finalPayload.usage = { + prompt_tokens: usage.inputTokens, + completion_tokens: usage.outputTokens, + total_tokens: usage.inputTokens + usage.outputTokens, + prompt_tokens_details: { cached_tokens: usage.cacheReadTokens }, + cache_write_tokens: usage.cacheWriteTokens, + }; + } + emit(finalPayload); + controller.enqueue(TEXT_ENCODER.encode("data: [DONE]\n\n")); + } catch (error) { + try { + await activeReader?.cancel("Devin Desktop Connect stream failed"); + } catch { + // Preserve the original protocol/decode error below. + } + const safe = sanitizeErrorMessage(error instanceof Error ? error.message : String(error)); + emitError(`Devin Desktop stream error: ${safe}`); + } finally { + activeReader?.releaseLock(); + activeReader = null; + controller.close(); + } + }, + async cancel(reason) { + await activeReader?.cancel(reason); + }, + }); + + return new Response(stream, { + status: 200, + headers: { + "Content-Type": "text/event-stream", + "Cache-Control": "no-cache", + Connection: "keep-alive", + }, + }); + } +} diff --git a/open-sse/executors/index.ts b/open-sse/executors/index.ts index fac8c94e34..267752cb84 100644 --- a/open-sse/executors/index.ts +++ b/open-sse/executors/index.ts @@ -30,7 +30,7 @@ import { AzureAiExecutor } from "./azure-ai.ts"; import { CommandCodeExecutor } from "./commandCode.ts"; import { GitlabExecutor } from "./gitlab.ts"; import { NlpCloudExecutor } from "./nlpcloud.ts"; -import { WindsurfExecutor } from "./windsurf.ts"; +import { DevinDesktopExecutor } from "./devin-desktop.ts"; import { ZedHostedExecutor } from "./zed-hosted.ts"; import { DevinCliExecutor } from "./devin-cli.ts"; import { DevinCliAgenticExecutor } from "./devin-cli-agentic.ts"; @@ -133,8 +133,7 @@ const executors = { "bb-web": new BlackboxWebExecutor(), // Alias "muse-spark-web": new MuseSparkWebExecutor(), "ms-web": new MuseSparkWebExecutor(), // Alias - windsurf: new WindsurfExecutor(), - ws: new WindsurfExecutor(), // Alias + "devin-desktop": new DevinDesktopExecutor(), "zed-hosted": new ZedHostedExecutor(), "devin-cli": new DevinCliExecutor(), "devin-cli-agentic": new DevinCliAgenticExecutor(), @@ -279,7 +278,7 @@ export { AzureAiExecutor } from "./azure-ai.ts"; export { CommandCodeExecutor } from "./commandCode.ts"; export { GitlabExecutor } from "./gitlab.ts"; export { NlpCloudExecutor } from "./nlpcloud.ts"; -export { WindsurfExecutor } from "./windsurf.ts"; +export { DevinDesktopExecutor } from "./devin-desktop.ts"; export { ZedHostedExecutor } from "./zed-hosted.ts"; export { DevinCliExecutor } from "./devin-cli.ts"; export { DevinCliAgenticExecutor } from "./devin-cli-agentic.ts"; diff --git a/open-sse/executors/tinycms.ts b/open-sse/executors/tinycms.ts index 10681c0172..68c916e047 100644 --- a/open-sse/executors/tinycms.ts +++ b/open-sse/executors/tinycms.ts @@ -1,4 +1,6 @@ -import { BaseExecutor, type ExecuteInput } from "./base.ts"; +import { randomUUID } from "node:crypto"; + +import { BaseExecutor, type ExecuteInput, type ExecutorExecuteResult } from "./base.ts"; import { makeExecutorErrorResult as makeErrorResult } from "../utils/error.ts"; import { initTinyCmsWasm, generateSecurePayload } from "./tinycmsSigner.ts"; @@ -28,9 +30,9 @@ async function fetchChallenge(uuid: string): Promise { const res = await fetch(CHALLENGE_URL, { method: "GET", headers: { - "uuid": uuid, + uuid: uuid, "x-origin": "https://gov.freegpt.win", - "Accept": "application/json", + Accept: "application/json", "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36", }, }); @@ -45,7 +47,7 @@ export class TinyCmsExecutor extends BaseExecutor { super("tinycms-web", { id: "tinycms-web", baseUrl: CHAT_URL }); } - async execute(input: ExecuteInput) { + async execute(input: ExecuteInput): Promise { const { body, credentials, signal } = input; const bodyObj = (body || {}) as Record; @@ -67,10 +69,11 @@ export class TinyCmsExecutor extends BaseExecutor { const challengeObj = await fetchChallenge(uuid); const timestamp = Date.now().toString(); - const nonceJs = - typeof crypto !== "undefined" && crypto.randomUUID - ? crypto.randomUUID() - : `${Date.now()}-${Math.random().toString(16).slice(2)}`; + // Security context: this nonce is signed into `x-secure-signature` and + // reused as the session id, so it must be unpredictable. `node:crypto` + // randomUUID() is always available on the supported runtime — never fall + // back to a non-CSPRNG source (CodeQL js/insecure-randomness). + const nonceJs = randomUUID(); const securePayload = generateSecurePayload( uuid, @@ -122,12 +125,7 @@ export class TinyCmsExecutor extends BaseExecutor { transformedBody: bodyObj, }; } catch (err: any) { - return makeErrorResult( - 500, - `TinyCMS Error: ${err.message}`, - body, - CHAT_URL - ); + return makeErrorResult(500, `TinyCMS Error: ${err.message}`, body, CHAT_URL); } } } diff --git a/open-sse/executors/tinycmsSigner.ts b/open-sse/executors/tinycmsSigner.ts index 0aac09aaa3..f62db10eea 100644 --- a/open-sse/executors/tinycmsSigner.ts +++ b/open-sse/executors/tinycmsSigner.ts @@ -358,26 +358,6 @@ function decodeText(ptr, len) { const cachedTextEncoder = new TextEncoder(); -// Old-Safari compatibility: if the runtime encoder lacks `encodeInto`, polyfill -// it. TS (DOM lib) types encodeInto as an always-present member, so a direct -// `'encodeInto' in cachedTextEncoder` guard would narrow the encoder to `never` -// in the negative branch. Test a widened copy instead — the result narrows a -// boolean, never `cachedTextEncoder`, so the polyfill body stays typeable. -const needsEncodeIntoPolyfill = !( - "encodeInto" in (cachedTextEncoder as { encodeInto?: unknown }) -); - -if (needsEncodeIntoPolyfill) { - cachedTextEncoder.encodeInto = function (arg, view) { - const buf = cachedTextEncoder.encode(arg); - view.set(buf); - return { - read: arg.length, - written: buf.length - }; - }; -} - let WASM_VECTOR_LEN = 0; let wasmModule, wasm; @@ -458,11 +438,14 @@ async function __wbg_init(module_or_path) { } if (module_or_path === undefined) { - // The boot-time embed is passed explicitly via `initTinyCmsWasm()` below - // (base64 → Buffer). Do NOT fall back to `new URL('wasm_signer_bg.wasm', - // import.meta.url)`: no such asset exists in the tree (it is inlined as - // base64), and the static URL would make Turbopack/Next fail the bundle. - throw new Error("tinycmsSigner: wasm module not supplied; call initTinyCmsWasm() first"); + // Upstream wasm-bindgen glue defaults to a sidecar binary resolved via + // `new URL(, import.meta.url)`. OmniRoute ships the module inlined as + // WASM_BASE64 instead — no sidecar exists in the repo — and the only caller, + // initTinyCmsWasm(), always passes that decoded Buffer explicitly, so this + // branch is unreachable. The literal URL still had to go: Turbopack resolves + // `new URL(, import.meta.url)` statically, so keeping it failed + // `next build` with a "Module not found" for the missing sidecar. + throw new Error('TinyCMS WASM module must be supplied explicitly (see initTinyCmsWasm)'); } const imports = __wbg_get_imports(); diff --git a/open-sse/executors/windsurf.ts b/open-sse/executors/windsurf.ts deleted file mode 100644 index 782e48e4b7..0000000000 --- a/open-sse/executors/windsurf.ts +++ /dev/null @@ -1,715 +0,0 @@ -/** - * WindsurfExecutor — routes requests to Windsurf (Devin CLI / Codeium) backend. - * - * Wire protocol: gRPC-web over HTTPS (Content-Type: application/grpc-web+proto). - * Service: exa.language_server_pb.LanguageServerService - * Method: GetChatMessage (unary → streamed as SSE) - * - * Authentication: - * credentials.accessToken = Codeium API key from windsurf.com/show-auth-token - * — placed in Metadata.api_key protobuf field of every request. - * - * Model IDs accepted by this executor (snake_case sent to Windsurf wire): - * Cognition SWE: swe-1, swe-1-5, swe-1-6, swe-1-6-fast, swe-1-lite - * Claude: claude-4-5-sonnet, claude-4-5-opus, claude-4-sonnet, claude-4-opus, - * claude-3-7-sonnet, claude-3-7-sonnet-thinking - * Gemini: gemini-2-5-pro, gemini-2-5-flash, gemini-3-0-pro, gemini-3-0-flash - * OpenAI: gpt-4-1, gpt-4-5, o1, o1-mini - * - * OmniRoute → Windsurf model-ID mapping lives in MODEL_ID_MAP below. - */ - -import { BaseExecutor, mergeUpstreamExtraHeaders, type ExecuteInput } from "./base.ts"; -import { PROVIDERS } from "../config/constants.ts"; -import { randomUUID } from "node:crypto"; - -// ─── Windsurf API constants ────────────────────────────────────────────────── - -const WS_BASE_URL = "https://server.self-serve.windsurf.com"; -const WS_SERVICE = "exa.language_server_pb.LanguageServerService"; -const WS_METHOD_CHAT = "GetChatMessage"; -const WS_CHAT_URL = `${WS_BASE_URL}/${WS_SERVICE}/${WS_METHOD_CHAT}`; - -const WS_IDE_NAME = "windsurf"; -const WS_IDE_VERSION = "3.14.0"; -const WS_EXT_VERSION = "3.14.0"; -const WS_LOCALE = "en-US"; - -// ─── Model alias normalizer ────────────────────────────────────────────────── -// -// Model names are passed directly to the Windsurf API as ModelOrAlias strings. -// The API accepts the catalog names as-is (e.g. "claude-4.5-sonnet", "swe-1.6-fast"). -// -// This table handles only OmniRoute-style backwards-compat aliases where users -// might type dashes instead of dots (e.g. "swe-1-6-fast" → "swe-1.6-fast"). - -// Model IDs — source: model_configs_v2.bin extracted from Devin CLI binary. -// OmniRoute uses dot-notation user IDs (e.g. "gpt-5.5-high"). -// Windsurf API accepts dash-notation modelUids (e.g. "gpt-5-5-high"). -// This map normalises dot→dash for newer models and handles legacy aliases. -const MODEL_ALIAS_MAP: Record = { - // ── SWE ───────────────────────────────────────────────────────────────── - "swe-1.6-fast": "swe-1-6-fast", - "swe-1.6": "swe-1-6", - "swe-1.5-fast": "swe-1p5", // fast variant - "swe-1.5": "swe-1p5", - // ── Claude Opus 4.7 ────────────────────────────────────────────────────── - "claude-opus-4.7-max": "claude-opus-4-7-max", - "claude-opus-4.7-xhigh": "claude-opus-4-7-xhigh", - "claude-opus-4.7-high": "claude-opus-4-7-high", - "claude-opus-4.7-medium": "claude-opus-4-7-medium", - "claude-opus-4.7-low": "claude-opus-4-7-low", - "claude-opus-4.7-review": "opus-4-7-review", - // ── Claude Opus/Sonnet 4.6 ─────────────────────────────────────────────── - "claude-sonnet-4.6-thinking-1m": "claude-sonnet-4-6-thinking-1m", - "claude-sonnet-4.6-1m": "claude-sonnet-4-6-1m", - "claude-sonnet-4.6-thinking": "claude-sonnet-4-6-thinking", - "claude-sonnet-4.6": "claude-sonnet-4-6", - "claude-opus-4.6-thinking": "claude-opus-4-6-thinking", - "claude-opus-4.6": "claude-opus-4-6", - // ── Claude 4.5 ─────────────────────────────────────────────────────────── - "claude-opus-4.5-thinking": "MODEL_CLAUDE_4_5_OPUS_THINKING", - "claude-opus-4.5": "MODEL_CLAUDE_4_5_OPUS", - "claude-sonnet-4.5-thinking": "MODEL_PRIVATE_3", - "claude-sonnet-4.5": "MODEL_PRIVATE_2", - "claude-haiku-4.5": "MODEL_PRIVATE_11", - // backward-compat flat names - "claude-4.5-opus-thinking": "MODEL_CLAUDE_4_5_OPUS_THINKING", - "claude-4.5-opus": "MODEL_CLAUDE_4_5_OPUS", - "claude-4.5-sonnet-thinking": "MODEL_PRIVATE_3", - "claude-4.5-sonnet": "MODEL_PRIVATE_2", - "claude-4.5-haiku": "MODEL_PRIVATE_11", - // ── GPT-5.5 ────────────────────────────────────────────────────────────── - "gpt-5.5-xhigh-fast": "gpt-5-5-xhigh-priority", - "gpt-5.5-high-fast": "gpt-5-5-high-priority", - "gpt-5.5-medium-fast": "gpt-5-5-medium-priority", - "gpt-5.5-low-fast": "gpt-5-5-low-priority", - "gpt-5.5-none-fast": "gpt-5-5-none-priority", - "gpt-5.5-xhigh": "gpt-5-5-xhigh", - "gpt-5.5-high": "gpt-5-5-high", - "gpt-5.5-medium": "gpt-5-5-medium", - "gpt-5.5-low": "gpt-5-5-low", - "gpt-5.5-none": "gpt-5-5-none", - "gpt-5.5-review": "gpt-5-5-review", - "gpt-5.5": "gpt-5-5-medium", // default effort level - // ── GPT-5.4 ────────────────────────────────────────────────────────────── - "gpt-5.4-xhigh-fast": "gpt-5-4-xhigh-priority", - "gpt-5.4-high-fast": "gpt-5-4-high-priority", - "gpt-5.4-medium-fast": "gpt-5-4-medium-priority", - "gpt-5.4-low-fast": "gpt-5-4-low-priority", - "gpt-5.4-none-fast": "gpt-5-4-none-priority", - "gpt-5.4-xhigh": "gpt-5-4-xhigh", - "gpt-5.4-high": "gpt-5-4-high", - "gpt-5.4-medium": "gpt-5-4-medium", - "gpt-5.4-low": "gpt-5-4-low", - "gpt-5.4-none": "gpt-5-4-none", - "gpt-5.4-mini-xhigh": "gpt-5-4-mini-xhigh", - "gpt-5.4-mini-high": "gpt-5-4-mini-high", - "gpt-5.4-mini-medium": "gpt-5-4-mini-medium", - "gpt-5.4-mini-low": "gpt-5-4-mini-low", - "gpt-5.4": "gpt-5-4-medium", // default effort level - // ── GPT-5.3-Codex ──────────────────────────────────────────────────────── - "gpt-5.3-codex-xhigh-fast": "gpt-5-3-codex-xhigh-priority", - "gpt-5.3-codex-high-fast": "gpt-5-3-codex-high-priority", - "gpt-5.3-codex-medium-fast": "gpt-5-3-codex-medium-priority", - "gpt-5.3-codex-low-fast": "gpt-5-3-codex-low-priority", - "gpt-5.3-codex-xhigh": "gpt-5-3-codex-xhigh", - "gpt-5.3-codex-high": "gpt-5-3-codex-high", - "gpt-5.3-codex-medium": "gpt-5-3-codex-medium", - "gpt-5.3-codex-low": "gpt-5-3-codex-low", - "gpt-5.3-codex": "gpt-5-3-codex-medium", - // ── GPT-5.2 ────────────────────────────────────────────────────────────── - "gpt-5.2-xhigh": "MODEL_GPT_5_2_XHIGH", - "gpt-5.2-high": "MODEL_GPT_5_2_HIGH", - "gpt-5.2-medium": "MODEL_GPT_5_2_MEDIUM", - "gpt-5.2-low": "MODEL_GPT_5_2_LOW", - "gpt-5.2-none": "MODEL_GPT_5_2_NONE", - "gpt-5.2": "MODEL_GPT_5_2_MEDIUM", - // ── GPT-5 ──────────────────────────────────────────────────────────────── - "gpt-5": "gpt-5", - // ── GPT-4.1 / 4o ───────────────────────────────────────────────────────── - "gpt-4.1": "MODEL_CHAT_GPT_4_1_2025_04_14", - "gpt-4.1-mini": "gpt-4.1-mini", - "gpt-4o": "MODEL_CHAT_GPT_4O_2024_08_06", - // ── Gemini ──────────────────────────────────────────────────────────────── - "gemini-3.1-pro-high": "gemini-3-1-pro-high", - "gemini-3.1-pro-low": "gemini-3-1-pro-low", - "gemini-3.1-pro": "gemini-3-1-pro-high", - "gemini-3.0-flash-high": "MODEL_GOOGLE_GEMINI_3_0_FLASH_HIGH", - "gemini-3.0-flash-medium": "MODEL_GOOGLE_GEMINI_3_0_FLASH_MEDIUM", - "gemini-3.0-flash-low": "MODEL_GOOGLE_GEMINI_3_0_FLASH_LOW", - "gemini-3.0-flash-minimal": "MODEL_GOOGLE_GEMINI_3_0_FLASH_MINIMAL", - "gemini-3.0-flash": "MODEL_GOOGLE_GEMINI_3_0_FLASH_HIGH", - "gemini-2.5-pro": "MODEL_GOOGLE_GEMINI_2_5_PRO", - // ── Others ─────────────────────────────────────────────────────────────── - "deepseek-v4": "deepseek-v4", - "kimi-k2.6": "kimi-k2-6", - "kimi-k2.5": "kimi-k2-5", - "glm-5.1": "glm-5-1", -}; - -function resolveWsModelId(model: string): string { - return MODEL_ALIAS_MAP[model] ?? model; -} - -// ─── Minimal protobuf encoder ──────────────────────────────────────────────── -// -// Implements only what is needed for GetChatMessageRequest. -// Wire types: 0 = varint, 2 = length-delimited. - -function encodeVarint(value: number): Uint8Array { - const bytes: number[] = []; - let v = value >>> 0; - while (v > 0x7f) { - bytes.push((v & 0x7f) | 0x80); - v >>>= 7; - } - bytes.push(v & 0x7f); - return new Uint8Array(bytes); -} - -function concatBytes(arrays: Uint8Array[]): Uint8Array { - const total = arrays.reduce((n, a) => n + a.length, 0); - const out = new Uint8Array(total); - let off = 0; - for (const a of arrays) { - out.set(a, off); - off += a.length; - } - return out; -} - -const TEXT_ENC = new TextEncoder(); -const TEXT_DEC = new TextDecoder(); - -/** Encode a length-delimited field (strings and nested messages share wire type 2). */ -function encodeField(fieldNum: number, payload: Uint8Array): Uint8Array { - const tag = encodeVarint((fieldNum << 3) | 2); - const len = encodeVarint(payload.length); - return concatBytes([tag, len, payload]); -} - -/** Encode a UTF-8 string field. */ -function encodeString(fieldNum: number, value: string): Uint8Array { - return encodeField(fieldNum, TEXT_ENC.encode(value)); -} - -/** Encode a nested message field. */ -function encodeMessage(fieldNum: number, msg: Uint8Array): Uint8Array { - return encodeField(fieldNum, msg); -} - -// ─── Protobuf message builders ─────────────────────────────────────────────── - -function buildMetadata(apiKey: string, sessionId: string): Uint8Array { - return concatBytes([ - encodeString(1, apiKey), - encodeString(2, WS_IDE_NAME), - encodeString(3, WS_IDE_VERSION), - encodeString(4, WS_EXT_VERSION), - encodeString(5, sessionId), - encodeString(6, WS_LOCALE), - ]); -} - -function buildModelOrAlias(model: string): Uint8Array { - // ModelOrAlias wraps the model identifier in field 1 - return encodeString(1, model); -} - -type WsChatMessage = { role: string; content: string; toolCallId?: string }; - -function buildChatMessage(msg: WsChatMessage): Uint8Array { - const parts: Uint8Array[] = [encodeString(1, msg.role), encodeString(2, msg.content)]; - if (msg.toolCallId) parts.push(encodeString(3, msg.toolCallId)); - return concatBytes(parts); -} - -function buildGetChatMessageRequest( - apiKey: string, - model: string, - messages: WsChatMessage[] -): Uint8Array { - const sessionId = randomUUID(); - const cascadeId = randomUUID(); - - const parts: Uint8Array[] = [ - encodeMessage(1, buildMetadata(apiKey, sessionId)), // metadata - encodeString(2, cascadeId), // cascade_id - encodeMessage(3, buildModelOrAlias(model)), // model_or_alias - ]; - - for (const msg of messages) { - parts.push(encodeMessage(4, buildChatMessage(msg))); // repeated messages - } - - return concatBytes(parts); -} - -// ─── gRPC-web framing ──────────────────────────────────────────────────────── - -/** - * Wrap a protobuf message in a 5-byte gRPC-web data frame. - * - * Returns `Uint8Array`, not bare `Uint8Array`: the frame is - * allocated with `new Uint8Array(length)`, which is always ArrayBuffer-backed, - * and only that narrower form satisfies `BodyInit` at the `fetch` call below. - * Bare `Uint8Array` widens to `Uint8Array`, which admits - * `SharedArrayBuffer` and is therefore rejected as a request body. - */ -function grpcWebFrame(payload: Uint8Array): Uint8Array { - const frame = new Uint8Array(5 + payload.length); - frame[0] = 0x00; // compression flag: no compression - const view = new DataView(frame.buffer); - view.setUint32(1, payload.length, false); // big-endian length - frame.set(payload, 5); - return frame; -} - -// ─── Protobuf response decoder ─────────────────────────────────────────────── -// -// CompletionChunk (oneof): -// field 1 (length-delimited) → ContentChunk { field 1: string text } -// field 2 (length-delimited) → ToolCallChunk (skipped for now) -// field 3 (length-delimited) → DoneChunk { field 1: UsageStats } -// field 4 (length-delimited) → ErrorChunk { field 1: string message } -// -// GetChatMessageResponse (unary fallback): -// field 1 (length-delimited) → content string (heuristic) -// field 2 (length-delimited) → nested message (heuristic) - -type DecodedChunk = - | { kind: "content"; text: string } - | { kind: "done"; promptTokens: number; completionTokens: number } - | { kind: "error"; message: string } - | { kind: "unknown" }; - -/** Read a varint from buf starting at offset; returns [value, newOffset]. */ -function readVarint(buf: Uint8Array, offset: number): [number, number] { - let result = 0; - let shift = 0; - while (offset < buf.length) { - const b = buf[offset++]; - result |= (b & 0x7f) << shift; - if ((b & 0x80) === 0) break; - shift += 7; - } - return [result >>> 0, offset]; -} - -/** Decode a single protobuf message payload as a CompletionChunk. */ -function decodeCompletionChunk(buf: Uint8Array): DecodedChunk { - let offset = 0; - while (offset < buf.length) { - let tag: number; - [tag, offset] = readVarint(buf, offset); - const fieldNum = tag >>> 3; - const wireType = tag & 0x07; - - if (wireType === 2) { - // length-delimited - let len: number; - [len, offset] = readVarint(buf, offset); - const payload = buf.slice(offset, offset + len); - offset += len; - - if (fieldNum === 1) { - // ContentChunk — field 1 inside = text string - const text = decodeContentChunk(payload); - if (text !== null) return { kind: "content", text }; - } else if (fieldNum === 3) { - // DoneChunk — field 1 inside = UsageStats - const usage = decodeDoneChunk(payload); - return { kind: "done", promptTokens: usage[0], completionTokens: usage[1] }; - } else if (fieldNum === 4) { - // ErrorChunk — field 1 inside = error message string - const msg = decodeStringField(payload, 1); - return { kind: "error", message: msg ?? "unknown windsurf error" }; - } - // field 2 = ToolCallChunk — not yet handled; skip - } else if (wireType === 0) { - let _v: number; - [_v, offset] = readVarint(buf, offset); - } else if (wireType === 1) { - offset += 8; - } else if (wireType === 5) { - offset += 4; - } else { - break; // unknown wire type — stop parsing - } - } - return { kind: "unknown" }; -} - -/** Extract text string from ContentChunk (field 1 = string). */ -function decodeContentChunk(buf: Uint8Array): string | null { - return decodeStringField(buf, 1); -} - -/** Extract prompt_tokens + completion_tokens from DoneChunk.UsageStats. */ -function decodeDoneChunk(buf: Uint8Array): [number, number] { - // DoneChunk: field 1 = UsageStats (nested) - // UsageStats: field 1 = prompt_tokens (varint), field 2 = completion_tokens (varint) - let offset = 0; - let usageBytes: Uint8Array | null = null; - while (offset < buf.length) { - let tag: number; - [tag, offset] = readVarint(buf, offset); - const fieldNum = tag >>> 3; - const wireType = tag & 0x07; - if (wireType === 2) { - let len: number; - [len, offset] = readVarint(buf, offset); - if (fieldNum === 1) usageBytes = buf.slice(offset, offset + len); - offset += len; - } else if (wireType === 0) { - let _v: number; - [_v, offset] = readVarint(buf, offset); - } else { - break; - } - } - if (!usageBytes) return [0, 0]; - let promptTokens = 0; - let completionTokens = 0; - offset = 0; - while (offset < usageBytes.length) { - let tag: number; - [tag, offset] = readVarint(usageBytes, offset); - const fieldNum = tag >>> 3; - const wireType = tag & 0x07; - if (wireType === 0) { - let v: number; - [v, offset] = readVarint(usageBytes, offset); - if (fieldNum === 1) promptTokens = v; - else if (fieldNum === 2) completionTokens = v; - } else if (wireType === 2) { - let len: number; - [len, offset] = readVarint(usageBytes, offset); - offset += len; - } else { - break; - } - } - return [promptTokens, completionTokens]; -} - -/** Read a length-delimited string at a given field number from buf. */ -function decodeStringField(buf: Uint8Array, targetField: number): string | null { - let offset = 0; - while (offset < buf.length) { - let tag: number; - [tag, offset] = readVarint(buf, offset); - const fieldNum = tag >>> 3; - const wireType = tag & 0x07; - if (wireType === 2) { - let len: number; - [len, offset] = readVarint(buf, offset); - const payload = buf.slice(offset, offset + len); - offset += len; - if (fieldNum === targetField) return TEXT_DEC.decode(payload); - } else if (wireType === 0) { - let _v: number; - [_v, offset] = readVarint(buf, offset); - } else if (wireType === 1) { - offset += 8; - } else if (wireType === 5) { - offset += 4; - } else { - break; - } - } - return null; -} - -// ─── Convert OpenAI messages → Windsurf WsChatMessage[] ────────────────────── - -type OpenAIMessage = { - role?: string; - content?: unknown; - tool_call_id?: string; -}; - -function openAIMessagesToWs(messages: OpenAIMessage[]): WsChatMessage[] { - const out: WsChatMessage[] = []; - for (const m of messages) { - const role = String(m.role || "user"); - let content = ""; - if (typeof m.content === "string") { - content = m.content; - } else if (Array.isArray(m.content)) { - // Multi-part: concatenate text parts - for (const part of m.content) { - if (part && typeof part === "object" && (part as Record).type === "text") { - content += String((part as Record).text || ""); - } - } - } - out.push({ role, content, toolCallId: m.tool_call_id }); - } - return out; -} - -// ─── WindsurfExecutor ───────────────────────────────────────────────────────── - -export class WindsurfExecutor extends BaseExecutor { - constructor() { - super("windsurf", PROVIDERS["windsurf"] || { id: "windsurf", baseUrl: WS_CHAT_URL }); - } - - buildUrl(): string { - return WS_CHAT_URL; - } - - buildHeaders(credentials: { accessToken?: string; apiKey?: string }): Record { - const token = credentials.accessToken || credentials.apiKey || ""; - return { - "Content-Type": "application/grpc-web+proto", - Accept: "application/grpc-web+proto", - // Codeium API key also goes in Metadata.api_key (protobuf field) — see request body. - // Some endpoints also accept it as a Bearer token header. - ...(token ? { Authorization: `Bearer ${token}` } : {}), - "User-Agent": `windsurf/${WS_IDE_VERSION}`, - "X-Grpc-Web": "1", - }; - } - - transformRequest(): unknown { - // Request body is built manually in execute() because it requires the model + messages - return null; - } - - async execute({ - model, - body, - stream, - credentials, - signal, - log, - upstreamExtraHeaders, - }: ExecuteInput): Promise<{ - response: Response; - url: string; - headers: Record; - transformedBody: unknown; - }> { - const apiKey = credentials.accessToken || credentials.apiKey || ""; - const wsModel = resolveWsModelId(model); - - // Parse OpenAI messages from request body - const b = (body ?? {}) as Record; - const rawMessages = Array.isArray(b.messages) ? (b.messages as OpenAIMessage[]) : []; - const wsMessages = openAIMessagesToWs(rawMessages); - - if (wsMessages.length === 0) { - wsMessages.push({ role: "user", content: "" }); - } - - // Build and frame the protobuf request - const protoPayload = buildGetChatMessageRequest(apiKey, wsModel, wsMessages); - const framedPayload = grpcWebFrame(protoPayload); - - const url = this.buildUrl(); - const headers = this.buildHeaders(credentials); - mergeUpstreamExtraHeaders(headers, upstreamExtraHeaders); - - log?.info?.("WS", `Windsurf → ${wsModel} (${wsMessages.length} messages)`); - - const upstream = await fetch(url, { - method: "POST", - headers, - body: framedPayload, - signal: signal ?? undefined, - }); - - if (!upstream.ok && upstream.status !== 200) { - return { response: upstream, url, headers, transformedBody: protoPayload }; - } - - // Transform gRPC-web binary response → SSE stream - const sseResponse = this.transformToSSE(upstream, model, stream); - return { response: sseResponse, url, headers, transformedBody: protoPayload }; - } - - /** Convert a gRPC-web response body into an OpenAI-compatible SSE stream. */ - private transformToSSE(upstream: Response, model: string, _stream: boolean): Response { - const responseId = `chatcmpl-ws-${Date.now()}`; - const created = Math.floor(Date.now() / 1000); - - const sseStream = new ReadableStream({ - async start(controller) { - const enc = new TextEncoder(); - let roleEmitted = false; - let totalText = ""; - let promptTokens = 0; - let completionTokens = 0; - let hadError: string | null = null; - - function emit(data: string) { - controller.enqueue(enc.encode(data)); - } - - try { - let pending = new Uint8Array(0); - const reader = upstream.body?.getReader(); - - const handleFrame = (flag: number, payload: Uint8Array) => { - if (flag === 0x80) { - // Trailer frame — contains grpc-status, grpc-message - const trailer = TEXT_DEC.decode(payload); - const statusMatch = /grpc-status:\s*(\d+)/i.exec(trailer); - if (statusMatch && statusMatch[1] !== "0") { - const msgMatch = /grpc-message:\s*(.+)/i.exec(trailer); - hadError = msgMatch - ? decodeURIComponent(msgMatch[1].trim()) - : `gRPC status ${statusMatch[1]}`; - } - return; - } - - if (flag !== 0x00) return; // skip unknown flags - - const chunk = decodeCompletionChunk(payload); - - if (chunk.kind === "content" && chunk.text) { - totalText += chunk.text; - if (!roleEmitted) { - emit( - `data: ${JSON.stringify({ - id: responseId, - object: "chat.completion.chunk", - created, - model, - choices: [ - { index: 0, delta: { role: "assistant", content: "" }, finish_reason: null }, - ], - })}\n\n` - ); - roleEmitted = true; - } - emit( - `data: ${JSON.stringify({ - id: responseId, - object: "chat.completion.chunk", - created, - model, - choices: [{ index: 0, delta: { content: chunk.text }, finish_reason: null }], - })}\n\n` - ); - } else if (chunk.kind === "done") { - promptTokens = chunk.promptTokens; - completionTokens = chunk.completionTokens; - } else if (chunk.kind === "error") { - hadError = chunk.message; - } - }; - - const drainFrames = () => { - let offset = 0; - while (offset + 5 <= pending.length) { - const flag = pending[offset]; - const len = - (pending[offset + 1] << 24) | - (pending[offset + 2] << 16) | - (pending[offset + 3] << 8) | - pending[offset + 4]; - if (len < 0 || offset + 5 + len > pending.length) break; - handleFrame(flag, pending.slice(offset + 5, offset + 5 + len)); - offset += 5 + len; - } - if (offset > 0) pending = pending.slice(offset); - }; - - if (reader) { - try { - while (true) { - const { done, value } = await reader.read(); - if (done) break; - if (!value) continue; - pending = - pending.length === 0 ? Uint8Array.from(value) : concatBytes([pending, value]); - drainFrames(); - } - } finally { - reader.releaseLock(); - } - } - drainFrames(); - - if (hadError) { - emit( - `data: ${JSON.stringify({ - error: { message: hadError, type: "windsurf_error", code: "upstream_error" }, - })}\n\n` - ); - emit("data: [DONE]\n\n"); - controller.close(); - return; - } - - // If nothing was streamed but we got a response, treat the decoded - // text as the full reply (unary response path). - if (!roleEmitted && totalText) { - emit( - `data: ${JSON.stringify({ - id: responseId, - object: "chat.completion.chunk", - created, - model, - choices: [ - { index: 0, delta: { role: "assistant", content: "" }, finish_reason: null }, - ], - })}\n\n` - ); - emit( - `data: ${JSON.stringify({ - id: responseId, - object: "chat.completion.chunk", - created, - model, - choices: [{ index: 0, delta: { content: totalText }, finish_reason: null }], - })}\n\n` - ); - } - - // Finish chunk - const finishPayload: Record = { - id: responseId, - object: "chat.completion.chunk", - created, - model, - choices: [{ index: 0, delta: {}, finish_reason: "stop" }], - }; - if (promptTokens > 0 || completionTokens > 0) { - finishPayload.usage = { - prompt_tokens: promptTokens, - completion_tokens: completionTokens, - total_tokens: promptTokens + completionTokens, - }; - } - emit(`data: ${JSON.stringify(finishPayload)}\n\n`); - emit("data: [DONE]\n\n"); - } catch (err) { - const msg = err instanceof Error ? err.message : String(err); - emit( - `data: ${JSON.stringify({ - error: { message: `Windsurf stream error: ${msg}`, type: "windsurf_error" }, - })}\n\n` - ); - emit("data: [DONE]\n\n"); - } - - controller.close(); - }, - }); - - return new Response(sseStream, { - status: 200, - headers: { - "Content-Type": "text/event-stream", - "Cache-Control": "no-cache", - Connection: "keep-alive", - }, - }); - } -} diff --git a/open-sse/executors/zai-web.ts b/open-sse/executors/zai-web.ts index d6a7e81421..159d7e2c1b 100644 --- a/open-sse/executors/zai-web.ts +++ b/open-sse/executors/zai-web.ts @@ -1,285 +1,365 @@ /** - * ZaiWebExecutor — Z.ai Web Chat (chat.z.ai, free web-session/cookie auth) + * ZaiWebExecutor — Z.ai consumer chat (chat.z.ai). * - * Distinct from the existing API-key `zai`/`glm`/`glm-cn`/`glmt` providers - * (Anthropic/OpenAI-compatible `api.z.ai`, see `providers/apikey/regional.ts`). - * This executor targets the *consumer chat* frontend at chat.z.ai — the same - * product family as `chatglm.cn` (Zhipu AI), but the international domain — - * so users without an API key can drive it for free via their browser session, - * modeled on the `chatglm-web` credential entry (#4056) and the `doubao-web` / - * `venice-web` cookie executors. + * The consumer frontend stores a Bearer JWT in localStorage and requires a + * browser-issued CAPTCHA proof for chat completions. The browser transport is + * the default; callers with a short-lived proof can use the direct HTTP path. * - * Endpoint: POST https://chat.z.ai/api/v2/chat/completions - * (the older unversioned `/api/chat/completions` path is stale and - * 404s model-independently as of 2026-07 — see #8014) - * Auth: full Cookie header from chat.z.ai (must contain the `token` JWT). - * Sent both as `Cookie` and as `Authorization: Bearer ` — - * the SPA's own fetch client sets both, and stripping either one - * has been reported (upstream repos) to 401 the request. - * Response: SSE. Frames are z.ai's internal envelope - * `{"type":"chat:completion","data":{"delta_content":"...","phase":"answer","done":false}}` - * — mirrored from the shared Zhipu chatglm.cn/chat.z.ai frontend - * protocol. Some deployments/models pass through an already - * OpenAI-shaped `{"choices":[{"delta":{"content":"..."}}]}` frame - * instead, so the parser accepts both shapes defensively. + * Completions go to /api/v2/chat/completions; the older unversioned + * /api/chat/completions path is stale and 404s model-independently (#8014). */ +import { createHash, randomUUID } from "node:crypto"; import { BaseExecutor, type ExecuteInput } from "./base.ts"; +import { configureZaiBrowserRequest } from "./zai-web/browserAutomation.ts"; +import { + asRecord, + browserModelName, + browserPrompt, + buildZaiCompletionUrl, + buildZaiHeaders, + buildZaiNewChatBody, + buildZaiRequestBody, + buildZaiSignature, + collectZaiImageUrls, + describeZaiBrowserFailure, + extractZaiToken, + extractZaiUserId, + foldMessages, + getZaiModelCapabilities, + latestUserPrompt, + parseZaiFrontendVersion, + resolveZaiCaptchaVerifyParam, + resolveZaiThinkingConfig, + resolveZaiVlmConfig, + unprefixedModelId, + zaiImageFileName, + ZAI_BASE_URL, + ZAI_CHAT_URL, + ZAI_DEFAULT_FE_VERSION, + ZAI_DEFAULT_MODEL, + ZAI_FE_VERSION_CACHE_TTL_MS, + ZAI_NEW_CHAT_URL, + ZAI_USER_AGENT, + type ZaiReasoningEffort, + type ZaiThinkingConfig, + type ZaiVlmConfig, +} from "./zai-web/protocol.ts"; +import { + buildZaiStreamingBody, + collectZaiNonStreaming, + makeZaiChunkEmitter, +} from "./zai-web/stream.ts"; +import { browserBackedChat } from "../services/browserBackedChat.ts"; +import { CursorImageError, resolveCursorImages } from "../utils/cursorImages.ts"; import { makeExecutorErrorResult as makeErrorResult, - normalizeCookie, sanitizeErrorMessage, } from "../utils/error.ts"; -const BASE_URL = "https://chat.z.ai"; -const CHAT_URL = `${BASE_URL}/api/v2/chat/completions`; -const USER_AGENT = - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36"; +export { + buildZaiSignature, + describeZaiBrowserFailure, + extractZaiCaptchaVerifyParam, + extractZaiToken, + extractZaiUserId, + foldMessages, + getZaiModelCapabilities, + parseZaiFrontendVersion, + resolveZaiThinkingConfig, + resolveZaiVlmConfig, +} from "./zai-web/protocol.ts"; +export type { + ZaiModelCapabilities, + ZaiReasoningEffort, + ZaiThinkingConfig, + ZaiVlmConfig, +} from "./zai-web/protocol.ts"; +export { parseZaiFrame } from "./zai-web/stream.ts"; +export type { ZaiDelta } from "./zai-web/stream.ts"; -/** Extract the `token` cookie value (JWT) from a full Cookie header string. */ -export function extractZaiToken(rawCookie: string): string { - const cookie = normalizeCookie(rawCookie.trim()); - if (!cookie) return ""; - const match = cookie.match(/(?:^|;\s*)token=([^;]+)/); - if (match) return match[1].trim(); - // Users may paste the bare JWT with no `token=` prefix. - return cookie.includes(";") || cookie.includes("=") ? "" : cookie; +let cachedFeVersion: { value: string; expiresAt: number } | null = null; + +type ZaiBrowserAttachments = NonNullable[0]["attachments"]>; + +/** Decode the request's image URLs into browser upload attachments. */ +async function resolveZaiBrowserAttachments( + imageUrls: string[], + body: unknown +): Promise< + { attachments: ZaiBrowserAttachments } | { errorResult: ReturnType } +> { + try { + const images = await resolveCursorImages(imageUrls); + return { + attachments: images.map((image, index) => ({ + name: zaiImageFileName(image.mimeType, index), + mimeType: image.mimeType, + buffer: image.data, + })), + }; + } catch (error) { + const message = + error instanceof CursorImageError + ? error.message + : sanitizeErrorMessage(error instanceof Error ? error.message : "invalid image input"); + return { + errorResult: makeErrorResult( + error instanceof CursorImageError ? error.status : 400, + `Z.ai image input error: ${message}`, + body, + ZAI_CHAT_URL + ), + }; + } } /** - * One parsed delta out of a z.ai SSE frame: either a content/reasoning chunk - * or a signal that the stream has finished. + * The call-log body for a browser-transport turn. There is no real upstream + * request payload to record here, so this reconstructs the equivalent shape the + * signed-API path logs, from the settings the browser UI was driven with. */ -export interface ZaiDelta { - content: string; - reasoning: string; - done: boolean; -} - -/** Parse an already OpenAI-shaped `{choices:[{delta}]}` pass-through frame. */ -function parseOpenAiShapedFrame(choices: Array>): ZaiDelta { - const delta = (choices[0]?.delta ?? {}) as Record; - const finishReason = choices[0]?.finish_reason; +function buildZaiBrowserAuditBody(input: { + messages: Array<{ role: string; content: unknown }>; + modelId: string; + thinkingConfig: ZaiThinkingConfig; + vlmConfig: ZaiVlmConfig; + imageCount: number; +}): Record { + const { thinkingConfig: thinking, vlmConfig: vlm } = input; return { - content: typeof delta.content === "string" ? delta.content : "", - reasoning: typeof delta.reasoning_content === "string" ? delta.reasoning_content : "", - done: finishReason != null, + browser_backed: true, + image_count: input.imageCount, + model: input.modelId, + messages: foldMessages(input.messages), + enable_thinking: thinking.enabled, + auto_web_search: vlm.websiteModeEnabled ? false : vlm.webSearchEnabled, + vlm_tools_enable: vlm.toolsEnabled, + vlm_web_search_enable: vlm.websiteModeEnabled && vlm.webSearchEnabled, + vlm_website_mode: vlm.websiteModeEnabled, + ...(thinking.enabled && thinking.effortSupported ? { reasoning_effort: thinking.effort } : {}), }; } -/** Parse the z.ai / chatglm internal `{data:{delta_content,phase,done}}` envelope. */ -function parseInternalEnvelopeFrame( - frame: Record, - data: Record -): ZaiDelta | null { - const phase = String(data.phase ?? ""); - const deltaContent = data.delta_content ?? data.edit_content ?? data.content; - const done = - data.done === true || - phase === "done" || - phase === "finish" || - String(frame.type ?? "") === "chat:completion:finish"; - - if (typeof deltaContent === "string" && deltaContent) { - const isThinking = phase === "thinking"; - return { - content: isThinking ? "" : deltaContent, - reasoning: isThinking ? deltaContent : "", - done, - }; - } - if (done) return { content: "", reasoning: "", done: true }; - return null; +/** + * Drive-the-real-UI options for chat.z.ai: which selectors to type into and click, + * and the localStorage token the page reads at boot. `beforeSubmit` flips the + * Deep Think / web-search / tools switches to match the request. + */ +function buildZaiBrowserChatOptions(input: { + attachments: ZaiBrowserAttachments; + messages: Array<{ role: string; content: unknown }>; + modelId: string; + signal?: AbortSignal | null; + thinkingConfig: ZaiThinkingConfig; + token: string; + vlmConfig: ZaiVlmConfig; +}): Parameters[0] { + const poolKey = `zai-web:${createHash("sha256").update(input.token).digest("hex").slice(0, 24)}`; + return { + poolKey, + chatUrl: ZAI_CHAT_URL, + chatPageUrl: `${ZAI_BASE_URL}/?model=${encodeURIComponent(browserModelName(input.modelId))}`, + userMessage: browserPrompt(input.messages), + localStorage: { token: input.token }, + localStorageOrigin: ZAI_BASE_URL, + cookieDomain: "chat.z.ai", + chatUrlMatchDomain: "chat.z.ai", + userAgent: ZAI_USER_AGENT, + locale: "en-US", + timezone: "Asia/Seoul", + inputSelector: "#chat-input", + submitButtonSelector: '[aria-label="Send Message"] button:not([disabled])', + submitButtonMode: "dom", + attachments: input.attachments, + beforeSubmit: (page) => + configureZaiBrowserRequest(page, { + modelId: input.modelId, + thinking: input.thinkingConfig, + vlm: input.vlmConfig, + }), + postSubmitWaitMs: 30_000, + signal: input.signal, + reuseContext: true, + }; } +/** What either transport hands back: the upstream stream plus its call-log pair. */ +type ZaiTransportResult = { + upstream: Response; + auditHeaders: Record; + auditBody: Record; +}; + +type ZaiResolvedRequest = { + captchaVerifyParam: string; + imageUrls: string[]; + messages: Array<{ role: string; content: unknown }>; + modelId: string; + prompt: string; + thinkingConfig: ZaiThinkingConfig; + token: string; + userId: string; + vlmConfig: ZaiVlmConfig; +}; + /** - * Parse a single decoded z.ai SSE `data:` JSON payload into a normalized - * delta. Handles both the internal `{data:{delta_content,phase,done}}` - * envelope and a pass-through OpenAI-shaped `{choices:[{delta}]}` frame. + * Validate the credential and body, and resolve everything both transports need. + * + * All four rejections are client errors that must never reach the upstream: no + * usable session token, no user turn, an image sent to a text-only model, and a + * JWT with no user id (which the signed-API path needs to build its signature). */ -export function parseZaiFrame(raw: unknown): ZaiDelta | null { - if (!raw || typeof raw !== "object") return null; - const frame = raw as Record; +function resolveZaiRequest( + input: ExecuteInput +): { request: ZaiResolvedRequest } | { errorResult: ReturnType } { + const { body, credentials, model } = input; + const bodyObj = (body || {}) as Record; + const fail = (message: string) => ({ + errorResult: makeErrorResult(400, message, body, ZAI_CHAT_URL), + }); - const choices = frame.choices as Array> | undefined; - if (Array.isArray(choices) && choices.length > 0) { - return parseOpenAiShapedFrame(choices); + const rawCredential = String(credentials?.apiKey ?? credentials?.accessToken ?? "").trim(); + const token = extractZaiToken(rawCredential); + if (!token) { + return fail( + 'Missing Z.ai web-session credential — copy the "token" value from chat.z.ai Local Storage.' + ); } - const data = (frame.data ?? frame) as Record; - return parseInternalEnvelopeFrame(frame, data); -} - -export function foldMessages( - messages: Array<{ role: string; content: unknown }> -): Array<{ role: string; content: string }> { - return messages.map((m) => ({ - role: m.role, - content: typeof m.content === "string" ? m.content : JSON.stringify(m.content ?? ""), - })); -} - -/** Split a chunk of decoded SSE text into complete `data:` payload strings. */ -function extractSseDataPayloads(buffer: { text: string }, incoming: string): string[] { - buffer.text += incoming; - const lines = buffer.text.split("\n"); - buffer.text = lines.pop() || ""; - const payloads: string[] = []; - for (const line of lines) { - if (!line.startsWith("data:")) continue; - const data = line.slice(5).trim(); - if (!data || data === "[DONE]") continue; - payloads.push(data); + const messages = (bodyObj.messages as Array<{ role: string; content: unknown }>) || []; + const prompt = latestUserPrompt(messages); + const imageUrls = collectZaiImageUrls(messages); + if (!prompt && imageUrls.length === 0) { + return fail("Z.ai requires at least one user message"); } - return payloads; -} -/** Parse a raw SSE payload string into a normalized delta, or null if unusable. */ -function parseSsePayload(data: string): ZaiDelta | null { - try { - return parseZaiFrame(JSON.parse(data)); - } catch { - return null; + const modelId = (bodyObj.model as string) || model || ZAI_DEFAULT_MODEL; + if (imageUrls.length > 0 && !getZaiModelCapabilities(modelId).vision) { + return fail( + `Z.ai model ${unprefixedModelId(modelId)} does not accept image input; use GLM-5V-Turbo.` + ); } -} -/** - * Read the upstream SSE body to completion, invoking `onDelta` for every - * parsed delta. Returns true when `onDelta` signalled the stream ended - * (returned true), false when the body was exhausted without a done delta. - */ -async function drainSseDeltas( - sourceBody: ReadableStream, - onDelta: (delta: ZaiDelta) => boolean -): Promise { - const decoder = new TextDecoder(); - const reader = sourceBody.getReader(); - const buffer = { text: "" }; - while (true) { - const { done, value } = await reader.read(); - if (done) return false; - const payloads = extractSseDataPayloads(buffer, decoder.decode(value, { stream: true })); - for (const raw of payloads) { - const delta = parseSsePayload(raw); - if (delta && onDelta(delta)) return true; - } + const userId = extractZaiUserId(token); + if (!userId) { + return fail( + "Invalid Z.ai web-session credential — its JWT payload does not contain the required user id." + ); } -} -type ChunkEmitter = ( - controller: ReadableStreamDefaultController, - delta: Record, - finish?: string | null -) => void; - -/** Emit role/reasoning/content/stop chunks for one delta. Returns true when the stream ended. */ -function emitDeltaChunks( - controller: ReadableStreamDefaultController, - delta: ZaiDelta, - emitChunk: ChunkEmitter, - roleState: { emitted: boolean } -): boolean { - if (!roleState.emitted && (delta.content || delta.reasoning)) { - roleState.emitted = true; - emitChunk(controller, { role: "assistant", content: "" }); - } - if (delta.reasoning) emitChunk(controller, { reasoning_content: delta.reasoning }); - if (delta.content) emitChunk(controller, { content: delta.content }); - if (delta.done) { - emitChunk(controller, {}, "stop"); - controller.enqueue(new TextEncoder().encode("data: [DONE]\n\n")); - controller.close(); - return true; - } - return false; + return { + request: { + captchaVerifyParam: resolveZaiCaptchaVerifyParam(credentials, bodyObj), + imageUrls, + messages, + modelId, + prompt, + thinkingConfig: resolveZaiThinkingConfig(modelId, bodyObj), + token, + userId, + vlmConfig: resolveZaiVlmConfig(modelId, bodyObj), + }, + }; } export class ZaiWebExecutor extends BaseExecutor { constructor() { - super("zai-web", { id: "zai-web", baseUrl: BASE_URL }); + super("zai-web", { id: "zai-web", baseUrl: ZAI_BASE_URL }); } - private buildZaiHeaders(rawCookie: string, token: string): Record { - const headers: Record = { - "Content-Type": "application/json", - Accept: "text/event-stream", - "User-Agent": USER_AGENT, - Origin: BASE_URL, - Referer: `${BASE_URL}/`, - }; - if (rawCookie) headers.Cookie = rawCookie; - if (token) headers.Authorization = `Bearer ${token}`; - return headers; - } - - private buildRequestBody( - messages: Array<{ role: string; content: unknown }>, - modelId: string - ): Record { - return { - stream: true, - model: modelId, - messages: foldMessages(messages), - params: {}, - features: { - image_generation: false, - web_search: false, - auto_web_search: false, - }, - }; - } - - /** Drain the streaming response body into an OpenAI-shaped SSE ReadableStream. */ - private buildStreamingBody( - sourceBody: ReadableStream, - modelId: string, - emitChunk: ChunkEmitter, - signal: AbortSignal | null | undefined - ): ReadableStream { - return new ReadableStream({ - async start(controller) { - const roleState = { emitted: false }; - try { - const ended = await drainSseDeltas(sourceBody, (delta) => - emitDeltaChunks(controller, delta, emitChunk, roleState) - ); - if (ended) return; // emitDeltaChunks already sent [DONE] and closed - if (!roleState.emitted) emitChunk(controller, { role: "assistant", content: "" }); - emitChunk(controller, {}, "stop"); - controller.enqueue(new TextEncoder().encode("data: [DONE]\n\n")); - controller.close(); - } catch (err) { - if (!signal?.aborted) { - try { - controller.error(err); - } catch { - /* controller already closed */ - } - } - } - }, - }); - } - - /** Drain the response body and aggregate all deltas into a single answer/reasoning pair. */ - private async collectNonStreaming( - sourceBody: ReadableStream - ): Promise<{ answer: string; reasoning: string }> { - let answer = ""; - let reasoning = ""; - try { - await drainSseDeltas(sourceBody, (delta) => { - if (delta.reasoning) reasoning += delta.reasoning; - if (delta.content) answer += delta.content; - return delta.done; - }); - } catch { - /* best-effort — return what we have */ + private async resolveFrontendVersion(signal?: AbortSignal | null): Promise { + if (cachedFeVersion && cachedFeVersion.expiresAt > Date.now()) { + return cachedFeVersion.value; } - return { answer, reasoning }; + let version = ZAI_DEFAULT_FE_VERSION; + try { + const response = await fetch(`${ZAI_BASE_URL}/`, { + headers: { Accept: "text/html", "User-Agent": ZAI_USER_AGENT }, + signal, + }); + if (response.ok) { + version = parseZaiFrontendVersion(await response.text()) ?? version; + } + } catch { + // The current verified version remains a safe fallback when homepage probing fails. + } + cachedFeVersion = { + value: version, + expiresAt: Date.now() + ZAI_FE_VERSION_CACHE_TTL_MS, + }; + return version; + } + + private async createRemoteChat(input: { + messages: Array<{ role: string; content: unknown }>; + modelId: string; + token: string; + enableThinking: boolean; + reasoningEffort: ZaiReasoningEffort; + vlmConfig: ZaiVlmConfig; + signal?: AbortSignal | null; + originalBody: unknown; + }): Promise< + { chatId: string; userMessageId: string } | { errorResult: ReturnType } + > { + const { userMessageId, payload } = buildZaiNewChatBody( + input.messages, + input.modelId, + input.enableThinking, + input.reasoningEffort, + input.vlmConfig + ); + let response: Response; + try { + response = await fetch(ZAI_NEW_CHAT_URL, { + method: "POST", + headers: buildZaiHeaders(input.token, { + accept: "application/json", + }), + body: JSON.stringify(payload), + signal: input.signal, + }); + } catch (error) { + const message = sanitizeErrorMessage( + error instanceof Error ? error.message : "unknown network error" + ); + return { + errorResult: makeErrorResult( + 502, + `Z.ai chat creation failed: ${message}`, + input.originalBody, + ZAI_NEW_CHAT_URL + ), + }; + } + if (!response.ok) { + const errorText = await response.text().catch(() => ""); + return { + errorResult: makeErrorResult( + response.status, + `Z.ai chat creation error: ${sanitizeErrorMessage(errorText)}`, + input.originalBody, + ZAI_NEW_CHAT_URL + ), + }; + } + const result = asRecord(await response.json().catch(() => null)); + const chatId = typeof result?.id === "string" ? result.id : ""; + if (!chatId) { + return { + errorResult: makeErrorResult( + 502, + "Z.ai chat creation returned no chat id", + input.originalBody, + ZAI_NEW_CHAT_URL + ), + }; + } + return { chatId, userMessageId }; } - /** POST the chat request upstream. Returns either the upstream Response or an error result. */ private async fetchUpstream( + completionUrl: string, reqHeaders: Record, reqBody: Record, body: unknown, @@ -287,81 +367,191 @@ export class ZaiWebExecutor extends BaseExecutor { ): Promise<{ upstream: Response } | { errorResult: ReturnType }> { let upstream: Response; try { - upstream = await fetch(CHAT_URL, { + upstream = await fetch(completionUrl, { method: "POST", headers: reqHeaders, body: JSON.stringify(reqBody), signal, }); - } catch (err) { + } catch (error) { + const message = sanitizeErrorMessage( + error instanceof Error ? error.message : "unknown network error" + ); return { - errorResult: makeErrorResult( - 502, - `Z.ai fetch failed: ${err instanceof Error ? err.message : "unknown"}`, - body, - CHAT_URL - ), + errorResult: makeErrorResult(502, `Z.ai fetch failed: ${message}`, body, ZAI_CHAT_URL), }; } if (!upstream.ok) { - const errText = await upstream.text().catch(() => ""); + const errorText = await upstream.text().catch(() => ""); return { errorResult: makeErrorResult( upstream.status, - `Z.ai error: ${sanitizeErrorMessage(errText)}`, + `Z.ai error: ${sanitizeErrorMessage(errorText)}`, body, - CHAT_URL + ZAI_CHAT_URL ), }; } return { upstream }; } - private makeChunkEmitter(id: string, created: number, modelId: string): ChunkEmitter { - return (controller, delta, finish = null) => { - const chunk = { - id, - object: "chat.completion.chunk", - created, - model: modelId, - choices: [{ index: 0, delta, finish_reason: finish }], + private async fetchThroughBrowser(input: { + body: unknown; + messages: Array<{ role: string; content: unknown }>; + modelId: string; + imageUrls: string[]; + signal?: AbortSignal | null; + thinkingConfig: ZaiThinkingConfig; + token: string; + vlmConfig: ZaiVlmConfig; + }): Promise }> { + const resolved = await resolveZaiBrowserAttachments(input.imageUrls, input.body); + if ("errorResult" in resolved) return resolved; + const { attachments } = resolved; + + let result: Awaited>; + try { + result = await browserBackedChat(buildZaiBrowserChatOptions({ ...input, attachments })); + } catch (error) { + const message = sanitizeErrorMessage( + error instanceof Error ? error.message : "browser transport unavailable" + ); + return { + errorResult: makeErrorResult( + 502, + `Z.ai browser transport failed: ${message}`, + input.body, + ZAI_CHAT_URL + ), }; - controller.enqueue(new TextEncoder().encode(`data: ${JSON.stringify(chunk)}\n\n`)); + } + + if (result.status < 200 || result.status >= 300) { + return { + errorResult: makeErrorResult( + result.status || 502, + describeZaiBrowserFailure(result), + input.body, + ZAI_CHAT_URL + ), + }; + } + + return { + upstream: new Response(new Uint8Array(result.body), { + status: result.status, + headers: { + "Content-Type": result.contentType || "text/event-stream", + }, + }), + auditHeaders: { + Authorization: "Bearer [REDACTED]", + "X-OmniRoute-Transport": "browser", + }, + auditBody: buildZaiBrowserAuditBody({ + messages: input.messages, + modelId: input.modelId, + thinkingConfig: input.thinkingConfig, + vlmConfig: input.vlmConfig, + imageCount: attachments.length, + }), + }; + } + + /** + * Signed-API transport: create a chat server-side, then POST the completion with + * a CAPTCHA proof and a per-request signature. Only reachable when the caller + * supplied a proof and sent no images. + */ + private async fetchViaSignedApi( + request: ZaiResolvedRequest, + input: ExecuteInput + ): Promise }> { + const { body, signal } = input; + const bodyObj = (body || {}) as Record; + const { messages, modelId, prompt, thinkingConfig, token, userId, vlmConfig } = request; + + const frontendVersion = await this.resolveFrontendVersion(signal); + const createdChat = await this.createRemoteChat({ + messages, + modelId, + token, + enableThinking: thinkingConfig.enabled, + reasoningEffort: thinkingConfig.effort, + vlmConfig, + signal, + originalBody: body, + }); + if ("errorResult" in createdChat) return createdChat; + + const timestamp = Date.now(); + const requestId = randomUUID(); + const signature = buildZaiSignature({ prompt, requestId, timestamp, userId }); + const completionUrl = buildZaiCompletionUrl({ requestId, timestamp, token, userId }); + const reqHeaders = buildZaiHeaders(token, { + accept: "text/event-stream", + frontendVersion, + signature, + }); + const reqBody = buildZaiRequestBody({ + body: bodyObj, + captchaVerifyParam: request.captchaVerifyParam, + chatId: createdChat.chatId, + messages, + modelId, + prompt, + userMessageId: createdChat.userMessageId, + enableThinking: thinkingConfig.enabled, + reasoningEffort: thinkingConfig.effort, + reasoningEffortSupported: thinkingConfig.effortSupported, + vlmConfig, + }); + const fetched = await this.fetchUpstream(completionUrl, reqHeaders, reqBody, body, signal); + if ("errorResult" in fetched) return fetched; + + return { + upstream: fetched.upstream, + auditHeaders: { + ...reqHeaders, + Authorization: "Bearer [REDACTED]", + "X-Signature": "[REDACTED]", + }, + auditBody: { ...reqBody, captcha_verify_param: "[REDACTED]" }, }; } async execute(input: ExecuteInput) { - const { body, credentials, signal, stream: wantStream } = input; - const bodyObj = (body || {}) as Record; + const { body, signal, stream: wantStream } = input; - const rawCookie = normalizeCookie(String(credentials?.apiKey ?? "").trim()); - const token = extractZaiToken(rawCookie); - if (!rawCookie && !token) { - return makeErrorResult( - 400, - "Missing Z.ai session — paste the full Cookie header from chat.z.ai (must contain token=).", - body, - CHAT_URL - ); - } + const resolved = resolveZaiRequest(input); + if ("errorResult" in resolved) return resolved.errorResult; + const request = resolved.request; + const { imageUrls, messages, modelId, thinkingConfig, token, vlmConfig } = request; - const messages = (bodyObj.messages as Array<{ role: string; content: unknown }>) || []; - const modelId = (bodyObj.model as string) || "glm-4.6"; - const reqBody = this.buildRequestBody(messages, modelId); - const reqHeaders = this.buildZaiHeaders(rawCookie, token); - - const fetched = await this.fetchUpstream(reqHeaders, reqBody, body, signal); + const useSignedApi = Boolean(request.captchaVerifyParam) && imageUrls.length === 0; + const fetched = useSignedApi + ? await this.fetchViaSignedApi(request, input) + : await this.fetchThroughBrowser({ + body, + imageUrls, + messages, + modelId, + signal, + thinkingConfig, + token, + vlmConfig, + }); if ("errorResult" in fetched) return fetched.errorResult; - const { upstream } = fetched; + const { upstream, auditHeaders, auditBody } = fetched; const id = `chatcmpl-zai-${Date.now()}`; const created = Math.floor(Date.now() / 1000); - const sourceBody = upstream.body ?? new ReadableStream({ start: (c) => c.close() }); - const emitChunk = this.makeChunkEmitter(id, created, modelId); - + const sourceBody = + upstream.body ?? new ReadableStream({ start: (controller) => controller.close() }); + const emitChunk = makeZaiChunkEmitter(id, created, modelId); if (wantStream) { - const outStream = this.buildStreamingBody(sourceBody, modelId, emitChunk, signal); + const outStream = buildZaiStreamingBody(sourceBody, emitChunk, signal); return { response: new Response(outStream, { headers: { @@ -370,13 +560,22 @@ export class ZaiWebExecutor extends BaseExecutor { Connection: "keep-alive", }, }), - url: CHAT_URL, - headers: reqHeaders, - transformedBody: reqBody, + url: ZAI_CHAT_URL, + headers: auditHeaders, + transformedBody: auditBody, }; } - const { answer, reasoning } = await this.collectNonStreaming(sourceBody); + let answer: string; + let reasoning: string; + try { + ({ answer, reasoning } = await collectZaiNonStreaming(sourceBody)); + } catch (error) { + const message = sanitizeErrorMessage( + error instanceof Error ? error.message : "invalid upstream stream" + ); + return makeErrorResult(502, `Z.ai stream failed: ${message}`, body, ZAI_CHAT_URL); + } const message: Record = { role: "assistant", content: answer }; if (reasoning) message.reasoning_content = reasoning; const completion = { @@ -390,9 +589,9 @@ export class ZaiWebExecutor extends BaseExecutor { response: new Response(JSON.stringify(completion), { headers: { "Content-Type": "application/json" }, }), - url: CHAT_URL, - headers: reqHeaders, - transformedBody: reqBody, + url: ZAI_CHAT_URL, + headers: auditHeaders, + transformedBody: auditBody, }; } } diff --git a/open-sse/executors/zai-web/browserAutomation.ts b/open-sse/executors/zai-web/browserAutomation.ts new file mode 100644 index 0000000000..38924ada4d --- /dev/null +++ b/open-sse/executors/zai-web/browserAutomation.ts @@ -0,0 +1,150 @@ +import type { Page } from "playwright"; +import { + browserModelName, + getZaiModelCapabilities, + type ZaiThinkingConfig, + type ZaiVlmConfig, +} from "./protocol.ts"; + +/** + * Run one Playwright interaction, re-throwing any failure tagged with the stage + * that produced it. Every step below is a blind DOM poke against a UI we do not + * control, so an untagged "click timed out" is unactionable in a bug report. + */ +async function runStage(name: string, action: () => Promise): Promise { + try { + await action(); + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + throw new Error(`${name}: ${message}`); + } +} + +async function selectZaiBrowserModel(page: Page, modelName: string): Promise { + const selector = page.locator('[aria-label="Select a model"]').first(); + await selector.waitFor({ state: "visible", timeout: 10_000 }); + if ((await selector.innerText()).includes(modelName)) return; + + // The landing-page hero animation can remain above the already-visible + // selector and make coordinate-based clicks time out. + await selector.evaluate((element) => (element as HTMLElement).click()); + const menu = page.locator('[role="menu"]').filter({ hasText: modelName }).first(); + await menu.waitFor({ state: "visible", timeout: 5_000 }); + const modelButton = menu.locator("button").filter({ hasText: modelName }).first(); + await modelButton.evaluate((element) => (element as HTMLElement).click()); + await page + .locator('[aria-label="Select a model"]') + .filter({ hasText: modelName }) + .first() + .waitFor({ state: "visible", timeout: 5_000 }); +} + +async function setZaiBrowserToggle( + page: Page, + label: "Deep think" | "Tools" | "Web search", + dataAttribute: "data-autothink" | "data-selected", + enabled: boolean +): Promise { + const wrapper = page.locator(`[aria-label^="${label} "]`).first(); + await wrapper.waitFor({ state: "visible", timeout: 5_000 }); + const button = wrapper.locator(`button[${dataAttribute}]`).first(); + const current = (await button.getAttribute(dataAttribute)) === "true"; + if (current !== enabled) await button.click({ timeout: 5_000 }); +} + +async function setZaiBrowserWebSearch(page: Page, enabled: boolean): Promise { + const labelledWrapper = page.locator('[aria-label^="Web search "]').first(); + if ((await labelledWrapper.count()) > 0) { + await setZaiBrowserToggle(page, "Web search", "data-selected", enabled); + return; + } + + // Text-model UI: the globe button has no accessible label. Anchor the + // lookup to the adjacent upload button instead of generated IDs. + const button = page + .locator("#upload-file-button") + .locator("xpath=../../../following-sibling::div//button[@data-active]") + .first(); + await button.waitFor({ state: "visible", timeout: 5_000 }); + const current = (await button.getAttribute("data-active")) === "true"; + if (current !== enabled) { + await button.click({ timeout: 5_000 }); + await page.keyboard.press("Escape"); + } +} + +/** Pick the High/Max effort button inside an already-open Deep Think menu. */ +async function selectZaiBrowserEffortLevel( + menu: ReturnType, + effort: ZaiThinkingConfig["effort"] +): Promise { + const effortButton = menu.locator("button").filter({ + hasText: effort === "high" ? "High" : "Max", + }); + if ((await effortButton.getAttribute("data-selected")) === "true") return; + await runStage(`select ${effort}`, () => + effortButton.evaluate((element) => (element as HTMLElement).click()) + ); +} + +async function configureZaiBrowserEffort(page: Page, config: ZaiThinkingConfig): Promise { + const trigger = page + .locator("[data-dropdown-menu-trigger]") + .filter({ hasText: "Deep Think" }) + .first(); + await trigger.waitFor({ state: "visible", timeout: 10_000 }); + await runStage("open menu", () => + trigger.evaluate((element) => (element as HTMLElement).click()) + ); + + const menu = page.locator('[role="menu"]').filter({ hasText: "Deep Think" }).first(); + await menu.waitFor({ state: "visible", timeout: 5_000 }); + const toggle = menu.locator('[role="switch"]').first(); + const checked = (await toggle.getAttribute("aria-checked")) === "true"; + + if (checked !== config.enabled) { + await runStage(config.enabled ? "enable toggle" : "disable toggle", () => + toggle.click({ timeout: 5_000 }) + ); + } + if (config.enabled) { + await selectZaiBrowserEffortLevel(menu, config.effort); + } + + if (await menu.isVisible()) { + await page.keyboard.press("Escape"); + } +} + +export async function configureZaiBrowserRequest( + page: Page, + input: { + modelId: string; + thinking: ZaiThinkingConfig; + vlm: ZaiVlmConfig; + } +): Promise { + await runStage("model selection", () => + selectZaiBrowserModel(page, browserModelName(input.modelId)) + ); + + if (input.thinking.effortSupported) { + await runStage("Deep Think effort", () => configureZaiBrowserEffort(page, input.thinking)); + } else if (input.thinking.supported) { + await runStage("Deep Think toggle", () => + setZaiBrowserToggle(page, "Deep think", "data-autothink", input.thinking.enabled) + ); + } + + const capabilities = getZaiModelCapabilities(input.modelId); + if (capabilities.webSearch) { + await runStage("web search toggle", () => + setZaiBrowserWebSearch(page, input.vlm.webSearchEnabled) + ); + } + if (capabilities.vlmTools) { + await runStage("tools toggle", () => + setZaiBrowserToggle(page, "Tools", "data-selected", input.vlm.toolsEnabled) + ); + } +} diff --git a/open-sse/executors/zai-web/protocol.ts b/open-sse/executors/zai-web/protocol.ts new file mode 100644 index 0000000000..562ca85a7f --- /dev/null +++ b/open-sse/executors/zai-web/protocol.ts @@ -0,0 +1,554 @@ +import { Buffer } from "node:buffer"; +import { createHmac, randomUUID } from "node:crypto"; +import type { ProviderCredentials } from "../base.ts"; +import { extractImageUrls } from "../../utils/cursorImages.ts"; +import { normalizeCookie, sanitizeErrorMessage } from "../../utils/error.ts"; + +export const ZAI_BASE_URL = "https://chat.z.ai"; +export const ZAI_NEW_CHAT_URL = `${ZAI_BASE_URL}/api/v1/chats/new`; +export const ZAI_CHAT_URL = `${ZAI_BASE_URL}/api/v2/chat/completions`; +export const ZAI_DEFAULT_MODEL = "GLM-5.1"; +export const ZAI_DEFAULT_FE_VERSION = "prod-fe-1.1.79"; +export const ZAI_USER_AGENT = + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36"; +export const ZAI_FE_VERSION_CACHE_TTL_MS = 15 * 60 * 1000; + +const CLIENT_PROTOCOL_VERSION = "0.0.1"; +const SIGNATURE_KEY = "key-@@@@)))()((9))-xxxx&&&%%%%%"; + +export interface NewChatRequest { + payload: Record; + userMessageId: string; +} + +export type ZaiReasoningEffort = "high" | "max"; + +export interface ZaiThinkingConfig { + enabled: boolean; + effort: ZaiReasoningEffort; + effortSupported: boolean; + supported: boolean; +} + +export interface ZaiModelCapabilities { + mcp: boolean; + reasoningEffort: boolean; + returnFc: boolean; + thinking: boolean; + vision: boolean; + vlmTools: boolean; + vlmWebSearch: boolean; + vlmWebsiteMode: boolean; + webSearch: boolean; +} + +export interface ZaiVlmConfig { + toolsEnabled: boolean; + webSearchEnabled: boolean; + websiteModeEnabled: boolean; +} + +const NO_ZAI_MODEL_CAPABILITIES: ZaiModelCapabilities = Object.freeze({ + mcp: false, + reasoningEffort: false, + returnFc: false, + thinking: false, + vision: false, + vlmTools: false, + vlmWebSearch: false, + vlmWebsiteMode: false, + webSearch: false, +}); + +/** + * Verified against chat.z.ai/api/models (prod-fe-1.1.79). + * `returnFc` is the site's internal function-call result capability; it is + * distinct from accepting caller-supplied OpenAI `tools`. + */ +const ZAI_MODEL_CAPABILITIES: Record = { + "glm-5.2": { + mcp: true, + reasoningEffort: true, + returnFc: true, + thinking: true, + vision: false, + vlmTools: false, + vlmWebSearch: false, + vlmWebsiteMode: false, + webSearch: true, + }, + "glm-5.1": { + mcp: true, + reasoningEffort: false, + returnFc: true, + thinking: true, + vision: false, + vlmTools: false, + vlmWebSearch: false, + vlmWebsiteMode: false, + webSearch: true, + }, + "glm-5-turbo": { + mcp: true, + reasoningEffort: false, + returnFc: true, + thinking: true, + vision: false, + vlmTools: false, + vlmWebSearch: false, + vlmWebsiteMode: false, + webSearch: true, + }, + "glm-5v-turbo": { + mcp: false, + reasoningEffort: false, + returnFc: true, + thinking: true, + vision: true, + vlmTools: true, + vlmWebSearch: true, + vlmWebsiteMode: true, + webSearch: true, + }, +}; + +export function asRecord(value: unknown): Record | null { + return value && typeof value === "object" && !Array.isArray(value) + ? (value as Record) + : null; +} + +function browserFailureDetail(body: Buffer): string { + const raw = body.toString("utf8").trim(); + if (!raw) return ""; + try { + const parsed = asRecord(JSON.parse(raw)); + const error = asRecord(parsed?.error); + const detail = error?.message ?? parsed?.detail ?? parsed?.message; + if (typeof detail === "string") return sanitizeErrorMessage(detail).slice(0, 500); + } catch { + // Non-JSON upstream errors are still useful after sanitizing and bounding them. + } + return sanitizeErrorMessage(raw).slice(0, 500); +} + +export function describeZaiBrowserFailure(result: { + status: number; + body: Buffer; + observedPostUrls?: string[]; + timing: { captureResponseMs: number; totalMs: number }; +}): string { + const status = result.status > 0 ? String(result.status) : "no matching response"; + const timing = `capture ${result.timing.captureResponseMs}ms, total ${result.timing.totalMs}ms`; + const observed = + result.observedPostUrls && result.observedPostUrls.length > 0 + ? ` Observed POST targets: ${result.observedPostUrls.join(", ")}.` + : ""; + const detail = + browserFailureDetail(result.body) || + (result.status === 0 + ? `The page did not issue the expected authenticated chat completion request.${observed}` + : "The browser response body was empty."); + return `Z.ai browser transport failed (${status}; ${timing}): ${detail}`; +} + +function parseCredentialJson(raw: string): Record | null { + if (!raw.trim().startsWith("{")) return null; + try { + return asRecord(JSON.parse(raw)); + } catch { + return null; + } +} + +/** Extract the localStorage Bearer token, while accepting legacy token= input. */ +export function extractZaiToken(rawCredential: string): string { + const trimmed = rawCredential.trim(); + const json = parseCredentialJson(trimmed); + if (json) { + const token = json.token ?? json.accessToken ?? json.access_token; + return typeof token === "string" ? token.trim() : ""; + } + + const bearer = trimmed.match(/^(?:Authorization:\s*)?Bearer\s+(.+)$/i); + if (bearer) return bearer[1].trim(); + + const normalized = normalizeCookie(trimmed); + if (!normalized) return ""; + const match = normalized.match(/(?:^|;\s*)token=([^;]+)/); + if (match) return match[1].trim(); + return normalized.includes(";") || normalized.includes("=") ? "" : normalized; +} + +/** Read the short-lived browser CAPTCHA proof from supported input locations. */ +export function extractZaiCaptchaVerifyParam(value: unknown): string { + const record = asRecord(value); + if (record) { + const direct = + record.captcha_verify_param ?? record.captchaVerifyParam ?? record.zaiCaptchaVerifyParam; + if (typeof direct === "string" && direct.trim()) return direct.trim(); + const nested = asRecord(record.providerSpecificData); + if (nested) return extractZaiCaptchaVerifyParam(nested); + return ""; + } + + if (typeof value !== "string") return ""; + const json = parseCredentialJson(value); + if (json) return extractZaiCaptchaVerifyParam(json); + const match = value.match(/(?:^|;\s*)captcha_verify_param=([^;]+)/); + return match?.[1]?.trim() ?? ""; +} + +export function resolveZaiCaptchaVerifyParam( + credentials: ProviderCredentials, + body: Record +): string { + return ( + extractZaiCaptchaVerifyParam(body) || + extractZaiCaptchaVerifyParam(credentials.providerSpecificData) || + extractZaiCaptchaVerifyParam(credentials.apiKey) || + extractZaiCaptchaVerifyParam(credentials.accessToken) + ); +} + +export function extractZaiUserId(token: string): string { + const payload = token.split(".")[1]; + if (!payload) return ""; + try { + const decoded = JSON.parse(Buffer.from(payload, "base64url").toString("utf8")); + return typeof decoded?.id === "string" ? decoded.id : ""; + } catch { + return ""; + } +} + +export function buildZaiSignature(input: { + prompt: string; + requestId: string; + timestamp: number | string; + userId: string; +}): string { + const timestamp = String(input.timestamp); + const sortedPayload = Object.entries({ + timestamp, + requestId: input.requestId, + user_id: input.userId, + }) + .sort(([left], [right]) => left.localeCompare(right)) + .join(","); + const encodedPrompt = Buffer.from(input.prompt, "utf8").toString("base64"); + const bucket = Math.floor(Number(timestamp) / (5 * 60 * 1000)); + const derivedKey = createHmac("sha256", SIGNATURE_KEY).update(String(bucket)).digest("hex"); + return createHmac("sha256", derivedKey) + .update(`${sortedPayload}|${encodedPrompt}|${timestamp}`) + .digest("hex"); +} + +export function parseZaiFrontendVersion(html: string): string | null { + return html.match(/\/frontend\/(prod-fe-\d+(?:\.\d+)*)\/assets\//)?.[1] ?? null; +} + +function textContent(content: unknown): string { + if (typeof content === "string") return content; + if (!Array.isArray(content)) return ""; + return content + .flatMap((part) => { + const record = asRecord(part); + if (!record || (record.type !== "text" && record.type !== "input_text")) return []; + const text = record.text ?? record.content; + return typeof text === "string" ? [text] : []; + }) + .join("\n"); +} + +export function latestUserPrompt(messages: Array<{ role: string; content: unknown }>): string { + for (let index = messages.length - 1; index >= 0; index--) { + if (messages[index]?.role !== "user") continue; + return textContent(messages[index].content); + } + return ""; +} + +export function foldMessages( + messages: Array<{ role: string; content: unknown }> +): Array<{ role: string; content: string }> { + return messages.map((message) => ({ + role: message.role, + content: textContent(message.content), + })); +} + +export function browserPrompt(messages: Array<{ role: string; content: unknown }>): string { + const folded = foldMessages(messages); + if (folded.length === 1 && folded[0]?.role === "user") return folded[0].content; + return folded.map((message) => `${message.role.toUpperCase()}:\n${message.content}`).join("\n\n"); +} + +export function collectZaiImageUrls(messages: Array<{ role: string; content: unknown }>): string[] { + return messages.flatMap((message) => + message.role === "user" ? extractImageUrls(message.content) : [] + ); +} + +export function zaiImageFileName(mimeType: string, index: number): string { + const normalized = mimeType.toLowerCase().split(";")[0].trim(); + const extension = + normalized === "image/jpeg" + ? "jpg" + : normalized === "image/svg+xml" + ? "svg" + : normalized.startsWith("image/") + ? normalized.slice("image/".length).replace(/[^a-z0-9]/g, "") || "png" + : "png"; + return `omniroute-image-${index + 1}.${extension}`; +} + +export function unprefixedModelId(modelId: string): string { + return modelId.trim().split("/").at(-1) || modelId.trim(); +} + +export function browserModelName(modelId: string): string { + const unprefixed = unprefixedModelId(modelId); + if (unprefixed.toLowerCase() === "glm-5.2") return "GLM-5.2"; + if (unprefixed.toLowerCase() === "glm-5v-turbo") return "GLM-5V-Turbo"; + return unprefixed; +} + +export function getZaiModelCapabilities(modelId: string): ZaiModelCapabilities { + return ( + ZAI_MODEL_CAPABILITIES[unprefixedModelId(modelId).toLowerCase()] ?? NO_ZAI_MODEL_CAPABILITIES + ); +} + +function getFeatureOption(body: Record, key: string): unknown { + if (body[key] !== undefined) return body[key]; + return asRecord(body.features)?.[key]; +} + +/** Resolve each model's Deep Think control; only GLM-5.2 accepts High/Max effort. */ +export function resolveZaiThinkingConfig( + modelId: string, + body: Record +): ZaiThinkingConfig { + const capabilities = getZaiModelCapabilities(modelId); + const supported = capabilities.thinking; + const reasoning = asRecord(body.reasoning); + const rawEffort = + typeof body.reasoning_effort === "string" + ? body.reasoning_effort.trim().toLowerCase() + : typeof reasoning?.effort === "string" + ? reasoning.effort.trim().toLowerCase() + : ""; + const disabled = body.enable_thinking === false || rawEffort === "none" || rawEffort === "off"; + const effort: ZaiReasoningEffort = + rawEffort === "low" || rawEffort === "medium" || rawEffort === "high" ? "high" : "max"; + + return { + supported, + enabled: supported && !disabled, + effort, + effortSupported: capabilities.reasoningEffort, + }; +} + +/** Resolve GLM-5V-Turbo's visible Web Search and Tools controls. */ +export function resolveZaiVlmConfig(modelId: string, body: Record): ZaiVlmConfig { + const capabilities = getZaiModelCapabilities(modelId); + const toolsOption = getFeatureOption(body, "vlm_tools_enable"); + const webSearchOption = + getFeatureOption(body, "vlm_web_search_enable") ?? + getFeatureOption(body, "auto_web_search") ?? + getFeatureOption(body, "web_search"); + const webSearchEnabled = + webSearchOption === true || (webSearchOption !== false && capabilities.vlmWebSearch); + return { + toolsEnabled: capabilities.vlmTools && toolsOption !== false, + webSearchEnabled: capabilities.webSearch && webSearchEnabled, + websiteModeEnabled: capabilities.vlmWebsiteMode, + }; +} + +export function buildZaiHeaders( + token: string, + options: { + accept: "application/json" | "text/event-stream"; + frontendVersion?: string; + signature?: string; + } +): Record { + const headers: Record = { + "Content-Type": "application/json", + Accept: options.accept, + "Accept-Language": "en-US", + "User-Agent": ZAI_USER_AGENT, + Origin: ZAI_BASE_URL, + Referer: `${ZAI_BASE_URL}/`, + Authorization: `Bearer ${token}`, + }; + if (options.frontendVersion) headers["X-FE-Version"] = options.frontendVersion; + if (options.signature) headers["X-Signature"] = options.signature; + return headers; +} + +export function buildZaiCompletionUrl(input: { + requestId: string; + timestamp: number; + token: string; + userId: string; +}): string { + const now = new Date(input.timestamp); + const params = new URLSearchParams({ + timestamp: String(input.timestamp), + requestId: input.requestId, + user_id: input.userId, + version: CLIENT_PROTOCOL_VERSION, + platform: "web", + token: input.token, + user_agent: ZAI_USER_AGENT, + language: "en-US", + languages: "en-US,en", + timezone: "UTC", + cookie_enabled: "true", + screen_width: "1280", + screen_height: "800", + screen_resolution: "1280x800", + viewport_height: "800", + viewport_width: "1280", + viewport_size: "1280x800", + color_depth: "24", + pixel_ratio: "1", + current_url: `${ZAI_BASE_URL}/`, + pathname: "/", + search: "", + hash: "", + host: "chat.z.ai", + hostname: "chat.z.ai", + protocol: "https:", + referrer: "", + title: "Z.ai - Advanced AI Chatbot & Agent powered by GLM-5.2", + timezone_offset: "0", + local_time: now.toISOString(), + utc_time: now.toUTCString(), + is_mobile: "false", + is_touch: "false", + max_touch_points: "0", + browser_name: "Chrome", + os_name: "Mac OS", + signature_timestamp: String(input.timestamp), + }); + return `${ZAI_CHAT_URL}?${params.toString()}`; +} + +export function buildZaiNewChatBody( + messages: Array<{ role: string; content: unknown }>, + modelId: string, + enableThinking: boolean, + reasoningEffort: ZaiReasoningEffort, + vlmConfig: ZaiVlmConfig +): NewChatRequest { + const prompt = latestUserPrompt(messages); + const userMessageId = randomUUID(); + return { + userMessageId, + payload: { + chat: { + id: "", + title: "New Chat", + models: [modelId], + params: {}, + history: { + messages: { + [userMessageId]: { + id: userMessageId, + parentId: null, + childrenIds: [], + role: "user", + content: prompt, + timestamp: Math.floor(Date.now() / 1000), + models: [modelId], + }, + }, + currentId: userMessageId, + }, + tags: [], + flags: [], + features: [ + { + server: "tool_selector_h", + status: "hidden", + type: "tool_selector", + }, + ], + mcp_servers: [], + enable_thinking: enableThinking, + reasoning_effort: reasoningEffort, + auto_web_search: vlmConfig.webSearchEnabled, + message_version: 1, + extra: { + vlm_tools_enable: vlmConfig.toolsEnabled, + vlm_web_search_enable: vlmConfig.websiteModeEnabled && vlmConfig.webSearchEnabled, + vlm_website_mode: vlmConfig.websiteModeEnabled, + }, + timestamp: Date.now(), + type: "default", + }, + }, + }; +} + +export function buildZaiRequestBody(input: { + body: Record; + captchaVerifyParam: string; + chatId: string; + messages: Array<{ role: string; content: unknown }>; + modelId: string; + prompt: string; + userMessageId: string; + enableThinking: boolean; + reasoningEffort: ZaiReasoningEffort; + reasoningEffortSupported: boolean; + vlmConfig: ZaiVlmConfig; +}): Record { + const params = Object.fromEntries( + ["temperature", "top_p", "max_tokens", "stop"] + .filter((key) => input.body[key] !== undefined) + .map((key) => [key, input.body[key]]) + ); + const features: Record = { + image_generation: false, + web_search: false, + auto_web_search: input.vlmConfig.websiteModeEnabled ? false : input.vlmConfig.webSearchEnabled, + preview_mode: true, + flags: [], + vlm_tools_enable: input.vlmConfig.toolsEnabled, + vlm_web_search_enable: input.vlmConfig.websiteModeEnabled && input.vlmConfig.webSearchEnabled, + vlm_website_mode: input.vlmConfig.websiteModeEnabled, + enable_thinking: input.enableThinking, + }; + if (input.enableThinking && input.reasoningEffortSupported) { + features.reasoning_effort = input.reasoningEffort; + } + return { + stream: true, + model: input.modelId, + messages: foldMessages(input.messages), + signature_prompt: input.prompt, + params, + extra: { + vlm_tools_enable: input.vlmConfig.toolsEnabled, + vlm_web_search_enable: input.vlmConfig.websiteModeEnabled && input.vlmConfig.webSearchEnabled, + vlm_website_mode: input.vlmConfig.websiteModeEnabled, + }, + features, + variables: {}, + chat_id: input.chatId, + id: randomUUID(), + current_user_message_id: input.userMessageId, + current_user_message_parent_id: null, + background_tasks: { + title_generation: true, + tags_generation: true, + }, + captcha_verify_param: input.captchaVerifyParam, + }; +} diff --git a/open-sse/executors/zai-web/stream.ts b/open-sse/executors/zai-web/stream.ts new file mode 100644 index 0000000000..48b99312dd --- /dev/null +++ b/open-sse/executors/zai-web/stream.ts @@ -0,0 +1,219 @@ +import { sanitizeErrorMessage } from "../../utils/error.ts"; + +export interface ZaiDelta { + content: string; + reasoning: string; + done: boolean; + /** Set when the frame carried an upstream error rather than a delta. */ + error?: string; +} + +/** + * Pull a human-readable message out of an error-shaped frame. + * + * z.ai answers some failures with HTTP 200 and an error payload in the SSE body + * (rejected signature, expired captcha, stale token). Those frames carry no + * `delta_content`, so without this they take the same "no usable delta" path as + * a benign phase frame and are dropped — the caller then sees a successful + * empty completion. Only an *explicit* error field counts: contentless frames + * remain a normal, skipped part of the protocol. + */ +function readFrameError(frame: Record): string | null { + const data = (frame.data ?? {}) as Record; + const raw = frame.error ?? data.error; + if (!raw) return null; + + if (typeof raw === "string") return sanitizeErrorMessage(raw) || "upstream error"; + if (typeof raw === "object") { + const rec = raw as Record; + const message = rec.detail ?? rec.message ?? rec.msg; + if (typeof message === "string" && message) return sanitizeErrorMessage(message); + return sanitizeErrorMessage(JSON.stringify(raw)); + } + return sanitizeErrorMessage(String(raw)); +} + +export type ZaiChunkEmitter = ( + controller: ReadableStreamDefaultController, + delta: Record, + finish?: string | null +) => void; + +function parseOpenAiShapedFrame(choices: Array>): ZaiDelta { + const delta = (choices[0]?.delta ?? {}) as Record; + const finishReason = choices[0]?.finish_reason; + return { + content: typeof delta.content === "string" ? delta.content : "", + reasoning: typeof delta.reasoning_content === "string" ? delta.reasoning_content : "", + done: finishReason != null, + }; +} + +function parseInternalEnvelopeFrame( + frame: Record, + data: Record +): ZaiDelta | null { + const phase = String(data.phase ?? ""); + const deltaContent = data.delta_content ?? data.edit_content ?? data.content; + const done = + data.done === true || + phase === "done" || + phase === "finish" || + String(frame.type ?? "") === "chat:completion:finish"; + + if (typeof deltaContent === "string" && deltaContent) { + const isThinking = phase === "thinking"; + return { + content: isThinking ? "" : deltaContent, + reasoning: isThinking ? deltaContent : "", + done, + }; + } + if (done) return { content: "", reasoning: "", done: true }; + return null; +} + +export function parseZaiFrame(raw: unknown): ZaiDelta | null { + if (!raw || typeof raw !== "object") return null; + const frame = raw as Record; + + // Checked before the delta paths: an error frame is terminal, and must not + // fall through to the "no usable delta" null that would silently drop it. + const error = readFrameError(frame); + if (error) return { content: "", reasoning: "", done: true, error }; + + const choices = frame.choices as Array> | undefined; + if (Array.isArray(choices) && choices.length > 0) { + return parseOpenAiShapedFrame(choices); + } + + const data = (frame.data ?? frame) as Record; + return parseInternalEnvelopeFrame(frame, data); +} + +function extractSseDataPayloads(buffer: { text: string }, incoming: string): string[] { + buffer.text += incoming; + const lines = buffer.text.split("\n"); + buffer.text = lines.pop() || ""; + const payloads: string[] = []; + for (const line of lines) { + if (!line.startsWith("data:")) continue; + const data = line.slice(5).trim(); + if (!data || data === "[DONE]") continue; + payloads.push(data); + } + return payloads; +} + +function parseSsePayload(data: string): ZaiDelta | null { + try { + return parseZaiFrame(JSON.parse(data)); + } catch { + return null; + } +} + +async function drainSseDeltas( + sourceBody: ReadableStream, + onDelta: (delta: ZaiDelta) => boolean +): Promise { + const decoder = new TextDecoder(); + const reader = sourceBody.getReader(); + const buffer = { text: "" }; + while (true) { + const { done, value } = await reader.read(); + if (done) return false; + const payloads = extractSseDataPayloads(buffer, decoder.decode(value, { stream: true })); + for (const raw of payloads) { + const delta = parseSsePayload(raw); + if (delta && onDelta(delta)) return true; + } + } +} + +function emitDeltaChunks( + controller: ReadableStreamDefaultController, + delta: ZaiDelta, + emitChunk: ZaiChunkEmitter, + roleState: { emitted: boolean } +): boolean { + if (!roleState.emitted && (delta.content || delta.reasoning || delta.error)) { + roleState.emitted = true; + emitChunk(controller, { role: "assistant", content: "" }); + } + if (delta.reasoning) emitChunk(controller, { reasoning_content: delta.reasoning }); + if (delta.content) emitChunk(controller, { content: delta.content }); + // Surfaced as visible content, matching the other web executors' mid-stream + // error convention (see zed-hosted's createErrorChunk): the 200 is already on + // the wire, so the status cannot change — but the caller must not be left + // reading an empty success. Any content streamed before the failure is kept. + if (delta.error) emitChunk(controller, { content: `[Z.ai error] ${delta.error}` }); + if (delta.done) { + emitChunk(controller, {}, "stop"); + controller.enqueue(new TextEncoder().encode("data: [DONE]\n\n")); + controller.close(); + return true; + } + return false; +} + +export function buildZaiStreamingBody( + sourceBody: ReadableStream, + emitChunk: ZaiChunkEmitter, + signal: AbortSignal | null | undefined +): ReadableStream { + return new ReadableStream({ + async start(controller) { + const roleState = { emitted: false }; + try { + const ended = await drainSseDeltas(sourceBody, (delta) => + emitDeltaChunks(controller, delta, emitChunk, roleState) + ); + if (ended) return; + if (!roleState.emitted) emitChunk(controller, { role: "assistant", content: "" }); + emitChunk(controller, {}, "stop"); + controller.enqueue(new TextEncoder().encode("data: [DONE]\n\n")); + controller.close(); + } catch (error) { + if (!signal?.aborted) { + try { + controller.error(error); + } catch { + // The controller was already closed. + } + } + } + }, + }); +} + +export async function collectZaiNonStreaming( + sourceBody: ReadableStream +): Promise<{ answer: string; reasoning: string }> { + let answer = ""; + let reasoning = ""; + await drainSseDeltas(sourceBody, (delta) => { + // Match the streaming path: an upstream error frame (rejected signature, + // expired captcha, stale token) must surface as a failed request, not as a + // successful empty completion. The caller converts this throw into an error + // result (e.g. 502), so the client is never left reading an empty 200. + if (delta.error) throw new Error(delta.error); + if (delta.reasoning) reasoning += delta.reasoning; + if (delta.content) answer += delta.content; + return delta.done; + }); + return { answer, reasoning }; +} + +export function makeZaiChunkEmitter(id: string, created: number, modelId: string): ZaiChunkEmitter { + return (controller, delta, finish = null) => { + const chunk = { + id, + object: "chat.completion.chunk", + created, + model: modelId, + choices: [{ index: 0, delta, finish_reason: finish }], + }; + controller.enqueue(new TextEncoder().encode(`data: ${JSON.stringify(chunk)}\n\n`)); + }; +} diff --git a/open-sse/executors/zed-hosted.ts b/open-sse/executors/zed-hosted.ts index ef358ce217..7e75c6cecc 100644 --- a/open-sse/executors/zed-hosted.ts +++ b/open-sse/executors/zed-hosted.ts @@ -21,7 +21,7 @@ * * Ported from decolua/9router PR #2328 (open-sse/executors/zed.js), * adapted to TypeScript + OmniRoute's BaseExecutor/translator conventions. - * Like WindsurfExecutor, this overrides execute() entirely rather than + * Like DevinDesktopExecutor, this overrides execute() entirely rather than * using BaseExecutor's default Claude-Code-oriented pipeline, because the * Zed wire request/response shape (thread envelope, LLM-token exchange, * NDJSON status frames) doesn't fit the generic transformRequest/buildUrl @@ -38,7 +38,12 @@ import { openaiToOpenAIResponsesRequest } from "../translator/request/openai-res import { claudeToOpenAIResponse } from "../translator/response/claude-to-openai.ts"; import { geminiToOpenAIResponse } from "../translator/response/gemini-to-openai.ts"; import { openaiResponsesToOpenAIResponse } from "../translator/response/openai-responses.ts"; -import { ZED_HEADERS, resolveZedModels, zedLlmFetch, type ZedCredentials } from "../shared/zedAuth.ts"; +import { + ZED_HEADERS, + resolveZedModels, + zedLlmFetch, + type ZedCredentials, +} from "../shared/zedAuth.ts"; import { resolveSuppressThinkClose, THINKING_MARKER_HEADER } from "../utils/thinkCloseMarker.ts"; const ZED_PROVIDER = { @@ -345,7 +350,8 @@ export class ZedHostedExecutor extends BaseExecutor { "Content-Type": "application/json", Accept: "application/x-ndjson, text/event-stream, */*", "User-Agent": `OmniRoute/zed-hosted`, - "x-zed-version": (this.config as Record)?.appVersion?.toString() || "0.200.0", + "x-zed-version": + (this.config as Record)?.appVersion?.toString() || "0.200.0", [ZED_HEADERS.clientSupportsStatus]: "true", [ZED_HEADERS.clientSupportsStreamEnded]: "true", }, @@ -381,7 +387,10 @@ export class ZedHostedExecutor extends BaseExecutor { const errorObj = (parsed?.error as Record) || undefined; const code = (parsed?.code as string) || (errorObj?.code as string) || ""; const rawMessage = - (parsed?.message as string) || (errorObj?.message as string) || bodyText || response.statusText; + (parsed?.message as string) || + (errorObj?.message as string) || + bodyText || + response.statusText; if (code === "trial_blocked") { return { status: response.status, diff --git a/open-sse/handlers/chatCore.ts b/open-sse/handlers/chatCore.ts index e71de50bd8..ced9601339 100644 --- a/open-sse/handlers/chatCore.ts +++ b/open-sse/handlers/chatCore.ts @@ -7,6 +7,7 @@ import { extractSystemRoleMessages } from "./chatCore/claudeSystemRole.ts"; export { extractSystemRoleMessages } from "./chatCore/claudeSystemRole.ts"; import { checkIdempotencyCache } from "./chatCore/idempotency.ts"; import { checkSemanticCache } from "./chatCore/semanticCache.ts"; +import { checkLifecycle, resolveLifecycle } from "./chatCore/modelLifecyclePolicy.ts"; import { shouldDefaultAllowClassifier, buildDefaultAllowClaudeMessage, @@ -116,7 +117,6 @@ import { getStripTypesForProviderModel, stripIncompatibleMessageContent, } from "../services/modelStrip.ts"; -import { resolveModelAlias } from "../services/modelDeprecation.ts"; import { normalizeMimoThinking } from "../services/mimoThinking.ts"; import { isOpencodeGoProvider, @@ -251,7 +251,10 @@ import { recordCompressionCacheStats } from "./chatCore/compressionCacheStats.ts import { writeCavemanOutputAnalytics } from "./chatCore/cavemanOutputAnalytics.ts"; import { scheduleQuotaShareConsumption } from "./chatCore/quotaShareConsumption.ts"; import { emitRequestGamificationEvent } from "./chatCore/gamificationEvent.ts"; -import { runPluginOnResponseHook } from "./chatCore/pluginOnResponse.ts"; +import { + runPluginOnResponseHook, + runPluginOnStreamCompleteHook, +} from "./chatCore/pluginOnResponse.ts"; import { scheduleStreamingQuotaShareConsumption } from "./chatCore/streamingQuotaShare.ts"; import { recordStreamingUsageStats } from "./chatCore/streamingUsageStats.ts"; import { recordStreamingCost } from "./chatCore/streamingCost.ts"; @@ -640,6 +643,9 @@ export async function handleChatCore({ responsesInputItems ); + const requestedLifecycleError = checkLifecycle(provider, model, log); + if (requestedLifecycleError) return requestedLifecycleError; + // Check for bypass patterns (warmup, skip) - return fake response const bypassResponse = handleBypassRequest(body, model, userAgent); if (bypassResponse) { @@ -704,16 +710,13 @@ export async function handleChatCore({ }); } - // Apply custom model aliases (Settings → Model Aliases → Pattern→Target) before routing (#315, #472) - // Custom aliases take priority over built-in and must be resolved here so the - // downstream getModelTargetFormat() lookup AND the actual provider request use - // the correct, aliased model ID. Without this, aliases only affect format detection. - const resolvedModel = resolveModelAlias(model); - // Use resolvedModel for all downstream operations (routing, provider requests, logging) - let effectiveModel = resolvedModel === model ? model : resolvedModel; - if (resolvedModel !== model) { - log?.info?.("ALIAS", `Model alias applied: ${model} → ${resolvedModel}`); - } + // Custom aliases remain explicit; lifecycle replacements are advisory and never silently routed. + let [resolvedModel, effectiveModel, routedLifecycleError] = resolveLifecycle( + provider, + model, + log + ); + if (routedLifecycleError) return routedLifecycleError; // Effort-variant model ids: the Claude / Claude-Code model picker (e.g. VS Code's // "Effort" slider) advertises claude-...-{low,medium,high,xhigh,max}. Anthropic has @@ -3867,8 +3870,8 @@ export async function handleChatCore({ // Before returning a model-unavailable error upstream, try sibling models // from the same family. This keeps the request alive on the same account // instead of failing the entire combo. - if (isModelUnavailableError(statusCode, message)) { - const nextModel = getNextFamilyFallback(currentModel, triedModels); + if (isModelUnavailableError(statusCode, message, provider)) { + const nextModel = getNextFamilyFallback(currentModel, triedModels, provider); if (nextModel) { triedModels.add(nextModel); currentModel = nextModel; @@ -3954,12 +3957,12 @@ export async function handleChatCore({ ); } } else if (isContextOverflowError(statusCode, message)) { - const familyCandidates = getModelFamily(currentModel).filter( + const familyCandidates = getModelFamily(currentModel, provider).filter( (m) => m !== currentModel && !triedModels.has(m) ); const nextModel = - findLargerContextModel(currentModel, familyCandidates) ?? - getNextFamilyFallback(currentModel, triedModels); + findLargerContextModel(currentModel, familyCandidates, provider) ?? + getNextFamilyFallback(currentModel, triedModels, provider); if (nextModel) { triedModels.add(nextModel); currentModel = nextModel; @@ -4210,7 +4213,7 @@ export async function handleChatCore({ persistFailureUsage(HTTP_STATUS.BAD_GATEWAY, "empty_content"); // Trigger non-recursive fallback for empty content - const nextModel = getNextFamilyFallback(currentModel, triedModels); + const nextModel = getNextFamilyFallback(currentModel, triedModels, provider); if (nextModel) { triedModels.add(nextModel); currentModel = nextModel; @@ -4934,6 +4937,17 @@ export async function handleChatCore({ streamUsage, log, }); + + // Plugin onStreamComplete hook — fire-and-forget, fail-open (#9571) + runPluginOnStreamCompleteHook({ + status: normalizedStreamStatus, + usage: streamUsage as Record | undefined, + ttft, + model, + provider, + errorCode: streamErrorCode, + startTime, + }); }; const streamFailureFinalizers = streamFailure.createStreamFailureFinalizers({ diff --git a/open-sse/handlers/chatCore/modelLifecyclePolicy.ts b/open-sse/handlers/chatCore/modelLifecyclePolicy.ts new file mode 100644 index 0000000000..698e3c5c8e --- /dev/null +++ b/open-sse/handlers/chatCore/modelLifecyclePolicy.ts @@ -0,0 +1,60 @@ +import { HTTP_STATUS } from "../../config/constants.ts"; +import { + formatModelLifecycleMessage, + getModelLifecycleDecision, +} from "../../services/modelLifecycle.ts"; +import { resolveModelAlias } from "../../services/modelDeprecation.ts"; +import { createErrorResult } from "../../utils/error.ts"; + +type LifecycleLogger = { + info?: (tag: string, message: string) => unknown; + warn?: (tag: string, message: string) => unknown; +} | null; + +function getModelLifecycleError({ + provider, + model, + log, + warnOnDeprecation = false, +}: { + provider: string; + model: string; + log?: LifecycleLogger; + warnOnDeprecation?: boolean; +}): ReturnType | null { + const decision = getModelLifecycleDecision(provider, model); + const message = formatModelLifecycleMessage(decision); + if (message && (decision.action === "reject" || warnOnDeprecation)) { + log?.warn?.("MODEL_LIFECYCLE", message); + } + if (decision.action !== "reject" || !message) return null; + return createErrorResult( + HTTP_STATUS.GONE, + message, + null, + "model_shutdown", + "invalid_request_error" + ); +} + +export function checkLifecycle(provider: string, model: string, log?: LifecycleLogger) { + return getModelLifecycleError({ + provider, + model: resolveModelAlias(model), + log, + }); +} + +export function resolveLifecycle(provider: string, model: string, log?: LifecycleLogger) { + const resolvedModel = resolveModelAlias(model); + if (resolvedModel !== model) { + log?.info?.("ALIAS", `Model alias applied: ${model} → ${resolvedModel}`); + } + const lifecycleError = getModelLifecycleError({ + provider, + model: resolvedModel, + log, + warnOnDeprecation: true, + }); + return [resolvedModel, resolvedModel === model ? model : resolvedModel, lifecycleError] as const; +} diff --git a/open-sse/handlers/chatCore/pluginOnResponse.ts b/open-sse/handlers/chatCore/pluginOnResponse.ts index 63055e2e74..eb100c5b5e 100644 --- a/open-sse/handlers/chatCore/pluginOnResponse.ts +++ b/open-sse/handlers/chatCore/pluginOnResponse.ts @@ -45,3 +45,57 @@ export async function runPluginOnResponseHook(args: { /* plugin onResponse optional */ } } + +/** + * Payload passed to plugin onStreamComplete hooks after a streaming response is consumed. + * Carries usage token counts, timing metrics (latency, TTFT), model, provider, and error code. + */ +export type PluginOnStreamCompletePayload = { + status: number; + usage?: { + prompt_tokens?: number; + completion_tokens?: number; + reasoning_tokens?: number; + cache_read_input_tokens?: number; + cache_creation_input_tokens?: number; + }; + timing?: { + latencyMs: number; + ttft?: number; + }; + model?: string; + provider?: string; + errorCode?: string; +}; + +/** + * Run plugin onStreamComplete hooks — fire-and-forget and fail-open. + * Called inside the onStreamComplete callback (chatCore.ts) where usage and timing data + * converge after an SSE stream is fully consumed. + */ +export async function runPluginOnStreamCompleteHook(args: { + status: number; + usage?: Record; + ttft?: number; + model: string | null | undefined; + provider: string | null | undefined; + errorCode?: string | null | undefined; + startTime: number; +}): Promise { + try { + const { runOnStreamComplete } = await import("@/lib/plugins/hooks"); + runOnStreamComplete({ + status: args.status, + usage: args.usage as PluginOnStreamCompletePayload["usage"], + timing: { + latencyMs: Date.now() - args.startTime, + ttft: args.ttft, + }, + model: args.model ?? undefined, + provider: args.provider ?? undefined, + errorCode: args.errorCode ?? undefined, + }).catch(() => {}); + } catch (_) { + /* plugin onStreamComplete optional */ + } +} diff --git a/open-sse/handlers/responseSanitizer.ts b/open-sse/handlers/responseSanitizer.ts index dcb072bdb9..fcaa5677fb 100644 --- a/open-sse/handlers/responseSanitizer.ts +++ b/open-sse/handlers/responseSanitizer.ts @@ -537,7 +537,7 @@ function sanitizeResponsesUsage(usage: unknown): unknown { // DeepSeek native API: map flat prompt_cache_hit_tokens into input_tokens_details if ( normalized.prompt_cache_hit_tokens !== undefined && - !(normalized.input_tokens_details as Record | undefined)?.cached_tokens + !(toRecord(normalized.input_tokens_details) ?? {}).cached_tokens ) { normalized.input_tokens_details = { ...(normalized.input_tokens_details as Record || {}), @@ -549,7 +549,7 @@ function sanitizeResponsesUsage(usage: unknown): unknown { if ( normalized.cache_read_input_tokens !== undefined && normalized.cache_read_input_tokens !== 0 && - !(normalized.input_tokens_details as Record | undefined)?.cached_tokens + !(toRecord(normalized.input_tokens_details) ?? {}).cached_tokens ) { normalized.input_tokens_details = { ...(normalized.input_tokens_details as Record || {}), diff --git a/open-sse/handlers/search.ts b/open-sse/handlers/search.ts index a3441dbc2e..366ae0014d 100644 --- a/open-sse/handlers/search.ts +++ b/open-sse/handlers/search.ts @@ -304,7 +304,7 @@ function buildSerperRequest( url: `${config.baseUrl}${endpoint}`, init: { method: "POST", - headers: { "Content-Type": "application/json", "X-API-Key": params.token ?? "" }, + headers: { "Content-Type": "application/json", ...(params.token ? { "X-API-Key": params.token } : {}) }, body: JSON.stringify(body), }, }; @@ -322,7 +322,7 @@ function buildBraveRequest( url: `${config.baseUrl}${endpoint}?${qp}`, init: { method: "GET", - headers: { Accept: "application/json", "X-Subscription-Token": params.token ?? "" }, + headers: { Accept: "application/json", ...(params.token ? { "X-Subscription-Token": params.token } : {}) }, }, }; } @@ -348,7 +348,7 @@ function buildExaRequest( url: config.baseUrl, init: { method: "POST", - headers: { "Content-Type": "application/json", "x-api-key": params.token ?? "" }, + headers: { "Content-Type": "application/json", ...(params.token ? { "x-api-key": params.token } : {}) }, body: JSON.stringify(body), }, }; diff --git a/open-sse/handlers/videoGeneration/falHandler.ts b/open-sse/handlers/videoGeneration/falHandler.ts deleted file mode 100644 index bd98f5068a..0000000000 --- a/open-sse/handlers/videoGeneration/falHandler.ts +++ /dev/null @@ -1,254 +0,0 @@ -import { saveCallLog } from "@/lib/usageDb"; -import { - FetchTimeoutError, - fetchWithTimeout, - getConfiguredTimeout, -} from "@/shared/utils/fetchTimeout"; -import { sanitizeErrorMessage } from "../../utils/error.ts"; - -interface FalVideoBody { - prompt?: unknown; - aspect_ratio?: unknown; - duration?: unknown; - resolution?: unknown; - quality?: unknown; - generate_audio?: unknown; - poll_interval_ms?: unknown; - [key: string]: unknown; -} - -interface FalCredentials { - apiKey?: unknown; - accessToken?: unknown; -} - -interface FalProviderConfig { - baseUrl: string; -} - -interface FalLog { - info?: (scope: string, message: string, meta?: unknown) => void; - error?: (scope: string, message: string) => void; -} - -function stringValue(value: unknown): string | undefined { - return typeof value === "string" && value.trim() ? value.trim() : undefined; -} - -function numberValue(value: unknown): number | undefined { - return typeof value === "number" && Number.isFinite(value) ? value : undefined; -} - -function grokDuration(value: unknown, fallback = 6): number { - const numeric = numberValue(value); - if (numeric !== undefined) return Math.round(numeric); - - if (typeof value === "string") { - const match = value.trim().match(/^(\d+)s$/); - if (match) return Number(match[1]); - } - - return fallback; -} - -function falDuration(value: unknown, fallback = "8s"): string { - if (typeof value === "string" && /^(4|6|8)s$/.test(value)) return value; - - const numeric = numberValue(value); - return numeric && [4, 6, 8].includes(numeric) ? `${numeric}s` : fallback; -} - -export function buildFalVideoPayload(model: string, body: FalVideoBody): Record { - const prompt = stringValue(body.prompt) || ""; - const aspectRatio = stringValue(body.aspect_ratio) || "16:9"; - const resolution = stringValue(body.resolution) || (body.quality === "hd" ? "1080p" : "720p"); - - if (model.startsWith("xai/grok-imagine-video/")) { - return { - prompt, - aspect_ratio: aspectRatio, - duration: grokDuration(body.duration), - resolution, - }; - } - - return { - prompt, - aspect_ratio: aspectRatio, - duration: falDuration(body.duration), - resolution, - generate_audio: typeof body.generate_audio === "boolean" ? body.generate_audio : true, - }; -} - -function absoluteFalUrl(value: unknown, baseUrl: string): string | undefined { - const url = stringValue(value); - if (!url) return undefined; - if (url.startsWith("http://") || url.startsWith("https://")) return url; - return `${baseUrl.replace(/\/$/, "")}/${url.replace(/^\//, "")}`; -} - -function normalizeFalVideoResponse(payload: unknown) { - const record = payload && typeof payload === "object" ? (payload as Record) : {}; - const video = - record.video && typeof record.video === "object" - ? (record.video as Record) - : null; - const url = video && typeof video.url === "string" ? video.url.trim() : ""; - - if (!url) { - return { - success: false as const, - status: 502, - error: "Fal video generation returned no video URL", - }; - } - - return { - success: true as const, - data: { - created: typeof record.created === "number" ? record.created : Math.floor(Date.now() / 1000), - data: [{ url, format: "mp4" }], - }, - }; -} - -function falModelPath(model: string): string { - return model.startsWith("xai/") ? model : `fal-ai/${model}`; -} - -function getToken(credentials: FalCredentials | null | undefined): string { - return String(credentials?.apiKey || credentials?.accessToken || ""); -} - -function responseError(payload: unknown): string { - return sanitizeErrorMessage(JSON.stringify(payload).slice(0, 500)); -} - -export async function handleFalVideoGeneration({ - model, - provider, - providerConfig, - body, - credentials, - log, -}: { - model: string; - provider: string; - providerConfig: FalProviderConfig; - body: FalVideoBody; - credentials: FalCredentials | null | undefined; - log?: FalLog | null; -}) { - const token = getToken(credentials); - if (!token) return { success: false as const, status: 401, error: "Fal API key is required" }; - - const startTime = Date.now(); - const timeoutMs = getConfiguredTimeout(); - const pollIntervalMs = Math.max(100, numberValue(body.poll_interval_ms) || 1000); - const baseUrl = providerConfig.baseUrl.replace(/\/$/, ""); - const queueUrl = `${baseUrl}/${falModelPath(model)}`; - const headers = { - Authorization: `Key ${token}`, - "Content-Type": "application/json", - }; - - log?.info?.("VIDEO", `${provider}/${model} (fal-ai-video)`, { - prompt: stringValue(body.prompt)?.slice(0, 200) || "", - }); - - try { - const createResponse = await fetchWithTimeout(queueUrl, { - method: "POST", - headers, - body: JSON.stringify(buildFalVideoPayload(model, body)), - timeoutMs, - }); - const createPayload = await createResponse.json().catch(() => ({})); - - if (!createResponse.ok) { - const error = responseError(createPayload); - log?.error?.("VIDEO", `Fal create failed (${createResponse.status}): ${error}`); - return { success: false as const, status: createResponse.status, error }; - } - - const requestId = stringValue(createPayload.request_id); - if (!requestId) return normalizeFalVideoResponse(createPayload); - - const statusUrl = - absoluteFalUrl(createPayload.status_url, baseUrl) || - `${queueUrl}/requests/${requestId}/status`; - const responseUrl = - absoluteFalUrl(createPayload.response_url, baseUrl) || `${queueUrl}/requests/${requestId}`; - const deadline = startTime + timeoutMs; - - while (Date.now() < deadline) { - const remainingMs = Math.max(1000, deadline - Date.now()); - const statusResponse = await fetchWithTimeout(statusUrl, { - headers: { Authorization: `Key ${token}` }, - timeoutMs: Math.min(timeoutMs, remainingMs), - }); - const statusPayload = await statusResponse.json().catch(() => ({})); - - if (!statusResponse.ok) { - return { - success: false as const, - status: statusResponse.status, - error: responseError(statusPayload), - }; - } - - const status = stringValue(statusPayload.status); - if (status === "COMPLETED") { - const resultResponse = await fetchWithTimeout(responseUrl, { - headers: { Authorization: `Key ${token}` }, - timeoutMs: Math.min(timeoutMs, Math.max(1000, deadline - Date.now())), - }); - const resultPayload = await resultResponse.json().catch(() => ({})); - if (!resultResponse.ok) { - return { - success: false as const, - status: resultResponse.status, - error: responseError(resultPayload), - }; - } - - const result = normalizeFalVideoResponse(resultPayload); - saveCallLog({ - method: "POST", - path: "/v1/videos/generations", - status: result.success ? 200 : result.status, - model: `${provider}/${model}`, - provider, - duration: Date.now() - startTime, - ...(result.success ? {} : { error: result.error }), - }).catch(() => {}); - return result; - } - - if (status && !["IN_QUEUE", "IN_PROGRESS"].includes(status)) { - return { - success: false as const, - status: 502, - error: `Fal video generation ended with status ${status}`, - }; - } - - await new Promise((resolve) => setTimeout(resolve, Math.min(pollIntervalMs, remainingMs))); - } - - return { - success: false as const, - status: 504, - error: `Fal video generation timed out after ${timeoutMs}ms`, - }; - } catch (error: unknown) { - const message = error instanceof Error ? error.message : String(error); - const isTimeout = - error instanceof FetchTimeoutError || (error as { name?: string }).name === "AbortError"; - const status = isTimeout ? 504 : 502; - const safeMessage = sanitizeErrorMessage(message); - log?.error?.("VIDEO", `Fal request failed: ${safeMessage}`); - return { success: false as const, status, error: `Fal video provider error: ${safeMessage}` }; - } -} diff --git a/open-sse/services/browserBackedChat.ts b/open-sse/services/browserBackedChat.ts index ec7d6b2915..848f564258 100644 --- a/open-sse/services/browserBackedChat.ts +++ b/open-sse/services/browserBackedChat.ts @@ -27,6 +27,15 @@ import { import tlsClient from "../utils/tlsClient.ts"; import { sanitizeErrorMessage } from "../utils/error.ts"; import { resolveHttpBackedChatFingerprint } from "./httpBackedChatFingerprint.ts"; +import type { + BrowserBackedChatRequest, + BrowserBackedChatResult, +} from "./browserBackedChat/types.ts"; + +export type { + BrowserBackedChatRequest, + BrowserBackedChatResult, +} from "./browserBackedChat/types.ts"; // Safety constants const MAX_RESPONSE_BYTES = 10 * 1024 * 1024; // 10 MB @@ -88,7 +97,21 @@ export function __resetHttpBackedChatOverrideForTesting(): void { cookieCache.clear(); } -// Helper to make Playwright waitForTimeout abortable via AbortSignal +async function withAbort(promise: Promise, signal?: AbortSignal | null): Promise { + if (!signal) return promise; + if (signal.aborted) throw new DOMException("Aborted", "AbortError"); + let abortListener: (() => void) | undefined; + const aborted = new Promise((_, reject) => { + abortListener = () => reject(new DOMException("Aborted", "AbortError")); + signal.addEventListener("abort", abortListener, { once: true }); + }); + try { + return await Promise.race([promise, aborted]); + } finally { + if (abortListener) signal.removeEventListener("abort", abortListener); + } +} + function waitWithSignal(ms: number, signal?: AbortSignal | null): Promise { return new Promise((resolve, reject) => { if (signal?.aborted) return reject(new DOMException("Aborted", "AbortError")); @@ -101,102 +124,51 @@ function waitWithSignal(ms: number, signal?: AbortSignal | null): Promise resolve(); }, ms); signal?.addEventListener("abort", onAbort, { once: true }); - }).catch((err) => { - if (err instanceof DOMException && err.name === "AbortError") throw err; }); } -export interface BrowserBackedChatRequest { - /** - * Pool key — typically a provider id like "duckduckgo-web" or - * "claude-web", optionally suffixed by user/account id if cookies - * differ. - */ - poolKey: string; - /** - * Chat URL the page should submit to. The page's `fetch` will hit - * this URL when the user clicks Send, and we capture the response. - */ - chatUrl: string; - /** - * Chat page URL to navigate to before typing. The page must already - * have its chat UI rendered for the input/button selectors to work. - */ - chatPageUrl: string; - /** - * The text the user wants to send. Combined with the model message - * prefix (e.g. "Reply with exactly: ...") so the user message is the - * literal text typed into the chat box. - */ - userMessage: string; - /** - * Cookie string (raw) to inject into the browser context. Used by - * Claude web (cookies from `docs/CLAUDE_COOKIE.md` or similar). - * For DDG this is empty — the browser is anonymous. - */ - cookieString?: string | null; - /** - * Cookie domain. Used together with cookieString. - */ - cookieDomain?: string; - /** - * Domain for the page's `fetch` to identify which path on the - * upstream is the chat endpoint. e.g. "duckduckgo.com" for DDG, - * "claude.ai" for Claude. - */ - chatUrlMatchDomain: string; - /** - * User-Agent string for the browser context. - */ - userAgent?: string; - /** - * Locale (BCP 47). Defaults to en-US. - */ - locale?: string; - /** - * IANA timezone. Defaults to America/New_York. - */ - timezone?: string; - /** - * Selector for the chat input. DDG uses `textarea` with the "Ask - * anything privately" placeholder; Claude uses a contenteditable - * div. Override per provider. - */ - inputSelector: string; - /** - * Selector for the submit button. If the page exposes one, click - * it. Otherwise the helper falls back to pressing Enter in the - * input. - */ - submitButtonSelector?: string; - /** - * Wait after submit for SSE/JSON to arrive. Default 15 seconds. - */ - postSubmitWaitMs?: number; - /** - * Optional AbortSignal. Cancels navigation/submit. - */ - signal?: AbortSignal | null; - /** - * Reuse the same context across requests when true. When false, a - * fresh context is opened each time (slower but bypasses - * per-context rate limits). Default true. - */ - reuseContext?: boolean; -} +async function uploadBrowserAttachments( + page: import("playwright").Page, + attachments: NonNullable, + chatUrlMatchDomain: string, + signal?: AbortSignal | null +): Promise { + if (attachments.length === 0) return; -export interface BrowserBackedChatResult { - status: number; - contentType: string | null; - body: Buffer; - isStealth: boolean; - timing: { - acquireContextMs: number; - navigateMs: number; - submitMs: number; - captureResponseMs: number; - totalMs: number; - }; + const fileInput = page.locator('input[type="file"]').first(); + await withAbort(fileInput.waitFor({ state: "attached", timeout: 10_000 }), signal); + + for (const attachment of attachments) { + const uploadResponsePromise = page.waitForResponse( + (response) => { + if (response.request().method() !== "POST") return false; + try { + const url = new URL(response.url()); + return ( + url.hostname.endsWith(chatUrlMatchDomain) && /\/api\/v1\/files\/?$/.test(url.pathname) + ); + } catch { + return false; + } + }, + { timeout: 30_000 } + ); + + const [uploadResponse] = await Promise.all([ + uploadResponsePromise, + fileInput.setInputFiles({ + name: attachment.name, + mimeType: attachment.mimeType, + buffer: attachment.buffer, + }), + ]); + if (!uploadResponse.ok()) { + throw new Error(`attachment upload returned HTTP ${uploadResponse.status()}`); + } + // Let the provider commit its uploaded-file state before another file or + // the chat submission is triggered. + await waitWithSignal(150, signal); + } } async function settlePoolKey( @@ -257,6 +229,8 @@ export async function browserBackedChat( chatPageUrl, userMessage, cookieString, + localStorage, + localStorageOrigin, cookieDomain, chatUrlMatchDomain, userAgent, @@ -264,6 +238,9 @@ export async function browserBackedChat( timezone, inputSelector, submitButtonSelector, + submitButtonMode = "playwright", + attachments = [], + beforeSubmit, postSubmitWaitMs = 15000, signal, reuseContext = true, @@ -274,6 +251,8 @@ export async function browserBackedChat( const pooled: PooledContext = await acquireBrowserContext(key, { cookieDomain: cookieDomain || chatUrlMatchDomain, cookieString: cookieString || null, + localStorage, + localStorageOrigin, warmupUrl: chatPageUrl, userAgent, locale, @@ -282,6 +261,18 @@ export async function browserBackedChat( const acquireContextMs = Date.now() - tAcquireStart; const page = await openPage(pooled); + const observedPostUrls: string[] = []; + page.on("request", (request) => { + if (request.method() !== "POST") return; + try { + const url = new URL(request.url()); + if (!url.hostname.endsWith(chatUrlMatchDomain)) return; + const sanitized = `${url.origin}${url.pathname}`; + if (!observedPostUrls.includes(sanitized)) observedPostUrls.push(sanitized); + } catch { + // Ignore malformed/non-HTTP request URLs. + } + }); try { const tNavStart = Date.now(); await page.goto(chatPageUrl, { @@ -292,8 +283,13 @@ export async function browserBackedChat( await waitWithSignal(2500, signal); const navigateMs = Date.now() - tNavStart; + if (beforeSubmit) { + await beforeSubmit(page); + } + await uploadBrowserAttachments(page, attachments, chatUrlMatchDomain, signal); + const inputLocator = page.locator(inputSelector).first(); - await inputLocator.waitFor({ state: "visible", timeout: 10000, signal: signal ?? undefined }); + await withAbort(inputLocator.waitFor({ state: "visible", timeout: 10000 }), signal); await inputLocator.fill(userMessage); await waitWithSignal(800, signal); @@ -318,7 +314,11 @@ export async function browserBackedChat( const btn = page.locator(submitButtonSelector).first(); if ((await btn.count()) > 0) { try { - await btn.click({ timeout: 2000 }); + if (submitButtonMode === "dom") { + await btn.evaluate((element) => (element as HTMLElement).click()); + } else { + await btn.click({ timeout: 2000 }); + } } catch { await page.keyboard.press("Enter"); } @@ -336,10 +336,13 @@ export async function browserBackedChat( signal.removeEventListener("abort", abortListener); } if (response) { - // Wait for the upstream SSE to finish streaming - await waitWithSignal(Math.min(postSubmitWaitMs, 30000), signal); - } else { - await waitWithSignal(postSubmitWaitMs, signal); + // Most provider streams finish well before the safety window. Return as + // soon as Playwright reports completion instead of always paying the + // full fixed delay before reading the already-buffered body. + await Promise.race([ + response.finished().then(() => undefined), + waitWithSignal(Math.min(postSubmitWaitMs, 30000), signal), + ]); } const captureResponseMs = Date.now() - tCaptureStart; const submitMs = captureResponseMs; @@ -373,6 +376,7 @@ export async function browserBackedChat( contentType, body, isStealth: pooled.isStealth, + observedPostUrls, timing: { acquireContextMs, navigateMs, @@ -397,6 +401,7 @@ export async function browserBackedChat( contentType: "application/json", body, isStealth: pooled.isStealth, + observedPostUrls, timing: { acquireContextMs, navigateMs: 0, diff --git a/open-sse/services/browserBackedChat/types.ts b/open-sse/services/browserBackedChat/types.ts new file mode 100644 index 0000000000..c90fb3b80e --- /dev/null +++ b/open-sse/services/browserBackedChat/types.ts @@ -0,0 +1,74 @@ +import type { Buffer } from "node:buffer"; +import type { Page } from "playwright"; + +export interface BrowserBackedChatRequest { + /** + * Pool key — typically a provider id, optionally suffixed by user/account id + * when browser state differs. + */ + poolKey: string; + /** Chat endpoint whose response should be captured after submission. */ + chatUrl: string; + /** Provider page to navigate to before entering the prompt. */ + chatPageUrl: string; + /** Literal text typed into the provider composer. */ + userMessage: string; + /** Raw cookies to inject into the browser context. */ + cookieString?: string | null; + /** Values injected into localStorage before the provider page initializes. */ + localStorage?: Record; + /** Origin whose localStorage receives the injected values. */ + localStorageOrigin?: string; + /** Cookie domain used with cookieString. */ + cookieDomain?: string; + /** Domain used to recognize the provider chat request. */ + chatUrlMatchDomain: string; + /** Browser User-Agent override. */ + userAgent?: string; + /** Browser locale (BCP 47). Defaults to en-US. */ + locale?: string; + /** Browser IANA timezone. Defaults to America/New_York. */ + timezone?: string; + /** Selector for the provider chat input. */ + inputSelector: string; + /** Optional selector for the provider submit button. */ + submitButtonSelector?: string; + /** + * Use a DOM click when an animated overlay makes coordinate-based + * actionability unreliable even though the provider button is enabled. + */ + submitButtonMode?: "playwright" | "dom"; + /** + * Optional in-memory files to attach through the provider page's native + * upload input before submission. + */ + attachments?: Array<{ + name: string; + mimeType: string; + buffer: Buffer; + }>; + /** Provider-specific UI configuration performed before prompt submission. */ + beforeSubmit?: (page: Page) => Promise; + /** Wait after submit for SSE/JSON to arrive. Default 15 seconds. */ + postSubmitWaitMs?: number; + /** Optional signal that cancels navigation and submission. */ + signal?: AbortSignal | null; + /** Reuse the same browser context across requests. Defaults to true. */ + reuseContext?: boolean; +} + +export interface BrowserBackedChatResult { + status: number; + contentType: string | null; + body: Buffer; + isStealth: boolean; + /** Sanitized POST targets observed while submitting. */ + observedPostUrls?: string[]; + timing: { + acquireContextMs: number; + navigateMs: number; + submitMs: number; + captureResponseMs: number; + totalMs: number; + }; +} diff --git a/open-sse/services/browserPool.ts b/open-sse/services/browserPool.ts index 205d771904..aca77e864a 100644 --- a/open-sse/services/browserPool.ts +++ b/open-sse/services/browserPool.ts @@ -33,6 +33,8 @@ type Page = import("playwright").Page; export interface BrowserPoolContextOptions { cookieDomain: string; cookieString?: string | null; + localStorage?: Record; + localStorageOrigin?: string; warmupUrl?: string | null; userAgent?: string; locale?: string; @@ -314,6 +316,38 @@ function settlePendingContext(key: string, failed: boolean): void { state.pendingContexts.delete(key); } +// Seed a freshly created context with whatever session material the caller +// supplied — cookies for cookie-auth providers, localStorage for the ones (zai-web) +// whose session is a Bearer JWT the page reads at boot. Kept as a leaf helper so +// the creation closure stays under the complexity ceiling. +async function seedContextSession( + context: BrowserContext, + options: BrowserPoolContextOptions +): Promise { + if (options.cookieString) { + const cookies = parseCookieString(options.cookieString, options.cookieDomain); + if (cookies.length > 0) { + await context.addCookies(cookies); + } + } + + if (!options.localStorage || Object.keys(options.localStorage).length === 0) return; + + const origin = new URL(options.localStorageOrigin || options.warmupUrl || "").origin; + await context.addInitScript( + ({ expectedOrigin, entries }) => { + if (window.location.origin !== expectedOrigin) return; + for (const [name, value] of entries) { + window.localStorage.setItem(name, value); + } + }, + { + expectedOrigin: origin, + entries: Object.entries(options.localStorage), + } + ); +} + export async function acquireBrowserContext( key: string, options: BrowserPoolContextOptions @@ -350,12 +384,7 @@ export async function acquireBrowserContext( ...(proxy ? { proxy } : {}), }); - if (options.cookieString) { - const cookies = parseCookieString(options.cookieString, options.cookieDomain); - if (cookies.length > 0) { - await context.addCookies(cookies); - } - } + await seedContextSession(context, options); let warmupPage: Page | null = null; if (options.warmupUrl) { diff --git a/open-sse/services/modelDeprecation.ts b/open-sse/services/modelDeprecation.ts index cf965abf34..4f38d68854 100644 --- a/open-sse/services/modelDeprecation.ts +++ b/open-sse/services/modelDeprecation.ts @@ -32,12 +32,6 @@ const BUILT_IN_ALIASES: Record = { "claude-3-5-sonnet-latest": "claude-sonnet-4-20250514", "claude-3-5-haiku-latest": "claude-3-5-sonnet-20241022", - // OpenAI legacy → current - "gpt-4-turbo-preview": "gpt-4-turbo", - "gpt-4-0125-preview": "gpt-4-turbo", - "gpt-4-1106-preview": "gpt-4-turbo", - "gpt-3.5-turbo-0125": "gpt-3.5-turbo", - // Kimi/Moonshot — Fireworks long-path aliases (#265) "accounts/fireworks/models/kimi-k2p5": "moonshotai/Kimi-K2.5", "fireworks/accounts/fireworks/models/kimi-k2p5": "moonshotai/Kimi-K2.5", @@ -70,10 +64,7 @@ const BUILT_IN_ALIASES: Record = { // root cause (both instances read/write one store), mirroring the #5312 pattern already // applied to thinkingBudget.ts and backgroundTaskDetector.ts (and systemPrompt.ts #2470). const CUSTOM_ALIASES_GLOBAL_KEY = "__omniroute_customAliases__"; -const _aliasStore = globalThis as unknown as Record< - string, - Record | undefined ->; +const _aliasStore = globalThis as unknown as Record | undefined>; function customAliases(): Record { if (!_aliasStore[CUSTOM_ALIASES_GLOBAL_KEY]) { diff --git a/open-sse/services/modelEndpointPolicy.ts b/open-sse/services/modelEndpointPolicy.ts new file mode 100644 index 0000000000..665149f124 --- /dev/null +++ b/open-sse/services/modelEndpointPolicy.ts @@ -0,0 +1,114 @@ +/** + * Provider model endpoint policy. + * + * Upstream `/models` responses often omit endpoint/modality metadata. In that + * case, specialty models can otherwise be imported as chat models simply + * because "chat" is OmniRoute's historical default. Keep the exceptional + * provider knowledge here so discovery, import, and catalog projection agree. + */ + +export type ModelEndpointKind = "chat" | "image" | "video" | "non-chat" | "unknown"; + +export type ModelEndpointDecision = { + kind: ModelEndpointKind; + chatSelectable: boolean; + reason: "explicit-endpoints" | "provider-policy" | "unclassified"; +}; + +type EndpointAwareModel = { + id: string; + supportedEndpoints?: readonly string[]; +}; + +const CHAT_ENDPOINTS = new Set([ + "chat", + "chat-completions", + "chat/completions", + "messages", + "responses", +]); +const IMAGE_ENDPOINTS = new Set(["image", "images", "images/generations"]); +const VIDEO_ENDPOINTS = new Set(["video", "videos", "videos/generations"]); + +function normalizeEndpoint(endpoint: string): string { + return endpoint.trim().toLowerCase().replace(/^\/+/, "").replace(/^v1\//, ""); +} + +function classifyExplicitEndpoints( + supportedEndpoints: readonly string[] | undefined +): ModelEndpointDecision | null { + if (!supportedEndpoints?.length) return null; + + const endpoints = supportedEndpoints.map(normalizeEndpoint).filter(Boolean); + if (endpoints.some((endpoint) => CHAT_ENDPOINTS.has(endpoint))) { + return { kind: "chat", chatSelectable: true, reason: "explicit-endpoints" }; + } + if (endpoints.some((endpoint) => IMAGE_ENDPOINTS.has(endpoint))) { + return { kind: "image", chatSelectable: false, reason: "explicit-endpoints" }; + } + if (endpoints.some((endpoint) => VIDEO_ENDPOINTS.has(endpoint))) { + return { kind: "video", chatSelectable: false, reason: "explicit-endpoints" }; + } + return { kind: "non-chat", chatSelectable: false, reason: "explicit-endpoints" }; +} + +function normalizeOpenAiModelId(modelId: string): string { + return modelId.startsWith("openai/") ? modelId.slice("openai/".length) : modelId; +} + +function classifyOpenAiModel(modelId: string): ModelEndpointDecision | null { + const normalized = normalizeOpenAiModelId(modelId).toLowerCase(); + if ( + normalized.startsWith("gpt-image-") || + normalized.startsWith("dall-e-") || + normalized === "chatgpt-image-latest" + ) { + return { kind: "image", chatSelectable: false, reason: "provider-policy" }; + } + if (normalized.startsWith("sora-")) { + return { kind: "video", chatSelectable: false, reason: "provider-policy" }; + } + return null; +} + +export function getModelEndpointDecision( + provider: string | null | undefined, + modelId: string, + supportedEndpoints?: readonly string[] +): ModelEndpointDecision { + const explicit = classifyExplicitEndpoints(supportedEndpoints); + if (provider?.trim().toLowerCase() === "openai") { + const openAiDecision = classifyOpenAiModel(modelId); + if (openAiDecision) { + // Old imported rows were persisted with `["chat"]` as a synthetic default + // even when upstream `/models` supplied no endpoint metadata. Do not let + // that default reclassify a known specialty model. A genuinely + // multi-endpoint model can opt in by explicitly naming both its specialty + // endpoint and a chat/Responses endpoint. + const normalizedEndpoints = supportedEndpoints?.map(normalizeEndpoint) ?? []; + const hasSpecialtyEndpoint = + openAiDecision.kind === "image" + ? normalizedEndpoints.some((endpoint) => IMAGE_ENDPOINTS.has(endpoint)) + : normalizedEndpoints.some((endpoint) => VIDEO_ENDPOINTS.has(endpoint)); + if (explicit?.chatSelectable && hasSpecialtyEndpoint) return explicit; + return openAiDecision; + } + } + + if (explicit) return explicit; + return { kind: "unknown", chatSelectable: true, reason: "unclassified" }; +} + +export function isChatSelectableModel( + provider: string | null | undefined, + model: EndpointAwareModel +): boolean { + return getModelEndpointDecision(provider, model.id, model.supportedEndpoints).chatSelectable; +} + +export function filterChatSelectableModels( + provider: string | null | undefined, + models: readonly T[] +): T[] { + return models.filter((model) => isChatSelectableModel(provider, model)); +} diff --git a/open-sse/services/modelFamilyFallback.ts b/open-sse/services/modelFamilyFallback.ts index 9411e0a2dc..5e80fe0d40 100644 --- a/open-sse/services/modelFamilyFallback.ts +++ b/open-sse/services/modelFamilyFallback.ts @@ -19,6 +19,7 @@ import { isResourceNotFoundResponse, } from "./errorClassifier.ts"; import { getRegistryEntry } from "../config/providerRegistry.ts"; +import { isModelSelectable } from "./modelLifecycle.ts"; // ── Model Family Definitions ───────────────────────────────────────────────── @@ -26,7 +27,7 @@ import { getRegistryEntry } from "../config/providerRegistry.ts"; * Ordered candidate lists per model family. * First entry is the most preferred; fallback proceeds in order. */ -const MODEL_FAMILIES: Record = { +const FAMILY_FALLBACK_TEMPLATES: Record = { // Gemini 3 / 3.1 Pro family — ordered by preference "gemini-3-pro": [ "gemini-3.1-pro-preview", @@ -96,10 +97,6 @@ const MODEL_FAMILIES: Record = { ], "claude-sonnet-4-6": ["claude-sonnet-4-5-20250929", "claude-sonnet-4-20250514"], "claude-sonnet-4-5-20250929": ["claude-sonnet-4-6", "claude-sonnet-4-20250514"], - - // GPT-5 family - "gpt-5": ["gpt-5-mini", "gpt-4o"], - "gpt-5.1": ["gpt-5.1-mini", "gpt-5", "gpt-4o"], }; // ── Error Detection ────────────────────────────────────────────────────────── @@ -119,21 +116,24 @@ const MODEL_UNAVAILABLE_FRAGMENTS = [ "this model does not exist", "invalid model", "model not supported", - "does not support", "not enabled for", "access to model", - "improperly formed request", // Kiro 400 (model unavailable) ]; /** * Returns true if the HTTP status + error message indicates the model * itself is not available, not a transient server error. */ -export function isModelUnavailableError(status: number, errorMessage: string): boolean { +export function isModelUnavailableError( + status: number, + errorMessage: string, + provider?: string | null +): boolean { if (status === 404) return !isResourceNotFoundResponse(errorMessage); if (status !== 400 && status !== 403) return false; const msg = errorMessage.toLowerCase(); + if (provider === "kiro" && msg.includes("improperly formed request")) return true; if (MODEL_UNAVAILABLE_FRAGMENTS.some((fragment) => msg.includes(fragment))) return true; return containsModelUnavailableMessage(errorMessage); } @@ -177,46 +177,88 @@ function resolveCandidateNotation(candidate: string, supportedIds: Set): return candidateNotationVariants(candidate).find((variant) => supportedIds.has(variant)) ?? null; } +function resolveFamilyContext(currentModel: string, providerHint?: string | null) { + const parsed = parseModel(currentModel); + const bareModel = parsed.model || currentModel; + const explicitProvider = parsed.provider || parsed.providerAlias || null; + const registryEntry = getRegistryEntry(explicitProvider || providerHint || ""); + if (!registryEntry) return null; + + const lookupKey = bareModel.replace(/\./g, "-"); + const family = + FAMILY_FALLBACK_TEMPLATES[lookupKey] ?? FAMILY_FALLBACK_TEMPLATES[bareModel] ?? null; + if (!family) return null; + + return { + bareModel, + family, + provider: registryEntry.id, + outputPrefix: explicitProvider ? `${registryEntry.id}/` : "", + supportedIds: new Set(registryEntry.models.map((model) => model.id)), + }; +} + +function wasCandidateTried( + candidateModel: string, + provider: string, + triedModels: Set +): boolean { + for (const attempted of triedModels) { + const parsed = parseModel(attempted); + const attemptedModel = parsed.model || attempted; + const attemptedProvider = parsed.provider || parsed.providerAlias || provider; + const registryEntry = getRegistryEntry(attemptedProvider); + if ( + (registryEntry?.id || attemptedProvider) === provider && + attemptedModel === candidateModel + ) { + return true; + } + } + return false; +} + +function resolveProviderFamilyCandidates( + currentModel: string, + providerHint?: string | null +): { provider: string; outputPrefix: string; candidates: string[] } | null { + const context = resolveFamilyContext(currentModel, providerHint); + if (!context) return null; + + const candidates: string[] = []; + for (const candidate of context.family) { + const resolvedCandidate = resolveCandidateNotation(candidate, context.supportedIds); + if (!resolvedCandidate) continue; + if (!isModelSelectable(context.provider, resolvedCandidate)) continue; + if (!candidates.includes(resolvedCandidate)) candidates.push(resolvedCandidate); + } + + return { + provider: context.provider, + outputPrefix: context.outputPrefix, + candidates, + }; +} + /** * Get the next fallback model from the same family. * * @param currentModel The model that just failed * @param triedModels Set of model IDs already tried (to avoid cycles) + * @param providerHint Current provider when currentModel is an unprefixed wire ID * @returns Next model to try, or null if family exhausted */ export function getNextFamilyFallback( currentModel: string, - triedModels: Set + triedModels: Set, + providerHint?: string | null ): string | null { - const parsed = parseModel(currentModel); - const bareModel = parsed.model || currentModel; - const provider = parsed.provider || parsed.providerAlias || ""; - const prefix = provider ? `${provider}/` : ""; + const resolved = resolveProviderFamilyCandidates(currentModel, providerHint); + if (!resolved) return null; - // Normalize dots to hyphens so kiro/claude-opus-4.8 finds the right entry. - // Fall back to the bare model name to support keys like "gemini-3.1-pro-high" - // whose dots are part of the literal name, not a version separator. - const lookupKey = bareModel.replace(/\./g, "-"); - const family = MODEL_FAMILIES[lookupKey] ?? MODEL_FAMILIES[bareModel]; - if (!family) return null; - - // Resolve the provider's supported model IDs so we can match notation (dot vs hyphen) - const registryEntry = provider ? getRegistryEntry(provider) : null; - const supportedIds = registryEntry ? new Set(registryEntry.models.map((m) => m.id)) : null; - - for (const candidate of family) { - let resolvedCandidate = candidate; - if (supportedIds && !supportedIds.has(candidate)) { - const match = resolveCandidateNotation(candidate, supportedIds); - // Provider catalog is known but this candidate has no match under any - // notation — it is provably unsupported, so skip it instead of - // returning an id the provider will just 400 on again. - if (!match) continue; - resolvedCandidate = match; - } - const fullCandidate = `${prefix}${resolvedCandidate}`; - if (!triedModels.has(fullCandidate)) { - return fullCandidate; + for (const candidate of resolved.candidates) { + if (!wasCandidateTried(candidate, resolved.provider, triedModels)) { + return `${resolved.outputPrefix}${candidate}`; } } @@ -226,24 +268,18 @@ export function getNextFamilyFallback( /** * Check if a model belongs to any registered family. */ -export function isInModelFamily(model: string): boolean { - const parsed = parseModel(model); - const bareModel = parsed.model || model; - return bareModel in MODEL_FAMILIES; +export function isInModelFamily(model: string, providerHint?: string | null): boolean { + const resolved = resolveProviderFamilyCandidates(model, providerHint); + return Boolean(resolved?.candidates.length); } /** * Get all members of a model's family (including itself). */ -export function getModelFamily(model: string): string[] { - const parsed = parseModel(model); - const bareModel = parsed.model || model; - const prefix = - parsed.provider || parsed.providerAlias ? `${parsed.provider || parsed.providerAlias}/` : ""; - - const family = MODEL_FAMILIES[bareModel]; - if (!family) return [model]; - return [model, ...family.map((c) => `${prefix}${c}`)]; +export function getModelFamily(model: string, providerHint?: string | null): string[] { + const resolved = resolveProviderFamilyCandidates(model, providerHint); + if (!resolved) return [model]; + return [model, ...resolved.candidates.map((candidate) => `${resolved.outputPrefix}${candidate}`)]; } /** @@ -252,10 +288,12 @@ export function getModelFamily(model: string): string[] { */ export function findLargerContextModel( currentModel: string, - availableModels: string[] + availableModels: string[], + providerHint?: string | null ): string | null { const currentParsed = parseModel(currentModel); - const currentProvider = currentParsed.provider || currentParsed.providerAlias || "unknown"; + const currentProvider = + currentParsed.provider || currentParsed.providerAlias || providerHint || "unknown"; const currentModelId = currentParsed.model || currentModel; const currentLimit = getModelContextLimit(currentProvider, currentModelId) ?? 0; @@ -265,7 +303,7 @@ export function findLargerContextModel( for (const candidate of availableModels) { if (candidate === currentModel) continue; const parsed = parseModel(candidate); - const provider = parsed.provider || parsed.providerAlias || "unknown"; + const provider = parsed.provider || parsed.providerAlias || providerHint || "unknown"; const modelId = parsed.model || candidate; const limit = getModelContextLimit(provider, modelId) ?? 0; diff --git a/open-sse/services/modelLifecycle.ts b/open-sse/services/modelLifecycle.ts new file mode 100644 index 0000000000..8efd93db7f --- /dev/null +++ b/open-sse/services/modelLifecycle.ts @@ -0,0 +1,217 @@ +/** + * Provider-scoped model lifecycle policy. + * + * Replacement model IDs are migration guidance only. This module never rewrites a + * request: shutdown models are rejected, deprecated models remain callable until + * their shutdown date, and untracked models pass through unchanged. + */ + +export const OPENAI_MODEL_DEPRECATIONS_URL = "https://developers.openai.com/api/docs/deprecations"; + +export type ModelLifecycleStatus = "untracked" | "deprecated" | "shutdown"; +export type ModelLifecycleAction = "allow" | "warn" | "reject"; +export type ModelLifecycleKind = + "audio" | "computer-use" | "deep-research" | "realtime" | "search" | "speech" | "text"; + +export type ModelLifecycleReplacement = { + provider: string; + model: string; + notes?: string; +}; + +export type ModelLifecycleRecord = { + provider: string; + model: string; + shutdownAt: string; + replacement: ModelLifecycleReplacement | null; + kind: ModelLifecycleKind; + source: string; +}; + +export type ModelLifecycleDecision = { + provider: string; + model: string; + status: ModelLifecycleStatus; + action: ModelLifecycleAction; + shutdownAt: string | null; + replacement: ModelLifecycleReplacement | null; + source: string | null; +}; + +const OPENAI_SOURCE = OPENAI_MODEL_DEPRECATIONS_URL; + +function openAiRecord( + model: string, + shutdownAt: string, + replacement: string | null, + kind: ModelLifecycleKind, + notes?: string +): ModelLifecycleRecord { + return { + provider: "openai", + model, + shutdownAt, + replacement: replacement + ? { + provider: "openai", + model: replacement, + ...(notes ? { notes } : {}), + } + : null, + kind, + source: OPENAI_SOURCE, + }; +} + +/** + * Unambiguous shutdowns from the official OpenAI deprecations page, verified + * 2026-07-26. The page lists gpt-4-1106-preview with conflicting shutdown dates, + * so that model is intentionally omitted until the upstream conflict is resolved. + */ +export const MODEL_LIFECYCLE_RECORDS: readonly ModelLifecycleRecord[] = Object.freeze([ + openAiRecord("computer-use-preview-2025-03-11", "2026-07-23", "gpt-5.6-terra", "computer-use"), + openAiRecord("computer-use-preview", "2026-07-23", "gpt-5.6-terra", "computer-use"), + openAiRecord("gpt-4o-mini-search-preview-2025-03-11", "2026-07-23", "gpt-5.6-terra", "search"), + openAiRecord("gpt-4o-search-preview-2025-03-11", "2026-07-23", "gpt-5.6-terra", "search"), + openAiRecord("gpt-4o-mini-tts-2025-03-20", "2026-07-23", "gpt-4o-mini-tts-2025-12-15", "speech"), + openAiRecord("gpt-5-chat-latest", "2026-07-23", "gpt-5.6-sol", "text"), + openAiRecord("gpt-5-codex", "2026-07-23", "gpt-5.6-sol", "text"), + openAiRecord("gpt-5.1-chat-latest", "2026-07-23", "gpt-5.6-sol", "text"), + openAiRecord("gpt-5.1-codex", "2026-07-23", "gpt-5.6-sol", "text"), + openAiRecord("gpt-5.1-codex-max", "2026-07-23", "gpt-5.6-sol", "text"), + openAiRecord("gpt-5.1-codex-mini", "2026-07-23", "gpt-5.6-terra", "text"), + openAiRecord("gpt-5.2-codex", "2026-07-23", "gpt-5.6-sol", "text"), + openAiRecord("o3-deep-research-2025-06-26", "2026-07-23", "gpt-5.6-sol", "deep-research"), + openAiRecord("o3-deep-research", "2026-07-23", "gpt-5.6-sol", "deep-research"), + openAiRecord("o4-mini-deep-research-2025-06-26", "2026-07-23", "gpt-5.6-sol", "deep-research"), + openAiRecord("o4-mini-deep-research", "2026-07-23", "gpt-5.6-sol", "deep-research"), + openAiRecord("gpt-audio-mini-2025-10-06", "2026-07-23", "gpt-audio-1.5", "audio"), + openAiRecord("gpt-realtime-mini-2025-10-06", "2026-07-23", "gpt-realtime-2.1-mini", "realtime"), + openAiRecord("gpt-5.2-chat-latest", "2026-08-10", "gpt-5.6-sol", "text"), + openAiRecord("gpt-5.3-chat-latest", "2026-08-10", "gpt-5.6-sol", "text"), + openAiRecord("gpt-3.5-turbo-0125", "2026-10-23", "gpt-5.6-terra", "text"), + openAiRecord("gpt-4-0314", "2026-03-26", null, "text"), + openAiRecord("gpt-4-0125-preview", "2026-03-26", null, "text"), + openAiRecord("gpt-4-turbo-preview", "2026-03-26", null, "text"), +]); + +const RECORDS_BY_KEY = new Map(); + +function lifecycleKey(provider: string, model: string): string { + return `${provider.trim().toLowerCase()}\0${model.trim()}`; +} + +for (const record of MODEL_LIFECYCLE_RECORDS) { + if (!/^\d{4}-\d{2}-\d{2}$/.test(record.shutdownAt)) { + throw new Error( + `Invalid model lifecycle shutdown date for ${record.provider}/${record.model}: ${record.shutdownAt}` + ); + } + const key = lifecycleKey(record.provider, record.model); + if (RECORDS_BY_KEY.has(key)) { + throw new Error(`Duplicate model lifecycle record: ${record.provider}/${record.model}`); + } + if (record.replacement) Object.freeze(record.replacement); + RECORDS_BY_KEY.set(key, Object.freeze(record)); +} + +function toTimestamp(asOf: Date | number | string): number { + const value = + asOf instanceof Date ? asOf.getTime() : typeof asOf === "number" ? asOf : Date.parse(asOf); + if (!Number.isFinite(value)) { + throw new TypeError(`Invalid model lifecycle date: ${String(asOf)}`); + } + return value; +} + +function shutdownTimestamp(shutdownAt: string): number { + return Date.parse(`${shutdownAt}T00:00:00.000Z`); +} + +export function getModelLifecycleDecision( + provider: string | null | undefined, + model: string | null | undefined, + asOf: Date | number | string = Date.now() +): ModelLifecycleDecision { + const normalizedProvider = typeof provider === "string" ? provider.trim().toLowerCase() : ""; + const normalizedModel = typeof model === "string" ? model.trim() : ""; + const record = RECORDS_BY_KEY.get(lifecycleKey(normalizedProvider, normalizedModel)); + + if (!record) { + return { + provider: normalizedProvider, + model: normalizedModel, + status: "untracked", + action: "allow", + shutdownAt: null, + replacement: null, + source: null, + }; + } + + const status = + toTimestamp(asOf) >= shutdownTimestamp(record.shutdownAt) ? "shutdown" : "deprecated"; + return { + provider: record.provider, + model: record.model, + status, + action: status === "shutdown" ? "reject" : "warn", + shutdownAt: record.shutdownAt, + replacement: record.replacement, + source: record.source, + }; +} + +export function formatModelLifecycleMessage(decision: ModelLifecycleDecision): string | null { + if (decision.status === "untracked") return null; + + const modelRef = `${decision.provider}/${decision.model}`; + const replacement = decision.replacement + ? ` Use "${decision.replacement.provider}/${decision.replacement.model}" instead.` + : ""; + if (decision.status === "shutdown") { + return `Model "${modelRef}" was shut down on ${decision.shutdownAt} and cannot be routed automatically.${replacement}`; + } + return `Model "${modelRef}" is deprecated and is scheduled to shut down on ${decision.shutdownAt}.${replacement}`; +} + +export function filterSelectableModels( + provider: string, + models: readonly T[], + { + asOf = Date.now(), + includeDeprecated = false, + includeShutdown = false, + }: { + asOf?: Date | number | string; + includeDeprecated?: boolean; + includeShutdown?: boolean; + } = {} +): T[] { + return models.filter((model) => + isModelSelectable(provider, model.id, { + asOf, + includeDeprecated, + includeShutdown, + }) + ); +} + +export function isModelSelectable( + provider: string, + model: string, + { + asOf = Date.now(), + includeDeprecated = false, + includeShutdown = false, + }: { + asOf?: Date | number | string; + includeDeprecated?: boolean; + includeShutdown?: boolean; + } = {} +): boolean { + const decision = getModelLifecycleDecision(provider, model, asOf); + if (decision.status === "deprecated") return includeDeprecated; + if (decision.status === "shutdown") return includeShutdown; + return true; +} diff --git a/open-sse/services/rateLimitManager.ts b/open-sse/services/rateLimitManager.ts index 8ab1b814b6..a58407194f 100644 --- a/open-sse/services/rateLimitManager.ts +++ b/open-sse/services/rateLimitManager.ts @@ -96,6 +96,7 @@ const PERSIST_DEBOUNCE_MS = 60_000; // Debounce persistence to every 60s max let initialized = false; let currentRequestQueueSettings: RequestQueueSettings = DEFAULT_RESILIENCE_SETTINGS.requestQueue; +export const ZAI_WEB_REQUEST_QUEUE_MAX_WAIT_MS = 60_000; const limiterEffectiveSettings = new WeakMap(); const preservedReplacementSettings = new Map(); @@ -154,6 +155,15 @@ function resolveMaxConcurrent(override: number | undefined | null): number { return typeof override === "number" && override > 0 ? override : EFFECTIVELY_INFINITE_CONCURRENCY; } +export function resolveRequestQueueMaxWaitMs( + provider: string, + configuredMaxWaitMs: number = currentRequestQueueSettings.maxWaitMs +): number { + return provider.trim().toLowerCase() === "zai-web" + ? Math.max(configuredMaxWaitMs, ZAI_WEB_REQUEST_QUEUE_MAX_WAIT_MS) + : configuredMaxWaitMs; +} + function buildLimiterDefaults() { // 0 or missing values mean "infinite" / no rate limit applies. This treats // the global request-queue settings the same way per-connection overrides @@ -531,18 +541,19 @@ export async function withRateLimit(provider, connectionId, model, fn, signal = // Proactive sliding-window fallback for header-less providers with a declared cap // (Fase 8.2). No-op unless PROVIDER_DEFAULT_RATE_LIMITS has an entry for `provider`. + const maxWaitMs = resolveRequestQueueMaxWaitMs(provider); await awaitProviderDefaultSlot( provider, connectionId, signal, - currentRequestQueueSettings.maxWaitMs + maxWaitMs ); const limiter = getLimiter(provider, connectionId, model); // Bottleneck's `expiration` starts only after a job leaves QUEUED. The // legacy maxWaitMs setting therefore bounds limiter-managed execution; it // is not a queue-wait deadline. - const executionExpirationMs = currentRequestQueueSettings.maxWaitMs; + const executionExpirationMs = maxWaitMs; const scheduleOpts = executionExpirationMs && executionExpirationMs > 0 ? { expiration: executionExpirationMs } : {}; diff --git a/open-sse/services/tokenExtractionConfig.ts b/open-sse/services/tokenExtractionConfig.ts index 761210c661..8ffc7af921 100644 --- a/open-sse/services/tokenExtractionConfig.ts +++ b/open-sse/services/tokenExtractionConfig.ts @@ -380,12 +380,11 @@ const RAW_CONFIGS: TokenExtractionConfig[] = [ // ── Z.ai Web (#4056) ──────────────────────────────────────── config( "zai-web", - "Z.ai Web (Free)", + "Z.ai Web", "https://chat.z.ai/", "https://chat.z.ai", - [{ type: "cookie", name: "token", domain: ".z.ai" }], - "Log in to Z.ai at chat.z.ai. The session token will be extracted.", - { cookieDomain: ".z.ai" } + [{ type: "localStorage", key: "token" }], + 'Log in to Z.ai at chat.z.ai. OmniRoute extracts the Local Storage value named "token"; chat CAPTCHA is handled by the browser transport.' ), ]; diff --git a/open-sse/services/tokenRefresh.ts b/open-sse/services/tokenRefresh.ts index aba42bfcd8..7e5e86be1a 100755 --- a/open-sse/services/tokenRefresh.ts +++ b/open-sse/services/tokenRefresh.ts @@ -7,9 +7,9 @@ // cross-provider plumbing. The provider-module split was originally proposed // by KooshaPari in PR #7338, whose base was too old to merge as-is; this is an // independent implementation of the same idea against the current tip, not a -// reuse of that diff. All previously-public exports are re-exported below so existing +// reuse of that diff. Supported provider refresh exports are re-exported below so // importers (open-sse/index.ts, executors, src/sse/services/tokenRefresh.ts, -// tests) are unaffected. +// tests) keep a stable surface. import { AsyncLocalStorage } from "node:async_hooks"; import { PROVIDERS } from "../config/constants.ts"; import { runWithProxyContext } from "../utils/proxyFetch.ts"; @@ -38,7 +38,6 @@ import { getCircuitBreakerStatus, refreshWithRetry, } from "./tokenRefresh/circuitBreaker.ts"; -import { refreshWindsurfToken } from "./tokenRefresh/providers/windsurf.ts"; import { refreshCodebuddyCnToken } from "./tokenRefresh/providers/codebuddyCn.ts"; import { refreshClineToken } from "./tokenRefresh/providers/cline.ts"; import { refreshKimiCodingToken } from "./tokenRefresh/providers/kimiCoding.ts"; @@ -55,7 +54,6 @@ import { refreshGitHubToken } from "./tokenRefresh/providers/github.ts"; import { refreshCopilotToken } from "./tokenRefresh/providers/copilot.ts"; export { - refreshWindsurfToken, refreshCodebuddyCnToken, refreshClineToken, refreshKimiCodingToken, @@ -414,15 +412,6 @@ async function _getAccessTokenInternal(provider, credentials, log, proxyConfig: proxyConfig ); - case "windsurf": - case "devin-cli": - return await refreshWindsurfToken( - credentials.refreshToken, - credentials.providerSpecificData, - log, - proxyConfig - ); - case "codebuddy-cn": return await refreshCodebuddyCnToken(credentials.refreshToken, log, proxyConfig); @@ -449,12 +438,11 @@ export function supportsTokenRefresh(provider) { "amazon-q", "cline", "kimi-coding", - "windsurf", - // #8407: do NOT list "devin-cli" here. It is import-token / local-CLI owned - // (`devin auth login`); connections never carry a refresh token. Leaving it - // in this set made tokenHealthCheck treat it as refresh-capable and force - // testStatus="expired" / errorCode="no_refresh_token". Keep it out of the - // explicit set (same idea as not listing non-refresh local-CLI providers). + // Devin auth is not refreshable here: devin-desktop accepts an imported API + // key (#8228), while devin-cli is local-CLI owned via `devin auth login` + // (#8407). Neither connection carries a refresh token, so listing either + // provider would make tokenHealthCheck force a healthy connection to + // testStatus="expired" / errorCode="no_refresh_token". "gitlab-duo", "codebuddy-cn", ]); diff --git a/open-sse/services/tokenRefresh/providers/windsurf.ts b/open-sse/services/tokenRefresh/providers/windsurf.ts deleted file mode 100644 index 0ac8c51218..0000000000 --- a/open-sse/services/tokenRefresh/providers/windsurf.ts +++ /dev/null @@ -1,121 +0,0 @@ -// @ts-nocheck -// Extracted from open-sse/services/tokenRefresh.ts — see ../shared.ts for -// provenance notes (ported idea from KooshaPari's PR #7338, redone on tip). -import { runWithProxyContext } from "../../../utils/proxyFetch.ts"; -import { WINDSURF_CONFIG } from "@/lib/oauth/constants/oauth"; -import { buildFormParams, type RefreshLogger } from "../shared.ts"; - -/** - * Refresh Windsurf (Devin CLI / Codeium) tokens. - * - * Windsurf uses Firebase Secure Token Service (STS) for token refresh. - * If the token is a long-lived Codeium API key (import flow), it never - * expires and refresh is a no-op returning the same token. - * If the token is a Firebase ID token (device-code flow), it expires after - * ~1 hour and can be refreshed with the stored Firebase refresh token. - */ -export async function refreshWindsurfToken( - refreshToken: string, - providerSpecificData: Record | null | undefined, - log: RefreshLogger, - proxyConfig: unknown = null -) { - if (!refreshToken) { - log?.warn?.( - "TOKEN_REFRESH", - "No refresh token stored for Windsurf — token may be a long-lived API key" - ); - return null; - } - - const authMethod = (providerSpecificData?.authMethod as string) || "import"; - - // Long-lived Codeium API keys (import flow) have no expiry — nothing to refresh. - if (authMethod === "import") { - log?.debug?.("TOKEN_REFRESH", "Windsurf import token is long-lived — no refresh needed"); - return null; - } - - // Firebase STS refresh for browser-flow tokens. - // Resolves via WINDSURF_CONFIG.firebaseApiKey, which honors the - // WINDSURF_FIREBASE_API_KEY env override and falls back to the embedded - // public default in publicCreds.ts. See docs/security/PUBLIC_CREDS.md. - const firebaseApiKey = WINDSURF_CONFIG.firebaseApiKey || ""; - if (!firebaseApiKey) { - log?.warn?.( - "TOKEN_REFRESH", - "Windsurf Firebase API key unavailable — skipping Firebase token refresh" - ); - return null; - } - const tokenUrl = `https://securetoken.googleapis.com/v1/token?key=${firebaseApiKey}`; - - try { - const response = await runWithProxyContext(proxyConfig, () => - fetch(tokenUrl, { - method: "POST", - headers: { "Content-Type": "application/x-www-form-urlencoded" }, - body: buildFormParams({ grant_type: "refresh_token", refresh_token: refreshToken }), - }) - ); - - if (!response.ok) { - const errorText = await response.text(); - log?.error?.("TOKEN_REFRESH", "Failed to refresh Windsurf Firebase token", { - status: response.status, - error: errorText.slice(0, 200), - }); - - // Firebase STS returns structured errors. Detect unrecoverable token states. - try { - const fbError = JSON.parse(errorText); - const fbCode = - typeof fbError?.error?.message === "string" - ? fbError.error.message - : typeof fbError?.error === "string" - ? fbError.error - : null; - if ( - typeof fbCode === "string" && - (fbCode.includes("USER_DISABLED") || - fbCode.includes("TOKEN_EXPIRED") || - fbCode.includes("INVALID_REFRESH_TOKEN") || - fbCode.includes("USER_NOT_FOUND")) - ) { - log?.error?.( - "TOKEN_REFRESH", - "Windsurf Firebase token is permanently invalid. Re-authentication required.", - { - fbCode, - } - ); - return { error: "unrecoverable_refresh_error", code: fbCode }; - } - } catch { - // not JSON — fall through - } - - return null; - } - - const data = await response.json(); - const expiresIn = parseInt(data.expires_in ?? "3600", 10); - - log?.info?.("TOKEN_REFRESH", "Successfully refreshed Windsurf Firebase token", { - expiresIn, - hasNewIdToken: !!data.id_token, - }); - - return { - accessToken: data.id_token, - refreshToken: data.refresh_token || refreshToken, - expiresIn, - }; - } catch (error) { - log?.error?.( - "TOKEN_REFRESH", - `Network error refreshing Windsurf token: ${error instanceof Error ? error.message : String(error)}` - ); - return null; - } -} diff --git a/open-sse/services/zaiWebCredentials.ts b/open-sse/services/zaiWebCredentials.ts new file mode 100644 index 0000000000..94a1682458 --- /dev/null +++ b/open-sse/services/zaiWebCredentials.ts @@ -0,0 +1,10 @@ +/** + * Service boundary for Z.ai web-cookie credential parsing. + * + * `extractZaiToken` is pure credential parsing, not request execution, but it lives in + * `executors/zai-web/protocol.ts` alongside the transport it was written for. App routes + * and `src/lib` consumers must not import from `open-sse/executors/**` (G14 import + * boundary — see EXECUTOR_IMPORT_RESTRICTION in eslint.config.mjs), so they go through + * this service instead of reaching into the executor tree. + */ +export { extractZaiToken } from "../executors/zai-web/protocol.ts"; diff --git a/open-sse/utils/publicCreds.ts b/open-sse/utils/publicCreds.ts index a5288ff738..6d1e005b1d 100644 --- a/open-sse/utils/publicCreds.ts +++ b/open-sse/utils/publicCreds.ts @@ -1,16 +1,12 @@ /** * Public credentials decoder. * - * Some upstream providers (Gemini, Antigravity, Windsurf/Devin CLI) ship - * OAuth client_id / client_secret / Firebase Web API key values inside their - * public binaries or web apps. These are credentials by name only — Google - * explicitly documents that: - * - * - OAuth client_id/secret for native/installed apps using PKCE are - * publicly distributed and must not be treated as secrets. - * https://developers.google.com/identity/protocols/oauth2/native-app - * - Firebase Web API keys are public client identifiers. - * https://firebase.google.com/docs/projects/api-keys + * Some upstream providers (including Gemini and Antigravity) ship OAuth + * client_id / client_secret values inside their public binaries or web apps. + * These are credentials by name only: OAuth client credentials for + * native/installed apps using PKCE are publicly distributed and must not be + * treated as secrets. + * https://developers.google.com/identity/protocols/oauth2/native-app * * OmniRoute embeds them so users who do not configure `.env` still get a * working OAuth flow out of the box. The literals, however, trip pattern @@ -23,10 +19,9 @@ * which is fine because the value is public by design. The only goal is to * avoid known scanner regexes in the source text. * - * Backward compatibility: existing users have raw values in their `.env` - * (e.g. `WINDSURF_FIREBASE_API_KEY=AIzaSy...`). `decodePublicCred()` detects - * raw values by their well-known prefixes and passes them through unchanged, - * so no migration is required for current installations. + * Backward compatibility: `decodePublicCred()` detects raw values by their + * well-known prefixes and passes them through unchanged, so existing env + * overrides do not require migration. */ const MASK = "omniroute-public-v1"; @@ -150,11 +145,6 @@ const EMBEDDED_DEFAULTS = { 40, 34, 45, 58, 34, 55, 88, 63, 80, 21, 54, 34, 48, 88, 81, 85, 97, 18, 125, 37, 92, 3, 37, 48, 87, 6, 44, 38, 25, 10, 67, 19, 40, 40, 5, ], - // Windsurf / Devin CLI — firebase web client identifier (public) - windsurf_fb: [ - 46, 36, 20, 8, 33, 22, 55, 4, 41, 121, 53, 50, 49, 24, 92, 90, 108, 35, 97, 36, 21, 44, 11, 69, - 3, 60, 35, 15, 126, 53, 71, 56, 52, 56, 43, 26, 27, 86, 58, - ], // Claude Code CLI — anthropic oauth client (public, PKCE) claude_id: [ 86, 9, 95, 10, 64, 90, 69, 21, 72, 72, 70, 68, 0, 65, 93, 87, 73, 79, 28, 87, 85, 11, 13, 95, diff --git a/open-sse/utils/streamHandler.ts b/open-sse/utils/streamHandler.ts index 809c93ac55..f77c2ac539 100644 --- a/open-sse/utils/streamHandler.ts +++ b/open-sse/utils/streamHandler.ts @@ -168,6 +168,13 @@ function getErrorMessage(error: unknown): string { } function getErrorStatusCode(error: unknown): number { + const errorName = + error && typeof error === "object" && typeof (error as { name?: unknown }).name === "string" + ? (error as { name: string }).name + : ""; + if (errorName === "TimeoutError" || errorName === "BodyTimeoutError") { + return 504; + } if (error && typeof error === "object" && "statusCode" in error) { const statusCode = Number((error as { statusCode?: unknown }).statusCode); if (Number.isFinite(statusCode) && statusCode >= 400 && statusCode <= 599) { @@ -177,6 +184,13 @@ function getErrorStatusCode(error: unknown): number { return 502; } +function isDeadlineAbortReason(reason: unknown): reason is Error { + return ( + reason instanceof Error && + (reason.name === "TimeoutError" || reason.name === "BodyTimeoutError") + ); +} + function hasClientTerminalSseMarker(text: string, clientResponseFormat?: string | null): boolean { if (/(?:^|\r?\n)data:\s*\[DONE\]\s*(?:\r?\n|$)/.test(text)) { return true; @@ -369,6 +383,15 @@ export function createStreamController({ if (clientAbortSignal && typeof clientAbortSignal.addEventListener === "function") { const handleClientAbort = () => { + const reason = clientAbortSignal.reason; + if (isDeadlineAbortReason(reason)) { + // An AbortSignal can represent an OmniRoute-owned deadline as well as + // a caller disconnect. Preserve deadline failures as 504; classifying + // them as client disconnects writes a misleading 499 to the call log. + abortController.abort(reason); + controller.handleError(reason); + return; + } controller.handleDisconnect(getClientAbortReason()); }; if (clientAbortSignal.aborted) { diff --git a/open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/environment.ts b/open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/environment.ts index 8d08b40472..3241be9ed4 100644 --- a/open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/environment.ts +++ b/open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/environment.ts @@ -237,12 +237,15 @@ function trustedEnvironmentText(parsed: CodexParsedRequest): string { } function decodeXmlText(value: string): string { + // `&` MUST be decoded last: decoding it first produces a bare `&` that the + // later passes re-consume, so `&quot;` would collapse to `"` instead of the + // literal `"` (double-unescape — CodeQL js/double-escaping). return value .replaceAll("<", "<") .replaceAll(">", ">") - .replaceAll("&", "&") .replaceAll(""", '"') - .replaceAll("'", "'"); + .replaceAll("'", "'") + .replaceAll("&", "&"); } function uniqueAbsolutePaths(values: string[], field: string): string[] { diff --git a/package.json b/package.json index 7691c1a1c3..e89911492c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "omniroute", "version": "3.8.50", - "description": "Unified AI router with 291 providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.", + "description": "Unified AI router with 338 providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.", "type": "module", "bin": { "omniroute": "bin/omniroute.mjs", @@ -215,6 +215,7 @@ "typecheck:noimplicit:core": "tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json", "check:dashboard-typecheck": "node scripts/check/check-dashboard-typecheck.mjs", "check:open-sse-typecheck": "node scripts/check/check-open-sse-typecheck.mjs", + "check:ts7-diagnostics-ratchet": "node scripts/check/check-ts7-diagnostics-ratchet.mjs", "backfill-aggregation": "node --import tsx src/scripts/backfillAggregation.ts", "env:sync": "node scripts/dev/sync-env.mjs", "test:integration": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"", diff --git a/perf-audit-report.md b/perf-audit-report.md deleted file mode 100644 index 12009d62be..0000000000 --- a/perf-audit-report.md +++ /dev/null @@ -1,89 +0,0 @@ -# OmniRoute Performance Audit — Phase 3 Report - -## Measured data - -| Metric | Value | -|--------|-------| -| Cold-start open-sse module load | **2,317ms** (first import) | -| proxyFallback.ts import cost | **210ms** (SQLite init + undici re-import) | -| proxyDispatcher.ts import cost | **69ms** | -| Handlers/streaming code | **686ms** | -| Services (token refresh, etc.) | **172ms** | -| Provider registry (211 files, 1.7MB) | **<5ms** (per-file lazy) | -| Provider constants lazy Proxy | **0.24ms** (first access) | -| Provider models lazy Proxy | **0.17ms** (first access) | -| Static provider imports (eager) | **~201 files** (module eval, ~200–500ms I/O) | -| Executor singletons at module level | **42** | -| Module-level `setInterval` timers | **24** (many NOT `unref()`-ed) | -| Polyfill/global-patch operations | **5+** | -| DB size | 1.4GB+, usage_history 250K+ rows | -| SQLite cache_size | 16MB (conservative) | -| mmap_size in settings | 256MB (never applied as PRAGMA — **now fixed**) | -| Per-chunk transform layers | 2–5 `pipeThrough()` calls | -| Chunk transform GC pressure | Moderate (structuredClone removed, TextDecoder lifted) | -| Upstream HTTP | undici 3‑tier dispatcher (well‑pooled) | -| Sync DB writes post-streaming | #1 bottleneck: saveRequestUsage + saveCallLog block event loop | - -## Ranked findings (effort × impact) - -### Implemented in this PR - -| # | Finding | Impact | Effort | Fix | -|---|---------|--------|--------|-----| -| 1 | 🔴 **Proxy fallback loaded eagerly at startup** | **210ms** on first import | Low | Dynamic `import()` in proxyFetch.ts error handler | -| 2 | 🔴 **egressCache memory leak** (never evicts) | HIGH — unbounded growth | Very Low | Lazy TTL cleanup on `getCachedEgressIp` | -| 3 | 🔴 **Missing composite index: usage_history(provider, model, timestamp)** | HIGH — full scan on `getModelLatencyStats` | Very Low | `CREATE INDEX IF NOT EXISTS …` in schemaColumns.ts | -| 4 | 🔴 **Missing composite index: provider_connections(provider, auth_type)** | HIGH — full scan on 6+ queries | Very Low | `CREATE INDEX IF NOT EXISTS …` in schemaColumns.ts | -| 5 | 🔴 **mmap_size PRAGMA never applied** | HIGH — 256MB setting stored but unused | Very Low | PRAGMA applied after `applyStoredDatabaseOptimizationSettings` | - -### Already in PR #7893 (pre-Phase 1) - -| # | Finding | Impact | Effort | -|---|---------|--------|--------| -| 6 | 🔴 **Startup serialization** | 500+ms serial blocking (early imports + background services) | Low → wrapped in Promise.all / Promise.allSettled | -| 7 | 🟡 **Per-chunk structuredClone in createSSEStream** | GC pressure on every chunk | Low → replaced with minimal object spread | -| 8 | 🟡 **Per-chunk `new TextDecoder()` in progressTracker** | Minor GC churn | Very Low → module-level const | -| 9 | 🟡 **P2C quota re-evaluated per comparison (exponential blowup)** | N² work on each pool filter | Medium → Map cache threaded through pipeline | -| 10 | 🟡 **Dual `.filter()` passes in selectPoolSubset** | Double iteration on active set | Very Low → single `for` loop | -| 11 | 🟢 **Debug-loop re-filters 6 function calls** | No-op in production | Very Low → Map-based string comparisons | -| 12 | 🟢 **Backoff decay loop uses full CRUD update** | SELECT+encrypt+invalidate per unused connection | Low → targeted `resetConnectionBackoff` | -| 13 | 🟢 **Lazy PROVIDERS/PROVIDER_MODELS** | Startup saving per lazy Proxy 0.2ms | Low → Proxy on constants.ts + providerModels.ts | -| 14 | 🟢 **TextEncoder lift (claude-web.ts)** | Eliminates per-chunk instances | Low → module-level encoder | -| 15 | 🟢 **13 route files `getSettings()` → `getCachedSettings()`** | Avoids redundant decrypts | Low → import swap | -| 16 | 🟢 **settingsCache.ts dead file deletion** | Cleanup | Very Low → removed | - -### Future opportunities (not yet implemented) - -| # | Finding | Impact | Effort | Priority | -|---|---------|--------|--------|----------| -| 17 | 🔴 **`saveRequestUsage` dedup guard uses COALESCE on indexed columns** | FULL TABLE SCAN on every request completion | Medium | **NEXT** | -| 18 | 🔴 **24 module-level `setInterval` timers (many NOT `unref()`-ed)** | Prevent process exit + 2μs/call overhead | Low | Soon | -| 19 | 🔴 **`providerFallback.ts` (2nd path via proxyAutoSelector→transport→validation)** | 210ms but already lazy (route handlers only) | Low | Bonded | -| 20 | 🟡 **Sync DB writes block event loop after every stream** | saveRequestUsage + saveCallLog serialize through single-writer lock | High | Candidate for worker_thread | -| 21 | 🟡 **DB cache_size conservate (16MB)** | For 1.4GB DB, increases page reads | Very Low | PRAGMA change | -| 22 | 🟡 **Enable Redis for auth cache + quota store** | Offloads SQLite read/write pressure | Low | Config change + doc | -| 23 | 🟡 **DashboardLayout is `"use client"` with 7+ heavy children** | Entire dashboard forced to client render | High | Structural layout split | -| 24 | 🟢 **mermaid (84MB unused in src/) in dependencies** | Install bloat, not server-side cost | Very Low | Move to devDeps | -| 25 | 🟢 **3 duplicated deps in root + open-sse** | Redundant install | Very Low | Deduplicate | -| 26 | 🟡 **`SELECT *` unbounded in `getUsageHistory` (admin API)** | Risks scan of 250K+ rows | Low | Add LIMIT | -| 27 | 🟢 **Sync `readFileSync` at module eval in config loading** | Blocks event-loop-startup once | Very Low | Could defer | -| 28 | 🟡 **SetInterval timers: confirm all `unref()`-ed for remaining** | ~12 without `unref()` prevent clean exit | Low | Audit + fix | - -## Status summary - -| Category | Status | -|----------|--------| -| PR #7893 (original 16 optimizations) | **OPEN** — all core changes verified | -| Phase 1 tangible wins (5 items) | **Implemented** — uncommitted | -| Phase 2 EventLoopHealth | **Completed** — hot path is clean, timers need `unref()` | -| Phase 2 RequestTrace | **Not completed** (agent lost on session boundary) | -| Phase 2 TransitiveDeps | **Not completed** (agent lost on session boundary) | -| Phase 3 Report | **This document** | - -## Recommended next actions - -1. **Commit Phase 1 wins** (egressCache, mmap_size, indexes, proxyFallback lazy) → push to PR #7893 -2. **Complete #17** — fix `COALESCE` defeating index in `saveRequestUsage` dedup guard -3. **Complete #18** — add `unref()` to all 24 module-level `setInterval` timers -4. **Complete #21** — bump `cache_size` PRAGMA to 64-128MB -5. **Document Redis configuration** for auth cache + quota store offload diff --git a/quality-ratchet/quality-ratchet.md b/quality-ratchet/quality-ratchet.md deleted file mode 100644 index 1d59da5ada..0000000000 --- a/quality-ratchet/quality-ratchet.md +++ /dev/null @@ -1,62 +0,0 @@ -# Quality Ratchet - -| Métrica | Baseline | Atual | Status | -| ----------------------------------------------------------------- | -------- | ----- | --------------------- | -| eslintWarnings | 0 | 0 | ok | -| eslintErrors | 0 | 0 | ok | -| coverage.statements | 80.8 | — | SKIP (ausente) | -| coverage.lines | 80.8 | — | SKIP (ausente) | -| coverage.functions | 86.42 | — | SKIP (ausente) | -| coverage.branches | 78.1 | — | SKIP (ausente) | -| coverage.chatCore.lines | 72.45 | — | SKIP (ausente) | -| coverage.combo.lines | 85.42 | — | SKIP (ausente) | -| coverage.accountFallback.lines | 96.78 | — | SKIP (ausente) | -| coverage.auth.lines | 92.55 | — | SKIP (ausente) | -| coverage.routeGuard.lines | 98.73 | — | SKIP (ausente) | -| coverage.error.lines | 92.13 | — | SKIP (ausente) | -| coverage.publicCreds.lines | 99.07 | — | SKIP (ausente) | -| coverage.circuitBreaker.lines | 95.09 | — | SKIP (ausente) | -| openapiCoverage.pct | 38 | 38 | ok | -| i18nUiCoverage.pct | 99 | 99 | ok | -| deadExports | 227 | — | SKIP (dedicated gate) | -| cognitiveComplexity | 1223 | — | SKIP (dedicated gate) | -| typeCoveragePct | 92.17 | — | SKIP (dedicated gate) | -| codeqlAlerts | 0 | — | SKIP (dedicated gate) | -| secretFindings | 0 | — | SKIP (dedicated gate) | -| zizmorFindings | 190 | — | SKIP (dedicated gate) | -| vulnCount | 10 | — | SKIP (dedicated gate) | -| bundleSize | 7666 | — | SKIP (dedicated gate) | -| openapiBreaking | 0 | — | SKIP (dedicated gate) | -| mutationScore.src/sse/services/auth.ts | 52.57 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/services/accountFallback.ts | 68.38 | — | SKIP (dedicated gate) | -| mutationScore.src/server/authz/routeGuard.ts | 76.08 | — | SKIP (dedicated gate) | -| mutationScore.src/shared/utils/circuitBreaker.ts | 56.94 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/utils/error.ts | 43.83 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/utils/publicCreds.ts | 59.76 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/services/combo/autoStrategy.ts | 41.33 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/services/combo/comboStructure.ts | 57.82 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/services/combo/validateQuality.ts | 61.33 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/services/combo/comboPredicates.ts | 56.62 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/services/combo/rrState.ts | 70.88 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/services/combo/shadowRouting.ts | 48 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/services/combo/targetSorters.ts | 68.3 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/services/combo/comboData.ts | 76.94 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/services/combo/quotaScoring.ts | 39.73 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/services/combo/quotaStrategies.ts | 50.3 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/handlers/chatCore/passthroughHelpers.ts | 80.89 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/handlers/chatCore/sanitization.ts | 70.15 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/handlers/chatCore/upstreamTimeouts.ts | 33 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/handlers/chatCore/comboContextCache.ts | 13.62 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/handlers/chatCore/idempotency.ts | 42.82 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/handlers/chatCore/responseHeaders.ts | 62.7 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/handlers/chatCore/executorHelpers.ts | 70.39 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/handlers/chatCore/memoryExtraction.ts | 62.06 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/handlers/chatCore/nonStreamingSse.ts | 72.82 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/handlers/chatCore/passthroughToolNames.ts | 66.42 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/handlers/chatCore/headers.ts | 94.29 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/handlers/chatCore/logTruncation.ts | 77.64 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/handlers/chatCore/memorySkillsInjection.ts | 13.49 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/handlers/chatCore/semanticCache.ts | 60.16 | — | SKIP (dedicated gate) | -| mutationScore.open-sse/handlers/chatCore/telemetryHelpers.ts | 83.18 | — | SKIP (dedicated gate) | - -**Sem regressões — gate OK.** diff --git a/scripts/ad-hoc/delete-non-green-runs.mjs b/scripts/ad-hoc/delete-non-green-runs.mjs deleted file mode 100644 index 298c752dc2..0000000000 --- a/scripts/ad-hoc/delete-non-green-runs.mjs +++ /dev/null @@ -1,26 +0,0 @@ -import { execSync } from "child_process"; - -try { - console.log("Fetching workflow runs..."); - const output = execSync("gh run list --limit 100 --json status,conclusion,databaseId", { - encoding: "utf8", - }); - const runs = JSON.parse(output); - - console.log(`Found ${runs.length} runs.`); - let count = 0; - for (const run of runs) { - if (run.conclusion !== "success") { - console.log(`Deleting run ID ${run.databaseId} with conclusion '${run.conclusion}'...`); - try { - execSync(`gh run delete ${run.databaseId}`); - count++; - } catch (err) { - console.error(`Failed to delete run ID ${run.databaseId}:`, err.message); - } - } - } - console.log(`Deleted ${count} runs successfully.`); -} catch (error) { - console.error("Error executing script:", error); -} diff --git a/scripts/ad-hoc/fetch_prs.js b/scripts/ad-hoc/fetch_prs.js deleted file mode 100644 index 1418b45371..0000000000 --- a/scripts/ad-hoc/fetch_prs.js +++ /dev/null @@ -1,58 +0,0 @@ -import { execSync } from "child_process"; -import fs from "fs"; -import path from "path"; - -const REPO = "diegosouzapw/OmniRoute"; -const artifactsDir = - process.env.ARTIFACTS_DIR || - path.join(process.cwd(), "artifacts"); - -async function main() { - try { - // 1. Get PR numbers - console.log("Fetching open PR numbers..."); - const prNumbersOutput = execSync( - `gh pr list --repo ${REPO} --state open --limit 500 --json number --jq '.[].number'`, - { encoding: "utf-8" } - ); - const prNumbers = prNumbersOutput.trim().split("\n").map(Number).filter(Boolean); - console.log(`Found ${prNumbers.length} open PRs:`, prNumbers); - - if (!fs.existsSync(artifactsDir)) { - fs.mkdirSync(artifactsDir, { recursive: true }); - } - - // 2. Fetch metadata and diff for each PR - for (const prNum of prNumbers) { - console.log(`\n--- Fetching PR #${prNum} ---`); - - // Metadata - try { - const metadataCmd = `gh pr view ${prNum} --repo ${REPO} --json number,title,author,headRefName,baseRefName,body,createdAt,additions,deletions,files`; - const metadataJson = execSync(metadataCmd, { encoding: "utf-8" }); - const metadataPath = path.join(artifactsDir, `pr_${prNum}_meta.json`); - fs.writeFileSync(metadataPath, metadataJson); - console.log(`Saved metadata to ${metadataPath}`); - } catch (err) { - console.error(`Failed to fetch metadata for PR #${prNum}:`, err.message); - } - - // Diff - try { - const diffCmd = `gh pr diff ${prNum} --repo ${REPO}`; - const diffText = execSync(diffCmd, { encoding: "utf-8", maxBuffer: 100 * 1024 * 1024 }); - const diffPath = path.join("/tmp", `pr${prNum}.diff`); - fs.writeFileSync(diffPath, diffText); - console.log(`Saved diff to ${diffPath} (Size: ${diffText.length} bytes)`); - } catch (err) { - console.error(`Failed to fetch diff for PR #${prNum}:`, err.message); - } - } - - console.log("\nAll PR data fetched successfully!"); - } catch (error) { - console.error("Error during PR fetching:", error); - } -} - -main(); diff --git a/scripts/ad-hoc/resolve_all_conflicts.js b/scripts/ad-hoc/resolve_all_conflicts.js deleted file mode 100644 index bf597c8c71..0000000000 --- a/scripts/ad-hoc/resolve_all_conflicts.js +++ /dev/null @@ -1,280 +0,0 @@ -import fs from "fs"; -import { execSync } from "child_process"; -import path from "path"; - -const projectRoot = process.env.PROJECT_ROOT || process.cwd(); - -const filesToCheckoutOurs = [ - ".source/browser.ts", - ".source/server.ts", - "package-lock.json", - "electron/package-lock.json", - "src/app/(dashboard)/dashboard/providers/[id]/page.tsx", - "src/app/(dashboard)/dashboard/providers/components/ProviderCard.tsx", - "src/lib/db/contextHandoffs.ts", - "src/app/api/keys/groups/[id]/keys/route.ts", - "src/app/api/keys/groups/[id]/permissions/route.ts", - "src/app/api/keys/groups/[id]/route.ts", - "src/app/api/keys/groups/route.ts", - "src/app/api/middleware/hooks/[name]/route.ts", - "src/app/api/middleware/hooks/route.ts", - "src/app/api/relay/tokens/[id]/route.ts", - "src/app/api/relay/tokens/route.ts", - "src/app/api/playground/simulate-route/route.ts", -]; - -function runCmd(cmd) { - console.log(`Running: ${cmd}`); - return execSync(cmd, { cwd: projectRoot, encoding: "utf-8" }); -} - -async function main() { - // 1. Checkout ours for the files where HEAD is the preferred up-to-date state - for (const file of filesToCheckoutOurs) { - try { - runCmd(`git checkout --ours "${file}"`); - runCmd(`git add "${file}"`); - } catch (err) { - console.error(`Failed to checkout --ours for ${file}:`, err.message); - } - } - - // 2. Resolve .dockerignore (keep release/v3.8.4 doc rules) - try { - runCmd("git checkout --theirs .dockerignore"); - runCmd("git add .dockerignore"); - } catch (err) { - console.error("Failed to resolve .dockerignore:", err.message); - } - - // 3. Resolve docs/reference/ENVIRONMENT.md (keep release/v3.8.4 table formatting) - try { - runCmd("git checkout --theirs docs/reference/ENVIRONMENT.md"); - runCmd("git add docs/reference/ENVIRONMENT.md"); - } catch (err) { - console.error("Failed to resolve docs/reference/ENVIRONMENT.md:", err.message); - } - - // 4. Resolve open-sse/executors/index.ts (keep both ClaudeWebExecutor and InnerAiExecutor) - const execIndexFile = path.join(projectRoot, "open-sse/executors/index.ts"); - if (fs.existsSync(execIndexFile)) { - let content = fs.readFileSync(execIndexFile, "utf-8"); - - // Resolve imports conflict - content = content.replace( - /<<<<<<< HEAD\r?\nimport \{ ClaudeWebExecutor \} from "\.\/claude-web\.ts";\r?\n=======\r?\nimport \{ InnerAiExecutor \} from "\.\/inner-ai\.ts";\r?\n>>>>>>> release\/v3\.8\.4/g, - 'import { ClaudeWebExecutor } from "./claude-web.ts";\nimport { InnerAiExecutor } from "./inner-ai.ts";' - ); - - // Resolve executor registration conflict - content = content.replace( - /<<<<<<< HEAD\r?\n\s+"claude-web": new ClaudeWebExecutor\(\),\r?\n\s+"cw-web": new ClaudeWebExecutor\(\), \/\/ Alias\r?\n=======\r?\n\s+"inner-ai": new InnerAiExecutor\(\),\r?\n\s+"in-ai": new InnerAiExecutor\(\), \/\/ Alias\r?\n>>>>>>> release\/v3\.8\.4/g, - ' "claude-web": new ClaudeWebExecutor(),\n "cw-web": new ClaudeWebExecutor(), // Alias\n "inner-ai": new InnerAiExecutor(),\n "in-ai": new InnerAiExecutor(), // Alias' - ); - - fs.writeFileSync(execIndexFile, content); - runCmd("git add open-sse/executors/index.ts"); - } - - // 7. Resolve src/app/api/providers/[id]/models/route.ts (combine imports) - const modelsRoute = path.join(projectRoot, "src/app/api/providers/[id]/models/route.ts"); - if (fs.existsSync(modelsRoute)) { - let content = fs.readFileSync(modelsRoute, "utf-8"); - content = content.replace( - /<<<<<<< HEAD\r?\n=======\r?\nimport \{ sanitizeErrorMessage \} from "@omniroute\/open-sse\/utils\/error";\r?\nimport \{ getStaticQoderModels \} from "@omniroute\/open-sse\/services\/qoderCli\.ts";\r?\n>>>>>>> release\/v3\.8\.4/g, - 'import { sanitizeErrorMessage } from "@omniroute/open-sse/utils/error";\nimport { getStaticQoderModels } from "@omniroute/open-sse/services/qoderCli.ts";' - ); - fs.writeFileSync(modelsRoute, content); - runCmd("git add src/app/api/providers/[id]/models/route.ts"); - } - - // 8. Resolve src/sse/handlers/chat.ts - const sseChat = path.join(projectRoot, "src/sse/handlers/chat.ts"); - if (fs.existsSync(sseChat)) { - let content = fs.readFileSync(sseChat, "utf-8"); - - // Resolve comment / modelStr conflict - content = content.replace( - /<<<<<<< HEAD\r?\n=======\r?\n\s+\/\/ `let` because the middleware-hook pipeline \(line ~319\) may reassign this\r?\n\s+\/\/ when a hook rewrites the target model\. Previously declared `const`, which\r?\n\s+\/\/ broke turbopack\/strict-mode builds \(PR #2670 regression\)\.\r?\n>>>>>>> release\/v3\.8\.4\r?\n\s+let modelStr = body\.model;/g, - " // `let` because the middleware-hook pipeline (line ~319) may reassign this\n // when a hook rewrites the target model. Previously declared `const`, which\n // broke turbopack/strict-mode builds (PR [PR #2670](file:///home/diegosouzapw/dev/proxys/OmniRoute/package.json#L2670) regression).\n let modelStr = body.model;" - ); - - // Resolve trafficType / modelAbortSignal conflict (1st occurrence) - content = content.replace( - /<<<<<<< HEAD\r?\n\s+trafficType\?: "production" \| "shadow";\r?\n=======\r?\n\s+modelAbortSignal\?: AbortSignal \| null;\r?\n>>>>>>> release\/v3\.8\.4/g, - ' trafficType?: "production" | "shadow";\n modelAbortSignal?: AbortSignal | null;' - ); - - fs.writeFileSync(sseChat, content); - runCmd("git add src/sse/handlers/chat.ts"); - } - - // 9. Resolve bin/cli/tray/autostart.mjs (keep execFileSync, combine ignoreFailure and systemd CI fallback) - const autostart = path.join(projectRoot, "bin/cli/tray/autostart.mjs"); - if (fs.existsSync(autostart)) { - let content = fs.readFileSync(autostart, "utf-8"); - - // runUserSystemctl conflict - content = content.replace( - /<<<<<<< HEAD\r?\n\s+\} catch \{\r?\n=======\r?\n\s+\} catch \(err\) \{\r?\n\s+if \(!ignoreFailure\) throw err;\r?\n>>>>>>> release\/v3\.8\.4/g, - ` } catch (err) { \n if (!ignoreFailure) throw err;` - ); - - // isSystemdServiceEnabled conflict - content = content.replace( - /<<<<<<< HEAD\r?\n\s+return false;\r?\n=======\r?\n\s+\/\/ systemctl --user can't query the bus \(headless environments \/ CI runners\)\.\r?\n\s+\/\/ Treat the presence of the unit file as the source of truth, matching the\r?\n\s+\/\/ fallback used in enableLinux\(\) where unit-file existence counts as success\.\r?\n\s+return true;\r?\n>>>>>>> release\/v3\.8\.4/g, - ` // systemctl --user can't query the bus (headless environments / CI runners).\n // Treat the presence of the unit file as the source of truth, matching the\n // fallback used in enableLinux() where unit-file existence counts as success.\n return true;` - ); - - fs.writeFileSync(autostart, content); - runCmd("git add bin/cli/tray/autostart.mjs"); - } - - // 10. Resolve electron/package.json - const electronPkg = path.join(projectRoot, "electron/package.json"); - if (fs.existsSync(electronPkg)) { - let content = fs.readFileSync(electronPkg, "utf-8"); - content = content.replace( - /<<<<<<< HEAD\r?\n\s+"electron": "\^42\.2\.0",\r?\n\s+"electron-builder": "\^26\.11\.0"\r?\n=======\r?\n\s+"electron": "\^41\.2\.0",\r?\n\s+"electron-builder": "\^26\.11\.1"\r?\n>>>>>>> release\/v3\.8\.4/g, - ' "electron": "^42.2.0",\n "electron-builder": "^26.11.1"' - ); - fs.writeFileSync(electronPkg, content); - runCmd("git add electron/package.json"); - } - - // 11. Resolve .github/workflows/ci.yml - const ciYaml = path.join(projectRoot, ".github/workflows/ci.yml"); - if (fs.existsSync(ciYaml)) { - let content = fs.readFileSync(ciYaml, "utf-8"); - - // Run c8 over shard title - content = content.replace( - /<<<<<<< HEAD\r?\n\s+rm -rf coverage-shard coverage-shard-report\r?\n=======\r?\n\s+# `--temp-directory` \(writable via NODE_V8_COVERAGE\) is what the merge\r?\n\s+# job reads with `c8 report --temp-directory \.\.\.`\. Using `--output-dir`\r?\n\s+# only produces the final json \*report\* and leaves the raw v8 files in\r?\n\s+# `coverage\/tmp`, so uploading `coverage-shard\/` was empty\. Pin the temp\r?\n\s+# dir so the raw coverage files live there and the artifact upload picks\r?\n\s+# them up regardless of `--test-force-exit` timing\.\r?\n>>>>>>> release\/v3\.8\.4/g, - " rm -rf coverage-shard coverage-shard-report\n # `--temp-directory` (writable via NODE_V8_COVERAGE) is what the merge\n # job reads with `c8 report --temp-directory ...`. Using `--output-dir`\n # only produces the final json *report* and leaves the raw v8 files in\n # `coverage/tmp`, so uploading `coverage-shard/` was empty. Pin the temp\n # dir so the raw coverage files live there and the artifact upload picks\n # them up regardless of `--test-force-exit` timing." - ); - - // c8 temp-directory arg - content = content.replace( - /<<<<<<< HEAD\r?\n=======\r?\n\s+--temp-directory=coverage-shard\r?\n>>>>>>> release\/v3\.8\.4/g, - " --temp-directory=coverage-shard" - ); - - fs.writeFileSync(ciYaml, content); - runCmd("git add .github/workflows/ci.yml"); - } - - // 12. Resolve Dockerfile - const dockerfile = path.join(projectRoot, "Dockerfile"); - if (fs.existsSync(dockerfile)) { - let content = fs.readFileSync(dockerfile, "utf-8"); - - // FROM node - content = content.replace( - /FROM node:26\.2\.0-trixie-slim AS builder\r?\nFROM node:24-trixie-slim AS builder/g, - "FROM node:24-trixie-slim AS builder" - ); - - // apt-get cache mounts - content = content.replace( - /<<<<<<< HEAD\r?\nRUN --mount=type=cache,target=\/var\/cache\/apt,sharing=locked \\\r?\n\s+--mount=type=cache,target=\/var\/lib\/apt\/lists,sharing=locked \\\r?\n\s+apt-get update \\\r?\n=======\r?\nRUN apt-get update \\\r?\n>>>>>>> release\/v3\.8\.4/g, - "RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \\\n --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \\\n apt-get update \\" - ); - - // npm ci script ignore and reproducible build check - content = content.replace( - /<<<<<<< HEAD\r?\nRUN --mount=type=cache,target=\/root\/\.npm \\\r?\n\s+if \[ -f package-lock\.json \]; then \\\r?\n\s+npm ci --no-audit --no-fund --legacy-peer-deps; \\\r?\n\s+else \\\r?\n\s+npm install --no-audit --no-fund --legacy-peer-deps; \\\r?\n\s+fi\r?\n=======\r?\n# `--ignore-scripts` blocks the install\/postinstall hooks of dependencies,[\s\S]*?RUN npm ci --no-audit --no-fund --legacy-peer-deps --ignore-scripts\r?\n>>>>>>> release\/v3\.8\.4/g, - `# --ignore-scripts blocks the install/postinstall hooks of dependencies, -# closing the supply-chain attack surface where a transitive dep can run -# arbitrary code at install time. OmniRoute's own postinstall ( -# better-sqlite3 binary touchups, @swc/helpers copy) is only needed when -# a packaged app/node_modules is unpacked — inside the Docker builder we -# are doing a fresh native-platform install, so dropping the scripts is safe. -# -# We REQUIRE a committed package-lock.json so resolved dependency versions -# are reproducible. -RUN test -f package-lock.json \\ - || (echo "package-lock.json is required for reproducible Docker builds" >&2 && exit 1) -RUN --mount=type=cache,target=/root/.npm \\ - npm ci --no-audit --no-fund --legacy-peer-deps --ignore-scripts` - ); - - // npm global install - content = content.replace( - /<<<<<<< HEAD\r?\nRUN --mount=type=cache,target=\/root\/\.npm \\\r?\n\s+npm install -g --no-audit --no-fund @openai\/codex @anthropic-ai\/claude-code droid openclaw@latest\r?\n=======\r?\nRUN npm install -g --no-audit --no-fund @openai\/codex @anthropic-ai\/claude-code droid openclaw@latest\r?\n\r?\nUSER node\r?\n\r?\n>>>>>>> release\/v3\.8\.4/g, - "RUN --mount=type=cache,target=/root/.npm \\\n npm install -g --no-audit --no-fund @openai/codex @anthropic-ai/claude-code droid openclaw@latest\n\nUSER node" - ); - - fs.writeFileSync(dockerfile, content); - runCmd("git add Dockerfile"); - } - - // 13. Resolve open-sse/services/combo.ts - const openSseCombo = path.join(projectRoot, "open-sse/services/combo.ts"); - if (fs.existsSync(openSseCombo)) { - let content = fs.readFileSync(openSseCombo, "utf-8"); - - // IntentClassifierConfig imports - content = content.replace( - /<<<<<<< HEAD\r?\nimport \{\r?\n\s+classifyWithConfig,\r?\n\s+DEFAULT_INTENT_CONFIG,\r?\n\s+type IntentClassifierConfig,\r?\n\} from "\.\/intentClassifier\.ts";\r?\n=======\r?\nimport \{ notifyWebhookEvent \} from "\.\.\/\.\.\/src\/lib\/webhookDispatcher";\r?\nimport \{ classifyWithConfig, DEFAULT_INTENT_CONFIG \} from "\.\/intentClassifier\.ts";\r?\n>>>>>>> release\/v3\.8\.4/g, - 'import { notifyWebhookEvent } from "../../src/lib/webhookDispatcher";\nimport {\n classifyWithConfig,\n DEFAULT_INTENT_CONFIG,\n type IntentClassifierConfig,\n} from "./intentClassifier.ts";' - ); - - // handlePipelineCombo call - content = content.replace( - /<<<<<<< HEAD\r?\n\s+handleChatCore: handleSingleModel,\r?\n\s+log: \{\r?\n\s+info: log\.info,\r?\n\s+warn: log\.warn,\r?\n\s+error: log\.error \?\? log\.warn,\r?\n\s+\},\r?\n\s+settings: settings \?\? \{\},\r?\n\s+signal: signal \?\? undefined,\r?\n=======\r?\n\s+handleChatCore: handleSingleModelWithTimeout,\r?\n\s+log,\r?\n\s+settings,\r?\n\s+signal,\r?\n>>>>>>> release\/v3\.8\.4/g, - " handleChatCore: handleSingleModelWithTimeout,\n log: {\n info: log.info,\n warn: log.warn,\n error: log.error ?? log.warn,\n },\n settings: settings ?? {},\n signal: signal ?? undefined," - ); - - // handleSingleModel call in loop - content = content.replace( - /<<<<<<< HEAD\r?\n\s+const result = await handleSingleModelWrapped\(attemptBody, modelStr, \{\r?\n=======\r?\n\s+const result = await handleSingleModelWithTimeout\(body, modelStr, \{\r?\n>>>>>>> release\/v3\.8\.4/g, - " const result = await handleSingleModelWithTimeout(attemptBody, modelStr, {" - ); - - // recordSessionModelUsage conflict - content = content.replace( - /<<<<<<< HEAD\r?\n\s+recordSessionModelUsage\([\s\S]*?\);\r?\n\s+\r?\n=======\r?\n>>>>>>> release\/v3\.8\.4/g, - " recordSessionModelUsage(\n relayOptions.sessionId,\n combo.name,\n modelStr,\n provider,\n target.connectionId ?? undefined\n );" - ); - - fs.writeFileSync(openSseCombo, content); - runCmd("git add open-sse/services/combo.ts"); - } - - // 14. Resolve src/app/api/copilot/chat/route.ts - const copilotChatRoute = path.join(projectRoot, "src/app/api/copilot/chat/route.ts"); - if (fs.existsSync(copilotChatRoute)) { - let content = fs.readFileSync(copilotChatRoute, "utf-8"); - - // Imports conflict - content = content.replace( - /<<<<<<< HEAD\r?\nimport \{ requireManagementAuth \} from "@\/lib\/api\/requireManagementAuth";\r?\nimport \{ processCopilotChat \} from "@\/lib\/copilot\/engine";\r?\nimport \{ isValidationFailure, validateBody \} from "@\/shared\/validation\/helpers";\r?\nimport \{ sanitizeErrorMessage \} from "@omniroute\/open-sse\/utils\/error\.ts";\r?\n=======\r?\nimport \{ processCopilotChat \} from "@\/lib\/copilot\/engine";\r?\nimport type \{ CopilotRequest \} from "@\/lib\/copilot\/engine";\r?\nimport \{ buildErrorBody \} from "@omniroute\/open-sse\/utils\/error";\r?\n>>>>>>> release\/v3\.8\.4/g, - 'import { requireManagementAuth } from "@/lib/api/requireManagementAuth";\nimport { processCopilotChat } from "@/lib/copilot/engine";\nimport { isValidationFailure, validateBody } from "@/shared/validation/helpers";\nimport { sanitizeErrorMessage, buildErrorBody } from "@omniroute/open-sse/utils/error.ts";' - ); - - // Schema content min length - content = content.replace( - /<<<<<<< HEAD\r?\n\s+content: z\.string\(\)\.min\(1, "message content is required"\),\r?\n=======\r?\n\s+content: z\.string\(\),\r?\n>>>>>>> release\/v3\.8\.4/g, - ' content: z.string().min(1, "message content is required"),' - ); - - // POST implementation conflict - content = content.replace( - /<<<<<<< HEAD\r?\n\s+const authError = await requireManagementAuth\(request\);\r?\n\s+if \(authError\) return authError;\r?\n\r?\n\s+try \{\r?\n\s+const rawBody = await request.json\(\);\r?\n\s+const validation = validateBody\(copilotRequestSchema, rawBody\);\r?\n\s+if \(isValidationFailure\(validation\)\) \{\r?\n\s+return NextResponse\.json\(\{ error: validation\.error \}, \{ status: 400 \}\);\r?\n=======\r?\n\s+try \{\r?\n\s+const raw = await request.json\(\);\r?\n\s+const parsed = copilotRequestSchema\.safeParse\(raw\);\r?\n\s+if \(!parsed\.success\) \{\r?\n\s+return NextResponse\.json\r?\n\s+buildErrorBody\(400, parsed\.error\.issues\[0\]\?\.message \?\? "Invalid request"\),\r?\n\s+\{ status: 400 \}\r?\n\s+\);\r?\n>>>>>>> release\/v3\.8\.4\r?\n\s+\}\r?\n\s+const body = parsed\.data as CopilotRequest;\r?\n\r?\n\s+const response = await processCopilotChat\(body\);/g, - " const authError = await requireManagementAuth(request);\n if (authError) return authError;\n\n try {\n const rawBody = await request.json();\n const validation = validateBody(copilotRequestSchema, rawBody);\n if (isValidationFailure(validation)) {\n return NextResponse.json(\n buildErrorBody(400, validation.error),\n { status: 400 }\n );\n }\n const response = await processCopilotChat(validation.data);" - ); - - // Error handling conflict - content = content.replace( - /<<<<<<< HEAD\r?\n\s+const message = sanitizeErrorMessage\(error\);\r?\n\s+return NextResponse\.json\(\{ error: `Copilot error: \$\{message\}` \}, \{ status: 500 \}\);\r?\n=======\r?\n\s+\/\/ buildErrorBody\(\) routes through sanitizeErrorMessage\(\), which strips\r?\n\s+\/\/ stack traces and absolute file paths\. Hard rule #12\.\r?\n\s+const message = error instanceof Error \? error\.message : "Unknown error";\r?\n\s+return NextResponse\.json\(buildErrorBody\(500, message\), \{ status: 500 \}\);\r?\n>>>>>>> release\/v3\.8\.4/g, - " const message = sanitizeErrorMessage(error);\n return NextResponse.json(buildErrorBody(500, `Copilot error: ${message}`), { status: 500 });" - ); - - fs.writeFileSync(copilotChatRoute, content); - runCmd("git add src/app/api/copilot/chat/route.ts"); - } - - console.log("Resolutions written and staged!"); -} - -main(); diff --git a/scripts/check/check-doc-links.mjs b/scripts/check/check-doc-links.mjs index c25583266d..0c06d632d8 100644 --- a/scripts/check/check-doc-links.mjs +++ b/scripts/check/check-doc-links.mjs @@ -36,7 +36,6 @@ const DOCS_ROOT = path.join(REPO_ROOT, "docs"); const EXCLUDE_PREFIXES = [ path.join(DOCS_ROOT, "i18n") + path.sep, path.join(DOCS_ROOT, "screenshots") + path.sep, - path.join(DOCS_ROOT, "superpowers") + path.sep, path.join(DOCS_ROOT, "diagrams", "exported") + path.sep, ]; diff --git a/scripts/check/check-docs-counts-sync.mjs b/scripts/check/check-docs-counts-sync.mjs index c0e4cf83f6..61077b8cf9 100644 --- a/scripts/check/check-docs-counts-sync.mjs +++ b/scripts/check/check-docs-counts-sync.mjs @@ -18,9 +18,13 @@ // Exits 0 on success, 1 on STRICT drift (or any drift with --strict). // Run: node scripts/check/check-docs-counts-sync.mjs // -// NOTE: the provider check trusts PROVIDER_REFERENCE.md as the canonical total. If a -// provider is added to the code but the reference is not regenerated, this guard will -// not catch it — regenerate with `npm run gen:provider-reference` before relying on it. +// NOTE: PROVIDER_REFERENCE.md is no longer blindly trusted — a STRICT check compares +// the doc's `Total providers` against the live provider modules (the same collections +// the generator reads), so a hand-stale doc is a red, not a silently propagated total. +// Fix by running `npm run gen:provider-reference`. Additional STRICT coverage added in +// the 2026-08-12 hardening: llm.txt + package.json description (providers), migration +// count (README/AGENTS/llm.txt), and canonical numbers inside the README SVG diagrams +// (providers / MCP tools / routing strategies / free-tier pools). import fs from "node:fs"; import { spawnSync } from "node:child_process"; @@ -76,6 +80,13 @@ export function readProviderTotal() { return parseProviderTotal(fs.readFileSync(abs, "utf8")); } +// STRICT: number of SQL migration files shipped with the app. +export function countMigrations() { + const abs = path.join(ROOT, "src", "lib", "db", "migrations"); + if (!fs.existsSync(abs)) return 0; + return fs.readdirSync(abs).filter((f) => f.endsWith(".sql")).length; +} + // STRICT: canonical i18n locale count, read from the shared config. export function countLocales() { const abs = path.join(ROOT, "config", "i18n.json"); @@ -148,6 +159,15 @@ function readCodeFacts() { 'import {notionTools} from "./open-sse/mcp-server/tools/notionTools.ts";', 'import {obsidianTools} from "./open-sse/mcp-server/tools/obsidianTools.ts";', 'import {compressionTools} from "./open-sse/mcp-server/tools/compressionTools.ts";', + // Live provider total — the SAME collections gen-provider-reference.ts unions, so the + // doc-vs-live check below cannot drift from the generator's definition of "provider". + 'import * as PROV from "./src/shared/constants/providers.ts";', + "const provCols=[PROV.FREE_PROVIDERS,PROV.NOAUTH_PROVIDERS,PROV.OAUTH_PROVIDERS,", + "PROV.WEB_COOKIE_PROVIDERS,PROV.APIKEY_PROVIDERS,PROV.LOCAL_PROVIDERS,PROV.SEARCH_PROVIDERS,", + "PROV.AUDIO_ONLY_PROVIDERS,PROV.UPSTREAM_PROXY_PROVIDERS,PROV.CLOUD_AGENT_PROVIDERS,", + "PROV.SYSTEM_PROVIDERS];", + "const pids=new Set();", + "for(const c of provCols)for(const p of Object.values(c||{}))if(p&&p.id)pids.add(p.id);", "const cols={MCP_TOOLS,memoryTools,skillTools,agentSkillTools,githubSkillTools,poolTools,", "gamificationTools,pluginTools,notionTools,obsidianTools,compressionTools};", "const sc=new Set();", @@ -158,7 +178,7 @@ function readCodeFacts() { 'console.log("@@"+JSON.stringify({freeSteady:t.steadyRecurringTokens,', "freeFirst:t.firstMonthRealisticTokens,freePools:t.poolCount,engines:ENGINE_IDS.length,", "cliTotal:cli.length,cliCode:by('code'),cliAgent:by('agent'),", - "mcpTools:countUniqueMcpTools(cols),mcpScopes:sc.size}));", + "mcpTools:countUniqueMcpTools(cols),mcpScopes:sc.size,providers:pids.size}));", ].join(""); const tmp = fs.mkdtempSync(path.join(os.tmpdir(), "docs-counts-")); try { @@ -252,6 +272,82 @@ export function makeNumberClaimValidator(expected, opts) { }; } +// --- v3.8.50 hardening validators -------------------------------------------- +// PURE: doc total must equal the live provider-module total (closes the falso-verde +// found in the 2026-08-12 audit: the doc sat hand-stale at 291 while the modules +// defined 338, and every downstream check inherited the stale total). +export function makeProviderReferenceValidator(expected) { + return (content) => { + const total = parseProviderTotal(content); + if (!total) return { ok: false, detail: "no `Total providers: **N**` marker found" }; + if (total === expected) + return { ok: true, detail: `doc total ${total} matches the live provider modules` }; + return { + ok: false, + detail: + `doc total ${total} is stale — the live provider modules define ${expected} ` + + `(run npm run gen:provider-reference)`, + }; + }; +} + +// PURE: the npm package description must carry the live provider count. +export function makePackageDescriptionValidator(expected) { + return (content) => { + let desc = ""; + try { + desc = String(JSON.parse(content).description || ""); + } catch { + return { ok: false, detail: "package.json could not be parsed" }; + } + if (desc.includes(String(expected))) + return { ok: true, detail: `description mentions the live provider count ${expected}` }; + return { + ok: false, + detail: `description does not mention the live provider count ${expected}: "${desc}"`, + }; + }; +} + +// PURE: sweep an SVG's text/aria content for the canonical numbers. Patterns are +// deliberately narrow — they anchor on the surrounding words so path coordinates, +// width/font-size attributes and small unrelated counts ("15 providers ToS-flagged", +// "100+ providers") can never register as claims. Providers require 3+ digits for the +// same reason. +const SVG_CANONICAL_PATTERNS = [ + { key: "providers", what: "providers", pattern: /(\d{3,4}) (?:AI )?providers\b/g }, + { key: "mcpTools", what: "MCP tools", pattern: /MCP (?:server with |with |\()(\d+)/g }, + { key: "strategies", what: "routing strategies", pattern: /(\d+) routing strategies\b/g }, + { key: "pools", what: "free-tier pools", pattern: /(\d+) provider pools\b/g }, +]; + +export function checkSvgCanonicalNumbers(content, expected) { + const stale = []; + let claims = 0; + for (const { key, what, pattern } of SVG_CANONICAL_PATTERNS) { + if (expected[key] == null) continue; + for (const m of content.matchAll(pattern)) { + claims++; + const value = Number(m[1]); + if (value !== expected[key]) stale.push(`"${m[0]}" (${what} — code has ${expected[key]})`); + } + } + if (!claims) return { ok: true, detail: "no canonical-number claims in this SVG" }; + if (!stale.length) return { ok: true, detail: `${claims} canonical claim(s) match the code` }; + return { ok: false, detail: `stale: ${[...new Set(stale)].join(", ")}` }; +} + +// The README-embedded diagrams that historically rotted because no gate read them +// (the alt-text in README.md is checked, the SVG text nodes never were). +const SVG_DIAGRAM_FILES = [ + "docs/diagrams/readme-hero.svg", + "docs/diagrams/free-tier-budget.svg", + "docs/diagrams/promise-pillars.svg", + "docs/diagrams/comparison-table.svg", + "docs/diagrams/cli-terminal.svg", + "docs/diagrams/tier-cascade.svg", +]; + export function buildChecks() { return [ { @@ -259,7 +355,26 @@ export function buildChecks() { actual: readProviderTotal(), docKey: "providers", strict: true, - files: ["README.md", "AGENTS.md"], + files: ["README.md", "AGENTS.md", "llm.txt"], + }, + { + label: "Provider count (package.json description)", + actual: readProviderTotal(), + docKey: "providers", + strict: true, + files: ["package.json"], + validate: makePackageDescriptionValidator(readProviderTotal()), + }, + { + label: "DB migrations count", + actual: countMigrations(), + docKey: "migrations", + strict: true, + files: ["README.md", "AGENTS.md", "llm.txt"], + validate: makeNumberClaimValidator(countMigrations(), { + what: "migrations", + pattern: /(\d+)\+? migrations?\b/gi, + }), }, { label: "i18n locales count", @@ -289,6 +404,30 @@ export function buildChecks() { validate: makeNumberClaimValidator(expected, { what, ...opts }), }); return [ + { + label: "Provider reference total (doc vs live modules)", + actual: f.providers, + docKey: "providers (live)", + strict: true, + files: ["docs/reference/PROVIDER_REFERENCE.md"], + validate: makeProviderReferenceValidator(f.providers), + }, + { + label: "SVG canonical numbers (live code)", + actual: + `${f.providers} providers / ${f.mcpTools} MCP tools / ` + + `${countRoutingStrategies()} strategies / ${f.freePools} pools`, + docKey: "SVG canonical numbers", + strict: true, + files: SVG_DIAGRAM_FILES, + validate: (content) => + checkSvgCanonicalNumbers(content, { + providers: f.providers, + mcpTools: f.mcpTools, + strategies: countRoutingStrategies(), + pools: f.freePools, + }), + }, { label: "Free-tier headline (live catalog)", actual: `~${(f.freeSteady / 1e9).toFixed(2)}B steady / ${f.freePools} pools`, diff --git a/scripts/check/check-fabricated-docs.mjs b/scripts/check/check-fabricated-docs.mjs index d1c6381fd0..aba493b7d4 100644 --- a/scripts/check/check-fabricated-docs.mjs +++ b/scripts/check/check-fabricated-docs.mjs @@ -363,19 +363,6 @@ const SKIP_DOC_FILES = new Set([ "docs/reference/PROVIDER_REFERENCE.md", // auto-generated from providers.ts "docs/openapi.yaml", "docs/i18n", // translations — separate workflow - // Design / research / plan docs: by definition describe not-yet-built files and - // proposed (not-yet-shipped) endpoints (each carries a `Status: Design`/`Active - // research`/`Plano` header). Same rationale as the audit report above — these are - // forward-looking specs, not living API docs, so their forward references are - // expected, not fabrications. - "docs/research", // DISCOVERY_TOOL_DESIGN.md, UNLIMITED_LLM_ACCESS.md, … - "docs/superpowers/plans", // dated implementation plans (files described before they exist) - "docs/superpowers/specs", // dated research/spec reports (point-in-time findings, may cite proposed/not-yet-built endpoints, env vars, and files) — same rationale as the plans/research dirs above - // Release notes are historical, point-in-time records: they intentionally describe - // modules/paths as they were at that release (e.g. a module later moved or renamed). - // Rewriting them to today's layout would falsify history — out of scope for a - // living-docs accuracy gate. - "docs/releases", // Forward-looking coverage plan: a `- [ ]` checklist of test targets and helper // components to be created. Same rationale as the design/plan docs above. "docs/ops/COVERAGE_PLAN.md", diff --git a/scripts/check/check-tracked-artifacts.mjs b/scripts/check/check-tracked-artifacts.mjs index dddca935d1..fc8370af80 100644 --- a/scripts/check/check-tracked-artifacts.mjs +++ b/scripts/check/check-tracked-artifacts.mjs @@ -10,14 +10,39 @@ // - coverage/ — relatórios de cobertura gerados pelo c8 // - quality-metrics.json — saída do collect-metrics.mjs (gerado, não-versionado) // - symlinks rastreados (mode 120000) — indício de `git add -A` em worktree +// - _tasks (exato E prefixo) — repo git SEPARADO; o blob symlink rastreado causou DOIS +// wipes do diretório real (2026-08-08 e 2026-08-10; Hard Rule #23) +// - _references/ _mono_repo/ _ideia/ _cache/ — diretórios privados de raiz (regra /_*/) +// - .claude/worktrees/ — worktrees de sessão nunca entram no repo +// - docs/superpowers/ — artefatos de planejamento vivem em _tasks/, não em docs/ +// - .eslintcache* .fakebin-* dist/ .build/ .artifacts/ logs/ — caches e outputs gerados +// +// Todos os prefixos são ancorados na raiz (startsWith sobre paths do `git ls-files`): +// paths aninhados legítimos como `src/lib/logs/` NÃO são atingidos. import { execFileSync } from "node:child_process"; import { pathToFileURL } from "node:url"; -const FORBIDDEN_PREFIXES = ["node_modules/", ".next/", "coverage/"]; +const FORBIDDEN_PREFIXES = [ + "node_modules/", + ".next/", + "coverage/", + // "_" na raiz é GENÉRICO (regra abaixo em checkTrackedArtifacts): _tasks/, _references/, + // _mono_repo/, _ideia/, _cache/ e qualquer _/ futuro — dirs privados, alguns com + // repo git próprio (_tasks). Nunca rastrear nada dentro deles (Hard Rule #23). + ".claude/worktrees/", + "docs/superpowers/", + ".eslintcache", // matches .eslintcache, .eslintcache-complexity, .eslintcache-probe, … + ".fakebin-", // test executable shim dirs (.fakebin-/) + "dist/", + ".build/", + ".artifacts/", + "logs/", +]; const FORBIDDEN_EXACT = new Set([ "quality-metrics.json", // legacy root location (still forbidden if a stale run writes it) "config/quality/quality-metrics.json", // current generated location (collect-metrics.mjs) + "_tasks", // separate git repo — a tracked blob/symlink here wiped the real dir twice (HR#23) ]); /** @@ -36,6 +61,13 @@ export function checkTrackedArtifacts(trackedFiles, trackedSymlinks = []) { violations.push(`forbidden tracked artifact: ${file}`); continue; } + // Regra genérica: NENHUM caminho de raiz prefixado com "_" pode ser rastreado + // (dir ou arquivo). Cobre _tasks, _references, _mono_repo e qualquer _ futuro; + // paths aninhados legítimos (src/lib/_x) não são atingidos. + if (file.startsWith("_")) { + violations.push(`forbidden tracked artifact (root underscore path): ${file}`); + continue; + } for (const prefix of FORBIDDEN_PREFIXES) { if (file.startsWith(prefix)) { violations.push(`forbidden tracked artifact (${prefix}*): ${file}`); diff --git a/scripts/check/check-ts7-diagnostics-ratchet.mjs b/scripts/check/check-ts7-diagnostics-ratchet.mjs new file mode 100644 index 0000000000..67669607a2 --- /dev/null +++ b/scripts/check/check-ts7-diagnostics-ratchet.mjs @@ -0,0 +1,322 @@ +#!/usr/bin/env node +// Blocks TypeScript 7 diagnostic regressions without requiring the existing +// migration backlog to be clean. The PR base and checked-out head are compiled +// with the same compiler and tsconfig, then compared as duplicate-preserving +// multisets of: relative file | TS code | normalized message. + +import { spawnSync } from "node:child_process"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { pathToFileURL } from "node:url"; + +const ROOT = process.cwd(); +const DEFAULT_TSCONFIG = "tsconfig.typecheck-core.json"; +const DEFAULT_COMPILER_VERSION = "7.0.2"; +const DIAGNOSTIC_START = /^(.+?)\((\d+),(\d+)\): error (TS\d+):\s*(.*)$/; +const GLOBAL_DIAGNOSTIC_START = /^error (TS\d+):\s*(.*)$/; + +function normalizeSlashes(value) { + return String(value).replaceAll("\\", "/"); +} + +function stripRoot(value, root) { + const normalizedValue = normalizeSlashes(value); + const normalizedRoot = normalizeSlashes(path.resolve(root)).replace(/\/$/, ""); + return normalizedValue === normalizedRoot + ? "." + : normalizedValue.startsWith(`${normalizedRoot}/`) + ? normalizedValue.slice(normalizedRoot.length + 1) + : normalizedValue; +} + +export function normalizeDiagnosticMessage(message, root = ROOT) { + const normalizedRoot = normalizeSlashes(path.resolve(root)).replace(/\/$/, ""); + return normalizeSlashes(message) + .replaceAll(normalizedRoot, "") + .replace(/((?:[A-Za-z]:)?[^()\s]+\.(?:[cm]?[jt]sx?|json))\(\d+,\d+\)/gi, "$1") + .replace(/\s+/g, " ") + .trim(); +} + +/** Parse complete `tsc --pretty false` diagnostic blocks. */ +export function parseTscDiagnostics(raw, { root = ROOT } = {}) { + const diagnostics = []; + let current = null; + + const flush = () => { + if (!current) return; + const message = normalizeDiagnosticMessage(current.messageLines.join("\n"), root); + diagnostics.push({ + file: current.file, + code: current.code, + message, + key: `${current.file}\u0000${current.code}\u0000${message}`, + }); + current = null; + }; + + for (const line of String(raw).split(/\r?\n/)) { + const located = DIAGNOSTIC_START.exec(line); + if (located) { + flush(); + current = { + file: stripRoot(located[1], root), + code: located[4], + messageLines: [located[5]], + }; + continue; + } + + const global = GLOBAL_DIAGNOSTIC_START.exec(line); + if (global) { + flush(); + current = { file: "", code: global[1], messageLines: [global[2]] }; + continue; + } + + if (current && /^\s/.test(line) && line.trim()) current.messageLines.push(line); + } + flush(); + return diagnostics; +} + +export function toDiagnosticMultiset(diagnostics) { + const counts = new Map(); + for (const diagnostic of diagnostics) { + const entry = counts.get(diagnostic.key) ?? { ...diagnostic, count: 0 }; + entry.count += 1; + counts.set(diagnostic.key, entry); + } + return counts; +} + +export function diffDiagnosticMultisets(baseDiagnostics, headDiagnostics) { + const base = toDiagnosticMultiset(baseDiagnostics); + const head = toDiagnosticMultiset(headDiagnostics); + const added = []; + const removed = []; + + for (const [key, entry] of head) { + const baseCount = base.get(key)?.count ?? 0; + if (entry.count > baseCount) { + added.push({ ...entry, baseCount, headCount: entry.count, delta: entry.count - baseCount }); + } + } + for (const [key, entry] of base) { + const headCount = head.get(key)?.count ?? 0; + if (entry.count > headCount) { + removed.push({ ...entry, baseCount: entry.count, headCount, delta: entry.count - headCount }); + } + } + + const order = (a, b) => a.key.localeCompare(b.key); + return { added: added.sort(order), removed: removed.sort(order) }; +} + +export function hasParserPrerequisite(diagnostics) { + return diagnostics.some((diagnostic) => diagnostic.code === "TS1005"); +} + +function argument(name, fallback = "") { + const index = process.argv.indexOf(name); + return index >= 0 && process.argv[index + 1] ? process.argv[index + 1] : fallback; +} + +function run(command, args, options = {}) { + return spawnSync(command, args, { + cwd: ROOT, + encoding: "utf8", + maxBuffer: 64 * 1024 * 1024, + ...options, + }); +} + +function resolveCommit(ref) { + const result = run("git", ["rev-parse", "--verify", `${ref}^{commit}`]); + if (result.status !== 0) { + throw new Error(`cannot resolve base ref ${ref}: ${result.stderr.trim()}`); + } + return result.stdout.trim(); +} + +function sameLockfile(baseRoot) { + const head = path.join(ROOT, "package-lock.json"); + const base = path.join(baseRoot, "package-lock.json"); + return ( + fs.existsSync(head) && + fs.existsSync(base) && + fs.readFileSync(head).equals(fs.readFileSync(base)) + ); +} + +function linkDependencies(baseRoot) { + const source = path.join(ROOT, "node_modules"); + const target = path.join(baseRoot, "node_modules"); + if (!fs.existsSync(source)) throw new Error("node_modules is missing; run npm ci first"); + + fs.mkdirSync(target); + for (const entry of fs.readdirSync(source)) { + if (entry === "@omniroute") continue; + fs.symlinkSync(path.join(source, entry), path.join(target, entry), "junction"); + } + + const scope = path.join(target, "@omniroute"); + fs.mkdirSync(scope); + fs.symlinkSync(path.join(baseRoot, "open-sse"), path.join(scope, "open-sse"), "junction"); + fs.symlinkSync( + path.join(baseRoot, "packages", "browser-pool"), + path.join(scope, "browser-pool"), + "junction" + ); +} + +function installBaseDependencies(baseRoot) { + const npm = process.platform === "win32" ? "npm.cmd" : "npm"; + const result = run( + npm, + ["ci", "--ignore-scripts", "--prefer-offline", "--no-audit", "--no-fund"], + { cwd: baseRoot, stdio: "inherit" } + ); + if (result.status !== 0) throw new Error(`npm ci for the base worktree exited ${result.status}`); +} + +function runTypeScript(root, tsconfig, compilerVersion) { + const npm = process.platform === "win32" ? "npm.cmd" : "npm"; + const result = run( + npm, + [ + "exec", + "--yes", + `--package=typescript@${compilerVersion}`, + "--", + "tsc", + "--pretty", + "false", + "--noEmit", + "-p", + tsconfig, + ], + { cwd: root } + ); + if (result.error) throw result.error; + const output = `${result.stdout ?? ""}${result.stderr ?? ""}`; + const diagnostics = parseTscDiagnostics(output, { root }); + if (result.status !== 0 && diagnostics.length === 0) { + throw new Error( + `TypeScript exited ${result.status} without a parseable diagnostic:\n${output}` + ); + } + return { diagnostics, status: result.status ?? 0 }; +} + +function formatEntry(entry) { + return `${entry.file} ${entry.code}: ${entry.message} (${entry.baseCount} -> ${entry.headCount})`; +} + +function appendSummary({ baseRef, baseCount, headCount, added, removed, skipped }) { + const summary = process.env.GITHUB_STEP_SUMMARY; + if (!summary) return; + const lines = [ + "## TypeScript 7 zero-new-diagnostics ratchet", + "", + `- Base: \`${baseRef}\` (${baseCount} diagnostics)`, + `- Head: ${headCount} diagnostics`, + `- Added: ${added.reduce((sum, entry) => sum + entry.delta, 0)}`, + `- Removed: ${removed.reduce((sum, entry) => sum + entry.delta, 0)}`, + ]; + if (skipped) lines.push("- Status: parser prerequisite unresolved; comparison is advisory"); + if (added.length) { + lines.push("", "### Added diagnostics", "", ...added.map((entry) => `- ${formatEntry(entry)}`)); + } + fs.appendFileSync(summary, `${lines.join("\n")}\n`); +} + +function main() { + const baseRef = argument("--base-ref", process.env.TS7_BASE_REF ?? ""); + const tsconfig = argument("--tsconfig", DEFAULT_TSCONFIG); + const compilerVersion = argument("--compiler-version", DEFAULT_COMPILER_VERSION); + if (!baseRef) { + console.log("[ts7-ratchet] SKIP — --base-ref is required outside a pull request"); + return 0; + } + if (!fs.existsSync(path.join(ROOT, tsconfig))) { + throw new Error(`tsconfig not found: ${tsconfig}`); + } + + const baseCommit = resolveCommit(baseRef); + const temporaryRoot = fs.mkdtempSync(path.join(os.tmpdir(), "omniroute-ts7-ratchet-")); + const baseRoot = path.join(temporaryRoot, "base"); + let worktreeAdded = false; + + try { + const add = run("git", ["worktree", "add", "--detach", baseRoot, baseCommit]); + if (add.status !== 0) throw new Error(`cannot create base worktree: ${add.stderr.trim()}`); + worktreeAdded = true; + + if (sameLockfile(baseRoot)) linkDependencies(baseRoot); + else installBaseDependencies(baseRoot); + + console.log( + `[ts7-ratchet] TypeScript ${compilerVersion}; base=${baseCommit}; config=${tsconfig}` + ); + const base = runTypeScript(baseRoot, tsconfig, compilerVersion); + const head = runTypeScript(ROOT, tsconfig, compilerVersion); + const { added, removed } = diffDiagnosticMultisets(base.diagnostics, head.diagnostics); + const parserBlocked = hasParserPrerequisite(base.diagnostics); + + console.log(`ts7DiagnosticsBase=${base.diagnostics.length}`); + console.log(`ts7DiagnosticsHead=${head.diagnostics.length}`); + console.log(`ts7DiagnosticsAdded=${added.reduce((sum, entry) => sum + entry.delta, 0)}`); + console.log(`ts7DiagnosticsRemoved=${removed.reduce((sum, entry) => sum + entry.delta, 0)}`); + + appendSummary({ + baseRef: baseCommit, + baseCount: base.diagnostics.length, + headCount: head.diagnostics.length, + added, + removed, + skipped: parserBlocked, + }); + + if (parserBlocked) { + console.warn( + "[ts7-ratchet] SKIP — the release base still has TS1005 parser diagnostics. " + + "Resolve #10094 before making this comparison blocking; those errors are not accepted as baseline." + ); + return 0; + } + + if (added.length) { + console.error( + `[ts7-ratchet] FAIL — the PR adds ${added.reduce((sum, entry) => sum + entry.delta, 0)} ` + + `normalized TypeScript 7 diagnostic(s):\n${added.map((entry) => ` ✗ ${formatEntry(entry)}`).join("\n")}` + ); + return 1; + } + + console.log( + `[ts7-ratchet] OK — no new normalized diagnostics; ` + + `${removed.reduce((sum, entry) => sum + entry.delta, 0)} removed.` + ); + return 0; + } finally { + if (worktreeAdded) { + const remove = run("git", ["worktree", "remove", "--force", baseRoot]); + if (remove.status !== 0) { + console.warn(`[ts7-ratchet] WARN — temporary worktree cleanup: ${remove.stderr.trim()}`); + } + run("git", ["worktree", "prune"]); + } + fs.rmSync(temporaryRoot, { recursive: true, force: true }); + } +} + +if (import.meta.url === pathToFileURL(process.argv[1] ?? "").href) { + try { + process.exitCode = main(); + } catch (error) { + console.error(`[ts7-ratchet] FAIL — ${error instanceof Error ? error.message : String(error)}`); + process.exitCode = 2; + } +} diff --git a/scripts/codex-ws.sh b/scripts/dev/codex-ws.sh similarity index 100% rename from scripts/codex-ws.sh rename to scripts/dev/codex-ws.sh diff --git a/scripts/docs/gen-provider-reference.ts b/scripts/docs/gen-provider-reference.ts index 118a7f9bc1..a91ddddbce 100644 --- a/scripts/docs/gen-provider-reference.ts +++ b/scripts/docs/gen-provider-reference.ts @@ -7,6 +7,7 @@ import path from "node:path"; import { fileURLToPath } from "node:url"; import { FREE_PROVIDERS, + NOAUTH_PROVIDERS, OAUTH_PROVIDERS, WEB_COOKIE_PROVIDERS, APIKEY_PROVIDERS, @@ -136,6 +137,7 @@ function buildHeader(total: number): string { "## Categories", "", "- **Free** — free tier with API key (configured via dashboard)", + "- **No-auth** — public endpoints that require no key or sign-in at all", "- **OAuth** — sign-in flow handled by OmniRoute, no API key needed", "- **Web cookie** — wraps the provider's web app via cookie auth", "- **API key** — paid provider configured via API key (free credits may apply)", @@ -159,8 +161,19 @@ function buildHeader(total: number): string { ].join("\n"); } +function countExecutorImpls(): number { + const dir = path.join(ROOT, "open-sse", "executors"); + const nonImpl = new Set(["index.ts", "index.mts", "types.ts", "base.ts", "constants.ts"]); + return fs + .readdirSync(dir) + .filter( + (f) => f.endsWith(".ts") && !f.endsWith(".test.ts") && !f.startsWith("__") && !nonImpl.has(f) + ).length; +} + function main() { const free = asRecords(FREE_PROVIDERS); + const noauth = asRecords(NOAUTH_PROVIDERS as Record); const oauth = asRecords(OAUTH_PROVIDERS); const webCookie = asRecords(WEB_COOKIE_PROVIDERS); const apiKey = asRecords(APIKEY_PROVIDERS); @@ -173,6 +186,7 @@ function main() { const allIds = new Set([ ...free.map((p) => p.id), + ...noauth.map((p) => p.id), ...oauth.map((p) => p.id), ...webCookie.map((p) => p.id), ...apiKey.map((p) => p.id), @@ -186,6 +200,7 @@ function main() { const sections = [ buildSection("Free Tier (OAuth-first or no-key)", free, "Free"), + buildSection("No-auth Providers (no key required)", noauth, "No-auth"), buildSection("OAuth Providers", oauth, "OAuth"), buildSection("Web Cookie Providers", webCookie, "Web cookie"), buildSection("API Key Providers (paid / paid-with-free-credits)", apiKey, "API key"), @@ -202,7 +217,7 @@ function main() { "", "- Catalog: [`src/shared/constants/providers.ts`](../../src/shared/constants/providers.ts)", "- Registry (per-model details): [`open-sse/config/providerRegistry.ts`](../../open-sse/config/providerRegistry.ts)", - "- Executors: [`open-sse/executors/`](../../open-sse/executors/) (31 files)", + `- Executors: [\`open-sse/executors/\`](../../open-sse/executors/) (${countExecutorImpls()} implementations)`, "- Translators: [`open-sse/translator/`](../../open-sse/translator/)", "", "## See Also", @@ -218,9 +233,10 @@ function main() { console.log(`✓ Wrote ${OUT_FILE}`); console.log(` Providers: ${allIds.size} unique IDs`); console.log( - ` Sections: free=${free.length}, oauth=${oauth.length}, web=${webCookie.length}, ` + - `apikey=${apiKey.length}, local=${local.length}, search=${search.length}, ` + - `audio=${audio.length}, proxy=${upstreamProxy.length}, cloud=${cloudAgent.length}, system=${system.length}` + ` Sections: free=${free.length}, noauth=${noauth.length}, oauth=${oauth.length}, ` + + `web=${webCookie.length}, apikey=${apiKey.length}, local=${local.length}, ` + + `search=${search.length}, audio=${audio.length}, proxy=${upstreamProxy.length}, ` + + `cloud=${cloudAgent.length}, system=${system.length}` ); } diff --git a/scripts/install-obsidian-plugin.sh b/scripts/install-obsidian-plugin.sh deleted file mode 100755 index 05c8a1233c..0000000000 --- a/scripts/install-obsidian-plugin.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash -set -e - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -PLUGIN_SRC="$(dirname "$SCRIPT_DIR")/obsidian-plugin" -DESKTOP_VAULT="${1:-$HOME/Documents/Vault/Omniroute-Test}" -MOBILE_VAULT="${2:-$HOME/Documents/Vault/Test}" - -echo "Building plugin..." -cd "$PLUGIN_SRC" -npm run build 2>&1 | tail -3 - -echo "Installing to desktop vault: $DESKTOP_VAULT" -mkdir -p "$DESKTOP_VAULT/.obsidian/plugins/omniroute-sync" -cp "$PLUGIN_SRC/dist/main.js" "$DESKTOP_VAULT/.obsidian/plugins/omniroute-sync/" -cp "$PLUGIN_SRC/manifest.json" "$DESKTOP_VAULT/.obsidian/plugins/omniroute-sync/" -cp "$PLUGIN_SRC/styles.css" "$DESKTOP_VAULT/.obsidian/plugins/omniroute-sync/" -echo " ✓ Desktop plugin installed" - -if [ -d "$MOBILE_VAULT" ]; then - echo "Installing to mobile vault: $MOBILE_VAULT" - mkdir -p "$MOBILE_VAULT/.obsidian/plugins/omniroute-sync" - cp "$PLUGIN_SRC/dist/main.js" "$MOBILE_VAULT/.obsidian/plugins/omniroute-sync/" - cp "$PLUGIN_SRC/manifest.json" "$MOBILE_VAULT/.obsidian/plugins/omniroute-sync/" - cp "$PLUGIN_SRC/styles.css" "$MOBILE_VAULT/.obsidian/plugins/omniroute-sync/" - echo " ✓ Mobile plugin installed" -fi - -echo "Done! Restart Obsidian on both devices to load the plugin." diff --git a/scripts/query_all_provider_connections.cjs b/scripts/query_all_provider_connections.cjs deleted file mode 100644 index 4479efec06..0000000000 --- a/scripts/query_all_provider_connections.cjs +++ /dev/null @@ -1,12 +0,0 @@ -const Database = require('better-sqlite3'); -const path = require('path'); -const dbPath = path.resolve(process.env.USERPROFILE, '.omniroute', 'storage.sqlite'); -try { - const db = new Database(dbPath, { readonly: true }); - const rows = db.prepare(`SELECT id, provider, name, auth_type, is_active, last_error, test_status, updated_at FROM provider_connections ORDER BY updated_at DESC LIMIT 200`).all(); - console.log(JSON.stringify(rows, null, 2)); - db.close(); -} catch (err) { - console.error('ERROR', err && err.message); - process.exit(2); -} diff --git a/scripts/query_providers.cjs b/scripts/query_providers.cjs deleted file mode 100644 index cfad330655..0000000000 --- a/scripts/query_providers.cjs +++ /dev/null @@ -1,12 +0,0 @@ -const Database = require('better-sqlite3'); -const path = require('path'); -const dbPath = path.resolve(process.env.USERPROFILE, '.omniroute', 'storage.sqlite'); -try { - const db = new Database(dbPath, { readonly: true }); - const rows = db.prepare(`SELECT id, provider, name, auth_type, is_active, api_key IS NOT NULL as has_api_key, access_token IS NOT NULL as has_access_token, refresh_token IS NOT NULL as has_refresh, last_error, test_status, provider_specific_data, updated_at FROM provider_connections WHERE provider LIKE '%anthropic%' OR provider='anthropic' OR provider LIKE '%claude%' OR provider='claude'`).all(); - console.log(JSON.stringify(rows, null, 2)); - db.close(); -} catch (err) { - console.error('ERROR', err && err.message); - process.exit(2); -} diff --git a/scripts/query_providers.js b/scripts/query_providers.js deleted file mode 100644 index 993bf33487..0000000000 --- a/scripts/query_providers.js +++ /dev/null @@ -1,16 +0,0 @@ -const Database = require("better-sqlite3"); -const path = require("path"); -const dbPath = path.resolve(process.env.USERPROFILE, ".omniroute", "storage.sqlite"); -try { - const db = new Database(dbPath, { readonly: true }); - const rows = db - .prepare( - `SELECT id, provider, name, auth_type, is_active, api_key IS NOT NULL as has_api_key, access_token IS NOT NULL as has_access_token, refresh_token IS NOT NULL as has_refresh, last_error, test_status, provider_specific_data, updated_at FROM provider_connections WHERE provider LIKE '%anthropic%' OR provider='anthropic' OR provider LIKE '%claude%' OR provider='claude'` - ) - .all(); - console.log(JSON.stringify(rows, null, 2)); - db.close(); -} catch (err) { - console.error("ERROR", err && err.message); - process.exit(2); -} diff --git a/src/app/(dashboard)/dashboard/KimiSponsorBanner.tsx b/src/app/(dashboard)/dashboard/KimiSponsorBanner.tsx index 13ce427245..50291dc199 100644 --- a/src/app/(dashboard)/dashboard/KimiSponsorBanner.tsx +++ b/src/app/(dashboard)/dashboard/KimiSponsorBanner.tsx @@ -7,14 +7,18 @@ import { APP_CONFIG } from "@/shared/constants/appConfig"; import { shouldShowKimiSponsorBanner } from "./kimiSponsorBannerGate"; // Official Kimi partnership tracking link — keep in sync with README.md's -// Sponsors section and the aff links wired in the providers onboarding UI -// (ProviderPageHeader.tsx). -const KIMI_CODING_AFF_URL = "https://www.kimi.com/code?aff=omniroute"; +// Open Source Friends section and the aff links wired in the providers +// onboarding UI (ProviderPageHeader.tsx). Retargeted 2026-08 from the coding +// plan (kimi.com/code) to the API platform at Moonshot's request: coding plan +// subscriptions are closed to most new users, so that traffic could not +// convert. +const KIMI_PLATFORM_AFF_URL = "https://platform.kimi.ai?aff=omniroute"; -// Versioned dismissal key — bump the suffix (e.g. `-v2`) if the banner's +// Versioned dismissal key — bump the suffix (e.g. `-v3`) if the banner's // offer/copy ever changes materially enough to warrant re-showing it to -// users who already dismissed the previous version. -const DISMISS_STORAGE_KEY = "omniroute-kimi-sponsor-banner-dismissed-v1"; +// users who already dismissed the previous version. `-v2` = the 2026-08 CTA +// retarget to the API platform (new destination + new copy). +const DISMISS_STORAGE_KEY = "omniroute-kimi-sponsor-banner-dismissed-v2"; // Same-tab signal for the dismiss button, since writing localStorage doesn't // fire a "storage" event in the tab that wrote it. const DISMISS_EVENT = "omniroute:kimi-sponsor-banner-dismissed"; @@ -69,7 +73,7 @@ export default function KimiSponsorBanner() { return (
@@ -77,7 +81,7 @@ export default function KimiSponsorBanner() {
-

{t("title")}

+

{t("foundingFriendTitle")}

{t("description")}

@@ -85,7 +89,7 @@ export default function KimiSponsorBanner() {
(null); + const [detail, setDetail] = useState(null); + const [cancelTarget, setCancelTarget] = useState(null); + const [canceling, setCanceling] = useState(false); + const [err, setErr] = useState(""); + + const load = useCallback(async () => { + try { + const res = await fetch("/api/conductor/fleet"); + if (res.ok) setSnapshot(await res.json()); + } catch { + // rede local instável: mantém o último snapshot; o banner offline vem do servidor + } + }, []); + + useEffect(() => { + void load(); + const timer = setInterval(() => void load(), REFRESH_MS); + return () => clearInterval(timer); + }, [load]); + + const openDetail = async (taskId: string) => { + setErr(""); + try { + const res = await fetch(`/api/conductor/tasks/${encodeURIComponent(taskId)}`); + if (res.ok) setDetail(await res.json()); + else setErr(`${t("error")}: HTTP ${res.status}`); + } catch { + setErr(t("error")); + } + }; + + const confirmCancel = async () => { + if (!cancelTarget) return; + setCanceling(true); + setErr(""); + try { + const res = await fetch(`/api/conductor/tasks/${encodeURIComponent(cancelTarget)}/cancel`, { method: "POST" }); + if (!res.ok) setErr(`${t("cancelFailed")} (HTTP ${res.status})`); + else { + setDetail(null); + await load(); + } + } catch { + setErr(t("cancelFailed")); + } finally { + setCanceling(false); + setCancelTarget(null); + } + }; + + const runners = snapshot?.runners ?? []; + const tasks = snapshot?.tasks ?? []; + + return ( +
+
+

{t("title")}

+

{t("subtitle")}

+
+ + {err && {err}} + + {snapshot?.offline ? ( + + + + ) : ( + <> + + ({ ...r, id: r.id }))} + emptyMessage={t("noRunners")} + loading={snapshot === null} + renderCell={(row, column) => { + const r = row as unknown as FleetRunner; + if (column.key === "name") return {r.name}; + if (column.key === "clis") return r.clis.join(" / "); + if (r.draining) return {t("draining")}; + return r.online ? ( + {t("online")} + ) : ( + {t("offline")} + ); + }} + /> + + + + ({ ...task, id: task.id }))} + emptyMessage={t("noTasks")} + loading={snapshot === null} + onRowClick={(row) => void openDetail(String(row.id))} + renderCell={(row, column) => { + const task = row as unknown as FleetTask; + if (column.key === "status") return {task.status}; + if (column.key === "id") return {task.id}; + if (column.key === "summary") return task.summary ?? task.error ?? "—"; + return (task as unknown as Record)[column.key]?.toString() ?? "—"; + }} + /> + + + )} + + + + setDetail(null)} title={t("detailTitle")} size="lg"> + {detail && ( +
+
+ {detail.id} + {detail.status} + {detail.mode} + {detail.runner && {detail.runner}} +
+ {detail.prompt && ( +
+
{t("prompt")}
+
{detail.prompt}
+
+ )} + {detail.summary &&

{detail.summary}

} + {detail.error && {detail.error}} + {detail.branch && ( +
+
{t("branch")}
+ {detail.branch} +

{t("fetchHint", { branch: detail.branch })}

+
+ )} + {detail.mode.startsWith("council") && detail.council?.candidate_task_ids && ( +
+
{t("council")}
+

+ {t("candidates")}: {detail.council.candidate_task_ids.join(", ")} +

+
+ )} + {!TERMINAL.has(detail.status) && ( + + )} +
+ )} +
+ + setCancelTarget(null)} + onConfirm={confirmCancel} + title={t("cancelConfirmTitle")} + message={t("cancelConfirmMessage")} + confirmText={t("cancel")} + loading={canceling} + /> +
+ ); +} diff --git a/src/app/(dashboard)/dashboard/conductor/FaroChat.tsx b/src/app/(dashboard)/dashboard/conductor/FaroChat.tsx new file mode 100644 index 0000000000..d1406d4663 --- /dev/null +++ b/src/app/(dashboard)/dashboard/conductor/FaroChat.tsx @@ -0,0 +1,272 @@ +"use client"; + +/** + * Faro chat with voice (Conductor PRD RF4). Text: input → /api/conductor/ask + * (server-side proxy — the hub credential never reaches the browser). When the + * answer carries `pending`, Faro is asking for confirmation: the Sim/Não + * buttons just send "sim"/"não" — the safety gate lives in Faro's engine. + * + * Voice (guaranteed cycle, PRD RF4): push-to-talk → MediaRecorder → + * POST /api/v1/audio/transcriptions (multipart) → text → /ask → response → + * POST /api/v1/audio/speech → play the returned audio blob. STT/TTS models are + * operator-configurable (provider/model of THIS OmniRoute install), persisted + * in localStorage. + */ + +import { useEffect, useRef, useState } from "react"; +import { useTranslations } from "next-intl"; + +import { Badge, Card } from "@/shared/components"; + +interface ChatMessage { + role: "user" | "faro"; + text: string; +} + +type VoiceState = "idle" | "listening" | "thinking" | "speaking"; + +const STT_KEY = "conductor.sttModel"; +const TTS_KEY = "conductor.ttsModel"; + +function safeGet(key: string, fallback: string): string { + try { + return localStorage.getItem(key) || fallback; + } catch { + return fallback; + } +} + +async function errorMessageOf(res: Response, fallback: string): Promise { + try { + const data = await res.json(); + return data?.error?.message ?? fallback; + } catch { + return fallback; + } +} + +export default function FaroChat() { + const t = useTranslations("conductor"); + const [messages, setMessages] = useState([]); + const [input, setInput] = useState(""); + const [pending, setPending] = useState(false); + const [busy, setBusy] = useState(false); + const [voice, setVoice] = useState("idle"); + const [speak, setSpeak] = useState(false); + const [sttModel, setSttModel] = useState("openai/whisper-1"); + const [ttsModel, setTtsModel] = useState("openai/tts-1"); + const [err, setErr] = useState(""); + const recorderRef = useRef(null); + const logRef = useRef(null); + + useEffect(() => { + setSttModel(safeGet(STT_KEY, "openai/whisper-1")); + setTtsModel(safeGet(TTS_KEY, "openai/tts-1")); + }, []); + useEffect(() => { + logRef.current?.scrollTo({ top: logRef.current.scrollHeight }); + }, [messages]); + + const persistModels = (stt: string, tts: string) => { + setSttModel(stt); + setTtsModel(tts); + try { + localStorage.setItem(STT_KEY, stt); + localStorage.setItem(TTS_KEY, tts); + } catch { + // modo privado: segue só em memória + } + }; + + const playAnswer = async (text: string) => { + setVoice("speaking"); + try { + const res = await fetch("/api/v1/audio/speech", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ model: ttsModel, input: text }), + }); + if (!res.ok) { + setErr(await errorMessageOf(res, t("ttsFailed"))); + return; + } + const url = URL.createObjectURL(await res.blob()); + const audio = new Audio(url); + await audio.play().catch(() => undefined); + audio.onended = () => URL.revokeObjectURL(url); + } finally { + setVoice("idle"); + } + }; + + const send = async (message: string, viaVoice = false) => { + const clean = message.trim(); + if (!clean || busy) return; + setErr(""); + setBusy(true); + setVoice("thinking"); + setMessages((m) => [...m, { role: "user", text: clean }]); + setInput(""); + try { + const res = await fetch("/api/conductor/ask", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ message: clean }), + }); + if (!res.ok) { + setErr(await errorMessageOf(res, t("faroOffline"))); + return; + } + const data = await res.json(); + setMessages((m) => [...m, { role: "faro", text: data.text }]); + setPending(Boolean(data.pending)); + if (viaVoice && speak && data.text) await playAnswer(data.text); + } catch { + setErr(t("faroOffline")); + } finally { + setBusy(false); + setVoice((v) => (v === "thinking" ? "idle" : v)); + } + }; + + const startRecording = async () => { + setErr(""); + try { + const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + const recorder = new MediaRecorder(stream); + const chunks: Blob[] = []; + recorder.ondataavailable = (e) => e.data.size > 0 && chunks.push(e.data); + recorder.onstop = async () => { + stream.getTracks().forEach((track) => track.stop()); + setVoice("thinking"); + const blob = new Blob(chunks, { type: recorder.mimeType || "audio/webm" }); + const form = new FormData(); + form.append("model", sttModel); + form.append("file", new File([blob], "faro-ptt.webm", { type: blob.type })); + try { + // multipart: sem header manual — o browser define o boundary + const res = await fetch("/api/v1/audio/transcriptions", { method: "POST", body: form }); + if (!res.ok) { + setErr(await errorMessageOf(res, t("sttFailed"))); + setVoice("idle"); + return; + } + const data = await res.json(); + if (data.text) await send(data.text, true); + else setVoice("idle"); + } catch { + setErr(t("sttFailed")); + setVoice("idle"); + } + }; + recorderRef.current = recorder; + recorder.start(); + setVoice("listening"); + } catch { + setErr(t("micDenied")); + } + }; + + const stopRecording = () => { + if (recorderRef.current?.state === "recording") recorderRef.current.stop(); + recorderRef.current = null; + }; + + const voiceLabel: Record = { + idle: t("voiceIdle"), + listening: t("voiceListening"), + thinking: t("voiceThinking"), + speaking: t("voiceSpeaking"), + }; + + return ( + +
+
+ {messages.length === 0 &&

{t("faroEmpty")}

} + {messages.map((m, i) => ( +
+ + {m.text} + +
+ ))} +
+ + {err && {err}} + {pending && ( +
+ {t("faroPending")} + + +
+ )} + +
+ setInput(e.target.value)} + onKeyDown={(e) => { + if (e.key === "Enter") void send(input); + }} + disabled={busy} + /> + + + +
+ +
+ {t("voiceModels")} +
+ + +
+
+
+
+ ); +} diff --git a/src/app/(dashboard)/dashboard/conductor/page.tsx b/src/app/(dashboard)/dashboard/conductor/page.tsx new file mode 100644 index 0000000000..ab28f3d8d9 --- /dev/null +++ b/src/app/(dashboard)/dashboard/conductor/page.tsx @@ -0,0 +1,10 @@ +import ConductorPageClient from "./ConductorPageClient"; + +export const metadata = { + title: "Conductor — OmniRoute", + description: "OmniConductor CLI-agent fleet: runners, task queue and councils, live.", +}; + +export default function ConductorPage() { + return ; +} diff --git a/src/app/(dashboard)/dashboard/providers/[id]/components/WebSessionCredentialGuide.tsx b/src/app/(dashboard)/dashboard/providers/[id]/components/WebSessionCredentialGuide.tsx index e104188844..44b8883a4e 100644 --- a/src/app/(dashboard)/dashboard/providers/[id]/components/WebSessionCredentialGuide.tsx +++ b/src/app/(dashboard)/dashboard/providers/[id]/components/WebSessionCredentialGuide.tsx @@ -63,6 +63,7 @@ export default function WebSessionCredentialGuide({ requirement.kind === "token" ? "webTokenRequiredCredential" : "webCookieRequiredCredential"; const requiredCredentialFallback = requirement.kind === "token" ? "Required token: {credential}" : "Required cookie: {credential}"; + const guideSteps = requirement.guideSteps; return (
@@ -87,56 +88,82 @@ export default function WebSessionCredentialGuide({ credential: requirement.credentialName, })}

-
    -
  1. - {providerText(t, "webSessionGuideStep1", "Sign in to {provider} in your browser.", { - provider: providerName, - })} - {providerWebsite && providerWebsiteHost && ( - - {providerText(t, "webSessionGuideOpenProvider", "Open {host}", { - host: providerWebsiteHost, - })} - - - )} -
  2. -
  3. - {providerText( - t, - "webSessionGuideStep2Fast", - "Fast path: install the Cookie Editor extension (chromewebstore.google.com → Cookie Editor), open it on the {provider} tab, find {credential} (select all numbered chunks if split), and click Export → Copy with the export format set to “Cookie header”.", - { provider: providerName, credential: requirement.credentialName } - )} -
  4. -
  5. - {providerText( - t, - "webSessionGuideStep3Manual", - "Manual path: open the browser developer tools (F12 → Network), refresh the page, open an authenticated request, and copy the Cookie header value from Request Headers — omit the Cookie: prefix." - )} -
  6. -
  7. - {providerText( - t, - "webSessionGuideStep4", - "Paste it here and check the connection. If it stops working, sign in again and replace it with a fresh value." - )} -
  8. -
+ {guideSteps ? ( +
    + {guideSteps.map((step, index) => ( +
  1. + {step} + {index === 0 && providerWebsite && providerWebsiteHost && ( + + {providerText(t, "webSessionGuideOpenProvider", "Open {host}", { + host: providerWebsiteHost, + })} + + + )} +
  2. + ))} +
+ ) : ( +
    +
  1. + {providerText(t, "webSessionGuideStep1", "Sign in to {provider} in your browser.", { + provider: providerName, + })} + {providerWebsite && providerWebsiteHost && ( + + {providerText(t, "webSessionGuideOpenProvider", "Open {host}", { + host: providerWebsiteHost, + })} + + + )} +
  2. +
  3. + {providerText( + t, + "webSessionGuideStep2Fast", + "Fast path: install the Cookie Editor extension (chromewebstore.google.com → Cookie Editor), open it on the {provider} tab, find {credential} (select all numbered chunks if split), and click Export → Copy with the export format set to “Cookie header”.", + { provider: providerName, credential: requirement.credentialName } + )} +
  4. +
  5. + {providerText( + t, + "webSessionGuideStep3Manual", + "Manual path: open the browser developer tools (F12 → Network), refresh the page, open an authenticated request, and copy the Cookie header value from Request Headers — omit the Cookie: prefix." + )} +
  6. +
  7. + {providerText( + t, + "webSessionGuideStep4", + "Paste it here and check the connection. If it stops working, sign in again and replace it with a fresh value." + )} +
  8. +
+ )}

- {providerText( - t, - "webSessionSecurityHint", - "Treat this like a password: it may access your signed-in web account until it expires or is revoked." - )} + {requirement.guideNote ?? + providerText( + t, + "webSessionSecurityHint", + "Treat this like a password: it may access your signed-in web account until it expires or is revoked." + )}

diff --git a/src/app/(dashboard)/dashboard/providers/[id]/hooks/useModelImportHandlers.ts b/src/app/(dashboard)/dashboard/providers/[id]/hooks/useModelImportHandlers.ts index 17fe29fcd2..ca411e7fd0 100644 --- a/src/app/(dashboard)/dashboard/providers/[id]/hooks/useModelImportHandlers.ts +++ b/src/app/(dashboard)/dashboard/providers/[id]/hooks/useModelImportHandlers.ts @@ -129,7 +129,7 @@ export function useModelImportHandlers({ }); try { - const res = await fetch(`/api/providers/${importTargetId}/models?refresh=true`); + const res = await fetch(`/api/providers/${importTargetId}/models?refresh=true&chatOnly=true`); const data = await res.json(); if (!res.ok) { setImportProgress((prev) => ({ diff --git a/src/app/.well-known/agent.json/route.ts b/src/app/.well-known/agent.json/route.ts index 2b47219585..be16ffa62d 100644 --- a/src/app/.well-known/agent.json/route.ts +++ b/src/app/.well-known/agent.json/route.ts @@ -10,6 +10,8 @@ import { NextResponse } from "next/server"; +import { getFleetSkills } from "@/lib/conductor/fleetSkills"; + const PACKAGE_VERSION = process.env.npm_package_version || "1.8.1"; const BASE_URL = process.env.OMNIROUTE_BASE_URL || "http://localhost:20128"; @@ -20,6 +22,9 @@ const BASE_URL = process.env.OMNIROUTE_BASE_URL || "http://localhost:20128"; * capabilities as an A2A agent. */ export async function GET() { + // Conductor PRD RF2: fleet skills from the OmniConductor hub (cached ~60s; [] when + // the hub is unset/offline — the card stays valid without the fleet section). + const fleetSkills = await getFleetSkills(); const agentCard = { name: "OmniRoute AI 网关", description: @@ -95,6 +100,7 @@ export async function GET() { tags: ["discovery", "capabilities"], examples: ["你能做什么?", "列出你的技能", "展示能力"], }, + ...fleetSkills, ], authentication: { schemes: ["api-key"], diff --git a/src/app/api/a2a/tasks/route.ts b/src/app/api/a2a/tasks/route.ts index 73bd0c9694..02e264c85a 100644 --- a/src/app/api/a2a/tasks/route.ts +++ b/src/app/api/a2a/tasks/route.ts @@ -1,5 +1,9 @@ import { NextResponse } from "next/server"; +import { z } from "zod"; + import { getTaskManager, type TaskState } from "@/lib/a2a/taskManager"; +import { createConductorTask } from "@/lib/conductor/hubProxy"; +import { getSettings } from "@/lib/db/settings"; const VALID_TASK_STATES = new Set([ "submitted", @@ -44,3 +48,97 @@ export async function GET(request: Request) { return NextResponse.json({ error: message }, { status: 500 }); } } + +// ============ POST — delegação de entrada à frota do Conductor (PRD Conductor RF5) ============ + +const delegationSchema = z.object({ + skill: z.string().default("conductor"), + messages: z.array(z.object({ role: z.string(), content: z.string() })).min(1), + metadata: z + .object({ + conductor: z + .object({ + repo: z.object({ url: z.string().min(1), base_ref: z.string().optional() }).optional(), + mode: z.string().optional(), + cli: z.string().optional(), + model: z.string().optional(), + }) + .optional(), + }) + .optional(), +}); + +/** Mesma semântica de auth do JSON-RPC A2A (src/app/a2a/route.ts): Bearer vs OMNIROUTE_API_KEY; aberto se não configurada. */ +function authenticateA2A(request: Request): boolean { + const configuredKey = process.env.OMNIROUTE_API_KEY; + if (!configuredKey) return true; + const token = (request.headers.get("authorization") || "").replace(/^Bearer\s+/i, ""); + return token === configuredKey; +} + +/** + * Traduz uma task A2A externa em `POST /v1/tasks` do hub do OmniConductor. + * Só skills da frota (`conductor` / `conductor-cli-` — as anunciadas no + * Agent Card) são delegáveis; os estados voltam pelo espelho SSE→A2A (RF1). + */ +export async function POST(request: Request) { + if (!authenticateA2A(request)) { + return NextResponse.json({ error: "Unauthorized: missing or invalid API key" }, { status: 401 }); + } + const settings = await getSettings(); + if (settings.a2aEnabled !== true) { + return NextResponse.json( + { error: "A2A endpoint is disabled. Enable it from the Endpoints page." }, + { status: 503 } + ); + } + + let raw: unknown; + try { + raw = await request.json(); + } catch { + return NextResponse.json({ error: "Invalid JSON body" }, { status: 400 }); + } + const parsed = delegationSchema.safeParse(raw); + if (!parsed.success) { + return NextResponse.json({ error: "Invalid A2A task: provide messages[] (and metadata.conductor)" }, { status: 400 }); + } + const { skill, messages, metadata } = parsed.data; + if (skill !== "conductor" && !skill.startsWith("conductor-cli-")) { + return NextResponse.json( + { error: "Only Conductor fleet skills are delegable here (conductor / conductor-cli-)" }, + { status: 400 } + ); + } + const conductor = metadata?.conductor; + if (!conductor?.repo?.url) { + return NextResponse.json( + { error: "Delegation requires metadata.conductor.repo.url (the fleet works on git repos)" }, + { status: 400 } + ); + } + const prompt = [...messages].reverse().find((m) => m.role === "user")?.content ?? messages[messages.length - 1].content; + + const created = await createConductorTask({ + repoUrl: conductor.repo.url, + baseRef: conductor.repo.base_ref, + prompt, + mode: conductor.mode, + cli: skill.startsWith("conductor-cli-") ? skill.slice("conductor-cli-".length) : conductor.cli, + model: conductor.model, + }); + if (!created.ok) { + return NextResponse.json( + { error: `Conductor hub refused the delegation (HTTP ${created.status})` }, + { status: created.status } + ); + } + return NextResponse.json( + { + conductor_task_id: created.task_id, + state: "submitted", + note: "States flow back through the SSE→A2A mirror (GET /api/a2a/tasks, skill=conductor).", + }, + { status: 201 } + ); +} diff --git a/src/app/api/conductor/ask/route.ts b/src/app/api/conductor/ask/route.ts new file mode 100644 index 0000000000..b8d6b15823 --- /dev/null +++ b/src/app/api/conductor/ask/route.ts @@ -0,0 +1,37 @@ +/** + * POST /api/conductor/ask — proxy para o Faro (spokesperson do OmniConductor). + * O /ask do Faro exige credencial do hub (server-side); o browser fala só com + * esta rota. Resposta whitelisted {text, pending} — quando `pending` vier, a UI + * oferece Sim/Não (a trava de confirmação é do motor do Faro; nunca contornada). + */ + +import { NextResponse } from "next/server"; +import { z } from "zod"; + +import { createErrorResponse } from "@/lib/api/errorResponse"; +import { requireManagementAuth } from "@/lib/api/requireManagementAuth"; +import { askFaro } from "@/lib/conductor/faroProxy"; + +const askSchema = z.object({ message: z.string().min(1).max(4000) }); + +export async function POST(request: Request) { + const authError = await requireManagementAuth(request); + if (authError) return authError; + + let raw: unknown; + try { + raw = await request.json(); + } catch { + return createErrorResponse({ status: 400, message: "Invalid JSON body" }); + } + const parsed = askSchema.safeParse(raw); + if (!parsed.success) { + return createErrorResponse({ status: 400, message: "Body must be { message: string (1-4000 chars) }" }); + } + + const answer = await askFaro(parsed.data.message); + if (!answer.ok) { + return createErrorResponse({ status: 503, message: "Faro (spokesperson) is offline or refused the request" }); + } + return NextResponse.json({ text: answer.text, pending: answer.pending }); +} diff --git a/src/app/api/conductor/fleet/route.ts b/src/app/api/conductor/fleet/route.ts new file mode 100644 index 0000000000..d79abd5ad6 --- /dev/null +++ b/src/app/api/conductor/fleet/route.ts @@ -0,0 +1,17 @@ +/** + * GET /api/conductor/fleet — fleet snapshot for the Conductor dashboard panel + * (PRD Conductor RF3). Server-side proxy: the hub token lives only in env; the + * response is the whitelisted shape from hubProxy (degraded {offline:true} when + * the hub is unset/offline — never a 5xx for that). + */ + +import { NextResponse } from "next/server"; + +import { requireManagementAuth } from "@/lib/api/requireManagementAuth"; +import { getFleetSnapshot } from "@/lib/conductor/hubProxy"; + +export async function GET(request: Request) { + const authError = await requireManagementAuth(request); + if (authError) return authError; + return NextResponse.json(await getFleetSnapshot()); +} diff --git a/src/app/api/conductor/tasks/[id]/cancel/route.ts b/src/app/api/conductor/tasks/[id]/cancel/route.ts new file mode 100644 index 0000000000..5440a7ebf4 --- /dev/null +++ b/src/app/api/conductor/tasks/[id]/cancel/route.ts @@ -0,0 +1,26 @@ +/** + * POST /api/conductor/tasks/[id]/cancel — cancela a task no hub do Conductor. + * Ação destrutiva: auth de gerência + confirmação na UI (ConfirmModal). A + * recusa do hub volta só como status + mensagem sanitizada (nunca o corpo + * upstream — Hard Rule #12). + */ + +import { NextResponse } from "next/server"; + +import { createErrorResponse } from "@/lib/api/errorResponse"; +import { requireManagementAuth } from "@/lib/api/requireManagementAuth"; +import { cancelConductorTask } from "@/lib/conductor/hubProxy"; + +export async function POST(request: Request, ctx: { params: Promise<{ id: string }> }) { + const authError = await requireManagementAuth(request); + if (authError) return authError; + const { id } = await ctx.params; + const result = await cancelConductorTask(id); + if (!result.ok) { + return createErrorResponse({ + status: result.status, + message: `Conductor hub refused the cancellation (HTTP ${result.status})`, + }); + } + return NextResponse.json({ ok: true }); +} diff --git a/src/app/api/conductor/tasks/[id]/route.ts b/src/app/api/conductor/tasks/[id]/route.ts new file mode 100644 index 0000000000..379b78989f --- /dev/null +++ b/src/app/api/conductor/tasks/[id]/route.ts @@ -0,0 +1,22 @@ +/** + * GET /api/conductor/tasks/[id] — whitelisted task detail (manifest, prompt, + * council funnel) from the Conductor hub. 404 sanitizado quando o hub não + * conhece a task — o corpo do hub nunca é repassado. + */ + +import { NextResponse } from "next/server"; + +import { createErrorResponse } from "@/lib/api/errorResponse"; +import { requireManagementAuth } from "@/lib/api/requireManagementAuth"; +import { getConductorTaskDetail } from "@/lib/conductor/hubProxy"; + +export async function GET(request: Request, ctx: { params: Promise<{ id: string }> }) { + const authError = await requireManagementAuth(request); + if (authError) return authError; + const { id } = await ctx.params; + const detail = await getConductorTaskDetail(id); + if (!detail) { + return createErrorResponse({ status: 404, message: "Conductor task not found (or hub offline)" }); + } + return NextResponse.json(detail); +} diff --git a/src/app/api/oauth/[provider]/[action]/route.ts b/src/app/api/oauth/[provider]/[action]/route.ts index dcccd3ff98..7b71a07758 100755 --- a/src/app/api/oauth/[provider]/[action]/route.ts +++ b/src/app/api/oauth/[provider]/[action]/route.ts @@ -70,14 +70,12 @@ const NO_PKCE_DEVICE_CODE_PROVIDERS = new Set([ * Providers whose PKCE flow has been retired but whose import-token path is * still active. Returning 410 Gone on `authorize` / `start-callback-server` / * `poll-callback` (instead of 400) tells callers the action is permanently - * gone and points them at /import-token. windsurf/devin-cli were retired - * 2026-05-29 because app.devin.ai/editor/signin returned 404 post-rebrand. - * Phase 2 will reintroduce browser login via Firebase OAuth + RegisterUser. + * gone and points them at /import-token. */ -const RETIRED_PKCE_PROVIDERS = new Set(["windsurf", "devin-cli"]); +const RETIRED_PKCE_PROVIDERS = new Set(["devin-desktop", "devin-cli"]); /** Providers that allow direct import of a raw API token (no OAuth exchange). */ -const IMPORT_TOKEN_PROVIDERS = new Set(["windsurf", "devin-cli", "grok-cli"]); +const IMPORT_TOKEN_PROVIDERS = new Set(["devin-desktop", "devin-cli", "grok-cli"]); /** * Constant-time string comparison to prevent timing-oracle attacks (CWE-208). @@ -126,7 +124,6 @@ export async function GET( // The action permanently does not exist for these providers regardless of who // is asking — answering 401 first would mislead callers into thinking the // route is gated rather than gone. See spec - // _tasks/superpowers/specs/2026-05-29-windsurf-login-fix-design.md. try { const earlyParams = await params; if ( @@ -140,9 +137,7 @@ export async function GET( error: `Browser OAuth disabled for ${earlyParams.provider} — use import-token via ` + `/api/oauth/${earlyParams.provider}/import-token. ` + - `In the Windsurf/VS Code IDE, run the "Windsurf: Provide Auth Token" command ` + - `(or click the Jupyter "Get Windsurf Authentication Token" button), then copy+paste the shown token. ` + - `Opening https://windsurf.com/show-auth-token directly only shows a "Redirecting" page — the IDE must initiate the ?state=... flow.`, + `Paste an existing Devin API key from an authenticated Devin session. Key export availability and steps vary by Devin version and account.`, }, { status: 410 } ); @@ -393,9 +388,7 @@ export async function POST( error: `Browser OAuth disabled for ${earlyParams.provider} — use import-token via ` + `/api/oauth/${earlyParams.provider}/import-token. ` + - `In the Windsurf/VS Code IDE, run the "Windsurf: Provide Auth Token" command ` + - `(or click the Jupyter "Get Windsurf Authentication Token" button), then copy+paste the shown token. ` + - `Opening https://windsurf.com/show-auth-token directly only shows a "Redirecting" page — the IDE must initiate the ?state=... flow.`, + `Paste an existing Devin API key from an authenticated Devin session. Key export availability and steps vary by Devin version and account.`, }, { status: 410 } ); @@ -414,18 +407,15 @@ export async function POST( const { provider, action } = await params; // Phase 1 hotfix (2026-05-29): retired PKCE flows return 410 Gone before - // body parsing. windsurf/devin-cli `poll-callback` is permanently retired - // because the upstream PKCE endpoint returns 404. Use /import-token - // (handled later in this same handler) for those providers instead. + // body parsing. Devin Desktop/CLI `poll-callback` is permanently retired; + // use /import-token (handled later in this same handler) instead. if (RETIRED_PKCE_PROVIDERS.has(provider) && action === "poll-callback") { return NextResponse.json( { error: `Browser OAuth disabled for ${provider} — use import-token via ` + `/api/oauth/${provider}/import-token. ` + - `In the Windsurf/VS Code IDE, run the "Windsurf: Provide Auth Token" command ` + - `(or click the Jupyter "Get Windsurf Authentication Token" button), then copy+paste the shown token. ` + - `Opening https://windsurf.com/show-auth-token directly only shows a "Redirecting" page — the IDE must initiate the ?state=... flow.`, + `Paste an existing Devin API key from an authenticated Devin session. Key export availability and steps vary by Devin version and account.`, }, { status: 410 } ); diff --git a/src/app/api/providers/[id]/models/discovery/providerModelsConfig.ts b/src/app/api/providers/[id]/models/discovery/providerModelsConfig.ts index b10d04b9c1..4cb2eb02e3 100644 --- a/src/app/api/providers/[id]/models/discovery/providerModelsConfig.ts +++ b/src/app/api/providers/[id]/models/discovery/providerModelsConfig.ts @@ -23,7 +23,7 @@ import { QWEN_CLOUD_TEXT_MODELS } from "@omniroute/open-sse/config/providers/reg import { filterAlibabaFreeEligibleModels } from "@omniroute/open-sse/services/alibabaFreeTierDiscovery.ts"; import { shouldUseLiveAlibabaFreeModelDiscovery } from "@omniroute/open-sse/services/alibabaFreeTier.ts"; import { isDashscopeTextModelId } from "@omniroute/open-sse/services/dashscopeTextModels.ts"; -import { extractZaiToken } from "@omniroute/open-sse/executors/zai-web.ts"; +import { extractZaiToken } from "@omniroute/open-sse/services/zaiWebCredentials.ts"; import { normalizeOpenAiLikeModelsResponse } from "./normalizers"; const QWEN_CLOUD_TEXT_MODEL_IDS = new Set(QWEN_CLOUD_TEXT_MODELS.map((model) => model.id)); @@ -376,37 +376,6 @@ export const PROVIDER_MODELS_CONFIG: Record = }, }, "qwen-cloud": QWEN_CLOUD_TEXT_MODELS_CONFIG, - // #7678: zai-web (chat.z.ai) had no PROVIDER_MODELS_CONFIG entry so its - // hardcoded 3-model registry catalog (glm-4.6/glm-4.5/glm-4.5v — one or more - // now 404 upstream) was the only source; wire live discovery against the - // undocumented chat.z.ai/api/models endpoint. Same category + shape as - // qwen-web above: undocumented consumer web-chat endpoint, - // { data: { data: [...] } } envelope with a flatter { data: [...] } fallback. - // Bearer token reuses the executor's own extractZaiToken() so discovery and - // chat parse the stored cookie identically. - // UNVERIFIED (per /triage-features): no live z.ai session available during - // research — the exact response shape and whether bare Bearer auth (vs the - // full Cookie header chat-completions requires) is accepted must be - // confirmed against a real account before merge (see plan-file Step 4). - "zai-web": { - url: "https://chat.z.ai/api/models", - method: "GET", - headers: { "Content-Type": "application/json" }, - buildHeaders: (token) => ({ - "Content-Type": "application/json", - Authorization: `Bearer ${extractZaiToken(token)}`, - }), - parseResponse: (data) => { - const innerData = data?.data?.data || data?.data || []; - return (Array.isArray(innerData) ? innerData : []) - .map((item: any) => ({ - id: item.id || item.name, - name: item.name || item.id, - owned_by: item.owned_by || "zai-web", - })) - .filter((m: any) => m.id); - }, - }, antigravity: { url: getAntigravityModelsDiscoveryUrls()[0], method: "POST", diff --git a/src/app/api/providers/[id]/models/modelRouteProjection.ts b/src/app/api/providers/[id]/models/modelRouteProjection.ts new file mode 100644 index 0000000000..cdfd71dac6 --- /dev/null +++ b/src/app/api/providers/[id]/models/modelRouteProjection.ts @@ -0,0 +1,112 @@ +import { NextResponse } from "next/server"; +import { getRegistryEntry } from "@omniroute/open-sse/config/providerRegistry.ts"; +import { filterChatSelectableModels } from "@omniroute/open-sse/services/modelEndpointPolicy.ts"; +import { filterSelectableModels } from "@omniroute/open-sse/services/modelLifecycle.ts"; +import { getModelIsHidden } from "@/lib/db/models"; +import { getSettings } from "@/lib/db/settings"; +import { getStaticModelsForProvider } from "@/lib/providers/staticModels"; +import { SAFE_OUTBOUND_FETCH_PRESETS, safeOutboundFetch } from "@/shared/network/safeOutboundFetch"; +import { getProviderOutboundGuard } from "@/shared/network/outboundUrlGuardPolicy"; +import { getModelsByProviderId } from "@/shared/constants/models"; +import { isProviderBlockedByIdOrAlias } from "@/shared/utils/noAuthProviders"; +import { mergeLocalCatalogModels } from "./discovery/helpers"; + +export function filterModelsForRoute< + T extends { id: string; supportedEndpoints?: readonly string[] }, +>(provider: string, models: readonly T[], chatOnly: boolean): T[] { + const selectable = filterSelectableModels(provider, models); + return chatOnly ? filterChatSelectableModels(provider, selectable) : selectable; +} + +function toLiveModel(item: Record): { id: string; name: string } | null { + const itemId = typeof item.id === "string" ? item.id.trim() : ""; + if (!itemId) return null; + const itemName = + typeof item.display_name === "string" + ? item.display_name + : typeof item.name === "string" + ? item.name + : itemId; + return { id: itemId, name: itemName }; +} + +async function fetchLiveNoAuthModels( + modelsUrl: string, + providerId: string, + connectionId: string, + excludeHidden: boolean, + chatOnly: boolean +): Promise { + try { + const liveResponse = await safeOutboundFetch(modelsUrl, { + ...SAFE_OUTBOUND_FETCH_PRESETS.modelsDiscovery, + guard: getProviderOutboundGuard(), + method: "GET", + headers: { "Content-Type": "application/json" }, + }); + if (!liveResponse.ok) return null; + + const data = await liveResponse.json(); + const liveModels: Array<{ id: string; name: string }> = ( + (data.data || data.models || []) as Array> + ) + .map(toLiveModel) + .filter((model): model is { id: string; name: string } => model !== null); + if (liveModels.length === 0) return null; + + const selectable = filterModelsForRoute(providerId, liveModels, chatOnly); + const visible = excludeHidden + ? selectable.filter((model) => !getModelIsHidden(providerId, model.id)) + : selectable; + return NextResponse.json({ + provider: providerId, + connectionId, + models: visible, + source: "upstream", + }); + } catch { + return null; + } +} + +export async function buildNoAuthModelsResponse( + providerId: string, + connectionId: string, + excludeHidden: boolean, + chatOnly: boolean +) { + if (isProviderBlockedByIdOrAlias(providerId, (await getSettings()).blockedProviders)) { + return NextResponse.json({ error: "Provider is disabled" }, { status: 403 }); + } + + const registryEntry = getRegistryEntry(providerId); + const modelsUrl = + typeof registryEntry?.modelsUrl === "string" && registryEntry.modelsUrl.length > 0 + ? registryEntry.modelsUrl + : null; + if (modelsUrl) { + const live = await fetchLiveNoAuthModels( + modelsUrl, + providerId, + connectionId, + excludeHidden, + chatOnly + ); + if (live) return live; + } + + const catalog = mergeLocalCatalogModels( + getModelsByProviderId(providerId) || [], + getStaticModelsForProvider(providerId) || [] + ).map((model) => ({ id: model.id, name: model.name || model.id })); + const selectable = filterModelsForRoute(providerId, catalog, chatOnly); + const visible = excludeHidden + ? selectable.filter((model) => !getModelIsHidden(providerId, model.id)) + : selectable; + return NextResponse.json({ + provider: providerId, + connectionId, + models: visible, + source: "local_catalog", + }); +} diff --git a/src/app/api/providers/[id]/models/route.ts b/src/app/api/providers/[id]/models/route.ts index 0e8c198de9..7ad24bb133 100755 --- a/src/app/api/providers/[id]/models/route.ts +++ b/src/app/api/providers/[id]/models/route.ts @@ -10,10 +10,8 @@ import { getModelsByProviderId } from "@/shared/constants/models"; import { resolveAlibabaProviderModelsUrl } from "@/shared/constants/alibabaProviderRegions"; import { getStaticModelsForProvider } from "@/lib/providers/staticModels"; import { providerUsesCuratedModelsOnly } from "@/lib/providers/modelListingCapability"; -import { isProviderBlockedByIdOrAlias } from "@/shared/utils/noAuthProviders"; import { getCachedProviderConnectionById, - getSettings, getModelIsHidden, resolveProxyForProvider, } from "@/lib/localDb"; @@ -128,91 +126,7 @@ import { fetchCodexGithubCatalogModels, } from "./discovery/codex"; import { maybeHandleConolModelDiscovery } from "./conolDiscovery"; - -function toLiveModel(item: Record): { id: string; name: string } | null { - const itemId = typeof item.id === "string" ? item.id.trim() : ""; - if (!itemId) return null; - const itemName = - typeof item.display_name === "string" - ? item.display_name - : typeof item.name === "string" - ? item.name - : itemId; - return { id: itemId, name: itemName }; -} - -async function fetchLiveNoAuthModels( - modelsUrl: string, - providerId: string, - connectionId: string, - excludeHidden: boolean -): Promise { - try { - const liveResponse = await safeOutboundFetch(modelsUrl, { - ...SAFE_OUTBOUND_FETCH_PRESETS.modelsDiscovery, - guard: getProviderOutboundGuard(), - method: "GET", - headers: { "Content-Type": "application/json" }, - }); - if (!liveResponse.ok) return null; - - const data = await liveResponse.json(); - const liveModels: Array<{ id: string; name: string }> = ( - (data.data || data.models || []) as Array> - ) - .map(toLiveModel) - .filter((model): model is { id: string; name: string } => model !== null); - if (liveModels.length === 0) return null; - - const visible = excludeHidden - ? liveModels.filter((model) => !getModelIsHidden(providerId, model.id)) - : liveModels; - return NextResponse.json({ - provider: providerId, - connectionId, - models: visible, - source: "upstream", - }); - } catch { - // Live fetch failed — fall back to the bundled catalog. - return null; - } -} - -async function buildNoAuthModelsResponse( - providerId: string, - connectionId: string, - excludeHidden: boolean -) { - if (isProviderBlockedByIdOrAlias(providerId, (await getSettings()).blockedProviders)) { - return NextResponse.json({ error: "Provider is disabled" }, { status: 403 }); - } - - const registryEntry = getRegistryEntry(providerId); - const modelsUrl = - typeof registryEntry?.modelsUrl === "string" && registryEntry.modelsUrl.length > 0 - ? registryEntry.modelsUrl - : null; - - if (modelsUrl) { - const live = await fetchLiveNoAuthModels(modelsUrl, providerId, connectionId, excludeHidden); - if (live) return live; - } - - const catalog = mergeLocalCatalogModels( - getModelsByProviderId(providerId) || [], - getStaticModelsForProvider(providerId) || [] - ).map((model) => ({ id: model.id, name: model.name || model.id })); - const visible = excludeHidden - ? catalog.filter((model) => !getModelIsHidden(providerId, model.id)) - : catalog; - return NextResponse.json({ - provider: providerId, - connectionId, - models: visible, - source: "local_catalog", - }); -} +import { buildNoAuthModelsResponse, filterModelsForRoute } from "./modelRouteProjection"; /** * GET /api/providers/[id]/models - Get models list from provider @@ -230,6 +144,9 @@ export async function GET( const excludeHidden = searchParams.get("excludeHidden") === "true"; const excludeCustom = searchParams.get("excludeCustom") === "true"; const refresh = searchParams.get("refresh") === "true"; + const chatOnly = + searchParams.get("chatOnly") === "true" || + request.headers.get("x-omniroute-model-surface")?.toLowerCase() === "chat"; const connection = await getCachedProviderConnectionById(id); const connectionProvider = @@ -252,7 +169,8 @@ export async function GET( return buildNoAuthModelsResponse( noAuthProviderId, typeof connection?.id === "string" ? connection.id : id, - excludeHidden + excludeHidden, + chatOnly ); } @@ -285,7 +203,7 @@ export async function GET( // (dedup by id). Internal model-sync discovery opts out because these rows // are a response projection, not provider-discovered models. let customModelsForProvider: Array<{ id: string; name?: string }> = []; - if (!excludeCustom) { + if (!excludeCustom && !usesCuratedModelsOnly) { try { const custom = await getCustomModels(provider); if (Array.isArray(custom)) { @@ -311,6 +229,7 @@ export async function GET( const buildResponse = (payload: any, statusConfig?: ResponseInit) => { if (payload.models && Array.isArray(payload.models)) { payload.models = mergeCustomModels(payload.models); + payload.models = filterModelsForRoute(provider, payload.models, chatOnly); } if (excludeHidden && payload.models && Array.isArray(payload.models)) { payload.models = payload.models.filter((m: any) => !getModelIsHidden(provider, m.id)); @@ -324,7 +243,11 @@ export async function GET( const autoFetchModels = isAutoFetchModelsEnabled(connection.providerSpecificData); const cachedDiscoveryModels = usesCuratedModelsOnly ? [] - : await getCachedDiscoveredModels(provider, connectionId); + : filterModelsForRoute( + provider, + await getCachedDiscoveredModels(provider, connectionId), + chatOnly + ); // Check for synced models from ANY connection of this provider. // When sync has been performed (even on a different connection), @@ -337,8 +260,9 @@ export async function GET( }> | null = null; try { const allSynced = usesCuratedModelsOnly ? [] : await getSyncedAvailableModels(provider); - if (Array.isArray(allSynced) && allSynced.length > 0) { - providerSyncedModels = allSynced.map((m) => ({ + const selectableSynced = filterModelsForRoute(provider, allSynced, chatOnly); + if (selectableSynced.length > 0) { + providerSyncedModels = selectableSynced.map((m) => ({ id: m.id, name: m.name || m.id, ...(m.apiFormat ? { apiFormat: m.apiFormat } : {}), @@ -490,7 +414,11 @@ export async function GET( // its other connections) or the static catalog when none remain. let freshSynced: Awaited> = []; try { - freshSynced = await getSyncedAvailableModels(provider); + freshSynced = filterModelsForRoute( + provider, + await getSyncedAvailableModels(provider), + chatOnly + ); } catch { /* DB unavailable — fall through to static catalog */ } diff --git a/src/app/api/providers/[id]/sync-models/route.ts b/src/app/api/providers/[id]/sync-models/route.ts index 1ab80f1c5c..95986e15a9 100644 --- a/src/app/api/providers/[id]/sync-models/route.ts +++ b/src/app/api/providers/[id]/sync-models/route.ts @@ -1,6 +1,10 @@ import { NextResponse } from "next/server"; import { getCachedProviderConnectionById } from "@/lib/localDb"; -import { getSyncedAvailableModelsForConnection } from "@/lib/db/models"; +import { + deleteImportedCustomModels, + deleteSyncedAvailableModelsForProvider, + getSyncedAvailableModelsForConnection, +} from "@/lib/db/models"; import { selectModelsForImport } from "@/shared/utils/freeModels"; import { importManagedModels, @@ -330,6 +334,7 @@ async function fetchProviderModelsForSync(request: Request, connectionId: string "?refresh=true&excludeCustom=true"; const headers = { cookie: request.headers.get("cookie") || "", + "x-omniroute-model-surface": "chat", ...buildModelSyncInternalHeaders(), }; @@ -394,6 +399,10 @@ export async function POST(request: Request, { params }: { params: Promise<{ id: logProvider = toNonEmptyString(connection.provider) || "unknown"; channelLabel = getModelSyncChannelLabel(connection); if (providerUsesCuratedModelsOnly(logProvider)) { + const [removedSyncedLists, removedImportedModelIds] = await Promise.all([ + deleteSyncedAvailableModelsForProvider(logProvider), + deleteImportedCustomModels(logProvider), + ]); return NextResponse.json({ provider: logProvider, connectionId: id, @@ -402,6 +411,10 @@ export async function POST(request: Request, { params }: { params: Promise<{ id: syncedModels: 0, availableModelsCount: 0, models: [], + cleanup: { + removedSyncedLists, + removedImportedModels: removedImportedModelIds.length, + }, }); } const previousSyncedAvailableModelsForConnection = await getSyncedAvailableModelsForConnection( diff --git a/src/app/api/providers/[id]/test/oauthTestConfig.ts b/src/app/api/providers/[id]/test/oauthTestConfig.ts index 2a791bc0e7..52f8713ee2 100644 --- a/src/app/api/providers/[id]/test/oauthTestConfig.ts +++ b/src/app/api/providers/[id]/test/oauthTestConfig.ts @@ -147,6 +147,13 @@ export const OAUTH_TEST_CONFIG = { // connectivity is proven by every chat/completions request. checkExpiry: true, }, + "devin-desktop": { + // Devin Desktop authentication is import-only: the copied API key has no + // refresh token or known expiry. Validate token presence here; real + // connectivity is exercised by chat requests. + checkExpiry: true, + refreshable: false, + }, "grok-cli": { // #7610: was entirely absent from OAUTH_TEST_CONFIG, so "Test Connection" // always fell through to the generic "Provider test not supported" branch diff --git a/src/app/api/v1/models/catalog.ts b/src/app/api/v1/models/catalog.ts index dcd5e7c8b3..69c391cdf3 100644 --- a/src/app/api/v1/models/catalog.ts +++ b/src/app/api/v1/models/catalog.ts @@ -29,6 +29,7 @@ import { getAllVideoModels } from "@omniroute/open-sse/config/videoRegistry"; import { getAllMusicModels } from "@omniroute/open-sse/config/musicRegistry"; import { REGISTRY } from "@omniroute/open-sse/config/providerRegistry"; import { CODEX_NATIVE_UNPREFIXED_MODELS } from "@omniroute/open-sse/services/model"; +import { isModelSelectable } from "@omniroute/open-sse/services/modelLifecycle"; import { resolveNestedComboTargets } from "@omniroute/open-sse/services/combo"; import { AUTO_TEMPLATE_VARIANTS, @@ -101,6 +102,7 @@ import { isCcDiscoveryModelCatalogClient, } from "./catalogRequest"; import { incrementCcDiscoveryHitCount } from "@/lib/db/ccDiscoveryMetrics"; +import { isUnifiedChatSourceModelSelectable } from "./catalogModelPolicy"; import { isFreeModel, providerHasFreeModels } from "@/shared/utils/freeModels"; import { isCodexDiscoveryModelExcluded } from "@/shared/services/codexDiscoveryPolicy"; import { buildErrorBody } from "@omniroute/open-sse/utils/error"; @@ -141,8 +143,7 @@ function yieldCatalogBuildTurn(): Promise { */ export async function getUnifiedModelsResponse( request: Request, - corsHeaders: Record = {}, - cachePolicy: { hideAutoCombos?: boolean; hideNoThinkVariants?: boolean } = {} + corsHeaders: Record = {} ) { const diagnosticHeaders = getCatalogDiagnosticsHeaders({ request }); @@ -711,7 +712,10 @@ async function buildUnifiedModelsResponseCore( Object.keys(syncedModelsByProvider).filter((pid) => { if (providerUsesCuratedModelsOnly(pid)) return false; const models = syncedModelsByProvider[pid]; - return Array.isArray(models) && models.length > 0; + return ( + Array.isArray(models) && + models.some((model) => isUnifiedChatSourceModelSelectable(pid, model)) + ); }) ); const isRegisteredEffortVariant = ( @@ -784,6 +788,7 @@ async function buildUnifiedModelsResponseCore( (!isRegisteredEffortVariant(providerModels, model.id) && !hasDeclaredEffortTiers)) ) continue; + if (!isModelSelectable(canonicalProviderId, model.id)) continue; if (!providerSupportsModel(canonicalProviderId, model.id)) continue; const aliasId = `${alias}/${model.id}`; if (getModelIsHidden(canonicalProviderId, model.id)) continue; @@ -901,6 +906,7 @@ async function buildUnifiedModelsResponseCore( })) ) : syncedModels) { + if (!isUnifiedChatSourceModelSelectable(canonicalProviderId, sm)) continue; if (!providerSupportsModel(canonicalProviderId, sm.id)) continue; if (canonicalProviderId === "codex" && isCodexDiscoveryModelExcluded(sm)) { continue; @@ -1296,6 +1302,8 @@ async function buildUnifiedModelsResponseCore( for (const model of providerCustomModels) { const modelId = typeof model.id === "string" ? model.id : null; if (!modelId) continue; + if (!isUnifiedChatSourceModelSelectable(canonicalProviderId, { ...model, id: modelId })) + continue; if (model.isHidden === true) continue; if (getModelIsHidden(canonicalProviderId, modelId)) continue; // #6328: apply hidePaidModels to user-defined custom rows too. diff --git a/src/app/api/v1/models/catalogCache.ts b/src/app/api/v1/models/catalogCache.ts index a5f3ce6c73..6cca9e9cd8 100644 --- a/src/app/api/v1/models/catalogCache.ts +++ b/src/app/api/v1/models/catalogCache.ts @@ -200,10 +200,10 @@ function scheduleBackgroundRefresh( }); }, 0); }); - // Nobody on the stale path awaits this, so pre-handle the rejection; a cold-path // caller that joins it via catalogInFlight attaches its own handler and still // observes the failure. + refreshPromise.catch(() => {}); catalogInFlight.set(cacheKey, { generation, promise: refreshPromise }); refreshPromise diff --git a/src/app/api/v1/models/catalogModelPolicy.ts b/src/app/api/v1/models/catalogModelPolicy.ts new file mode 100644 index 0000000000..f2d5dcb34f --- /dev/null +++ b/src/app/api/v1/models/catalogModelPolicy.ts @@ -0,0 +1,18 @@ +import { getModelEndpointDecision } from "@omniroute/open-sse/services/modelEndpointPolicy"; +import { isModelSelectable } from "@omniroute/open-sse/services/modelLifecycle"; + +type CatalogModelPolicyInput = { + id: string; + supportedEndpoints?: readonly string[]; +}; + +export function isUnifiedChatSourceModelSelectable( + provider: string, + model: CatalogModelPolicyInput +): boolean { + return ( + isModelSelectable(provider, model.id) && + getModelEndpointDecision(provider, model.id, model.supportedEndpoints).reason !== + "provider-policy" + ); +} diff --git a/src/app/auth/callback/page.tsx b/src/app/auth/callback/page.tsx index 4f24ca9e96..da1ed53727 100644 --- a/src/app/auth/callback/page.tsx +++ b/src/app/auth/callback/page.tsx @@ -1,6 +1,6 @@ /** * /auth/callback — OAuth callback endpoint for providers that use the - * `/auth/callback` path (Windsurf, Devin CLI PKCE flow). + * `/auth/callback` path (including the Devin PKCE compatibility flow). * * Reuses the same logic as /callback: * - postMessage to opener (popup mode) diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index 320f284d25..f9da468bbb 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "لا توجد تجاوزات — سيشارك جميع المزودين النشطين بنماذجهم الافتراضية" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) هو الصديق المؤسس للمصادر المفتوحة لـ OmniRoute", - "description": "يوفر Kimi K3 نافذة سياق بحجم 1M-token وأداء برمجة رائدًا لـ OmniRoute بجزء بسيط من التكلفة.", - "cta": "احصل على Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) هو صديق المصدر المفتوح المؤسس لـ OmniRoute", + "description": "استخدم Kimi K3 في OmniRoute عبر واجهة Kimi API الرسمية. استمتع بذكاء متقدم بتكلفة أقل.", + "cta": "احصل على مفتاح Kimi API", "partnerLinkNote": "رابط شريك", "dismissAriaLabel": "تجاهل" }, diff --git a/src/i18n/messages/az.json b/src/i18n/messages/az.json index e935e6794c..ba1f3ebddc 100644 --- a/src/i18n/messages/az.json +++ b/src/i18n/messages/az.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Əvəzetmə yoxdur — bütün aktiv provayderlər standart modelləri ilə iştirak edəcək" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) OmniRoute-un təsisçi Açıq Mənbə Dostudur", - "description": "Kimi K3, OmniRoute-a 1M-token kontekst pəncərəsi və qabaqcıl kodlaşdırma performansı gətirir, həm də xərclərin kiçik bir hissəsinə.", - "cta": "Kimi Code əldə et", + "foundingFriendTitle": "Kimi (Moonshot AI) OmniRoute-un təsisçi Açıq Mənbə Dostudur", + "description": "Kimi K3-ü OmniRoute-da rəsmi Kimi API vasitəsilə istifadə edin. Daha az xərclə qabaqcıl intellektdən yararlanın.", + "cta": "Kimi API açarı əldə edin", "partnerLinkNote": "Tərəfdaş linki", "dismissAriaLabel": "Bağla" }, diff --git a/src/i18n/messages/bg.json b/src/i18n/messages/bg.json index 3ea13d4863..a2aa4128cf 100644 --- a/src/i18n/messages/bg.json +++ b/src/i18n/messages/bg.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Без предефинирания — всички активни доставчици ще участват с моделите си по подразбиране" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) е основаващият приятел на отворения код на OmniRoute", - "description": "Kimi K3 осигурява контекстен прозорец от 1M-token и водеща производителност при програмиране за OmniRoute на малка част от цената.", - "cta": "Вземете Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) е основополагащият приятел на отворения код на OmniRoute", + "description": "Използвайте Kimi K3 в OmniRoute чрез официалния Kimi API. Насладете се на върхов интелект на по-ниска цена.", + "cta": "Вземете Kimi API ключ", "partnerLinkNote": "Партньорска връзка", "dismissAriaLabel": "Затваряне" }, diff --git a/src/i18n/messages/bn.json b/src/i18n/messages/bn.json index c12fbff0f7..4336e31230 100644 --- a/src/i18n/messages/bn.json +++ b/src/i18n/messages/bn.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "কোনো ওভাররাইড নেই — সমস্ত সক্রিয় প্রোভাইডার তাদের ডিফল্ট মডেল নিয়ে অংশগ্রহণ করবে" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) হল OmniRoute-এর প্রতিষ্ঠাতা ওপেন সোর্স বন্ধু", - "description": "Kimi K3 খরচের একটি সামান্য অংশেই OmniRoute-এ একটি 1M-token কনটেক্সট উইন্ডো এবং ফ্রন্টিয়ার কোডিং পারফরম্যান্স নিয়ে আসে।", - "cta": "Kimi Code পান", + "foundingFriendTitle": "Kimi (Moonshot AI) হল OmniRoute-এর প্রতিষ্ঠাতা ওপেন সোর্স বন্ধু", + "description": "অফিসিয়াল Kimi API-এর মাধ্যমে OmniRoute-এ Kimi K3 ব্যবহার করুন। কম খরচে অত্যাধুনিক বুদ্ধিমত্তা উপভোগ করুন।", + "cta": "Kimi API কী নিন", "partnerLinkNote": "পার্টনার লিঙ্ক", "dismissAriaLabel": "খারিজ করুন" }, diff --git a/src/i18n/messages/cs.json b/src/i18n/messages/cs.json index 972a4422d5..1137f5c0b8 100644 --- a/src/i18n/messages/cs.json +++ b/src/i18n/messages/cs.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Žádná přepsání — všichni aktivní poskytovatelé se zapojí se svými výchozími modely" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) je zakládající open source přítel OmniRoute", - "description": "Kimi K3 přináší do OmniRoute kontextové okno s kapacitou 1M-token a špičkový výkon při kódování za zlomek ceny.", - "cta": "Získat Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) je zakládající open source přítel OmniRoute", + "description": "Používejte Kimi K3 v OmniRoute přes oficiální Kimi API. Užijte si špičkovou inteligenci za méně peněz.", + "cta": "Získat Kimi API klíč", "partnerLinkNote": "Partnerský odkaz", "dismissAriaLabel": "Zavřít" }, diff --git a/src/i18n/messages/da.json b/src/i18n/messages/da.json index a0ffa0b686..1b5401cad4 100644 --- a/src/i18n/messages/da.json +++ b/src/i18n/messages/da.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Ingen tilsidesættelser — alle aktive udbydere vil deltage med deres standardmodeller" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) er OmniRoutes grundlæggende open source-ven", - "description": "Kimi K3 bringer et 1M-token kontekstvindue og banebrydende kodningsydelse til OmniRoute til en brøkdel af prisen.", - "cta": "Hent Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) er OmniRoutes stiftende open source-ven", + "description": "Brug Kimi K3 i OmniRoute via det officielle Kimi API. Nyd banebrydende intelligens til en lavere pris.", + "cta": "Få en Kimi API-nøgle", "partnerLinkNote": "Partnerlink", "dismissAriaLabel": "Afvis" }, diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index d993330be8..2d2922039d 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -12395,9 +12395,9 @@ "noProviderOverrides": "Keine Überschreibungen — alle aktiven Anbieter nehmen mit ihren Standardmodellen teil" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) ist OmniRoutes Gründungs-Open-Source-Freund", - "description": "Kimi K3 bringt ein 1M-token-Kontextfenster und erstklassige Coding-Leistung zu einem Bruchteil der Kosten zu OmniRoute.", - "cta": "Kimi Code holen", + "foundingFriendTitle": "Kimi (Moonshot AI) ist OmniRoutes Open-Source-Gründungsfreund", + "description": "Nutze Kimi K3 in OmniRoute über die offizielle Kimi API. Genieße Spitzenintelligenz bei geringeren Kosten.", + "cta": "Kimi API-Schlüssel holen", "partnerLinkNote": "Partnerlink", "dismissAriaLabel": "Schließen" }, diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index 58a9874c27..01b1095683 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -1275,11 +1275,13 @@ "groupSeparatorLabel": "Separator", "discovery": "Discovery", "discoverySubtitle": "Scan providers for free access", -"resilienceConnections": "Connection Resilience", -"resilienceConnectionsSubtitle": "Cooldown, breaker, lockout state", -"settingsModalityBridge": "Modality Bridge", -"settingsModalityBridgeSubtitle": "Image/audio → text fallback for text-only models", -"commandPalette": { + "conductor": "Conductor", + "conductorSubtitle": "CLI-agent fleet", + "resilienceConnections": "Connection Resilience", + "resilienceConnectionsSubtitle": "Cooldown, breaker, lockout state", + "settingsModalityBridge": "Modality Bridge", + "settingsModalityBridgeSubtitle": "Image/audio → text fallback for text-only models", + "commandPalette": { "title": "Command palette", "searchPlaceholder": "Search pages, settings, tools...", "clearSearch": "Clear search", @@ -6191,12 +6193,13 @@ "cline": "Connect Cline with the existing OAuth flow.", "cursor": "Connect Cursor IDE with the existing OAuth flow.", "github": "Connect GitHub Copilot with the existing OAuth flow.", - "gitlab-duo": "GitLab Duo OAuth is not configured. Register an OAuth application at https://gitlab.com/-/profile/applications with redirect URI http://localhost:20128/callback and scopes \"ai_features read_user\", then set GITLAB_DUO_OAUTH_CLIENT_ID (and optionally GITLAB_DUO_OAUTH_CLIENT_SECRET) and restart.", + "gitlab-duo": "OAuth application with ai_features + read_user scopes. Configure GITLAB_DUO_OAUTH_CLIENT_ID and optionally GITLAB_DUO_OAUTH_CLIENT_SECRET on this OmniRoute instance.", "kilocode": "Connect Kilo Code with the existing OAuth flow.", "kimi-coding": "Connect Kimi Coding with the existing OAuth flow.", "kiro": "Free tier: 50 credits/month (~25K–100K tokens). ⚠️ Kiro ToS prohibits third-party proxy/harness use.", "codex": "Connect OpenAI Codex with the existing OAuth flow.", - "qwen": "Connect Qwen Code with the existing OAuth flow." + "qwen": "Connect Qwen Code with the existing OAuth flow.", + "github-models": "Create a GitHub PAT with 'models: read' scope at github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} accepts provider-native model IDs. Import from /models or add custom IDs for routing.", "bedrockModelsDescription": "Amazon Bedrock models are scoped by AWS region. Import from /models or add Bedrock model IDs enabled in the selected region.", @@ -6246,86 +6249,87 @@ "apiProtocolHint": "Some providers publish the same models over more than one protocol. Leave the default unless you need the alternative.", "bulkAddFormatHintCloudflare": "One key per line. Format: name|accountId|apiKey (Cloudflare account ID + API token).", "lmarenaWebCookieHint": "Open arena.ai, sign in, then copy the full Cookie header from a Network request. Include arena-auth-prod-v1.0 and arena-auth-prod-v1.1 (and further chunks if present), preferably with cf_clearance. Do not paste only the empty arena-auth-prod-v1 cookie. Optional: providerSpecificData.recaptchaV3Token if create-evaluation still returns 403.", - "kimiOfficialSupporterBadge": "Founding Friend", - "kimiOfficialSupporterTooltip": "Kimi (Moonshot AI) is OmniRoute's founding Open Source Friend", + "kimiOfficialSupporterBadge": "Official Supporter", + "kimiOfficialSupporterTooltip": "Kimi (Moonshot AI) is an official OmniRoute launch partner", "cheaperInferenceSupporterBadge": "Open Source Friend", "cheaperInferenceSupporterTooltip": "Cheaper Inference backs OmniRoute as an Open Source Friend", "kimiPartnerLinkNote": "Partner link — supports OmniRoute at no extra cost to you", -"anonymousFallbackTitle": "Anonymous fallback", -"anonymousFallbackDesc": "When all configured connections are exhausted (quota, credits, or expiry), temporarily use this provider's keyless tier. Turn off to skip this provider instead of sending anonymous requests — recommended when the keyless tier rejects them (401).", -"anonymousFallbackEnabled": "Anonymous fallback enabled for {provider}", -"anonymousFallbackDisabled": "Anonymous fallback disabled for {provider} — exhausted connections will skip this provider", -"anonymousFallbackUpdateFailed": "Failed to update anonymous fallback setting", -"batchDeleteFailed": "Batch delete failed", -"batchDeleteNetworkError": "Network error during batch delete", -"batchUpdateFailed": "Batch update failed", -"batchUpdateNetworkError": "Network error during batch update", -"categoryAudio": "Audio", -"categoryCloudAgent": "Cloud Agent", -"categoryIde": "IDE", -"categoryLocal": "Local", -"categorySearch": "Search", -"categoryWebCookie": "Web Cookie", -"claudeExtraUsageBlockingDisabled": "Claude extra-usage blocking disabled (extra usage is allowed)", -"claudeExtraUsageBlockingEnabled": "Claude extra-usage blocking enabled (extra usage will be blocked)", -"claudeRoutingPreferenceDisabled": "Unprefixed Claude models no longer prefer Claude Code", -"claudeRoutingPreferenceEnabled": "Unprefixed Claude models now prefer Claude Code", -"clearMediaFilter": "Clear", -"cliproxyRoutingDisabled": "Requests now use native OmniRoute (direct)", -"cliproxyRoutingEnabled": "Requests now route through CLIProxyAPI (deeper emulation)", -"codexLimitPolicyUpdated": "Codex limit policy updated", -"codexServiceModeUpdated": "Codex service mode updated", -"codexServiceTierActive": "Codex {tier} service tier is active", -"codexTierFastLabel": "Fast", -"codexTierFlexLabel": "Flex", -"commandCodeApplyFailed": "Failed to apply Command Code auth", -"commandCodeApplyingApproval": "Browser approved, applying…", -"commandCodeApplyingKey": "Applying browser-approved key…", -"commandCodeApprovalInstructions": "Open the auth URL, approve access, then paste the returned key/JSON/URL below…", -"commandCodeAuthExpired": "Command Code auth expired", -"commandCodeConnected": "Command Code connected", -"commandCodeConnectionAdded": "Command Code connection added", -"commandCodeLinkExpired": "Command Code link expired", -"commandCodeOpeningStudio": "Opening Command Code Studio…", -"commandCodePopupBlocked": "Popup blocked. Please allow popups and try Command Code Connect again.", -"commandCodeStartFailed": "Failed to start Command Code auth", -"connectionDeleted": "Connection deleted", -"connectionFallback": "connection", -"coolingConnectionsDescription": "These connections returned a 429 (rate-limit) on their last request. OmniRoute will skip them until the timer expires — no manual disable required.", -"coolingConnectionsTitle": "Currently cooling ({count})", -"failedDeleteAlias": "Failed to delete alias", -"failedDeleteConnection": "Failed to delete connection", -"failedDistributeProxies": "Failed to distribute proxies.", -"failedSaveModelEndpointSettings": "Failed to save model endpoint settings", -"failedUpdateClaudeExtraUsagePolicy": "Failed to update Claude extra-usage policy", -"failedUpdateClaudeRoutingPreference": "Failed to update Claude Code routing preference", -"failedUpdateCliproxyRouting": "Failed to update CLIProxyAPI routing", -"failedUpdateCodexLimitPolicy": "Failed to update Codex limit policy", -"failedUpdateCodexServiceMode": "Failed to update Codex service mode", -"filterByMedia": "Media", -"freeBadge": "Free", -"kimiCodeApiKeyLabel": "Kimi Code API Key", -"modelTestFailed": "Model test failed", -"modelTestNetworkError": "Network error testing model", -"networkError": "Network error", -"networkErrorDeletingAlias": "Network error deleting alias", -"networkErrorSettingAlias": "Network error setting alias", -"noProvidersMatch": "No providers match your search.", -"noSavedProxies": "No saved proxies found. Add proxies in Settings → Proxy first.", -"pageLoadErrorDescription": "We could not load provider data right now. Check your connection and try again.", -"pageLoadErrorId": "Error ID: {id}", -"pageLoadErrorRetry": "Try Again", -"pageLoadErrorTitle": "Failed to load providers", -"playgroundTitle": "Playground", -"providerDetailConnectionFlexActive": "Codex flex service tier is active for this connection", -"providerDetailConnectionPriorityActive": "Codex priority service tier is active for this connection", -"providerDetailGlobalFlexActive": "Global Codex flex service tier is active", -"providerDetailGlobalPriorityActive": "Global Codex priority service tier is active", -"proxiesDistributed": "Distributed {assigned} proxy assignment(s) across {tagLabel}{total} connection(s).", -"rerankEndpoint": "Rerank", -"savedModelEndpointSettings": "Saved model endpoint settings", -"searchByModelAria": "Search by model", -"selectSupportedEndpoint": "Select at least one supported endpoint" + "anonymousFallbackTitle": "Anonymous fallback", + "anonymousFallbackDesc": "When all configured connections are exhausted (quota, credits, or expiry), temporarily use this provider's keyless tier. Turn off to skip this provider instead of sending anonymous requests — recommended when the keyless tier rejects them (401).", + "anonymousFallbackEnabled": "Anonymous fallback enabled for {provider}", + "anonymousFallbackDisabled": "Anonymous fallback disabled for {provider} — exhausted connections will skip this provider", + "anonymousFallbackUpdateFailed": "Failed to update anonymous fallback setting", + "batchDeleteFailed": "Batch delete failed", + "batchDeleteNetworkError": "Network error during batch delete", + "batchUpdateFailed": "Batch update failed", + "batchUpdateNetworkError": "Network error during batch update", + "categoryAudio": "Audio", + "categoryCloudAgent": "Cloud Agent", + "categoryIde": "IDE", + "categoryLocal": "Local", + "categorySearch": "Search", + "categoryWebCookie": "Web Cookie", + "claudeExtraUsageBlockingDisabled": "Claude extra-usage blocking disabled (extra usage is allowed)", + "claudeExtraUsageBlockingEnabled": "Claude extra-usage blocking enabled (extra usage will be blocked)", + "claudeRoutingPreferenceDisabled": "Unprefixed Claude models no longer prefer Claude Code", + "claudeRoutingPreferenceEnabled": "Unprefixed Claude models now prefer Claude Code", + "clearMediaFilter": "Clear", + "cliproxyRoutingDisabled": "Requests now use native OmniRoute (direct)", + "cliproxyRoutingEnabled": "Requests now route through CLIProxyAPI (deeper emulation)", + "codexLimitPolicyUpdated": "Codex limit policy updated", + "codexServiceModeUpdated": "Codex service mode updated", + "codexServiceTierActive": "Codex {tier} service tier is active", + "codexTierFastLabel": "Fast", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Failed to apply Command Code auth", + "commandCodeApplyingApproval": "Browser approved, applying…", + "commandCodeApplyingKey": "Applying browser-approved key…", + "commandCodeApprovalInstructions": "Open the auth URL, approve access, then paste the returned key/JSON/URL below…", + "commandCodeAuthExpired": "Command Code auth expired", + "commandCodeConnected": "Command Code connected", + "commandCodeConnectionAdded": "Command Code connection added", + "commandCodeLinkExpired": "Command Code link expired", + "commandCodeOpeningStudio": "Opening Command Code Studio…", + "commandCodePopupBlocked": "Popup blocked. Please allow popups and try Command Code Connect again.", + "commandCodeStartFailed": "Failed to start Command Code auth", + "connectionDeleted": "Connection deleted", + "connectionFallback": "connection", + "coolingConnectionsDescription": "These connections returned a 429 (rate-limit) on their last request. OmniRoute will skip them until the timer expires — no manual disable required.", + "coolingConnectionsTitle": "Currently cooling ({count})", + "failedDeleteAlias": "Failed to delete alias", + "failedDeleteConnection": "Failed to delete connection", + "failedDistributeProxies": "Failed to distribute proxies.", + "failedSaveModelEndpointSettings": "Failed to save model endpoint settings", + "failedUpdateClaudeExtraUsagePolicy": "Failed to update Claude extra-usage policy", + "failedUpdateClaudeRoutingPreference": "Failed to update Claude Code routing preference", + "failedUpdateCliproxyRouting": "Failed to update CLIProxyAPI routing", + "failedUpdateCodexLimitPolicy": "Failed to update Codex limit policy", + "failedUpdateCodexServiceMode": "Failed to update Codex service mode", + "filterByMedia": "Media", + "freeBadge": "Free", + "kimiCodeApiKeyLabel": "Kimi Code API Key", + "modelTestFailed": "Model test failed", + "modelTestNetworkError": "Network error testing model", + "networkError": "Network error", + "networkErrorDeletingAlias": "Network error deleting alias", + "networkErrorSettingAlias": "Network error setting alias", + "noProvidersMatch": "No providers match your search.", + "noSavedProxies": "No saved proxies found. Add proxies in Settings → Proxy first.", + "pageLoadErrorDescription": "We could not load provider data right now. Check your connection and try again.", + "pageLoadErrorId": "Error ID: {id}", + "pageLoadErrorRetry": "Try Again", + "pageLoadErrorTitle": "Failed to load providers", + "playgroundTitle": "Playground", + "providerDetailConnectionFlexActive": "Codex flex service tier is active for this connection", + "providerDetailConnectionPriorityActive": "Codex priority service tier is active for this connection", + "providerDetailGlobalFlexActive": "Global Codex flex service tier is active", + "providerDetailGlobalPriorityActive": "Global Codex priority service tier is active", + "proxiesDistributed": "Distributed {assigned} proxy assignment(s) across {tagLabel}{total} connection(s).", + "rerankEndpoint": "Rerank", + "savedModelEndpointSettings": "Saved model endpoint settings", + "searchByModelAria": "Search by model", + "selectSupportedEndpoint": "Select at least one supported endpoint", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6655,78 +6659,78 @@ "NEEDS_CORE_NOT_CONFIGURED": "This subscription has nodes that need a local proxy core (SS/VMess/Trojan/VLESS); they are not routed until you configure the local-core SOCKS5 endpoint.", "NO_USABLE_NODES": "Subscription yielded no usable nodes (http/https/socks5 or nodes with a local core endpoint)." }, -"description": "Paste your proxy subscription link. Once enabled, traffic is routed through the proxy pool in global or rule (specified Provider) mode. Subscription nodes are automatically synced into the proxy pool and reuse existing polling, health-check, and anti-leak mechanisms.", -"addSubscription": "Add Subscription", -"newSubscription": "Add Subscription", -"editSubscription": "Edit Subscription", -"name": "Name", -"namePlaceholder": "e.g. My Subscription A", -"url": "Subscription URL", -"urlPlaceholder": "https://.../subscribe?token=...", -"mode": "Mode", -"globalMode": "Global Mode", -"ruleMode": "Rule Mode", -"globalModeDesc": "All Provider traffic goes through this subscription's proxy pool.", -"ruleModeDesc": "Only selected Providers' traffic goes through the proxy; the rest connect directly.", -"localCoreEndpoint": "Local Core SOCKS5/HTTP Endpoint (Optional)", -"localCoreEndpointPlaceholder": "socks5://127.0.0.1:1080", -"localCoreEndpointDesc": "Only accepts 127.0.0.1 / localhost (SS/VMess/Trojan/VLESS require a local sing-box/clash core).", -"routeByProvider": "Route by Provider (multi-select)", -"loadingProviders": "Loading Provider list…", -"autoRefreshInterval": "Auto Refresh Interval (minutes)", -"enableAfterCreate": "Enable on creation (sync and take effect immediately)", -"saving": "Saving…", -"saveChanges": "Save Changes", -"createSubscription": "Create Subscription", -"loading": "Loading…", -"noSubscriptions": "No subscriptions yet. Click \"Add Subscription\" to get started.", -"statusOk": "OK", -"statusError": "Error", -"statusEmpty": "Empty", -"global": "Global", -"rule": "Rule", -"enabled": "Enabled", -"disabled": "Disabled", -"nodeCount": "Nodes: {count}", -"needsCoreCount": "{count} need local core", -"lastSynced": "Last synced: {time}", -"consecutiveFailures": "{count} consecutive failures", -"lastError": "Last error: {time}", -"coreHintTitle": "This subscription has {count} nodes that require a local proxy core (SS / VMess / Trojan / VLESS, etc.) and are currently not routed.", -"coreHintDesc": "These protocols cannot be forwarded directly by OmniRoute. Please start a sing-box or clash (Clash.Meta) core on your machine, expose it as a SOCKS5/HTTP endpoint, and fill it in via Edit (only 127.0.0.1 / localhost is accepted).", -"copy": "Copy", -"goConfigure": "Configure", -"disable": "Disable", -"enable": "Enable", -"refreshNodes": "Refresh Nodes", -"edit": "Edit", -"delete": "Delete", -"confirmDelete": "Are you sure you want to delete subscription \"{name}\"? Associated proxy nodes will also be removed.", -"nameRequired": "Please enter a name", -"urlRequired": "Please enter a subscription URL", -"ruleModeProviderRequired": "Please select at least one Provider in rule mode", -"saveFailed": "Save failed", -"loadFailed": "Failed to load subscription list", -"toggleFailed": "Failed to toggle switch", -"refreshFailed": "Failed to refresh", -"deleteFailed": "Failed to delete", -"add": "Add", -"cancel": "Cancel", -"configure": "Configure", -"copyEndpoint": "Copy Endpoint", -"coreEndpointHint": "Core Endpoint Hint", -"coreNodesHint": "Core Nodes Hint", -"create": "Create", -"deleteConfirm": "Delete Confirm", -"empty": "Empty", -"globalModeDescription": "Global Mode Description", -"localCoreHint": "Local Core Hint", -"nodeSummary": "Node Summary", -"providerRequired": "Provider Required", -"providerRouting": "Provider Routing", -"refresh": "Refresh", -"refreshInterval": "Refresh Interval", -"ruleModeDescription": "Rule Mode Description" + "description": "Paste your proxy subscription link. Once enabled, traffic is routed through the proxy pool in global or rule (specified Provider) mode. Subscription nodes are automatically synced into the proxy pool and reuse existing polling, health-check, and anti-leak mechanisms.", + "addSubscription": "Add Subscription", + "newSubscription": "Add Subscription", + "editSubscription": "Edit Subscription", + "name": "Name", + "namePlaceholder": "e.g. My Subscription A", + "url": "Subscription URL", + "urlPlaceholder": "https://.../subscribe?token=...", + "mode": "Mode", + "globalMode": "Global Mode", + "ruleMode": "Rule Mode", + "globalModeDesc": "All Provider traffic goes through this subscription's proxy pool.", + "ruleModeDesc": "Only selected Providers' traffic goes through the proxy; the rest connect directly.", + "localCoreEndpoint": "Local Core SOCKS5/HTTP Endpoint (Optional)", + "localCoreEndpointPlaceholder": "socks5://127.0.0.1:1080", + "localCoreEndpointDesc": "Only accepts 127.0.0.1 / localhost (SS/VMess/Trojan/VLESS require a local sing-box/clash core).", + "routeByProvider": "Route by Provider (multi-select)", + "loadingProviders": "Loading Provider list…", + "autoRefreshInterval": "Auto Refresh Interval (minutes)", + "enableAfterCreate": "Enable on creation (sync and take effect immediately)", + "saving": "Saving…", + "saveChanges": "Save Changes", + "createSubscription": "Create Subscription", + "loading": "Loading…", + "noSubscriptions": "No subscriptions yet. Click \"Add Subscription\" to get started.", + "statusOk": "OK", + "statusError": "Error", + "statusEmpty": "Empty", + "global": "Global", + "rule": "Rule", + "enabled": "Enabled", + "disabled": "Disabled", + "nodeCount": "Nodes: {count}", + "needsCoreCount": "{count} need local core", + "lastSynced": "Last synced: {time}", + "consecutiveFailures": "{count} consecutive failures", + "lastError": "Last error: {time}", + "coreHintTitle": "This subscription has {count} nodes that require a local proxy core (SS / VMess / Trojan / VLESS, etc.) and are currently not routed.", + "coreHintDesc": "These protocols cannot be forwarded directly by OmniRoute. Please start a sing-box or clash (Clash.Meta) core on your machine, expose it as a SOCKS5/HTTP endpoint, and fill it in via Edit (only 127.0.0.1 / localhost is accepted).", + "copy": "Copy", + "goConfigure": "Configure", + "disable": "Disable", + "enable": "Enable", + "refreshNodes": "Refresh Nodes", + "edit": "Edit", + "delete": "Delete", + "confirmDelete": "Are you sure you want to delete subscription \"{name}\"? Associated proxy nodes will also be removed.", + "nameRequired": "Please enter a name", + "urlRequired": "Please enter a subscription URL", + "ruleModeProviderRequired": "Please select at least one Provider in rule mode", + "saveFailed": "Save failed", + "loadFailed": "Failed to load subscription list", + "toggleFailed": "Failed to toggle switch", + "refreshFailed": "Failed to refresh", + "deleteFailed": "Failed to delete", + "add": "Add", + "cancel": "Cancel", + "configure": "Configure", + "copyEndpoint": "Copy Endpoint", + "coreEndpointHint": "Core Endpoint Hint", + "coreNodesHint": "Core Nodes Hint", + "create": "Create", + "deleteConfirm": "Delete Confirm", + "empty": "Empty", + "globalModeDescription": "Global Mode Description", + "localCoreHint": "Local Core Hint", + "nodeSummary": "Node Summary", + "providerRequired": "Provider Required", + "providerRouting": "Provider Routing", + "refresh": "Refresh", + "refreshInterval": "Refresh Interval", + "ruleModeDescription": "Rule Mode Description" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -6762,7 +6766,7 @@ "denoRelayOrgDomainRequired": "Organization domain is required", "denoRelayDeployFailed": "Deno Deploy failed", "denoRelayTokenHint": "Organization token (prefix ddo_) from console.deno.com → Organization → Settings → Organization Tokens. Used once for deploy and never stored.", - "denoRelayOrgDomainHint": "Your Deno Deploy organization's default domain (e.g. acme.deno.net). The relay will be reachable at https://<app-name>.<org-slug>.deno.net.", + "denoRelayOrgDomainHint": "Your Deno Deploy organization's default domain (e.g. acme.deno.net). The relay will be reachable at https://..deno.net.", "proxyFreePoolFilterProtocol": "Filter by protocol", "proxyFreePoolProtocol": "Protocol", "proxyFreePoolCountryPlaceholder": "Country (e.g. US)", @@ -7901,9 +7905,9 @@ "resilienceEnableServerWaitDesc": "When enabled, OmniRoute waits for the first cooldown to expire and retries automatically.", "resilienceMaxAttempts": "Maximum attempts", "resilienceMaxWaitPerAttempt": "Maximum wait per attempt", - "resilienceComboCooldownWaitTitle": "Combo cooldown wait", - "resilienceComboCooldownWaitDesc": "For all combo strategies: wait out a short transient cooldown and re-dispatch instead of returning a 429 immediately. Never waits on quota_exhausted.", - "resilienceComboCooldownWaitToggleDesc": "All combo strategies; never waits on quota_exhausted.", + "resilienceComboCooldownWaitTitle": "Quota-share combo cooldown wait", + "resilienceComboCooldownWaitDesc": "For quota-share combos only: wait out a short transient cooldown and re-dispatch instead of returning a 429 immediately. Never waits on quota_exhausted.", + "resilienceComboCooldownWaitToggleDesc": "Quota-share combos only; never waits on quota_exhausted.", "resilienceComboCooldownMaxWaitMs": "Maximum wait per attempt", "resilienceComboCooldownBudgetMs": "Total wait budget", "resilienceQuotaShareConcurrencyTitle": "Quota-share per-connection concurrency", @@ -7999,138 +8003,138 @@ "enableCredentialRedactionDesc": "Scrubs API keys, tokens, private keys, and JWTs from messages, tool calls, and responses.", "pricingAutoSyncDisabled": "Automatic Sync Disabled", "pricingAutoSyncEnabled": "Automatic Sync Enabled", -"modalityBridgeIntro": "Bridge multimodal content to text before it reaches text-only models. Vision is live; Audio arrives with the AudioBridge; Video is on the roadmap.", -"modalityBridgeVisionTab": "Vision", -"modalityBridgeAudioTab": "Audio", -"modalityBridgeVideoTab": "Video", -"modalityBridgeSubTabsAria": "Modality Bridge sections", -"modalityBridgeVisionTitle": "Vision Bridge", -"modalityBridgeVisionDesc": "Describe images with a vision model and continue with the user's chosen text model.", -"modalityBridgeMode": "Mode", -"modalityBridgeModeAuto": "Auto (recommended)", -"modalityBridgeModeAutoHint": "Legacy heuristic: reroute individual models without credentials; describe otherwise.", -"modalityBridgeModeDescribe": "Always describe", -"modalityBridgeModeDescribeHint": "The model you chose always answers; images are replaced by text descriptions.", -"modalityBridgeModeReroute": "Always reroute", -"modalityBridgeModeRerouteHint": "Send the whole request to the best vision-capable model (falls back to describe when none is usable).", -"modalityBridgeVisionModel": "Vision model", -"modalityBridgeVisionModelAuto": "Auto (best available)", -"modalityBridgeTaskAware": "Task-aware description", -"modalityBridgeTaskAwareDesc": "Include the user's question as focus so the vision model describes what matters and transcribes visible text.", -"modalityBridgePrompt": "Description prompt", -"modalityBridgeAdvanced": "Advanced", -"modalityBridgeTimeoutMs": "Timeout (ms)", -"modalityBridgeMaxImages": "Max images per request", -"modalityBridgeCacheEnabled": "Cache descriptions", -"modalityBridgeCacheEnabledDesc": "Reuse descriptions for identical images (SHA-256 keyed, in-memory).", -"modalityBridgeCacheTtlMinutes": "Cache TTL (minutes)", -"modalityBridgeCacheMaxEntries": "Cache max entries", -"modalityBridgeStatsBridged": "bridged", -"modalityBridgeStatsCacheHits": "cache hits", -"modalityBridgeStatsFailures": "failures", -"modalityBridgeStatsLastUsed": "last used", -"modalityBridgeStatsNever": "never", -"modalityBridgeTestButton": "Test with sample image", -"modalityBridgeTestRunning": "Testing…", -"modalityBridgeTestOk": "Bridge OK — {count} image(s) described by {model}", -"modalityBridgeTestReroute": "Bridge rerouted the request to {model}", -"modalityBridgeTestNoop": "Bridge did not activate (model may support vision natively or bridge is disabled)", -"modalityBridgeTestError": "Test failed: {message}", -"modalityBridgeAudioComingSoon": "The Audio bridge (speech → text via /v1/audio/transcriptions) ships in the next release. Its settings keys are already reserved.", -"modalityBridgeVideoComingSoon": "Video bridging (frame sampling + captioning) is on the backlog — see issue #9760.", -"modalityBridgeMovedTitle": "Vision Bridge moved", -"modalityBridgeMovedBody": "Vision Bridge settings now live in the dedicated Modality Bridge page.", -"modalityBridgeMovedCta": "Open Modality Bridge settings", -"modalityBridgeAudioTitle": "Audio Bridge", -"modalityBridgeAudioDesc": "Transcribe audio with a speech-to-text model before continuing with the chosen text model.", -"modalityBridgeAudioEnabled": "Enable Audio Bridge", -"modalityBridgeAudioEnabledDesc": "Replace audio parts with transcripts when the target model cannot process audio.", -"modalityBridgeAudioModel": "Speech-to-text model", -"modalityBridgeAudioModelAuto": "Auto (first connected STT provider)", -"modalityBridgeAudioMaxClips": "Max audio clips per request", -"modalityBridgeAudioTestButton": "Test with sample audio", -"modalityBridgeAudioTestRunning": "Testing audio…", -"modalityBridgeAudioTestOk": "Audio Bridge OK — {count} clip(s) transcribed by {model}", -"modalityBridgeAudioTestNoop": "Audio Bridge did not activate (the target may support audio, no STT provider is connected, or the bridge is disabled)", -"modalityBridgeAudioTestError": "Audio test failed: {message}", -"modelRoutingDescriptionPlaceholder": "Route Opus models to frontier combo", -"cliproxyapiFallbackCodes": "Cliproxyapi Fallback Codes", -"cliproxyapiFallbackDescription": "Cliproxyapi Fallback Description", -"cliproxyapiHealthLabel": "Cliproxyapi Health Label", -"cliproxyapiImportFailed": "Cliproxyapi Import Failed", -"cliproxyapiImportResult": "Cliproxyapi Import Result", -"cliproxyapiInvalidUrl": "Cliproxyapi Invalid URL", -"cliproxyapiLifecycleNoticeAfter": "Cliproxyapi Lifecycle Notice After", -"cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Lifecycle Notice Before", -"cliproxyapiLifecycleNoticeLink": "Cliproxyapi Lifecycle Notice Link", -"cliproxyapiPortLabel": "Cliproxyapi Port Label", -"cliproxyapiStatusLabel": "Cliproxyapi Status Label", -"cliproxyapiVersionLabel": "Cliproxyapi Version Label", -"collection": "Collection", -"errorPage": { + "modalityBridgeIntro": "Bridge multimodal content to text before it reaches text-only models. Vision is live; Audio arrives with the AudioBridge; Video is on the roadmap.", + "modalityBridgeVisionTab": "Vision", + "modalityBridgeAudioTab": "Audio", + "modalityBridgeVideoTab": "Video", + "modalityBridgeSubTabsAria": "Modality Bridge sections", + "modalityBridgeVisionTitle": "Vision Bridge", + "modalityBridgeVisionDesc": "Describe images with a vision model and continue with the user's chosen text model.", + "modalityBridgeMode": "Mode", + "modalityBridgeModeAuto": "Auto (recommended)", + "modalityBridgeModeAutoHint": "Legacy heuristic: reroute individual models without credentials; describe otherwise.", + "modalityBridgeModeDescribe": "Always describe", + "modalityBridgeModeDescribeHint": "The model you chose always answers; images are replaced by text descriptions.", + "modalityBridgeModeReroute": "Always reroute", + "modalityBridgeModeRerouteHint": "Send the whole request to the best vision-capable model (falls back to describe when none is usable).", + "modalityBridgeVisionModel": "Vision model", + "modalityBridgeVisionModelAuto": "Auto (best available)", + "modalityBridgeTaskAware": "Task-aware description", + "modalityBridgeTaskAwareDesc": "Include the user's question as focus so the vision model describes what matters and transcribes visible text.", + "modalityBridgePrompt": "Description prompt", + "modalityBridgeAdvanced": "Advanced", + "modalityBridgeTimeoutMs": "Timeout (ms)", + "modalityBridgeMaxImages": "Max images per request", + "modalityBridgeCacheEnabled": "Cache descriptions", + "modalityBridgeCacheEnabledDesc": "Reuse descriptions for identical images (SHA-256 keyed, in-memory).", + "modalityBridgeCacheTtlMinutes": "Cache TTL (minutes)", + "modalityBridgeCacheMaxEntries": "Cache max entries", + "modalityBridgeStatsBridged": "bridged", + "modalityBridgeStatsCacheHits": "cache hits", + "modalityBridgeStatsFailures": "failures", + "modalityBridgeStatsLastUsed": "last used", + "modalityBridgeStatsNever": "never", + "modalityBridgeTestButton": "Test with sample image", + "modalityBridgeTestRunning": "Testing…", + "modalityBridgeTestOk": "Bridge OK — {count} image(s) described by {model}", + "modalityBridgeTestReroute": "Bridge rerouted the request to {model}", + "modalityBridgeTestNoop": "Bridge did not activate (model may support vision natively or bridge is disabled)", + "modalityBridgeTestError": "Test failed: {message}", + "modalityBridgeAudioComingSoon": "The Audio bridge (speech → text via /v1/audio/transcriptions) ships in the next release. Its settings keys are already reserved.", + "modalityBridgeVideoComingSoon": "Video bridging (frame sampling + captioning) is on the backlog — see issue #9760.", + "modalityBridgeMovedTitle": "Vision Bridge moved", + "modalityBridgeMovedBody": "Vision Bridge settings now live in the dedicated Modality Bridge page.", + "modalityBridgeMovedCta": "Open Modality Bridge settings", + "modalityBridgeAudioTitle": "Audio Bridge", + "modalityBridgeAudioDesc": "Transcribe audio with a speech-to-text model before continuing with the chosen text model.", + "modalityBridgeAudioEnabled": "Enable Audio Bridge", + "modalityBridgeAudioEnabledDesc": "Replace audio parts with transcripts when the target model cannot process audio.", + "modalityBridgeAudioModel": "Speech-to-text model", + "modalityBridgeAudioModelAuto": "Auto (first connected STT provider)", + "modalityBridgeAudioMaxClips": "Max audio clips per request", + "modalityBridgeAudioTestButton": "Test with sample audio", + "modalityBridgeAudioTestRunning": "Testing audio…", + "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} clip(s) transcribed by {model}", + "modalityBridgeAudioTestNoop": "Audio Bridge did not activate (the target may support audio, no STT provider is connected, or the bridge is disabled)", + "modalityBridgeAudioTestError": "Audio test failed: {message}", + "modelRoutingDescriptionPlaceholder": "Route Opus models to frontier combo", + "cliproxyapiFallbackCodes": "Cliproxyapi Fallback Codes", + "cliproxyapiFallbackDescription": "Cliproxyapi Fallback Description", + "cliproxyapiHealthLabel": "Cliproxyapi Health Label", + "cliproxyapiImportFailed": "Cliproxyapi Import Failed", + "cliproxyapiImportResult": "Cliproxyapi Import Result", + "cliproxyapiInvalidUrl": "Cliproxyapi Invalid URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi Lifecycle Notice After", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Lifecycle Notice Before", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi Lifecycle Notice Link", + "cliproxyapiPortLabel": "Cliproxyapi Port Label", + "cliproxyapiStatusLabel": "Cliproxyapi Status Label", + "cliproxyapiVersionLabel": "Cliproxyapi Version Label", + "collection": "Collection", + "errorPage": { "description": "We could not load settings right now. Please retry in a few seconds.", "errorId": "Error ID: {id}", "retry": "Try Again", "title": "Failed to load settings" }, -"host": "Host", -"notInstalled": "Not installed", -"oneproxyActions": "Oneproxy Actions", -"oneproxyActive": "Oneproxy Active", -"oneproxyAnonymity": "Oneproxy Anonymity", -"oneproxyCountry": "Oneproxy Country", -"oneproxyDelete": "Oneproxy Delete", -"oneproxyEmpty": "Oneproxy Empty", -"oneproxyHost": "Oneproxy Host", -"oneproxyLatency": "Oneproxy Latency", -"oneproxyProtocol": "Oneproxy Protocol", -"oneproxyQuality": "Oneproxy Quality", -"oneproxySyncFailed": "Sync failed: {error}", -"oneproxySyncSuccess": "Synced {total} proxies ({added} new, {updated} updated)", -"proxyDocumentationSocks5DescAfter": "Proxy Documentation Socks5 Desc After", -"proxyFreePoolAddProxy": "Proxy Free Pool Add Proxy", -"proxyFreePoolAdding": "Proxy Free Pool Adding", -"proxyFreePoolSelectProxy": "Proxy Free Pool Select Proxy", -"proxyStatusActive": "Proxy Status Active", -"proxyStatusInactive": "Proxy Status Inactive", -"routingAddEntry": "Add entry", -"settingSaveFailed": "Setting Save Failed", -"settingSaved": "Setting Saved", -"skillsmpApiKeyHintAfter": ". Rate limit: {limit} requests/day.", -"skillsmpApiKeyHintBefore": "Get your API key from", -"syncFailed": "Sync failed", -"unhealthy": "Unhealthy", -"oneproxyDescription": "Fetch and rotate free validated proxies from the 1proxy community platform", -"oneproxySyncing": "Syncing...", -"oneproxySyncNow": "Sync Now", -"oneproxyClearAll": "Clear All", -"oneproxyGoogle": "Google", -"oneproxyClearAllConfirm": "Clear all 1proxy proxies?", -"memorySkillsSkillsmpDescription": "Connect to SkillsMP to discover and install skills from the marketplace.", -"memorySkillsActiveProviderDescription": "Choose which provider the Skills page uses for search and install.", -"memorySkillsSkillsmpProviderTitle": "SkillsMP Marketplace", -"memorySkillsSkillsmpProviderDescription": "Authenticated marketplace (uses your SkillsMP API key).", -"memorySkillsSkillsshProviderTitle": "skills.sh Directory", -"memorySkillsSkillsshProviderDescription": "Public directory provider (no API key required).", -"routingCcBridgeCatalogName": "Anthropic-compatible CC bridge", -"routingClaudeProviderName": "Claude (OAuth)", -"routingClaudeProviderDescription": "Native Claude provider with OAuth-issued tokens.", -"routingCcBridgeName": "Claude-Code Bridge", -"routingCcBridgeDescription": "Relay endpoints using API keys (anthropic-compatible-cc-*).", -"routingCustomProviderDescription": "Custom provider.", -"routingUnknownOpKind": "Unknown op kind: {kind}", -"routingInvalidJson": "Invalid JSON: {error}", -"routingConfigMustBeObject": "Config must be a JSON object", -"routingEnabledMustBeBoolean": "`enabled` must be true or false", -"routingPipelineMustBeArray": "`pipeline` must be an array of ops", -"routingPipelineTooLong": "Pipeline cannot exceed 50 ops", -"routingOpMissingKind": "Op #{index}: missing or invalid `kind`", -"routingOpUnknownKind": "Op #{index}: unknown kind \"{kind}\"", -"routingJsonEditorHide": "Hide JSON editor", -"routingJsonEditorImportExport": "Import / export JSON", -"routingJsonEditorLabel": "JSON (edit and apply, or paste to import)", -"routingApplyJson": "Apply JSON", -"routingTransformsFootnote": "All transform ops are idempotent on re-run. Changes take effect immediately on the next request." + "host": "Host", + "notInstalled": "Not installed", + "oneproxyActions": "Oneproxy Actions", + "oneproxyActive": "Oneproxy Active", + "oneproxyAnonymity": "Oneproxy Anonymity", + "oneproxyCountry": "Oneproxy Country", + "oneproxyDelete": "Oneproxy Delete", + "oneproxyEmpty": "Oneproxy Empty", + "oneproxyHost": "Oneproxy Host", + "oneproxyLatency": "Oneproxy Latency", + "oneproxyProtocol": "Oneproxy Protocol", + "oneproxyQuality": "Oneproxy Quality", + "oneproxySyncFailed": "Sync failed: {error}", + "oneproxySyncSuccess": "Synced {total} proxies ({added} new, {updated} updated)", + "proxyDocumentationSocks5DescAfter": "Proxy Documentation Socks5 Desc After", + "proxyFreePoolAddProxy": "Proxy Free Pool Add Proxy", + "proxyFreePoolAdding": "Proxy Free Pool Adding", + "proxyFreePoolSelectProxy": "Proxy Free Pool Select Proxy", + "proxyStatusActive": "Proxy Status Active", + "proxyStatusInactive": "Proxy Status Inactive", + "routingAddEntry": "Add entry", + "settingSaveFailed": "Setting Save Failed", + "settingSaved": "Setting Saved", + "skillsmpApiKeyHintAfter": ". Rate limit: {limit} requests/day.", + "skillsmpApiKeyHintBefore": "Get your API key from", + "syncFailed": "Sync failed", + "unhealthy": "Unhealthy", + "oneproxyDescription": "Fetch and rotate free validated proxies from the 1proxy community platform", + "oneproxySyncing": "Syncing...", + "oneproxySyncNow": "Sync Now", + "oneproxyClearAll": "Clear All", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Clear all 1proxy proxies?", + "memorySkillsSkillsmpDescription": "Connect to SkillsMP to discover and install skills from the marketplace.", + "memorySkillsActiveProviderDescription": "Choose which provider the Skills page uses for search and install.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Marketplace", + "memorySkillsSkillsmpProviderDescription": "Authenticated marketplace (uses your SkillsMP API key).", + "memorySkillsSkillsshProviderTitle": "skills.sh Directory", + "memorySkillsSkillsshProviderDescription": "Public directory provider (no API key required).", + "routingCcBridgeCatalogName": "Anthropic-compatible CC bridge", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Native Claude provider with OAuth-issued tokens.", + "routingCcBridgeName": "Claude-Code Bridge", + "routingCcBridgeDescription": "Relay endpoints using API keys (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Custom provider.", + "routingUnknownOpKind": "Unknown op kind: {kind}", + "routingInvalidJson": "Invalid JSON: {error}", + "routingConfigMustBeObject": "Config must be a JSON object", + "routingEnabledMustBeBoolean": "`enabled` must be true or false", + "routingPipelineMustBeArray": "`pipeline` must be an array of ops", + "routingPipelineTooLong": "Pipeline cannot exceed 50 ops", + "routingOpMissingKind": "Op #{index}: missing or invalid `kind`", + "routingOpUnknownKind": "Op #{index}: unknown kind \"{kind}\"", + "routingJsonEditorHide": "Hide JSON editor", + "routingJsonEditorImportExport": "Import / export JSON", + "routingJsonEditorLabel": "JSON (edit and apply, or paste to import)", + "routingApplyJson": "Apply JSON", + "routingTransformsFootnote": "All transform ops are idempotent on re-run. Changes take effect immediately on the next request." }, "contextRtk": { "title": "RTK Engine", @@ -10466,6 +10470,7 @@ "tabPasteApiKey": "Paste API Key", "windsurfPasteDescription": "In the Windsurf / VS Code IDE, run the \"Windsurf: Provide Auth Token\" command from the command palette (or click the Jupyter \"Get Windsurf Authentication Token\" button), then copy the shown token and paste it below. Opening windsurf.com/show-auth-token directly only shows a \"Redirecting\" page — the IDE must initiate the flow.", "grokAuthJsonDescription": "Paste the FULL contents of ~/.grok/auth.json (not just the JWT \"key\" field). A bare JWT has no refresh_token, so the connection dies after expiry (#7610). Prefer the dedicated Import auth.json modal when available.", + "devinDesktopPasteDescription": "Paste an existing Devin API key from an authenticated Devin session. Key export availability and steps vary by Devin version and account.", "devinPasteDescription": "Provide your WINDSURF_API_KEY (obtained via `devin auth login`, or via the Windsurf IDE \"Windsurf: Provide Auth Token\" command).", "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", "grokAuthJsonLabel": "Grok Build auth.json", @@ -10480,7 +10485,8 @@ "gitlabDuoSetupTitle": "GitLab Duo OAuth setup", "gitlabDuoSetupMessage": "GitLab Duo OAuth is not configured. Register an OAuth application at {applicationsUrl} with redirect URI {redirectUri} and scopes \"{scopes}\", then set {clientIdEnv} (and optionally {clientSecretEnv}) and restart.", "gitlabDuoSetupDescription": "After the application is registered and the env vars are set on this OmniRoute instance, click Continue to start the OAuth login.", - "continue": "Continue" + "continue": "Continue", + "googleOAuthWarning": "Remote access + Google OAuth: bundled credentials only accept loopback redirects like 127.0.0.1. The browser that approves Google must be able to reach OmniRoute on that local port, usually by opening OmniRoute locally or using an SSH/local-forward tunnel. Recommended for remote installs: on your own computer run npx omniroute login antigravity and paste the credential blob it prints into the field below. For fully remote use without this local callback, configure your own OAuth credentials." }, "cursorAuthModal": { "title": "Connect Cursor IDE", @@ -12318,13 +12324,13 @@ "updateProviderFailed": "Failed to update provider", "providerEnabled": "{provider} enabled", "providerDisabled": "{provider} disabled", -"providerAdded": "{provider} added", -"add": "Add", -"manualApiKey": "Use a manual API key", -"createDahlTokenFailed": "Failed to create Dahl token", -"providerProxy": "Proxy", -"providerProxyConfigureHint": "Configure proxy", -"providerProxyTitleConfigured": "Proxy configured: {host}" + "providerAdded": "{provider} added", + "add": "Add", + "manualApiKey": "Use a manual API key", + "createDahlTokenFailed": "Failed to create Dahl token", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Configure proxy", + "providerProxyTitleConfigured": "Proxy configured: {host}" }, "gamification": { "leaderboardScopes": { @@ -13018,14 +13024,14 @@ "testFailed": "Test failed" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) is OmniRoute's founding Open Source Friend", - "description": "Kimi K3 brings a 1M-token context window and frontier coding performance to OmniRoute at a fraction of the cost.", - "cta": "Get Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) is OmniRoute's founding Open Source Friend", + "description": "Use Kimi K3 in OmniRoute through the official Kimi API. Enjoy frontier intelligence while spending less.", + "cta": "Get a Kimi API Key", "partnerLinkNote": "Partner link", "dismissAriaLabel": "Dismiss" }, "featureFlagExposeFunctionalGatewayMirrorsDescription": "Advertise / mirror ids on /v1/models for models whose canonical owner has no active credential but a passthrough gateway with an active credential routes them. Warning: adds catalog entries for all clients when enabled globally.", -"radarPage": { + "radarPage": { "title": "Radar Catalog", "subtitle": "Free model catalog enriched with community intelligence", "loading": "Loading catalog...", @@ -13081,7 +13087,7 @@ "campaignsUpsellCommunity": "Limited-time campaigns are a supporter extra. Everything on this page's fixed links stays free for everyone.", "campaignsValidUntil": "Valid until {date}" }, -"radarSetupPage": { + "radarSetupPage": { "title": "Provider Setup", "setupTitle": "Setup: {provider}", "setupSubtitle": "Follow the steps below to configure this provider", @@ -13106,7 +13112,7 @@ "addConnectionDescription": "Don't have a connection yet? Add one in the providers dashboard.", "addConnectionLink": "Go to providers →" }, -"resilienceConnections": { + "resilienceConnections": { "title": "Connection Resilience", "table": { "status": "Status", @@ -13200,12 +13206,12 @@ "degraded.source.modelLockouts": "Model Lockouts", "degraded.source.count": "Connection Count" }, -"featureFlagCapabilityFilterEnabledDescription": "Reject requests before dispatch when the target model lacks required capabilities (vision, tools, structured output, context window). Protects direct single-provider requests that bypass the combo-layer compatibility filter.", -"capabilityFilter.visionMismatch": "Provider does not support vision for this image request", -"capabilityFilter.toolsMismatch": "Provider does not support tool calling", -"capabilityFilter.structuredOutputMismatch": "Provider does not support structured output", -"capabilityFilter.contextWindowMismatch": "Request exceeds provider context window", -"publicSystem": { + "featureFlagCapabilityFilterEnabledDescription": "Reject requests before dispatch when the target model lacks required capabilities (vision, tools, structured output, context window). Protects direct single-provider requests that bypass the combo-layer compatibility filter.", + "capabilityFilter.visionMismatch": "Provider does not support vision for this image request", + "capabilityFilter.toolsMismatch": "Provider does not support tool calling", + "capabilityFilter.structuredOutputMismatch": "Provider does not support structured output", + "capabilityFilter.contextWindowMismatch": "Request exceeds provider context window", + "publicSystem": { "notFound": { "title": "Page not found", "description": "The page you're looking for doesn't exist or has been moved.", @@ -13342,7 +13348,7 @@ } } }, -"kiroAuthModal": { + "kiroAuthModal": { "title": "Connect {providerLabel}", "chooseMethod": "Choose your authentication method:", "builderId": "AWS Builder ID", @@ -13384,7 +13390,7 @@ "errorApiKeyImportFailed": "API key import failed", "errorIdcStartUrlRequired": "Please enter your IDC start URL" }, -"kiroSocialOAuthModal": { + "kiroSocialOAuthModal": { "title": "Connect {providerLabel} via {providerName}", "errorStartAuthorization": "Failed to start authorization", "errorAuthorizationExpired": "Authorization expired. Start the login flow again.", @@ -13403,7 +13409,7 @@ "errorTitle": "Connection Failed", "close": "Close" }, -"traeAuthModal": { + "traeAuthModal": { "errorAuthorizationFailed": "Authorization failed", "errorPopupBlocked": "Popup blocked — allow popups for this site, or paste the token manually below.", "errorPopupClosed": "Authorization window was closed before completing.", @@ -13429,14 +13435,14 @@ "importToken": "Import Token", "cancel": "Cancel" }, -"sharedComponents": { + "sharedComponents": { "distributeProxies": { "distributing": "Distributing...", "complete": "Complete", "defaultLabel": "Distribute Proxies" } }, -"providerTest": { + "providerTest": { "dialogLabel": "Test {provider}", "deprecated": "deprecated", "risk": "risk", @@ -13471,7 +13477,7 @@ "tokens": "Tokens" } }, -"proxyLog": { + "proxyLog": { "detailAriaLabel": "Proxy log detail", "event": "Proxy Event", "close": "Close proxy detail modal", @@ -13489,7 +13495,7 @@ "error": "Error", "configuration": "Proxy Configuration" }, -"requestTimeline": { + "requestTimeline": { "title": "Request Timeline", "modes": { "follow": "Follow", @@ -13514,12 +13520,62 @@ "unknownModel": "unknown", "pending": "pending" }, -"metadata": { + "metadata": { "compressionTitle": "Compression", "compressionDescription": "Configure context compression settings to reduce token usage and costs.", "relayTitle": "OmniRoute — Relay Proxies", "relayDescription": "Serverless relay proxy endpoints for your AI infrastructure", "trafficInspectorTitle": "Traffic Inspector — OmniRoute", "trafficInspectorDescription": "Monitor LLM calls + debug any application's HTTPS traffic" + }, + "conductor": { + "title": "Conductor — CLI-agent fleet", + "subtitle": "OmniConductor hub: runners, task queue and councils, live", + "runners": "Runners", + "tasks": "Tasks", + "colName": "Name", + "colClis": "CLIs", + "colStatus": "Status", + "colTask": "Task", + "colMode": "Mode", + "colRunner": "Runner", + "colSummary": "Summary", + "online": "online", + "offline": "offline", + "draining": "draining", + "hubOffline": "Conductor hub offline or not configured (CONDUCTOR_HUB_URL) — showing nothing rather than stale data.", + "noRunners": "No runners registered", + "noTasks": "No tasks yet", + "detailTitle": "Task detail", + "prompt": "Prompt", + "branch": "Branch", + "fetchHint": "Fetch the result with: git fetch origin {branch}", + "council": "Council", + "candidates": "Candidates", + "cancel": "Cancel task", + "cancelConfirmTitle": "Cancel this task?", + "cancelConfirmMessage": "The hub will abort the execution on the runner. This cannot be undone.", + "cancelFailed": "The hub refused the cancellation", + "close": "Close", + "error": "Error", + "faroTitle": "Faro — fleet spokesperson", + "faroSubtitle": "Chat and voice, anchored in real fleet events. Destructive commands always ask for confirmation.", + "faroEmpty": "Ask about the fleet — e.g. \"how is the fleet?\"", + "faroPending": "Faro is asking for confirmation", + "faroPlaceholder": "talk to Faro…", + "faroSend": "send", + "faroOffline": "Faro (spokesperson) is offline", + "yes": "Yes", + "no": "No", + "pushToTalk": "Hold to talk", + "speakAnswers": "speak answers", + "voiceModels": "Voice models (provider/model of this OmniRoute)", + "voiceIdle": "talk", + "voiceListening": "listening…", + "voiceThinking": "thinking…", + "voiceSpeaking": "speaking…", + "sttFailed": "Transcription failed (check the STT model/provider)", + "ttsFailed": "Speech synthesis failed (check the TTS model/provider)", + "micDenied": "Microphone unavailable or permission denied" } -} +} \ No newline at end of file diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json index f716b849a2..488abf1f66 100644 --- a/src/i18n/messages/es.json +++ b/src/i18n/messages/es.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Sin ajustes específicos: todos los proveedores activos participarán con sus modelos predeterminados" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) is now an official sponsor of OmniRoute", - "description": "Kimi K3 aporta una ventana de contexto de 1M de tokens y un rendimiento de código de vanguardia a OmniRoute por una fracción del coste.", - "cta": "Obtener Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) es el amigo fundador del código abierto de OmniRoute", + "description": "Usa Kimi K3 en OmniRoute a través de la API oficial de Kimi. Disfruta de inteligencia de frontera gastando menos.", + "cta": "Obtener una clave de API de Kimi", "partnerLinkNote": "Enlace de socio", "dismissAriaLabel": "Descartar" }, diff --git a/src/i18n/messages/fa.json b/src/i18n/messages/fa.json index 9d32b80b25..f95fbc10e7 100644 --- a/src/i18n/messages/fa.json +++ b/src/i18n/messages/fa.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "بدون جایگزینی — همه ارائه‌دهندگان فعال با مدل‌های پیش‌فرض خود مشارکت خواهند کرد" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) دوست بنیان‌گذار متن‌باز OmniRoute است", - "description": "مدل Kimi K3 پنجره زمینه 1M-token و عملکرد برنامه‌نویسی پیشرو را با کسری از هزینه به OmniRoute می‌آورد.", - "cta": "دریافت Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) دوست متن‌باز بنیان‌گذار OmniRoute است", + "description": "از Kimi K3 در OmniRoute از طریق API رسمی Kimi استفاده کنید. از هوش پیشرفته با هزینه کمتر لذت ببرید.", + "cta": "دریافت کلید Kimi API", "partnerLinkNote": "لینک همکاری", "dismissAriaLabel": "بستن" }, diff --git a/src/i18n/messages/fi.json b/src/i18n/messages/fi.json index 77d21cb7e3..35fd1bb0ac 100644 --- a/src/i18n/messages/fi.json +++ b/src/i18n/messages/fi.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Ei ohituksia — kaikki aktiiviset tarjoajat osallistuvat oletusmalleillaan" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) on OmniRouten perustajan avoimen lähdekoodin ystävä", - "description": "Kimi K3 tuo 1M-tokenin konteksti-ikkunan ja huippuluokan koodaussuorituskyvyn OmniRouteen murto-osalla kustannuksista.", - "cta": "Hanki Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) on OmniRouten perustava avoimen lähdekoodin ystävä", + "description": "Käytä Kimi K3:a OmniRoutessa virallisen Kimi API:n kautta. Nauti huippuälystä pienemmillä kustannuksilla.", + "cta": "Hanki Kimi API-avain", "partnerLinkNote": "Kumppanilinkki", "dismissAriaLabel": "Sulje" }, diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index 61ecda0a15..5f770550da 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -10466,6 +10466,7 @@ "tabPasteApiKey": "Coller la clé API", "windsurfPasteDescription": "Dans l’IDE Windsurf / VS Code, exécutez la commande « Windsurf: Provide Auth Token » depuis la palette de commandes (ou cliquez sur le bouton Jupyter « Get Windsurf Authentication Token »), puis copiez le token affiché et collez-le ci-dessous. Ouvrir directement windsurf.com/show-auth-token n’affiche qu’une page « Redirecting » : l’IDE doit lancer le flux.", "grokAuthJsonDescription": "Collez l’intégralité du contenu de ~/.grok/auth.json (pas seulement le champ JWT « key »). Un JWT seul ne contient pas de refresh_token : la connexion expire ensuite (#7610). Privilégiez la fenêtre Importer auth.json dédiée lorsqu’elle est disponible.", + "devinDesktopPasteDescription": "Collez une clé API Devin existante provenant d’une session Devin authentifiée. La disponibilité et les étapes d’exportation de la clé varient selon la version de Devin et le compte.", "devinPasteDescription": "Fournissez votre WINDSURF_API_KEY (obtenue via `devin auth login` ou via la commande « Windsurf: Provide Auth Token » de l’IDE Windsurf).", "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", "grokAuthJsonLabel": "auth.json de Grok Build", @@ -13018,9 +13019,9 @@ "testFailed": "Échec du test" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) est l'ami open source fondateur d'OmniRoute", - "description": "Kimi K3 apporte une fenêtre de contexte de 1M de tokens et des performances de codage de pointe à OmniRoute pour une fraction du coût.", - "cta": "Obtenir Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) est l'ami open source fondateur d'OmniRoute", + "description": "Utilisez Kimi K3 dans OmniRoute via l'API officielle Kimi. Profitez d'une intelligence de pointe en dépensant moins.", + "cta": "Obtenir une clé API Kimi", "partnerLinkNote": "Lien partenaire", "dismissAriaLabel": "Ignorer" }, @@ -13523,4 +13524,3 @@ "trafficInspectorDescription": "Surveillez les appels LLM et déboguez le trafic HTTPS de n'importe quelle application" } } - diff --git a/src/i18n/messages/gu.json b/src/i18n/messages/gu.json index 54375a3421..6744b8496a 100644 --- a/src/i18n/messages/gu.json +++ b/src/i18n/messages/gu.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "કોઈ ઓવરરાઇડ્સ નથી — બધા સક્રિય પ્રોવાઇડર્સ તેમના ડિફૉલ્ટ મોડેલ્સ સાથે ભાગ લેશે" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) એ OmniRoute નો સ્થાપક ઓપન સોર્સ મિત્ર છે", - "description": "Kimi K3 ખર્ચના એક નાના ભાગમાં OmniRoute માં 1M-token કોન્ટેક્સ્ટ વિન્ડો અને અદ્યતન કોડિંગ પર્ફોર્મન્સ લાવે છે.", - "cta": "Kimi Code મેળવો", + "foundingFriendTitle": "Kimi (Moonshot AI) એ OmniRoute નો સ્થાપક ઓપન સોર્સ મિત્ર છે", + "description": "સત્તાવાર Kimi API દ્વારા OmniRoute માં Kimi K3 વાપરો. ઓછા ખર્ચે અદ્યતન બુદ્ધિમત્તાનો આનંદ લો.", + "cta": "Kimi API કી મેળવો", "partnerLinkNote": "પાર્ટનર લિંક", "dismissAriaLabel": "બંધ કરો" }, diff --git a/src/i18n/messages/he.json b/src/i18n/messages/he.json index ae3ebb066a..7d7678a837 100644 --- a/src/i18n/messages/he.json +++ b/src/i18n/messages/he.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "אין דריסות — כל הספקים הפעילים ישתתפו עם מודלי ברירת המחדל שלהם" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) הוא חבר הקוד הפתוח המייסד של OmniRoute", - "description": "Kimi K3 מביא חלון הקשר של 1M-token וביצועי קידוד מובילים ל-OmniRoute בחלק קטן מהעלות.", - "cta": "קבל את Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) הוא חבר הקוד הפתוח המייסד של OmniRoute", + "description": "השתמשו ב-Kimi K3 ב-OmniRoute דרך ה-API הרשמי של Kimi. תיהנו מאינטליגנציה חדשנית בעלות נמוכה יותר.", + "cta": "קבלו מפתח Kimi API", "partnerLinkNote": "קישור שותף", "dismissAriaLabel": "התעלם" }, diff --git a/src/i18n/messages/hi.json b/src/i18n/messages/hi.json index 7aeb82a135..0540801e7c 100644 --- a/src/i18n/messages/hi.json +++ b/src/i18n/messages/hi.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "कोई ओवरराइड नहीं — सभी सक्रिय प्रदाता अपने डिफ़ॉल्ट मॉडल के साथ भाग लेंगे" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI), OmniRoute का संस्थापक ओपन सोर्स मित्र है", - "description": "Kimi K3 लागत के एक अंश पर OmniRoute में 1M-टोकन संदर्भ विंडो और अत्याधुनिक कोडिंग प्रदर्शन लाता है।", - "cta": "Kimi Code प्राप्त करें", + "foundingFriendTitle": "Kimi (Moonshot AI) OmniRoute का संस्थापक ओपन सोर्स मित्र है", + "description": "आधिकारिक Kimi API के ज़रिए OmniRoute में Kimi K3 इस्तेमाल करें। कम खर्च में अत्याधुनिक बुद्धिमत्ता का आनंद लें।", + "cta": "Kimi API कुंजी प्राप्त करें", "partnerLinkNote": "पार्टनर लिंक", "dismissAriaLabel": "खारिज करें" }, diff --git a/src/i18n/messages/hu.json b/src/i18n/messages/hu.json index 8ba87a7fa5..dc61ac2d3f 100644 --- a/src/i18n/messages/hu.json +++ b/src/i18n/messages/hu.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Nincsenek felülbírálások — minden aktív szolgáltató az alapértelmezett modelljével vesz részt" }, "kimiSponsorBanner": { - "title": "A Kimi (Moonshot AI) az OmniRoute alapító nyílt forráskódú barátja", - "description": "A Kimi K3 1M-tokenes kontextusablakot és élvonalbeli kódolási teljesítményt hoz az OmniRoute-ba, a költségek töredékéért.", - "cta": "Kimi Code beszerzése", + "foundingFriendTitle": "A Kimi (Moonshot AI) az OmniRoute alapító nyílt forráskódú barátja", + "description": "Használd a Kimi K3-at az OmniRoute-ban a hivatalos Kimi API-n keresztül. Élvezd az élvonalbeli intelligenciát kevesebb költséggel.", + "cta": "Kimi API-kulcs beszerzése", "partnerLinkNote": "Partnerhivatkozás", "dismissAriaLabel": "Elvetés" }, diff --git a/src/i18n/messages/id.json b/src/i18n/messages/id.json index 0bc5bfb2c5..026710fd46 100644 --- a/src/i18n/messages/id.json +++ b/src/i18n/messages/id.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Tidak ada override — semua penyedia aktif akan berpartisipasi dengan model default mereka" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) adalah sahabat open source pendiri OmniRoute", - "description": "Kimi K3 menghadirkan konteks window 1M-token dan performa coding mutakhir ke OmniRoute dengan biaya yang jauh lebih murah.", - "cta": "Dapatkan Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) adalah Sahabat Open Source pendiri OmniRoute", + "description": "Gunakan Kimi K3 di OmniRoute melalui Kimi API resmi. Nikmati kecerdasan terdepan dengan biaya lebih hemat.", + "cta": "Dapatkan Kunci API Kimi", "partnerLinkNote": "Tautan mitra", "dismissAriaLabel": "Tutup" }, diff --git a/src/i18n/messages/in.json b/src/i18n/messages/in.json index 6e025a6926..e84ed5bb31 100644 --- a/src/i18n/messages/in.json +++ b/src/i18n/messages/in.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Tidak ada penimpaan — semua penyedia aktif akan berpartisipasi dengan model default mereka" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) adalah sahabat open source pendiri OmniRoute", - "description": "Kimi K3 menghadirkan konteks window 1M-token dan performa coding mutakhir ke OmniRoute dengan biaya yang jauh lebih murah.", - "cta": "Dapatkan Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) adalah Sahabat Open Source pendiri OmniRoute", + "description": "Gunakan Kimi K3 di OmniRoute melalui Kimi API resmi. Nikmati kecerdasan terdepan dengan biaya lebih hemat.", + "cta": "Dapatkan Kunci API Kimi", "partnerLinkNote": "Tautan mitra", "dismissAriaLabel": "Tutup" }, diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json index 97a044df47..204433874d 100644 --- a/src/i18n/messages/it.json +++ b/src/i18n/messages/it.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Nessun override — tutti i provider attivi parteciperanno con i loro modelli predefiniti" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) è l'amico open source fondatore di OmniRoute", - "description": "Kimi K3 porta una finestra di contesto da 1M di token e prestazioni di codifica all'avanguardia su OmniRoute a una frazione del costo.", - "cta": "Ottieni Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) è l'amico open source fondatore di OmniRoute", + "description": "Usa Kimi K3 in OmniRoute tramite l'API ufficiale di Kimi. Goditi un'intelligenza di frontiera spendendo meno.", + "cta": "Ottieni una chiave API Kimi", "partnerLinkNote": "Link partner", "dismissAriaLabel": "Ignora" }, diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json index 16bc48203f..2492569714 100644 --- a/src/i18n/messages/ja.json +++ b/src/i18n/messages/ja.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "オーバーライドなし — すべてのアクティブなプロバイダーがデフォルトモデルで参加します" }, "kimiSponsorBanner": { - "title": "Kimi(Moonshot AI)は OmniRoute の創設オープンソースフレンドです", - "description": "Kimi K3 は、わずかなコストで 1M トークンのコンテキストウィンドウと最先端のコーディングパフォーマンスを OmniRoute に提供します。", - "cta": "Kimi Code を取得", + "foundingFriendTitle": "Kimi(Moonshot AI)はOmniRouteの創設オープンソースフレンドです", + "description": "公式Kimi APIを通じてOmniRouteでKimi K3を使えます。最先端の知能をより低コストで。", + "cta": "Kimi APIキーを取得", "partnerLinkNote": "パートナーリンク", "dismissAriaLabel": "閉じる" }, diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json index bce89a2730..ef8f16b0d4 100644 --- a/src/i18n/messages/ko.json +++ b/src/i18n/messages/ko.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "재정의 없음 — 모든 활성 프로바이더가 기본 모델로 참여합니다" }, "kimiSponsorBanner": { - "title": "Kimi(Moonshot AI)는 OmniRoute의 창립 오픈소스 프렌드입니다", - "description": "Kimi K3는 적은 비용으로 1M 토큰 컨텍스트 창과 최첨단 코딩 성능을 OmniRoute에 제공합니다.", - "cta": "Kimi Code 가져오기", + "foundingFriendTitle": "Kimi(Moonshot AI)는 OmniRoute의 창립 오픈소스 친구입니다", + "description": "공식 Kimi API를 통해 OmniRoute에서 Kimi K3를 사용하세요. 더 적은 비용으로 최첨단 지능을 누리세요.", + "cta": "Kimi API 키 받기", "partnerLinkNote": "파트너 링크", "dismissAriaLabel": "닫기" }, diff --git a/src/i18n/messages/mr.json b/src/i18n/messages/mr.json index d2cb948c97..f5ab9b9d9a 100644 --- a/src/i18n/messages/mr.json +++ b/src/i18n/messages/mr.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "कोणतेही ओव्हरराइड नाहीत — सर्व सक्रिय प्रोव्हायडर्स त्यांच्या डीफॉल्ट मॉडेल्ससह सहभागी होतील" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) हा OmniRoute चा संस्थापक ओपन सोर्स मित्र आहे", - "description": "Kimi K3 अगदी कमी खर्चात OmniRoute साठी 1M-टोकन कॉन्टेक्स्ट विंडो आणि अग्रगण्य कोडिंग कार्यक्षमता आणते.", - "cta": "Kimi Code मिळवा", + "foundingFriendTitle": "Kimi (Moonshot AI) हा OmniRoute चा संस्थापक ओपन सोर्स मित्र आहे", + "description": "अधिकृत Kimi API द्वारे OmniRoute मध्ये Kimi K3 वापरा. कमी खर्चात अत्याधुनिक बुद्धिमत्तेचा आनंद घ्या.", + "cta": "Kimi API की मिळवा", "partnerLinkNote": "भागीदार लिंक", "dismissAriaLabel": "बंद करा" }, diff --git a/src/i18n/messages/ms.json b/src/i18n/messages/ms.json index 2f5de9d5df..6891cefb89 100644 --- a/src/i18n/messages/ms.json +++ b/src/i18n/messages/ms.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Tiada penggantian — semua penyedia aktif akan mengambil bahagian dengan model lalai mereka" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) ialah rakan sumber terbuka pengasas OmniRoute", - "description": "Kimi K3 membawakan tetingkap konteks 1M-token dan prestasi pengekodan termaju ke OmniRoute pada sebahagian kecil daripada kos.", - "cta": "Dapatkan Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) ialah Rakan Sumber Terbuka pengasas OmniRoute", + "description": "Gunakan Kimi K3 dalam OmniRoute melalui Kimi API rasmi. Nikmati kecerdasan terkehadapan dengan perbelanjaan lebih rendah.", + "cta": "Dapatkan Kunci API Kimi", "partnerLinkNote": "Pautan rakan kongsi", "dismissAriaLabel": "Tutup" }, diff --git a/src/i18n/messages/nl.json b/src/i18n/messages/nl.json index f960c89c96..a4e1074e88 100644 --- a/src/i18n/messages/nl.json +++ b/src/i18n/messages/nl.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Geen overschrijvingen — alle actieve providers nemen deel met hun standaardmodellen" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) is OmniRoute's oprichtende open source-vriend", - "description": "Kimi K3 brengt een contextvenster van 1M tokens en toonaangevende codeerprestaties naar OmniRoute tegen een fractie van de kosten.", - "cta": "Kimi Code ophalen", + "foundingFriendTitle": "Kimi (Moonshot AI) is OmniRoutes oprichtende open source-vriend", + "description": "Gebruik Kimi K3 in OmniRoute via de officiële Kimi API. Geniet van grensverleggende intelligentie voor minder geld.", + "cta": "Kimi API-sleutel ophalen", "partnerLinkNote": "Partnerlink", "dismissAriaLabel": "Sluiten" }, diff --git a/src/i18n/messages/no.json b/src/i18n/messages/no.json index 927901232e..4115e68831 100644 --- a/src/i18n/messages/no.json +++ b/src/i18n/messages/no.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Ingen overstyringer — alle aktive leverandører vil delta med sine standardmodeller" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) er OmniRoutes grunnleggende åpen kildekode-venn", - "description": "Kimi K3 bringer et 1M-token kontekstvindu og banebrytende kodeytelse til OmniRoute til en brøkdel av kostnaden.", - "cta": "Hent Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) er OmniRoutes grunnleggende open source-venn", + "description": "Bruk Kimi K3 i OmniRoute via det offisielle Kimi API-et. Nyt banebrytende intelligens til en lavere kostnad.", + "cta": "Få en Kimi API-nøkkel", "partnerLinkNote": "Partnerlenke", "dismissAriaLabel": "Avvis" }, diff --git a/src/i18n/messages/phi.json b/src/i18n/messages/phi.json index b7e818750b..fbac514020 100644 --- a/src/i18n/messages/phi.json +++ b/src/i18n/messages/phi.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Walang mga override — lahat ng aktibong provider ay lalahok gamit ang kanilang mga default na modelo" }, "kimiSponsorBanner": { - "title": "Ang Kimi (Moonshot AI) ang tagapagtatag na open source na kaibigan ng OmniRoute", - "description": "Nagdadala ang Kimi K3 ng 1M-token context window at makabagong performance sa pag-code sa OmniRoute sa mas mababang halaga.", - "cta": "Kumuha ng Kimi Code", + "foundingFriendTitle": "Ang Kimi (Moonshot AI) ang founding Open Source Friend ng OmniRoute", + "description": "Gamitin ang Kimi K3 sa OmniRoute sa pamamagitan ng opisyal na Kimi API. Tamasahin ang frontier intelligence nang mas matipid.", + "cta": "Kumuha ng Kimi API Key", "partnerLinkNote": "Link ng kasosyo", "dismissAriaLabel": "I-dismiss" }, diff --git a/src/i18n/messages/pl.json b/src/i18n/messages/pl.json index 9393b6552c..1d4786d0d9 100644 --- a/src/i18n/messages/pl.json +++ b/src/i18n/messages/pl.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Brak nadpisań — wszyscy aktywni dostawcy będą uczestniczyć ze swoimi domyślnymi modelami" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) jest przyjacielem-założycielem open source OmniRoute", - "description": "Kimi K3 zapewnia okno kontekstowe o rozmiarze 1M tokenów i najwyższą wydajność kodowania w OmniRoute za ułamek ceny.", - "cta": "Uzyskaj Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) to założycielski przyjaciel open source OmniRoute", + "description": "Używaj Kimi K3 w OmniRoute przez oficjalne Kimi API. Ciesz się najnowocześniejszą inteligencją, wydając mniej.", + "cta": "Zdobądź klucz Kimi API", "partnerLinkNote": "Link partnerski", "dismissAriaLabel": "Odrzuć" }, diff --git a/src/i18n/messages/pt-BR.json b/src/i18n/messages/pt-BR.json index b3759a302f..545ab9e654 100644 --- a/src/i18n/messages/pt-BR.json +++ b/src/i18n/messages/pt-BR.json @@ -4,7 +4,7 @@ "cancel": "Cancelar", "delete": "Excluir", "loading": "Carregando...", - "selectOption": "Selecione uma opção", + "selectOption": "Selecionar uma opção", "error": "Ocorreu um erro", "success": "Sucesso", "confirm": "Tem certeza?", @@ -13,7 +13,7 @@ "previousPage": "Página anterior", "nextPage": "Próxima página", "capsLockOn": "Caps Lock está ativado", - "dismissNotification": "Descartar notificação", + "dismissNotification": "Dispensar notificação", "toggleColumns": "Alternar colunas", "confirmTitle": "Confirmar", "confirmAction": "Confirmar", @@ -163,7 +163,7 @@ "effortUltra": "Ultra", "reasoningEffort": "Esforço de raciocínio", "wireApi": "Wire API", - "modelAliases": "Aliases do modelo", + "modelAliases": "Aliases de modelo", "combos": "Combos", "noModelsFound": "Nenhum modelo encontrado", "clear": "Claro", @@ -418,7 +418,7 @@ "cloudBenefitAccess": "Cloud Benefit Access", "maxRetries": "Max Retries", "queueTimeout": "Queue Timeout", - "queueDepth": "Profundidade da fila", + "queueDepth": "__MISSING__:Queue Depth", "addProvider": "Add Provider", "realtime": "Realtime", "totalTranslations": "Total Translations", @@ -708,7 +708,7 @@ "tokensRedeemCode": "Resgatar código", "tokensRedeemCodePlaceholder": "Insira o código do convite", "tokensYourActiveInvites": "Seus convites ativos", - "tokensTransferSuccess": "Transferência bem-sucedida ({idempotencyKey})", + "tokensTransferSuccess": "Transferência realizada com sucesso ({idempotencyKey})", "tokensTransferFailed": "Falha na transferência", "tokensCreateInviteFailed": "Falha ao criar convite", "tokensRevokeInviteFailed": "Falha ao revogar convite", @@ -716,7 +716,7 @@ "tokensRedeemFailed": "Falha ao resgatar convite", "tokensConnectServerFailed": "Falha ao conectar ao servidor", "tokensDisconnectServerFailed": "Falha ao desconectar do servidor", - "tokensAmount": "Valor", + "tokensAmount": "Quantia", "tokensSending": "Enviando...", "tokensFrom": "De", "tokensTo": "Para", @@ -725,7 +725,7 @@ "tokensSent": "Enviado", "tokensReceived": "Recebido", "tokensCreatingInvite": "Criando...", - "tokensCreateInvite": "Criar convite", + "tokensCreateInvite": "Criar Convite", "tokensInviteCreated": "Código de convite criado", "tokensRedeeming": "Resgatando...", "tokensRedeem": "Resgatar", @@ -734,12 +734,12 @@ "tokensRevoke": "Revogar", "tokensConnecting": "Conectando...", "tokensConnectServer": "Conectar Servidor", - "tokensNoServersConnected": "Nenhum servidor conectado. Conecte-se a um servidor da comunidade para compartilhar tabelas de classificação.", + "tokensNoServersConnected": "Nenhum servidor conectado. Conecte-se a um servidor da comunidade para compartilhar rankings.", "tokensServerStatus": { "connected": "Conectado", "disconnected": "Desconectado", "pending": "Pendente", - "syncing": "Sincronizando", + "syncing": "Syncing", "error": "Erro" }, "tokensLastSync": "Última sincronização: {date}", @@ -767,22 +767,22 @@ "batchFileDetailCopyId": "Copiar ID", "batchFileDetailClose": "Fechar", "batchFileDetailFailedToLoad": "Falha ao carregar o conteúdo do arquivo", - "batchFileDetailLoadError": "Erro ao carregar o conteúdo do arquivo", + "batchFileDetailLoadError": "Erro ao carregar conteúdo do arquivo", "batchFilesListSearchPlaceholder": "Pesquise por ID ou nome de arquivo…", "batchFilesListFilesTable": "Arquivos", "batchFilesCount": "{count, plural, one {# arquivo} other {# arquivos}}", - "batchFilesAllPurposes": "Todas as finalidades", + "batchFilesAllPurposes": "Todos os propósitos", "batchFilesFilename": "Nome do arquivo", - "batchFilesPurpose": "Finalidade", - "batchFilesExpires": "Expira em", + "batchFilesPurpose": "Propósito", + "batchFilesExpires": "Expira", "batchFilesNoneFound": "Nenhum arquivo encontrado", "batchFilesNeverExpires": "Nunca", "batchFileInUseByActiveBatch": "Arquivo em uso por um lote ativo", "batchFilePurpose": { "batch": "Entrada de lote", "batch-output": "Saída de lote", - "fine-tune": "Ajuste fino", - "assistants": "Assistentes" + "fine-tune": "Fine-tuning", + "assistants": "Assistants" }, "batchPageLoadingMore": "Carregando mais…", "recommended": "Recomendado", @@ -829,8 +829,8 @@ "wizardValidationOk": "Todas as linhas válidas", "wizardValidating": "Validando…", "wizardValidationParseFailed": "Falha na validação — não foi possível analisar o conteúdo.", - "wizardValidationSummary": "{lines} linhas · {ids} custom_ids exclusivos", - "wizardValidationErrorCount": "{count, plural, one {# erro encontrado} other {# erros encontrados}}", + "wizardValidationSummary": "{lines} linhas · {ids} custom_ids únicos", + "wizardValidationErrorCount": "{count, plural, one {# erro} other {# erros}} encontrado(s)", "wizardValidationDuplicateIds": "custom_ids duplicados detectados:", "wizardValidationFirstErrors": "Erros (primeiros {count}):", "wizardValidationLine": "Linha {line}", @@ -965,8 +965,8 @@ "batchFileDownloadFull": "__MISSING__:Download Full File" }, "disabled": "Desabilitado", - "featureFlagOmnirouteEmergencyFallbackDescription": "Encaminhar solicitações com orçamento esgotado para o provedor/modelo de fallback gratuito de emergência.", - "featureFlagArenaEloSyncEnabledDescription": "Habilitar sincronização periódica de ELO da tabela de classificação do Arena AI para rankings de inteligência de modelos.", + "featureFlagOmnirouteEmergencyFallbackDescription": "__MISSING__:Route budget-exhausted requests to the emergency free fallback provider/model.", + "featureFlagArenaEloSyncEnabledDescription": "__MISSING__:Enable periodic Arena AI leaderboard ELO sync for model intelligence rankings.", "featureFlagExposeCcDiscoveryAliasesDescription": "Divulgar ids espelho claude/<provider>/<model> em /v1/models para que a descoberta de modelos do gateway Claude Code liste modelos não-Claude. Atenção: duplica as entradas do catálogo para todos os clientes quando ativado globalmente.", "sidebar": { "home": "Início", @@ -1095,9 +1095,9 @@ "contextAggressiveSubtitle": "Resumo e envelhecimento", "contextUltraSubtitle": "Poda heurística", "contextOmniglyphSubtitle": "Contexto como imagens", - "compressionStudioSubtitle": "Cascata de mecanismos em tempo real", + "compressionStudioSubtitle": "Cascata de engines em tempo real", "compressionExclusionsSubtitle": "Bypass por modelo/endpoint", - "chaosConfigSubtitle": "Execução paralela multimodelo", + "chaosConfigSubtitle": "Execução paralela multi-modelo", "routingSection": "Routing", "protocolsSection": "Protocols", "agentsAiSection": "Agents & AI", @@ -1111,7 +1111,7 @@ "aiFeaturesSection": "AI Features", "mcp": "MCP", "a2a": "A2A", - "plugins": "Plugins", + "plugins": "__MISSING__:Plugins", "apiEndpoints": "API Endpoints", "batchFiles": "Files", "analyticsEvals": "Evals", @@ -1120,10 +1120,10 @@ "analyticsComboHealth": "Combo Health", "analyticsCompression": "Compression", "costsBudget": "Budget", - "costsFreeTiers": "Orçamento do nível gratuito", - "costsFreeTiersSubtitle": "Cotas mensais de tokens gratuitos", - "freeProviderRankings": "Rankings de provedores gratuitos", - "freeProviderRankingsSubtitle": "Melhores provedores gratuitos classificados por pontuações ELO do modelo", + "costsFreeTiers": "__MISSING__:Free-Tier Budget", + "costsFreeTiersSubtitle": "__MISSING__:Monthly free-token allowances", + "freeProviderRankings": "__MISSING__:Free Provider Rankings", + "freeProviderRankingsSubtitle": "__MISSING__:Best free providers ranked by model ELO scores", "radar": "Catálogo Radar", "radarSubtitle": "Catálogo de modelos gratuitos enriquecido pela comunidade", "costsQuotaShare": "Compartilhamento de Cota", @@ -1143,7 +1143,7 @@ "settingsAuthz": "Autorização", "settingsRouting": "Routing", "settingsResilience": "Resilience", - "modelLockout": "Bloqueio de modelo", + "modelLockout": "__MISSING__:Model Lockout", "settingsAdvanced": "Advanced", "omniProxySection": "OmniProxy", "quotaTracker": "Provider Quota", @@ -1151,7 +1151,7 @@ "runtime": "Runtime", "consoleLogs": "Console Logs", "logsTimeline": "Timeline", -"logsTimelineSubtitle": "Linha do tempo de solicitação visual", + "logsTimelineSubtitle": "Linha do tempo de solicitação visual", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1192,8 +1192,8 @@ "analyticsCompressionSubtitle": "Estatísticas de economia de tokens", "analyticsSearchSubtitle": "Analytics das ferramentas de busca", "analyticsEvalsSubtitle": "Resultados das suites de avaliação", - "providerStats": "Estatísticas do provedor", - "providerStatsSubtitle": "Métricas de latência e desempenho", + "providerStats": "__MISSING__:Provider Stats", + "providerStatsSubtitle": "__MISSING__:Latency and performance metrics", "logsSubtitle": "Logs da aplicação", "logsProxySubtitle": "Logs de tráfego do proxy", "consoleLogsSubtitle": "Saída do console", @@ -1213,7 +1213,7 @@ "agentSkillsSubtitle": "Registro de skills A2A", "mcpSubtitle": "Controles do servidor MCP", "a2aSubtitle": "Servidor do protocolo A2A", - "pluginsSubtitle": "Marketplace e instalações de plugins", + "pluginsSubtitle": "__MISSING__:Plugin marketplace & installs", "mediaSubtitle": "Arquivos de mídia em cache", "batchFilesSubtitle": "Arquivos de entrada/saída de batch", "settingsSubtitle": "Todas as configurações", @@ -1251,23 +1251,25 @@ "cliAgentsSubtitle": "Agentes autônomos com CLI", "acpAgents": "ACP Agents", "acpAgentsSubtitle": "CLIs spawnadas pelo OmniRoute", - "skipToContent": "Pular para o conteúdo", + "skipToContent": "__MISSING__:Skip to content", "mainNavigation": "Navegação principal", - "unpinSection": "Desafixar seção", - "pinSectionOpen": "Fixar seção aberta", - "reloadPage": "Recarregar Página", - "dragReorderSection": "Arraste para reordenar a seção", - "dragReorderItem": "Arraste para reordenar", - "cannotHide": "Este item não pode ser ocultado", - "alwaysVisible": "Sempre visível", - "groupSeparatorLabel": "Separador", + "unpinSection": "__MISSING__:Unpin section", + "pinSectionOpen": "__MISSING__:Pin section open", + "reloadPage": "__MISSING__:Reload Page", + "dragReorderSection": "__MISSING__:Drag to reorder section", + "dragReorderItem": "__MISSING__:Drag to reorder", + "cannotHide": "__MISSING__:This item cannot be hidden", + "alwaysVisible": "__MISSING__:Always visible", + "groupSeparatorLabel": "__MISSING__:Separator", "discovery": "Descoberta", "discoverySubtitle": "Buscar acesso gratuito em provedores", -"resilienceConnections": "Resiliência de Conexão", -"resilienceConnectionsSubtitle": "Cooldown, disjuntor, estado de bloqueio", -"settingsModalityBridge": "Ponte de Modalidade", -"settingsModalityBridgeSubtitle": "Fallback de imagem/áudio → texto para modelos apenas de texto", -"commandPalette": { + "conductor": "Conductor", + "conductorSubtitle": "Frota de agentes CLI", + "resilienceConnections": "Resiliência de Conexão", + "resilienceConnectionsSubtitle": "Cooldown, disjuntor, estado de bloqueio", + "settingsModalityBridge": "Ponte de Modalidade", + "settingsModalityBridgeSubtitle": "Fallback de imagem/áudio → texto para modelos apenas de texto", + "commandPalette": { "title": "__MISSING__:Command palette", "searchPlaceholder": "__MISSING__:Search pages, settings, tools...", "clearSearch": "__MISSING__:Clear search", @@ -1536,8 +1538,8 @@ "quickNavigation": "Navegação rápida", "quickNavigationTitle": "Navegação rápida (⌘K / Ctrl+K)", "openQuickNavigation": "Abrir navegação rápida", - "switchToLightMode": "Alternar para o modo claro", - "switchToDarkMode": "Alternar para o modo escuro", + "switchToLightMode": "Mudar para modo claro", + "switchToDarkMode": "Mudar para modo escuro", "language": "Idioma", "providers": "Provedores", "providerDescription": "Gerencie suas conexões de provedores de IA", @@ -1641,7 +1643,7 @@ "cloudSyncStatus": { "synced": "Sincronizado", "syncing": "Sincronizando...", - "off": "Sincronização desativada", + "off": "Sincronização desligada", "error": "Erro de sincronização", "disabled": "Desativado", "connected": "conectado", @@ -1652,34 +1654,34 @@ "breadcrumbs": { "ariaLabel": "Trilha de navegação", "dashboard": "Painel", - "providers": "Provedores", + "providers": "Providers", "combos": "Combos", "settings": "Configurações", "general": "Geral", - "appearance": "Aparência", - "ai": "Configurações de IA", - "routing": "Roteamento", - "resilience": "Resiliência", - "advanced": "Avançado", - "accessTokens": "Tokens de acesso", - "featureFlags": "Feature Flags", + "appearance": "Appearance", + "ai": "AI Settings", + "routing": "Routing", + "resilience": "Resilience", + "advanced": "Advanced", + "accessTokens": "Tokens de Acesso", + "featureFlags": "Sinalizadores de recursos", "logs": "Logs", - "auditLog": "Log de auditoria", + "auditLog": "Log de Auditoria", "console": "Console", "logger": "Logger", "translator": "Tradutor", "playground": "Playground", "add": "Adicionar", "edit": "Editar", - "apiKeys": "Chaves de API", + "apiKeys": "Gerenciador API", "models": "Modelos", - "cliCode": "Código CLI", - "cliAgents": "Agentes CLI", - "acpAgents": "Agentes ACP", - "endpoint": "Endpoint", + "cliCode": "CLI Code's", + "cliAgents": "CLI Agents", + "acpAgents": "ACP Agents", + "endpoint": "Ponto final", "apiManager": "Gerenciador de API", "context": "Contexto", - "compression": "Compressão", + "compression": "Compression", "services": "Serviços", "analytics": "Análises", "costs": "Custos", @@ -1687,57 +1689,57 @@ "runtime": "Runtime", "webhooks": "Webhooks", "home": "Início", - "activity": "Atividade", - "agentSkills": "AgentSkills", - "comboHealth": "Saúde do combo", - "evals": "Avaliações", - "search": "Busca", - "utilization": "Utilização", - "apiEndpoints": "Endpoints de API", - "audit": "Auditoria", + "activity": "Activity", + "agentSkills": "Habilidades do agente", + "comboHealth": "Combo Health", + "evals": "Evals", + "search": "Pesquisar", + "utilization": "Utilization", + "apiEndpoints": "API Endpoints", + "audit": "Audit", "a2a": "A2A", "mcp": "MCP", - "batch": "Lote", + "batch": "Batch", "files": "Arquivos", "media": "Mídia", "cache": "Cache", - "changelog": "Registro de alterações", + "changelog": "Changelog", "chaos": "Caos", - "cloudAgents": "Agentes em nuvem", + "cloudAgents": "Agentes de nuvem", "live": "Ao vivo", "studio": "Studio", - "aggressive": "Agressivo", - "caveman": "Homem das cavernas", + "aggressive": "Aggressive", + "caveman": "Caveman", "ccr": "CCR", - "headroom": "Margem", + "headroom": "Headroom", "lite": "Lite", "llmlingua": "LLMLingua", "omniglyph": "OmniGlyph", "rtk": "RTK", - "sessionDedup": "Desduplicação de sessão", + "sessionDedup": "Session Dedup", "ultra": "Ultra", - "budget": "Orçamento", - "pricing": "Preços", - "quotaShare": "Compartilhamento de cota", + "budget": "Budget", + "pricing": "Pricing", + "quotaShare": "Compartilhamento de Cota", "discovery": "Descoberta", - "freeProviderRankings": "Ranking de provedores gratuitos", - "freeTiers": "Níveis gratuitos", - "gamification": "Gamificação", - "leaderboard": "Classificação", + "freeProviderRankings": "Ranking de Provedores Gratuitos", + "freeTiers": "Níveis Gratuitos", + "gamification": "Gamification", + "leaderboard": "Leaderboard", "limits": "Limites", - "profile": "Perfil", + "profile": "Profile", "plugins": "Plugins", - "providerStats": "Estatísticas do provedor", + "providerStats": "Estatísticas do Provedor", "new": "Novo", "quota": "Cota", "relay": "Relay", - "searchTools": "Ferramentas de busca", - "security": "Segurança", - "sidebar": "Barra lateral", + "searchTools": "Search Tools", + "security": "Security", + "sidebar": "Sidebar", "tokens": "Tokens", "tools": "Ferramentas", - "agentBridge": "Ponte de agentes", - "trafficInspector": "Inspetor de tráfego", + "agentBridge": "Agent Bridge", + "trafficInspector": "Inspector de Tráfego", "usage": "Uso" }, "home": { @@ -1870,15 +1872,15 @@ "activitySummary": "{active} dias ativos · {tokens} tokens · {days} dias", "activityCellTitle": "{date}: {tokens} tokens", "activityLess": "Menos", - "activityMore": "Mais", - "chartApiKeyBreakdown": "Detalhamento por chave de API", + "activityMore": "More", + "chartApiKeyBreakdown": "Detalhamento por Chave de API", "chartApiKey": "Chave de API", - "mostActiveDay": "Dia mais ativo", + "mostActiveDay": "Dia Mais Ativo", "datedTokenCount": "{date} · {tokens} tokens", "noDataLast7Days": "Nenhum dado nos últimos 7 dias", - "requestTokenSummary": "{requests} requisições · {tokens} tokens", - "chartByAccount": "Por conta", - "chartByApiKey": "Por chave de API", + "requestTokenSummary": "{requests} solicitações · {tokens} tokens", + "chartByAccount": "Por Conta", + "chartByApiKey": "Por Chave de API", "unknownApiKey": "Chave de API desconhecida", "chartModelBreakdown": "Detalhamento por Modelo", "chartModel": "Modelo", @@ -1936,8 +1938,8 @@ "evals": "Avaliações", "search": "Pesquisar", "utilization": "Utilização", - "routeTrace": "Rastreamento de rota", - "sectionsAria": "Seções de análise", + "routeTrace": "Rastreamento de Rota", + "sectionsAria": "Seções de Analytics", "utilizationDescription": "Tendências de uso de cota do provedor e rastreamento de limites de taxa", "modelStatus": "Status do modelo", "modelStatusCooldown": "Recarga", @@ -1969,12 +1971,12 @@ "comboHealthUnableToLoad": "Não foi possível carregar a saúde do combo", "comboHealthGettingStarted": "Primeiros passos", "comboHealthForecastTitle": "Previsão de custo e cota", - "comboHealthForecastDescription": "Projeção linear a partir do histórico de tráfego combinado e instantâneos de cota.", - "comboHealthQuotaRisk": "Risco de cota {level}", - "comboHealthConfidence": "Confiança {level}", + "comboHealthForecastDescription": "Projeção linear a partir do tráfego histórico do combo e snapshots de cota.", + "comboHealthQuotaRisk": "risco de cota {level}", + "comboHealthConfidence": "confiança {level}", "comboHealthProjectedCost": "Custo projetado", "comboHealthCostHistory": "histórico {total} · {daily}/dia", - "comboHealthProjectedRequests": "Requisições projetadas", + "comboHealthProjectedRequests": "Solicitações projetadas", "comboHealthRequestsInRange": "{count} no intervalo selecionado", "comboHealthWorstProjectedQuota": "Pior cota projetada", "comboHealthNoDepletionEstimate": "Sem estimativa de esgotamento", @@ -1982,28 +1984,28 @@ "comboHealthTraffic": "tráfego", "comboHealthProjectedQuota": "Cota projetada", "comboHealthPricingCoverage": "Cobertura de preços", - "comboHealthAutopilotTitle": "Piloto automático de saúde do combo", + "comboHealthAutopilotTitle": "Piloto Automático de Saúde do Combo", "comboHealthAutopilotDescription": "Recomendações priorizadas com base na saúde do combo, previsões, cotas e saúde do provedor.", "comboHealthIssues": "Problemas", "comboHealthActionable": "{count} acionáveis", - "comboHealthDown": "Inoperante", + "comboHealthDown": "Down", "comboHealthDegraded": "Degradado", - "comboHealthHealthy": "Saudável", + "comboHealthHealthy": "Healthy", "comboHealthNoActiveIssues": "Nenhum problema ativo de saúde do combo detectado para o intervalo selecionado.", "comboHealthScoringInspector": "Inspetor de pontuação inteligente", "comboHealthReadOnlyRecompute": "Recálculo somente leitura", - "comboHealthScoringDescription": "Explicação em nível de fator para a classificação de destinos usando a saúde atual, previsões e heurísticas de roteamento.", + "comboHealthScoringDescription": "Explicação por fator da classificação de alvos usando saúde atual, previsão e heurísticas de roteamento.", "comboHealthTask": "Tarefa: {task}", - "comboHealthSelectedRank": "Classificação nº 1 selecionada", + "comboHealthSelectedRank": "Posição selecionada #1", "comboHealthFactor": { "quota": "Cota", "health": "Saúde", "costInv": "Custo", - "latencyInv": "Latência", + "latencyInv": "Latency", "taskFit": "Adequação à tarefa", - "stability": "Estabilidade", - "tierPriority": "Nível", - "tierAffinity": "Adequação ao nível", + "stability": "Stability", + "tierPriority": "Tier", + "tierAffinity": "Adequação de nível", "specificityMatch": "Especificidade", "contextAffinity": "Contexto", "resetWindowAffinity": "Janela de redefinição" @@ -2011,39 +2013,39 @@ "comboHealthQuotaValue": "Cota {value}", "comboHealthLatencyValue": "Latência {value}ms", "comboHealthIssueCount": "Problemas {count}", - "comboHealthNoInspectableTargets": "Nenhum destino inspecionável para este combo.", + "comboHealthNoInspectableTargets": "Nenhum alvo inspecionável para este combo.", "comboHealthAutopilotState": { - "down": "Inoperante", - "degraded": "Requer atenção", - "healthy": "Saudável" + "down": "Down", + "degraded": "Precisa de atenção", + "healthy": "Healthy" }, "comboHealthModelProviderCount": "{models} modelos em {providers} provedores", "comboHealthGiniCoefficient": "Coeficiente de Gini", - "comboHealthRequestCount": "{count} requisições", + "comboHealthRequestCount": "{count} solicitações", "comboHealthQuotaHealthDescription": "Menor cota restante entre provedores com sinais de tendência curtos.", "comboHealthRemainingQuota": "Cota restante {value}", "comboHealthTrend": { "improving": "Melhorando", - "declining": "Em declínio", + "declining": "Piorando", "stable": "Estável" }, - "comboHealthUsageSkewDescription": "Participação de requisições do modelo e participação de tokens dentro deste combo.", - "comboHealthShareSummary": "Participação de requisições {requests} · Participação de tokens {tokens}", + "comboHealthUsageSkewDescription": "Participação de solicitações e de tokens por modelo dentro deste combo.", + "comboHealthShareSummary": "Participação de solicitações {requests} · Participação de tokens {tokens}", "comboHealthPerformance": "Desempenho", - "comboHealthPerformanceDescription": "Confiabilidade e taxa de transferência para tráfego de combo roteado.", - "comboHealthExecutionTargetsDescription": "Métricas de tempo de execução no nível de etapa e visibilidade de cota para alvos de combo estruturados.", + "comboHealthPerformanceDescription": "Confiabilidade e throughput para o tráfego de combo roteado.", + "comboHealthExecutionTargetsDescription": "Métricas de runtime por etapa e visibilidade de cota para alvos de combo estruturados.", "comboHealthRequestShort": "{count} req", "comboHealthQuotaScope": "Escopo da cota: {scope}", "comboHealthTrendValue": "Tendência: {trend}", - "comboHealthFetchFailed": "Falha ao buscar dados de integridade do combo", + "comboHealthFetchFailed": "Falha ao buscar dados de saúde do combo", "unknownError": "Erro desconhecido", - "comboHealthIntro": "Monitore a pressão da cota, o uso distorcido do modelo e o desempenho de entrega por combo.", - "comboHealthForecastHorizon": "Previsão de {value}", - "comboHealthNoData": "Nenhum dado de integridade do combo disponível", - "comboHealthNoDataDescription": "Instantâneos de cota do combo e requisições roteadas aparecerão aqui após o início do fluxo de tráfego.", + "comboHealthIntro": "Monitore a pressão de cota, o uso desequilibrado de modelos e o desempenho de entrega por combo.", + "comboHealthForecastHorizon": "previsão de {value}", + "comboHealthNoData": "Nenhum dado de saúde de combo disponível", + "comboHealthNoDataDescription": "Snapshots de cota de combo e solicitações roteadas aparecerão aqui assim que o tráfego começar a fluir.", "comboHealthStepCreate": "Crie combos em Combos com múltiplos provedores", - "comboHealthStepSend": "Envie requisições para endpoints de combo para gerar dados de tráfego", - "comboHealthStepAutomatic": "As métricas de integridade aparecerão automaticamente conforme as requisições forem roteadas", + "comboHealthStepSend": "Envie solicitações para endpoints de combo para gerar dados de tráfego", + "comboHealthStepAutomatic": "As métricas de saúde aparecerão automaticamente conforme as solicitações forem roteadas", "comboHealthTracking": "Rastreando {count} combos para {range}", "compressionAnalyticsTotalRequests": "Total de solicitações", "compressionAnalyticsTokensSaved": "Tokens salvos", @@ -2056,26 +2058,26 @@ "compressionAnalyticsTotalTokens": "Totais de fichas", "compressionAnalyticsCacheTokens": "Tokens de cache", "compressionAnalyticsNoDataYet": "Ainda não há dados de compactação", - "compressionAnalyticsLoading": "Carregando análises de compressão…", - "compressionAnalyticsNoDataDescription": "As requisições de compressão aparecerão aqui após a primeira requisição através de /v1/chat/completions com a compressão ativada.", + "compressionAnalyticsLoading": "Carregando analytics de compressão…", + "compressionAnalyticsNoDataDescription": "As solicitações de compressão aparecerão aqui após a primeira solicitação via /v1/chat/completions com compressão ativada.", "rangeLast24h": "Últimas 24h", "rangeLast7d": "Últimos 7d", "rangeLast30d": "Últimos 30d", "rangeAllTime": "Todo o período", - "compressionAnalyticsModeStats": "{count} requisições · {tokens} tokens economizados", - "compressionAnalyticsSkipped": " · {count} ignorados (no-op)", + "compressionAnalyticsModeStats": "{count} solicitações · {tokens} tokens economizados", + "compressionAnalyticsSkipped": " · {count} ignoradas (no-op)", "compressionAnalyticsRealTokens": "{count} tokens reais", "compressionAnalyticsValidationRestores": "restaurações de validação", - "compressionAnalyticsRealUsageReceipts": "Recibos de uso real", + "compressionAnalyticsRealUsageReceipts": "Comprovantes de Uso Real", "compressionAnalyticsSources": "Fontes", - "compressionAnalyticsModeBreakdown": "Detalhamento por modo", - "compressionAnalyticsProviderBreakdown": "Detalhamento por provedor", - "compressionAnalyticsLast24HoursActivity": "Últimas 24 horas (Atividade)", - "compressionAnalyticsChartPoint": "{hour}: {count} requisições, {tokens} tokens economizados", - "compressionAnalyticsMaxRequests": "Máximo de requisições/hora: {count}", - "compressionAnalyticsMaxTokens": "Máximo de tokens/hora: {count}", - "compressionAnalyticsStartTracking": "Use POST /v1/chat/completions com configuração de compressão para começar a rastrear a análise de compressão.", - "compressionAnalyticsInfo": "Análise de compressão: Economia de tokens rastreada por modo (off, lite, standard, aggressive, ultra, RTK, stacked), mecanismo, combo de compressão e provedor. Passe o mouse sobre os gráficos para obter detalhes. Use the time selector para visualizar diferentes períodos.", + "compressionAnalyticsModeBreakdown": "Detalhamento por Modo", + "compressionAnalyticsProviderBreakdown": "Detalhamento por Provedor", + "compressionAnalyticsLast24HoursActivity": "Últimas 24 Horas (Atividade)", + "compressionAnalyticsChartPoint": "{hour}: {count} solicitações, {tokens} tokens economizados", + "compressionAnalyticsMaxRequests": "Máx. de solicitações/hora: {count}", + "compressionAnalyticsMaxTokens": "Máx. de tokens/hora: {count}", + "compressionAnalyticsStartTracking": "Use POST /v1/chat/completions com configuração de compressão para começar a rastrear os analytics de compressão.", + "compressionAnalyticsInfo": "Analytics de compressão: Economia de tokens rastreada por modo (off, lite, standard, aggressive, ultra, RTK, stacked), engine, combo de compressão e provedor. Passe o mouse sobre os gráficos para ver detalhes. Use o seletor de tempo para visualizar diferentes períodos.", "searchAnalyticsTotalSearches": "Total de pesquisas", "searchAnalyticsCacheHitRate": "Taxa de acertos do cache", "searchAnalyticsTotalCost": "Custo total", @@ -2093,70 +2095,70 @@ "7d": "Últimos 7 dias", "30d": "Últimos 30 dias" }, - "providerUtilizationGlobalView": "Visualização Global", + "providerUtilizationGlobalView": "Visão Global", "providerUtilizationAccountSplit": "Divisão por Conta", "providerUtilizationLoading": "Carregando dados de utilização…", "retrying": "Tentando novamente…", - "retry": "Tentar novamente", - "providerUtilizationNoDataDescription": "Snapshots de cota do provedor aparecerão aqui após a coleta dos dados de utilização.", - "providerUtilizationStepConnect": "Conecte provedores por meio de OAuth ou chaves de API em Provedores", - "providerUtilizationStepEnable": "Habilite o rastreamento de cota usando o provedor em um combo ou requisição direta", + "retry": "Retry", + "providerUtilizationNoDataDescription": "Snapshots de cota do provedor aparecerão aqui após a coleta de dados de utilização.", + "providerUtilizationStepConnect": "Conecte provedores via OAuth ou chaves de API em Provedores", + "providerUtilizationStepEnable": "Ative o rastreamento de cota usando o provedor em um combo ou solicitação direta", "providerUtilizationStepAutomatic": "Os dados aparecerão automaticamente conforme os snapshots de cota forem coletados", "statusExhausted": "Esgotado", "statusLow": "Baixo", - "statusHealthy": "Saudável", + "statusHealthy": "Healthy", "remainingQuota": "Cota restante", "routeTraceTitle": "Visualização de Rastreamento de Rota", - "routeTraceDescription": "Inspecione o rastreamento de requisição persistido: alvo selecionado, fatores de roteamento, evidências de fallback, reprodução de pontuação atual, latência, tokens e integridade do alvo.", - "routeTraceRequestLog": "Log de requisição", + "routeTraceDescription": "Inspecione o rastro de solicitação persistido: alvo selecionado, fatores de roteamento, evidências de fallback, replay da pontuação atual, latência, tokens e saúde do alvo.", + "routeTraceRequestLog": "Log de solicitação", "routeWeight": "Peso {weight}%", - "routeNoRelatedEvidence": "Nenhuma evidência de alvo relacionada persistida ainda.", + "routeNoRelatedEvidence": "Ainda não há evidências relacionadas ao alvo persistidas.", "unknown": "desconhecido", "selected": "Selecionado", - "routeNoStepId": "sem ID de etapa", + "routeNoStepId": "sem id de etapa", "routeNoStep": "sem etapa", "routeMatchesTopTarget": "Corresponde ao alvo principal atual", - "routeDiffersFromTop": "Diferente do principal atual", + "routeDiffersFromTop": "Difere do principal atual", "routeTargetMissingNow": "Alvo ausente agora", "routeNotComboRouted": "Não roteado por combo", "routeWhyTarget": "Por que este alvo?", - "routeWhyTargetSubtitle": "Metadados exatos de tempo de execução mais reprodução de pontuação somente leitura", - "routeExactRuntimeLog": "Log exato de tempo de execução", + "routeWhyTargetSubtitle": "Metadados exatos de runtime mais replay de pontuação somente leitura", + "routeExactRuntimeLog": "Log exato de runtime", "routeCallLogsExact": "call_logs exato", "routeReadOnlyRecompute": "Recálculo somente leitura", - "routeRuntimeRankNow": "Classificação em tempo de execução agora", - "routeRuntimeScoreNow": "Pontuação em tempo de execução agora", + "routeRuntimeRankNow": "Posição de runtime agora", + "routeRuntimeScoreNow": "Pontuação de runtime agora", "routeWouldSelectNow": "Selecionaria agora", - "routeNoRecomputeCandidates": "Nenhuma classificação de candidato de combo pode ser recomputada para esta solicitação.", - "runtime": "Tempo de execução", - "routeTopNow": "Melhor agora", + "routeNoRecomputeCandidates": "Nenhuma classificação de candidatos de combo pode ser recalculada para esta solicitação.", + "runtime": "Runtime", + "routeTopNow": "Principal agora", "routeFetchLogsFailed": "Falha ao buscar logs de solicitação", "routeExplainFailed": "Falha ao explicar a rota", - "direct": "direto", + "direct": "direct", "routeUnableToLoad": "Não foi possível carregar a explicação da rota", "routeNoRequestLogs": "Nenhum log de solicitação disponível", - "routeNoRequestLogsDescription": "Envie tráfego pelo OmniRoute primeiro. As explicações de rota são geradas a partir de logs de chamadas estruturados persistidos.", + "routeNoRequestLogsDescription": "Envie tráfego pelo OmniRoute primeiro. As explicações de rota são geradas a partir de logs de chamada estruturados persistidos.", "routeDecisionSummary": "Resumo da decisão", - "routeConfidence": "{confidence} de confiança", + "routeConfidence": "confiança {confidence}", "routeScore": "Pontuação da rota", - "latency": "Latência", + "latency": "Latency", "routeRecentSuccess": "Sucesso recente", - "routeAvgTargetLatency": "Latência média do destino", - "routeSelectedTarget": "Destino selecionado", + "routeAvgTargetLatency": "Latência média do alvo", + "routeSelectedTarget": "Alvo selecionado", "provider": "Provedor", "model": "Modelo", "account": "Conta", - "connection": "Conexão", - "combo": "Combo", + "connection": "Por conta", + "combo": "Combinação", "routeStep": "Etapa", "tokens": "Tokens", - "notAvailable": "n/a", - "routeTokenCounts": "{input} de entrada · {output} de saída", - "routeEvidence": "Evidência", + "notAvailable": "n/d", + "routeTokenCounts": "{input} entrada · {output} saída", + "routeEvidence": "Evidências", "routeFactors": "Fatores de roteamento", - "routeFactorsSubtitle": "Sinais ponderados usados para esta explicação", - "routeFallbackTimeline": "Linha do tempo de fallback e destino", - "routeFallbackTimelineSubtitle": "Inferido a partir de logs de chamadas persistidos em torno desta solicitação", + "routeFactorsSubtitle": "Sinais ponderados usados nesta explicação", + "routeFallbackTimeline": "Linha do tempo de fallback e alvo", + "routeFallbackTimelineSubtitle": "Inferido a partir de logs de chamada persistidos em torno desta solicitação", "routeRecommendations": "Recomendações", "routeLimitations": "Limitações", "routeNoKnownLimitations": "Nenhuma limitação conhecida para esta explicação.", @@ -2241,11 +2243,11 @@ "endpointsRestricted": "Restrito a {count} endpoint{count, plural, one {} other {s}}.", "autoResolve": "Auto-Resolve", "autoResolveDesc": "Resolve automaticamente nomes ambíguos de modelo para o provedor nativo desta API key.", - "streamDefaultMode": "Compatibilidade padrão de stream", - "streamDefaultModeDesc": "Controla sinalizadores `stream` omitidos para esta chave. O modo JSON retorna respostas sem streaming, a menos que o cliente solicite explicitamente SSE.", - "streamDefaultLegacy": "Legado", - "streamDefaultJson": "Compatível com JSON", - "streamDefaultBadge": "Stream JSON padrão", + "streamDefaultMode": "__MISSING__:Stream Default Compatibility", + "streamDefaultModeDesc": "__MISSING__:Controls omitted `stream` flags for this key. JSON mode returns non-streaming responses unless the client explicitly requests SSE.", + "streamDefaultLegacy": "__MISSING__:Legacy", + "streamDefaultJson": "__MISSING__:JSON Compatible", + "streamDefaultBadge": "__MISSING__:JSON stream default", "keyActive": "Chave Ativa", "keyActiveDesc": "Ativa ou desativa esta API key. Chaves desativadas são bloqueadas com 403.", "accessSchedule": "Horário de Acesso", @@ -2293,7 +2295,7 @@ "devicesCount": "{count, plural, one {# dispositivo} other {# dispositivos}}", "devicesTooltip": "{count, plural, one {# dispositivo distinto (IP/User-Agent) visto com esta chave (últimos 30 min)} other {# dispositivos distintos (IP/User-Agent) vistos com esta chave (últimos 30 min)}}", "lastUsedOn": "Último: {date}", - "viewCostsFor": "View costs for {name}", + "viewCostsFor": "__MISSING__:View costs for {name}", "editPermissions": "Editar permissões", "deleteKey": "Excluir chave", "regenerateKey": "Chave regenerada", @@ -2309,12 +2311,12 @@ "restrictDesc": "Esta chave pode acessar {selectedCount} de {totalModels} modelos.", "selectedCount": "{count} selecionados", "maxActiveSessions": "Máximo de sessões ativas", - "maxActiveSessionsDescription": "0 = ilimitado. Retorna 429 quando esta chave exceder sessões persistentes simultâneas.", - "throttleDelay": "Atraso de limitação", - "throttleDelayDescription": "Adicione um atraso fixo antes que as requisições para esta chave sejam roteadas. 0 = sem lentidão.", + "maxActiveSessionsDescription": "0 = ilimitado. Retorna 429 quando esta chave excede o número de sessões fixas simultâneas.", + "throttleDelay": "Atraso de Limitação", + "throttleDelayDescription": "Adiciona um atraso fixo antes que as solicitações desta chave sejam roteadas. 0 = sem atraso.", "expandClaudeCodeFamilies": "Expandir famílias do Claude Code", "removeClaudeCodeDefault": "Remover padrão do Claude Code", - "allowedCombos": "Combos permitidos", + "allowedCombos": "Combos Permitidos", "allCombosAllowed": "Esta chave pode usar qualquer combo.", "restrictedComboCount": "Restrito a {count, plural, one {# combo} other {# combos}}.", "apiManagerCustomRateLimits": "Limites de taxas personalizadas", @@ -2345,12 +2347,12 @@ "shownOf": "{shown} de {total} exibidas", "emptyFilterTitle": "Nenhuma chave corresponde aos filtros", "emptyFilterClear": "Limpar filtros", - "disableNonPublicModels": "Desativar modelos não públicos", - "disableNonPublicModelsDesc": "Rejeitar requisições para modelos que não foram descobertos ou não estão marcados como públicos no catálogo do provedor", + "disableNonPublicModels": "__MISSING__:Disable Non-Public Models", + "disableNonPublicModelsDesc": "__MISSING__:Reject requests for models that are not discovered or not marked as public in the provider catalog", "normalKeysSection": "Chaves normais", "quotaKeysSection": "Chaves de cota", - "bypassProviderQuota": "Ignorar limites de cota do provedor", - "bypassProviderQuotaDescription": "Permite que esta chave ignore a política de limite do provedor/conta upstream durante o roteamento. As cotas em USD da chave de API ainda se aplicam.", + "bypassProviderQuota": "Ignorar cortes de cota do provedor", + "bypassProviderQuotaDescription": "Permite que esta chave ignore a política de corte do provedor/conta upstream durante o roteamento. As cotas em USD da chave de API ainda se aplicam.", "quotaPill": "QUOTA", "quotaModeOnly": "só-qtSd" }, @@ -2409,43 +2411,43 @@ "noConnections": "Nenhuma conexão ainda — adicione uma na página do provedor.", "loading": "Carregando...", "suggestedModels": "Modelos sugeridos pelo provedor", - "imageGeneration": "Geração de imagem", - "imageToText": "Imagem para texto", - "imageToTextComingSoon": "O playground inline de Imagem para Texto estará disponível quando /api/v1/images/understanding for implementado.", + "imageGeneration": "Image Generation", + "imageToText": "Imagem para Texto", + "imageToTextComingSoon": "O playground inline de Imagem-para-Texto estará disponível quando /api/v1/images/understanding for implementado.", "disabled": "Desativado", - "videoGeneration": "Geração de vídeo", - "musicGeneration": "Geração de música", - "textToSpeech": "Texto para fala", + "videoGeneration": "Video Generation", + "musicGeneration": "Geração Musical", + "textToSpeech": "Texto para Fala", "transcription": "Transcrição", "imagePromptPlaceholder": "Uma paisagem serena com montanhas ao pôr do sol...", "videoPromptPlaceholder": "Um timelapse de uma flor desabrochando...", - "musicPromptPlaceholder": "Música eletrônica animada com sintetizadores...", + "musicPromptPlaceholder": "Música eletrônica animada com pads de synth...", "speechTextPlaceholder": "Olá! Bem-vindo ao OmniRoute, seu gateway de IA inteligente...", "transcriptionPlaceholder": "Envie um arquivo de áudio para transcrever...", - "noImagesReturned": "Nenhuma imagem retornada. O provedor pode ter aceitado a requisição, mas retornou dados vazios.", + "noImagesReturned": "Nenhuma imagem retornada. O provedor pode ter aceitado a solicitação, mas retornou dados vazios.", "generatedImageAlt": "Imagem gerada {index}", "save": "Salvar", - "enterTextToSynthesize": "Por favor, insira o texto para sintetizar.", - "selectAudioToTranscribe": "Por favor, selecione um arquivo de áudio para transcrever.", + "enterTextToSynthesize": "Digite o texto a ser sintetizado.", + "selectAudioToTranscribe": "Selecione um arquivo de áudio para transcrever.", "noSpeechDetected": "Nenhuma fala detectada no arquivo de áudio. Se você enviou música ou um arquivo silencioso, tente um arquivo de áudio com palavras faladas. Provedor: \"{provider}\".", - "emptyTranscription": "A transcrição retornou um texto vazio. O áudio pode não conter fala reconhecível ou a chave de API do \"{provider}\" pode ser inválida. Verifique Painel → Logs → Proxy para obter detalhes.", - "topazRequiresImage": "O Topaz requer uma imagem de entrada.", - "enterPrompt": "Por favor, insira um prompt.", - "enhanceThisImage": "Melhorar esta imagem", + "emptyTranscription": "A transcrição retornou texto vazio. O áudio pode não conter fala reconhecível, ou a chave de API \"{provider}\" pode ser inválida. Verifique Dashboard → Logs → Proxy para mais detalhes.", + "topazRequiresImage": "Topaz requer uma imagem de entrada.", + "enterPrompt": "Digite um prompt.", + "enhanceThisImage": "Aprimorar esta imagem", "failedToReadFile": "Falha ao ler o arquivo", "generationFailed": "Falha na geração", - "requestFailed": "Falha na requisição ({status})", + "requestFailed": "Falha na solicitação ({status})", "provider": "Provedor", - "credentialsRequired": "Requer a chave de API do em Provedores", + "credentialsRequired": "Requer chave de API em Provedores", "voice": "Voz", "format": "Formato", "audioVideoFile": "Arquivo de Áudio / Vídeo", "fileTooLarge": "Arquivo muito grande ({size}). Máximo permitido: {max}.", "audioVideoFileHint": "Suporta arquivos de áudio e vídeo de até 4 GB", "sourceImage": "Imagem de Origem", - "sourceImageHint": "Opcional para fluxos de trabalho de imagem para imagem, edição e upscale.", + "sourceImageHint": "Opcional para fluxos de imagem-para-imagem, edição e upscale.", "maskImage": "Imagem de Máscara", - "maskImageHint": "Opcional. Usado por modelos do estilo inpaint que suportam máscaras.", + "maskImageHint": "Opcional. Usado por modelos no estilo inpaint que suportam máscaras.", "text": "Texto", "promptOptional": "Prompt (opcional)", "enhancementInstructionsPlaceholder": "Instruções de aprimoramento opcionais...", @@ -2455,10 +2457,10 @@ "transcribeAudio": "Transcrever Áudio", "generateModality": "Gerar {modality}", "apiKeyRequired": "Chave de API Necessária", - "configureApiKeys": "Configure as chaves de API em Provedores", + "configureApiKeys": "Configure chaves de API em Provedores", "downloadFormat": "Baixar {format}", "noTextReturned": "Nenhum texto retornado", - "wordTimestamps": "Timestamps no nível da palavra ({count} palavras)", + "wordTimestamps": "Timestamps por palavra ({count} palavras)", "providerCount": "{count} provedores", "imageToTextBridgeAvailable": "A Ponte de Modalidade agora pode descrever imagens para modelos somente de texto. O playground inline estará disponível quando /api/v1/images/understanding for implementado.", "imageToTextBridgeCta": "Configure a ponte Imagem→Texto nas configurações da Ponte de Modalidade", @@ -2543,8 +2545,8 @@ "freeQuota": "Cota gratuita/mês", "scrapeUrl": "URL para extrair", "scrapeUrlPlaceholder": "https://exemplo.com", - "scrapeUrlRequired": "A URL é obrigatória", - "scrapeUrlInvalid": "URL inválida — deve começar com http:// ou https://", + "scrapeUrlRequired": "__MISSING__:URL is required", + "scrapeUrlInvalid": "__MISSING__:Invalid URL — it must start with http:// or https://", "scrapeExtract": "Extrair", "scrapeExtracting": "Extraindo…", "scrapeFullPage": "Página completa", @@ -2558,8 +2560,8 @@ "scrapeMetadata": "Metadados", "scrapeProvider": "Provedor", "scrapeSize": "Tamanho", - "scrapeEmptyState": "Insira uma URL para extrair seu conteúdo", - "scrapeProvidersAvailable": "Provedores disponíveis: Firecrawl, Jina Reader, Tavily.", + "scrapeEmptyState": "__MISSING__:Enter a URL to extract its content", + "scrapeProvidersAvailable": "__MISSING__:Available providers: Firecrawl, Jina Reader, Tavily.", "compareRun": "Comparar", "compareRunning": "Comparando…", "autoProvider": "Auto (mais barato)", @@ -2571,40 +2573,40 @@ "noneOption": "Nenhum", "size": "Tamanho", "configurationPane": "Painel de configuração", - "configuration": "Configuração", + "configuration": "Configuration", "status": "Status", - "compareProviderHint": "Selecione até 4 provedores na guia Comparar para compará-los lado a lado.", + "compareProviderHint": "Selecione até 4 provedores na aba Comparar para compará-los lado a lado.", "history": "Histórico", - "historyHint": "O histórico está disponível na guia Pesquisa.", + "historyHint": "O histórico está disponível na aba Pesquisar.", "noActiveProvider": "Nenhum provedor de pesquisa ativo", "configureMoreProviders": "Configurar mais provedores", "links": "Links", "contentTruncated": "Conteúdo truncado para 256 KB (tamanho original: {size})", - "viewFullRaw": "Visualizar conteúdo bruto completo", + "viewFullRaw": "Ver conteúdo bruto completo", "rawScrapedContent": "Conteúdo bruto extraído", "rawContent": "Conteúdo bruto — {size}", "closeRawModal": "Fechar modal de conteúdo bruto", "httpError": "Erro {status}", - "failed": "Falhou", - "requestFailed": "A requisição falhou", + "failed": "Failed", + "requestFailed": "Falha na requisição", "embedding": "Embedding", "embeddingSample": "Olá, mundo!", - "image": "Imagem", + "image": "Image", "imageSample": "Uma paisagem serena com montanhas ao pôr do sol", "music": "Música", "musicSample": "Piano de jazz animado com percussão leve", - "noAudioUrl": "Nenhum URL de áudio na resposta: {response}", - "documentUrl": "URL do documento", - "fileTooLarge25Mb": "Arquivo muito grande — máx. 25 MB", + "noAudioUrl": "Nenhuma URL de áudio na resposta: {response}", + "documentUrl": "URL do Documento", + "fileTooLarge25Mb": "Arquivo muito grande — máximo de 25 MB", "selectAudioFirst": "Selecione um arquivo de áudio primeiro.", - "speechToText": "Conversão de voz em texto", + "speechToText": "Fala para Texto", "chooseFile": "Escolher arquivo…", - "audioFormats25Mb": "mp3, wav, m4a, ogg, flac — máx. 25 MB", - "textToSpeech": "Conversão de texto em voz", - "ttsSample": "Olá, este é um teste de conversão de texto em voz.", + "audioFormats25Mb": "mp3, wav, m4a, ogg, flac — máximo de 25 MB", + "textToSpeech": "Texto para Fala", + "ttsSample": "Olá, este é um teste de texto para fala.", "video": "Vídeo", - "videoSample": "Um time-lapse de nuvens sobre uma cadeia de montanhas", - "webFetch": "Busca na Web", + "videoSample": "Um timelapse de nuvens sobre uma cadeia de montanhas", + "webFetch": "Web Fetch", "webSearchSample": "O que é o gateway de IA OmniRoute?", "noActiveProviderDescription": "Nenhum provedor de pesquisa ativo. Configure um em Provedores.", "configureProviders": "Configurar provedores", @@ -2612,44 +2614,44 @@ "compareQueryPlaceholder": "tendências de inteligência artificial 2026", "selectedProviders": "Provedores ({count} selecionados):", "selectAll": "Selecionar todos", - "clear": "Limpar", - "maxCompareProviders": "No máximo {count} provedores podem ser comparados ao mesmo tempo.", + "clear": "Claro", + "maxCompareProviders": "No máximo {count} provedores podem ser comparados por vez.", "compareResults": "Resultados — “{query}”", "resultCount": "{count} resultados", "noResults": "Nenhum resultado", "sharedResultTitle": "Em comum com outro provedor", "sharedResult": "Em comum", "overlapSummary": "{first} vs {second}: {overlap} em comum", - "compareEmptyTitle": "Selecione os provedores e insira uma consulta para comparar", - "compareEmptyDescription": "Os resultados serão exibidos lado a lado com latência, custo e sobreposição de URL" + "compareEmptyTitle": "Selecione provedores e digite uma consulta para comparar", + "compareEmptyDescription": "Os resultados serão exibidos lado a lado com latência, custo e sobreposição de URLs" }, "cliTools": { "title": "Ferramentas CLI", - "classifierCompatTitle": "Compatibilidade do classificador de permissão automática", - "classifierCompatDescription": "Curto-circuitar o classificador de segurança --permission-mode auto do Claude Code com uma resposta de permissão sintética para que as rotas de fallback não falhem fechadas. Desativado por padrão.", - "classifierCompatCycle": "Ciclo: desativado → auto → sempre", + "classifierCompatTitle": "Compatibilidade do classificador de auto-permissão", + "classifierCompatDescription": "Curto-circuita o classificador de segurança --permission-mode auto do Claude Code com uma resposta sintética de permissão para que rotas de fallback não falhem fechadas. Desativado por padrão.", + "classifierCompatCycle": "Ciclo: desligado → automático → sempre", "classifierCompatLoadFailed": "Falha ao carregar configuração", "classifierCompatMode": { - "off": "Desativado", + "off": "Off", "auto": "Auto", "always": "Sempre" }, -"ccDiscoveryInfoButton": "Como habilitar a descoberta no Claude Code", -"ccDiscoveryInfoTooltip": "Anuncie modelos não Claude sob claude/<provider>/<model> IDs de espelho para que a descoberta de modelos do gateway do Claude Code possa listá-los. Dobra as entradas do catálogo para todos os clientes quando ativado globalmente.", -"ccDiscoveryInfoLink": "Abrir Recursos de Funcionalidade", + "ccDiscoveryInfoButton": "Como habilitar a descoberta no Claude Code", + "ccDiscoveryInfoTooltip": "Anuncie modelos não Claude sob claude/<provider>/<model> IDs de espelho para que a descoberta de modelos do gateway do Claude Code possa listá-los. Dobra as entradas do catálogo para todos os clientes quando ativado globalmente.", + "ccDiscoveryInfoLink": "Abrir Recursos de Funcionalidade", "ccOnboardingTitle": "settings.json para descoberta de modelos pelo gateway", "ccOnboardingCopy": "Copiar", "ccOnboardingCopied": "Copiado", "ccOnboardingKeyPlaceholder": "", "ccOnboardingWindowNote": "O Claude Code assume uma janela de contexto de 200K para qualquer id de modelo que ele não reconhece. Para um modelo com janela real diferente, acrescente CLAUDE_CODE_AUTO_COMPACT_WINDOW logo abaixo para a compactação automática não disparar cedo demais.", "failedSave": "Falha ao salvar", - "profileSyncTitle": "Sincronização automática de perfil da CLI", - "profileSyncDescription": "Após a sincronização dos modelos do provedor, regenera automaticamente os perfis de ferramentas da CLI a partir do catálogo ativo. Desativado por padrão — apenas os arquivos de perfil são gravados; a configuração ativa/padrão nunca é alterada.", + "profileSyncTitle": "Sincronização automática de perfis de CLI", + "profileSyncDescription": "Após a sincronização dos modelos do provedor, regenera automaticamente os perfis de ferramentas CLI a partir do catálogo ativo. Desativado por padrão — apenas os arquivos de perfil são gravados; a configuração ativa/padrão nunca é alterada.", "profileSyncLoadFailed": "Falha ao carregar configurações", "codexProfiles": "Perfis do Codex", - "codexProfilesDescription": "Regenerar ~/.codex/*.config.toml após a descoberta de modelos.", + "codexProfilesDescription": "Regenera ~/.codex/*.config.toml após a descoberta de modelos.", "claudeProfiles": "Perfis do Claude Code", - "claudeProfilesDescription": "Regenerar cada ~/.claude/profiles/…/settings.json após a descoberta de modelos.", + "claudeProfilesDescription": "Regenera cada ~/.claude/profiles/…/settings.json após a descoberta de modelos.", "noActiveProviders": "Nenhum provedor ativo", "noActiveProvidersDesc": "Adicione e conecte provedores primeiro para configurar as ferramentas CLI.", "mapModels": "Mapear Modelos", @@ -2658,7 +2660,7 @@ "configureEndpoint": "Configurar Endpoint", "instructions": "Instruções", "modelMapping": "Mapeamento de Modelos", - "reasoningEffort": "Esforço de raciocínio para {model}", + "reasoningEffort": "__MISSING__:Reasoning effort for {model}", "effortNone": "Nenhum", "effortLow": "Baixo", "effortMedium": "Médio", @@ -2726,14 +2728,14 @@ "saveMappings": "Salvar Mapeamentos", "mappingsSaved": "Mapeamentos salvos!", "failedSaveMappings": "Falha ao salvar mapeamentos", - "reasoningEffortDefault": "Padrão", - "reasoningEffortHint": "O padrão preserva o esforço de raciocínio enviado pelo agente", + "reasoningEffortDefault": "__MISSING__:Default", + "reasoningEffortHint": "__MISSING__:Default preserves the reasoning effort sent by the agent", "reasoningEffortTier": { - "none": "Nenhum", - "low": "Baixo", - "medium": "Médio", - "high": "Alto", - "xhigh": "Muito Alto" + "none": "__MISSING__:None", + "low": "__MISSING__:Low", + "medium": "__MISSING__:Medium", + "high": "__MISSING__:High", + "xhigh": "__MISSING__:XHigh" }, "howItWorks": "Como funciona:", "antigravityHowWorksDesc": "O Antigravity envia requisições para o endpoint do Google. O MITM intercepta e redireciona para o OmniRoute.", @@ -2848,7 +2850,7 @@ "openclaw": "Assistente de IA Open Claw", "cline": "CLI assistente de codificação Cline", "kilo": "CLI assistente de IA Kilo Code", - "qwen": "Qwen Code CLI", + "qwen": "CLI Alibaba Qwen Code", "cursor": "Editor de código com IA Cursor", "continue": "Assistente de IA Continue", "opencode": "OpenCode AI coding agent (Terminal)", @@ -2859,22 +2861,22 @@ "hermes": "Assistente de Terminal Hermes AI", "hermes-agent": "Hermes Agent (by Nousresearch) - IA de terminal avançada com suporte multi-modelo (delegação, visão, compressão, etc.)", "custom": "Gerador genérico de configuração para CLI ou SDK OpenAI-compatible", - "aider": "CLI de programação em par Aider AI com uma URL base compatível com OpenAI", - "forge": "CLI do agente de codificação ForgeCode com um provedor personalizado", - "cursor-cli": "CLI do Cursor Agent no modo de agente headless", + "aider": "CLI de programação em par com IA Aider, com URL base compatível com OpenAI", + "forge": "CLI do agente de codificação ForgeCode com provedor personalizado", + "cursor-cli": "CLI Cursor Agent em modo agente headless", "roo": "Assistente de IA Roo Code para o VS Code", - "jcode": "agente de codificação de terminal jcode", + "jcode": "Agente de codificação de terminal jcode", "deepseek-tui": "Agente de codificação TUI DeepSeek escrito em Rust", - "codewhale": "Agente de codificação CodeWhale, o sucessor do DeepSeek TUI", + "codewhale": "Agente de codificação CodeWhale, sucessor do DeepSeek TUI", "smelt": "CLI do agente de codificação Smelt", - "pi": "Agente de codificação de terminal Pi leve", - "crush": "Agente de codificação de terminal Crush da Charm", + "pi": "Agente de codificação de terminal Pi, leve", + "crush": "Agente de codificação de terminal Crush, da Charm", "goose": "CLI do agente autônomo Goose", "interpreter": "CLI do agente de codificação autônomo Open Interpreter", "omp": "Agente de codificação de terminal Oh My Pi", "letta": "Agente CLI Letta com memória persistente e uso de ferramentas", - "warp": "Terminal Warp AI com suporte a provedor personalizado", - "agent-deck": "Orquestrador multiagente Agent Deck" + "warp": "Terminal de IA Warp com suporte a provedor personalizado", + "agent-deck": "Orquestrador multi-agente Agent Deck" }, "guides": { "cursor": { @@ -3025,22 +3027,22 @@ "customCliEndpointHint": "Aponte qualquer cliente compatível com OpenAI para a URL base OmniRoute /v1. O endpoint bruto de conclusões do chat é {endpoint}. Use o bloco JSON quando a ferramenta desejar um objeto provedor ou o script env quando ler variáveis ​​OPENAI_*.", "customCliEnvBlockTitle": "Fragmento de ambiente/shell", "customCliJsonBlockTitle": "Bloco JSON do provedor", - "networkError": "Erro de rede", + "networkError": "Network error", "other": "Outro", "preview": "Visualização", "refreshAll": "Atualizar tudo", "hermesRoleDefault": "Padrão (principal)", - "hermesRoleDefaultDesc": "Modelo de conversa primário", + "hermesRoleDefaultDesc": "Modelo de conversa principal", "hermesRoleDelegation": "Delegação (subagentes)", - "hermesRoleDelegationDesc": "Modelo de orquestrador e subagente", + "hermesRoleDelegationDesc": "Modelo orquestrador e de subagentes", "hermesRoleVision": "Visão", "hermesRoleVisionDesc": "Compreensão de imagens e capturas de tela", - "hermesRoleCompression": "Compressão", - "hermesRoleCompressionDesc": "Compressão e sumarização de prompts", - "hermesRoleWebExtract": "Extração da Web", - "hermesRoleWebExtractDesc": "Extração de conteúdo de página web", - "hermesRoleSkillsHub": "Hub de Habilidades", - "hermesRoleSkillsHubDesc": "Raciocínio de habilidades e uso de ferramentas", + "hermesRoleCompression": "Compression", + "hermesRoleCompressionDesc": "Compressão e resumo de prompt", + "hermesRoleWebExtract": "Extração Web", + "hermesRoleWebExtractDesc": "Extração de conteúdo de páginas web", + "hermesRoleSkillsHub": "Hub de Skills", + "hermesRoleSkillsHubDesc": "Raciocínio de skills e uso de ferramentas", "hermesRoleApproval": "Aprovação", "hermesRoleApprovalDesc": "Decisões de segurança e aprovação", "hermesRoleMcp": "MCP", @@ -3065,28 +3067,28 @@ "hermesRoleMonitorDesc": "Monitoramento em segundo plano", "hermesRoleBackgroundReview": "Revisão em Segundo Plano", "hermesRoleBackgroundReviewDesc": "Revisão de código em segundo plano", - "hermesSelectBeforePreview": "Selecione os modelos para as funções, ou certifique-se de que as funções estejam carregadas, antes de visualizar.", - "hermesPreviewFailed": "Falha ao gerar visualização", + "hermesSelectBeforePreview": "Selecione modelos para as funções, ou garanta que as funções estejam carregadas, antes de pré-visualizar.", + "hermesPreviewFailed": "Falha ao gerar pré-visualização", "hermesSavedTo": "Salvo em {path}", "hermesFirstSetupTitle": "Configurado pela primeira vez via OmniRoute em {date}", "hermesSinceSetup": "{time} desde a configuração", "hermesConfiguredRoles": "{configured}/{total} funções", "hermesQuickApply": "Aplique rapidamente o mesmo modelo a todas as funções:", - "hermesApplyModelToAll": "Aplicar {model} a cada função", + "hermesApplyModelToAll": "Aplicar {model} a todas as funções", "hermesViaOmniRoute": "{provider} (via OmniRoute)", - "hermesNotOmniRoute": "{provider} (não OmniRoute)", + "hermesNotOmniRoute": "{provider} (não é OmniRoute)", "hermesRemovePendingRole": "Remover esta função das alterações pendentes", "hermesApply": "Aplicar ao Hermes Agent", "hermesRolesWillUpdate": "{count, plural, one {# função será atualizada} other {# funções serão atualizadas}}", - "hermesPreviewPath": "Visualização — gravará em ~/.hermes/config.yaml", + "hermesPreviewPath": "Pré-visualização — será gravado em ~/.hermes/config.yaml", "hermesSaveDescription": "Salva o modelo selecionado para cada função em", "copilotConfigGenerator": "Gerador de configuração do GitHub Copilot", "copilotGeneratorDescriptionPrefix": "Gera o", - "copilotGeneratorDescriptionSuffix": "bloco para o VS Code GitHub Copilot usando o padrão de provedor do Azure. Selecione os modelos que deseja e copie o JSON para o seu arquivo de configuração.", - "copilotCompatibilityWarning": "Esta configuração usa a solução alternativa de provedor do Azure para listas de modelos personalizadas. Testado com VS Code ≥ 1.109 e GitHub Copilot Chat ≥ v0.37. Atualizações futuras da extensão podem alterar esse comportamento.", + "copilotGeneratorDescriptionSuffix": "bloco para o GitHub Copilot no VS Code usando o padrão de fornecedor Azure. Selecione os modelos desejados e copie o JSON no seu arquivo de configuração.", + "copilotCompatibilityWarning": "Esta configuração usa a solução alternativa do fornecedor Azure para listas de modelos personalizadas. Testada com VS Code ≥ 1.109 e GitHub Copilot Chat ≥ v0.37. Atualizações futuras da extensão podem alterar esse comportamento.", "copilotApiKey": "Chave de API", "copilotSelectModels": "Selecionar modelos ({selected}/{total})", - "selectAll": "Selecionar tudo", + "selectAll": "Selecionar todos", "loadingModels": "Carregando modelos...", "advancedOptions": "Opções avançadas", "vision": "Visão", @@ -3098,30 +3100,30 @@ "copilotPasteInto": "Cole em:", "copilotReloadInstruction": "Em seguida, recarregue o VS Code e defina a chave de API no prompt de entrada.", "wireApiChatCompletions": "Conclusões de bate-papo (/chat/completions)", -"wireApiResponses": "API de respostas (/respostas)", -"cliproxyapiActionFailed": "__MISSING__:Action failed", -"cliproxyapiActionSucceeded": "__MISSING__:Action succeeded", -"cliproxyapiCheckUpdates": "__MISSING__:Check Updates", -"cliproxyapiDescription": "__MISSING__:Upstream proxy fallback (Go-based OAuth)", -"cliproxyapiHealth": "__MISSING__:Health", -"cliproxyapiHealthy": "__MISSING__:Healthy", -"cliproxyapiInstall": "__MISSING__:Install", -"cliproxyapiNotInstalledValue": "__MISSING__:Not installed", -"cliproxyapiPort": "__MISSING__:Port", -"cliproxyapiRequestFailed": "__MISSING__:Request failed", -"cliproxyapiRestart": "__MISSING__:Restart", -"cliproxyapiStart": "__MISSING__:Start", -"cliproxyapiStatusError": "__MISSING__:Error", -"cliproxyapiStatusInstalled": "__MISSING__:Installed", -"cliproxyapiStatusNotInstalled": "__MISSING__:Not Installed", -"cliproxyapiStatusRunning": "__MISSING__:Running", -"cliproxyapiStatusStopped": "__MISSING__:Stopped", -"cliproxyapiStop": "__MISSING__:Stop", -"cliproxyapiUnhealthy": "__MISSING__:Unhealthy", -"cliproxyapiUnknown": "__MISSING__:Unknown", -"cliproxyapiUpdate": "__MISSING__:Update", -"cliproxyapiUpdateAvailable": "__MISSING__:Update available: v{current} → v{latest}", -"cliproxyapiVersion": "__MISSING__:Version" + "wireApiResponses": "API de respostas (/respostas)", + "cliproxyapiActionFailed": "__MISSING__:Action failed", + "cliproxyapiActionSucceeded": "__MISSING__:Action succeeded", + "cliproxyapiCheckUpdates": "__MISSING__:Check Updates", + "cliproxyapiDescription": "__MISSING__:Upstream proxy fallback (Go-based OAuth)", + "cliproxyapiHealth": "__MISSING__:Health", + "cliproxyapiHealthy": "__MISSING__:Healthy", + "cliproxyapiInstall": "__MISSING__:Install", + "cliproxyapiNotInstalledValue": "__MISSING__:Not installed", + "cliproxyapiPort": "__MISSING__:Port", + "cliproxyapiRequestFailed": "__MISSING__:Request failed", + "cliproxyapiRestart": "__MISSING__:Restart", + "cliproxyapiStart": "__MISSING__:Start", + "cliproxyapiStatusError": "__MISSING__:Error", + "cliproxyapiStatusInstalled": "__MISSING__:Installed", + "cliproxyapiStatusNotInstalled": "__MISSING__:Not Installed", + "cliproxyapiStatusRunning": "__MISSING__:Running", + "cliproxyapiStatusStopped": "__MISSING__:Stopped", + "cliproxyapiStop": "__MISSING__:Stop", + "cliproxyapiUnhealthy": "__MISSING__:Unhealthy", + "cliproxyapiUnknown": "__MISSING__:Unknown", + "cliproxyapiUpdate": "__MISSING__:Update", + "cliproxyapiUpdateAvailable": "__MISSING__:Update available: v{current} → v{latest}", + "cliproxyapiVersion": "__MISSING__:Version" }, "combos": { "title": "Combos", @@ -3149,8 +3151,8 @@ "leastLatency": "Menor Latência", "comboName": "Nome do Combo", "comboNamePlaceholder": "meu-combo", - "comboDescription": "Descrição", - "comboDescriptionPlaceholder": "Nota opcional descrevendo este combo", + "comboDescription": "__MISSING__:Description", + "comboDescriptionPlaceholder": "__MISSING__:Optional note describing this combo", "deleteConfirm": "Excluir este combo?", "noCombosYet": "Nenhum combo ainda", "comboCreated": "Combo criado com sucesso", @@ -3191,8 +3193,8 @@ "resetAwareDesc": "Equilibra a cota restante com redefinições de 5h e semanais e, em seguida, faz um round-robin de pontuações semelhantes", "strictRandom": "Aleatório Estrito", "strictRandomDesc": "Baralho embaralhado — usa cada modelo uma vez antes de reembaralhar", - "fusion": "Fusão", - "fusionDesc": "Distribui o prompt para cada modelo do painel em paralelo, então um modelo juiz sintetiza uma resposta final", + "fusion": "__MISSING__:Fusion", + "fusionDesc": "__MISSING__:Fans the prompt to every panel model in parallel, then a judge model synthesizes one final answer", "fusionJudgeModel": "Modelo julgador", "fusionJudgeModelHelp": "Modelo que sintetiza as respostas do painel em uma resposta final única. Deixe vazio para usar o primeiro modelo do painel.", "fusionMinPanel": "Painel mínimo", @@ -3223,27 +3225,27 @@ "removeModel": "Remover", "saving": "Salvando...", "liveNoProviders": "Nenhum provedor observado ainda.", - "liveFleetDataHint": "Os dados da frota chegam por meio de eventos de combo ao vivo.", + "liveFleetDataHint": "Os dados da frota chegam por meio de eventos de combo em tempo real.", "liveActiveCount": "Ativos ({count})", "liveErrorCount": "Erros ({count})", "liveInactiveCount": "Inativos ({count})", "liveNoRun": "Nenhuma execução de combo disponível.", - "liveDataHint": "Os dados ao vivo chegam pelo canal de combo do WebSocket.", - "liveDisconnected": "Transmissão ao vivo desativada — WebSocket desconectado. Mostrando o último estado conhecido.", + "liveDataHint": "Os dados em tempo real chegam pelo canal de combo via WebSocket.", + "liveDisconnected": "Tempo real desativado — WebSocket desconectado. Exibindo o último estado conhecido.", "liveSelectCombo": "Selecionar combo", "liveSelectComboPlaceholder": "— selecionar combo —", "liveTargetCount": "{count, plural, one {# alvo} other {# alvos}}", - "liveSingle": "Único", + "liveSingle": "Solteiro", "liveFleet": "Frota", - "playgroundStatusAvailable": "Disponível", - "playgroundStatusNoQuota": "Sem cota", + "playgroundStatusAvailable": "Available", + "playgroundStatusNoQuota": "Sem Cota", "playgroundStatusDegraded": "Degradado", "playgroundStatusError": "Erro", "playgroundStatusUnknown": "Desconhecido", "playgroundNetworkError": "Erro de rede durante a simulação", - "playgroundTitle": "Combo Playground", - "playgroundDescription": "Simule como as requisições serão roteadas pelos seus combos", - "playgroundConfiguration": "Configuração", + "playgroundTitle": "Playground de Combo", + "playgroundDescription": "Simule como as solicitações serão roteadas pelos seus combos", + "playgroundConfiguration": "Configuration", "playgroundNoCombosConfigured": "Nenhum combo configurado", "active": "ativo", "inactive": "inativo", @@ -3251,9 +3253,9 @@ "playgroundSimulating": "Simulando...", "playgroundSimulateRoute": "Simular Rota", "playgroundRoutingPath": "Caminho de Roteamento", - "playgroundStrategy": "Estratégia", + "playgroundStrategy": "Strategy", "playgroundEstimatedCost": "Custo Est.", - "playgroundEstimatedLatency": "Latência Est.", + "playgroundEstimatedLatency": "Latência Estimada", "playgroundFallback": "fallback", "playgroundWeight": "peso {value}", "playgroundWarningCount": "Avisos ({count})", @@ -3682,8 +3684,8 @@ "disableSessionStickiness": "Desabilitar fixação de sessão", "sessionStickinessEnabled": "Fixação ativada", "sessionStickinessDisabled": "Fixação desativada", - "kimiPresetTitle": "Preset do Kimi Coding", - "kimiPresetDescription": "Kimi K3 como o modelo principal (Moonshot API), com fallback automático para suas conexões do Kimi Code (kimi-coding, kimi-web) quando configurado.", + "kimiPresetTitle": "Preset Kimi Coding", + "kimiPresetDescription": "Kimi K3 como modelo primário (Moonshot API), com fallback automático para suas conexões Kimi Code (kimi-coding, kimi-web) quando configuradas.", "kimiPresetCta": "Adicionar preset", "intelligentComboCount": "__MISSING__:{count, plural, one {# intelligent combo} other {# intelligent combos}}", "providersInScope": "__MISSING__:{count, plural, one {# provider in scope} other {# providers in scope}}", @@ -3889,7 +3891,7 @@ "modelsCount": "{count, plural, one {# modelo} other {# modelos}}", "sectionTitle": "Superfície de Integração", "sectionDescription": "APIs compatíveis com OpenAI e endpoints operacionais de protocolos", - "tabApis": "APIs", + "tabApis": "APIs compatíveis com OpenAI", "tabProtocols": "Protocolos", "tabsAria": "Seções de endpoint", "protocolsTitle": "Protocolos", @@ -3979,7 +3981,7 @@ "apiEndpointsSearchPlaceholder": "Pesquisar pontos de extremidade...", "apiEndpointsRequiresAuth": "Requer autenticação", "apiEndpointsNoMatch": "Nenhum endpoint corresponde ao seu filtro", - "endpointSections": "Seções de endpoints", + "endpointSections": "Seções de endpoint", "tabMcp": "MCP", "tabA2a": "A2A", "tabContextSources": "Fontes de Contexto", @@ -3987,21 +3989,21 @@ "activeLocal": "Local", "activeCloud": "Nuvem", "copyUrlTitle": "Copiar {url}", - "statusRunning": "Em execução", + "statusRunning": "Running", "tunnels": "Túneis", "activeTunnelCount": "{active} / {total} ativos", "badgeLocal": "LOCAL", "badgeProtected": "PROTEGIDO", "badgeInternal": "INTERNO", - "catalogLoadFailed": "A requisição do catálogo de APIs falhou com HTTP {status}", - "catalogLoadFailedGeneric": "Falha ao carregar o catálogo de APIs", - "apiKeysLoadFailed": "Falha ao carregar as chaves de API ({status})", - "apiKeysLoadFailedGeneric": "Falha ao carregar as chaves de API", - "apiKeyRevealDisabled": "A revelação da chave de API está desativada (ALLOW_API_KEY_REVEAL). Altere na página de Feature Flags ou cole uma chave de API manualmente.", + "catalogLoadFailed": "A solicitação do catálogo de API falhou com HTTP {status}", + "catalogLoadFailedGeneric": "Falha ao carregar o catálogo de API", + "apiKeysLoadFailed": "Falha ao carregar chaves de API ({status})", + "apiKeysLoadFailedGeneric": "Falha ao carregar chaves de API", + "apiKeyRevealDisabled": "A revelação de chave de API está desativada (ALLOW_API_KEY_REVEAL). Altere isso na página Feature Flags ou cole uma chave de API manualmente.", "apiKeyRevealFailed": "Falha ao revelar a chave de API ({status})", "apiKeyRevealInvalid": "A revelação da chave de API retornou uma resposta inválida", - "apiKeyRequired": "Uma chave de API é necessária para este endpoint.", - "requestFailed": "Falha na requisição ({status})", + "apiKeyRequired": "É necessária uma chave de API para este endpoint.", + "requestFailed": "Falha na solicitação ({status})", "errorStatus": "Erro", "catalogStats": "{endpoints} endpoints em {categories} categorias", "catalogUnavailableDescription": "Não foi possível carregar a especificação OpenAPI.", @@ -4009,20 +4011,20 @@ "all": "Todos", "more": "+{count} mais", "showInternalTooltip": "Mostrar ou ocultar rotas internas (ocultas por padrão)", - "bearerAuth": "Bearer Auth", - "requestBody": "Corpo da Requisição", + "bearerAuth": "Autenticação Bearer", + "requestBody": "Corpo da Solicitação", "close": "Fechar", "tryIt": "Testar", "example": "Exemplo", "apiKey": "Chave de API", - "switchToSelection": "Alternar para Seleção", + "switchToSelection": "Mudar para Seleção", "enterManually": "Inserir Manualmente", "pasteApiKey": "Cole sua chave de API aqui", - "noActiveApiKeys": "Nenhuma chave de API ativa encontrada. Alterne para a entrada manual para colar uma.", - "requestBodyJson": "Corpo da Requisição (JSON)", + "noActiveApiKeys": "Nenhuma chave de API ativa encontrada. Ative a entrada manual para colar uma.", + "requestBodyJson": "Corpo da Solicitação (JSON)", "sending": "Enviando...", - "sendRequest": "Enviar Requisição", - "dataSchemas": "Esquemas de Dados", + "sendRequest": "Enviar Solicitação", + "dataSchemas": "Schemas de Dados", "vscodeAliasTitle": "Alias de Token do VS Code", "vscodeAliasDescriptionReady": "URLs de compatibilidade prontas para colar usando o endpoint /api/v1/vscode/TOKEN/... .", "vscodeAliasDescriptionError": "Mostrando URLs com placeholder porque as chaves de CLI não puderam ser carregadas nesta sessão.", @@ -4048,11 +4050,11 @@ "customSystemPromptTitle": "Custom System Prompt", "customSystemPromptDescription": "Inject a custom system prompt into every model request", "customSystemPromptPlaceholder": "e.g. Always respond in pirate speak...", - "obsidianEnterToken": "Por favor, insira um token de API do Obsidian", + "obsidianEnterToken": "Insira um token de API do Obsidian", "obsidianConnectFailed": "Falha ao conectar", "obsidianConnectionFailed": "Falha na conexão", "obsidianDisconnectFailed": "Falha ao desconectar", - "obsidianEnterVaultPath": "Por favor, insira o caminho do diretório do cofre", + "obsidianEnterVaultPath": "Insira o caminho do diretório do vault", "obsidianWebdavEnabledMessage": "Sincronização WebDAV ativada. Configure seu dispositivo móvel abaixo.", "obsidianEnableWebdavFailed": "Falha ao ativar o WebDAV", "obsidianWebdavDisabledMessage": "Sincronização WebDAV desativada", @@ -4064,23 +4066,23 @@ "obsidianRestToken": "Token da API REST Local do Obsidian", "obsidianApiKeyPlaceholder": "Chave de API do Obsidian", "obsidianConnect": "Conectar", - "obsidianBaseUrlOptional": "URL base (opcional)", - "obsidianPortWarning": "A porta 27124 é o endpoint do MCP (HTTPS, certificado autoassinado). A API REST usa HTTP na porta 27123.", - "obsidianRemoteVaultHint": "Padrão: {defaultUrl}. Para cofres remotos, insira o IP do Tailscale + porta (ex.: http://100.x.x.x:27123). Ative o plugin Local REST API na máquina que executa o Obsidian.", + "obsidianBaseUrlOptional": "URL Base (opcional)", + "obsidianPortWarning": "A porta 27124 é o endpoint MCP (HTTPS, certificado autoassinado). A API REST usa HTTP na porta 27123.", + "obsidianRemoteVaultHint": "Padrão: {defaultUrl}. Para vaults remotos, insira o IP do Tailscale + porta (ex.: http://100.x.x.x:27123). Ative o plugin Local REST API na máquina que executa o Obsidian.", "obsidianTokenConfigured": "Token configurado. As ferramentas do Obsidian estão disponíveis via MCP.", "obsidianDisconnect": "Desconectar", - "obsidianVaultSync": "Sincronização do cofre (WebDAV)", - "obsidianVaultSyncDescription": "Sincronize seu cofre com o Obsidian mobile usando WebDAV via Tailscale. O Obsidian mobile tem suporte integrado a WebDAV — nenhum plugin necessário.", - "obsidianVaultDirectoryPath": "Caminho do diretório do cofre", + "obsidianVaultSync": "Sincronização de Vault (WebDAV)", + "obsidianVaultSyncDescription": "Sincronize seu vault com o Obsidian mobile usando WebDAV via Tailscale. O Obsidian mobile tem suporte nativo a WebDAV — não são necessários plugins.", + "obsidianVaultDirectoryPath": "Caminho do Diretório do Vault", "obsidianEnable": "Ativar", "obsidianWebdavEnabled": "Sincronização WebDAV ativada", "obsidianDisable": "Desativar", - "obsidianConfigureMobile": "Configurar o Obsidian Mobile", + "obsidianConfigureMobile": "Configurar Obsidian Mobile", "obsidianMobileInstructions": "No Obsidian mobile: Configurações → Sincronização → WebDAV → insira o seguinte:", - "obsidianWebdavUrl": "URL do WebDAV", + "obsidianWebdavUrl": "URL WebDAV", "obsidianUsername": "Nome de usuário", "obsidianPassword": "Senha", - "obsidianTailscaleHint": "Use seu IP do Tailscale em vez de localhost se estiver conectando de um dispositivo móvel. Ambos os dispositivos devem estar na mesma rede Tailscale.", + "obsidianTailscaleHint": "Use seu IP do Tailscale em vez de localhost ao conectar pelo celular. Ambos os dispositivos devem estar na mesma rede Tailscale.", "cloudSyncNotConfigured": "__MISSING__:Cloud sync is not configured on this instance.", "notionConnect": "__MISSING__:Connect", "notionConnectFailed": "__MISSING__:Failed to connect", @@ -4466,16 +4468,16 @@ "description": "Gerencie e monitore skills de IA", "skillsTab": "Skills", "executionsTab": "Execuções", - "selectSkillToInspect": "Selecione uma habilidade à esquerda para inspecionar.", - "schemaTab": "Esquema", + "selectSkillToInspect": "Selecione uma skill à esquerda para inspecionar.", + "schemaTab": "Schema", "handlerTab": "Handler", - "inputSchema": "Esquema de entrada", - "outputSchema": "Esquema de saída", - "handlerCode": "Código do handler", + "inputSchema": "Schema de Entrada", + "outputSchema": "Schema de Saída", + "handlerCode": "Código do Handler", "handlerUnavailable": "Handler não disponível", "runTestPlaceholder": "Executar teste (placeholder)", "setModeAria": "Definir modo {mode}", - "uninstallSkill": "Desinstalar habilidade", + "uninstallSkill": "Desinstalar skill", "sandboxTab": "Sandbox", "loading": "Carregando skills...", "noSkills": "Nenhuma skill encontrada", @@ -4619,27 +4621,27 @@ "throttleStatus": "Acelerador: {value}", "lastHeaderUpdate": "Atualização do header: há {age}", "databaseHealth": "Integridade do banco de dados", - "databaseHealthDescription": "Diagnosticar e reparar linhas de cota/domínio obsoletas e referências de combo corrompidas.", + "databaseHealthDescription": "Diagnostica e repara linhas de cota/domínio desatualizadas e referências de combo quebradas.", "status": "Status", "attentionNeeded": "Atenção necessária", "repairs": "Reparos", - "repairing": "Reparando...", - "runAutoRepair": "Executar reparo automático", - "repairBackupCreated": "Um backup de reparo foi criado antes da mutação.", - "sessionActivity": "Atividade da sessão", - "activeCount": "{count} ativos", - "requestCount": "{count, plural, one {# requisição} other {# requisições}}", + "repairing": "Repairing...", + "runAutoRepair": "Executar Auto-Reparo", + "repairBackupCreated": "Um backup de reparo foi criado antes da alteração.", + "sessionActivity": "Atividade da Sessão", + "activeCount": "{count} ativo", + "requestCount": "{count, plural, one {# solicitação} other {# solicitações}}", "idleSeconds": "{count}s ocioso", "ageSeconds": "{count}s de idade", - "quotaMonitors": "Monitores de cotas", - "alerting": "Alertas", - "errors": "Erros", - "degradationFull": "Completo", + "quotaMonitors": "Monitores de Quota", + "alerting": "Alertando", + "errors": "Errors", + "degradationFull": "Completa", "degradationReduced": "Reduzido", - "degradationMinimal": "Mínimo", + "degradationMinimal": "Minima", "degradationDefault": "Padrão", "sinceTime": "Desde {time}", - "retryIn": "tentar novamente em {duration}", + "retryIn": "nova tentativa em {duration}", "stickyBoundSessions": "Sessões fixas", "sessionsByApiKey": "Sessões por chave API", "noActiveSessionsTracked": "Nenhuma sessão ativa rastreada ainda.", @@ -4822,14 +4824,14 @@ "export": "Export", "exporting": "Exporting...", "exportFailed": "Export failed", - "cleanHistoryButton": "Limpar histórico", - "cleanHistoryTitle": "Limpar histórico de logs?", - "cleanHistoryMessage": "Isso limpa permanentemente todas as linhas de log de requisições, linhas de detalhes legadas e arquivos de artefatos locais em DATA_DIR/call_logs. A página ao vivo será atualizada após a limpeza.", - "cleanHistoryConfirm": "Limpar histórico", - "cleanHistoryCancel": "Cancelar", - "cleanHistorySuccess": "Foram limpas {deleted} entradas de log, {deletedArtifacts} artefatos e {deletedDetailedLogs} linhas de detalhes legadas.", - "cleanHistoryEmpty": "Nenhum histórico de logs de requisição foi encontrado.", - "cleanHistoryFailed": "Falha ao limpar o histórico de logs.", + "cleanHistoryButton": "__MISSING__:Clean history", + "cleanHistoryTitle": "__MISSING__:Clean log history?", + "cleanHistoryMessage": "__MISSING__:This permanently clears all request log rows, legacy detail rows, and local artifact files under DATA_DIR/call_logs. The live page will refresh after cleanup.", + "cleanHistoryConfirm": "__MISSING__:Clean history", + "cleanHistoryCancel": "__MISSING__:Cancel", + "cleanHistorySuccess": "__MISSING__:Cleaned {deleted} log entries, {deletedArtifacts} artifacts, and {deletedDetailedLogs} legacy detail rows.", + "cleanHistoryEmpty": "__MISSING__:No request log history was found.", + "cleanHistoryFailed": "__MISSING__:Failed to clean log history.", "timeRange": "Time Range", "lastNHours": "Last {hours}", "defaultRange": "default", @@ -4846,10 +4848,10 @@ "entryCount": "{count, plural, one {# entrada} other {# entradas}}", "lastHour": "Última 1h", "updatedAt": "Atualizado {time}", - "fileLoggingRequired": "Certifique-se de que o aplicativo esteja gravando logs em um arquivo (APP_LOG_TO_FILE=true)", - "consoleAria": "Logs do console do aplicativo", - "applicationConsole": "Console do aplicativo", - "emptyFileLoggingHint": "Certifique-se de que APP_LOG_TO_FILE=true esteja definido no seu arquivo .env" + "fileLoggingRequired": "Verifique se o aplicativo está gravando logs em um arquivo (APP_LOG_TO_FILE=true)", + "consoleAria": "Logs do console da aplicação", + "applicationConsole": "Console da Aplicação", + "emptyFileLoggingHint": "Garanta que APP_LOG_TO_FILE=true esteja definido no seu arquivo .env" }, "compressionLogTitle": "Compression Log", "compressionLogEmpty": "No compressed requests yet. Compression stats will appear here when requests are processed with compression enabled.", @@ -4857,7 +4859,7 @@ }, "onboarding": { "welcome": "Bem-vindo", - "tiers": "Níveis", + "tiers": "__MISSING__:Tiers", "security": "Segurança", "test": "Teste", "ready": "Pronto!", @@ -4940,7 +4942,7 @@ }, "providers": { "title": "Provedores", - "Account Deactivated": "Conta desativada", + "Account Deactivated": "__MISSING__:Account Deactivated", "allProviders": "Todos os provedores", "audioProviders": "Provedores de áudio", "showFreeOnly": "Somente grátis", @@ -4967,31 +4969,31 @@ "importFromFileImport": "Importar {count} provedores", "importFromFileResult": "{success} provedores importados ({failed} falharam)", "adaptaTutorial": { - "title": "Como conectar o Adapta Web", - "introPrefix": "O Adapta autentica por meio do Clerk. O token", - "introSuffix": "é um JWT de longa duração que permite ao OmniRoute atualizar sessões automaticamente.", - "or": "ou", - "step1Title": "Abrir chat do Adapta", - "step1DescPrefix": "Abrir", - "step1DescSuffix": "e faça login com sua conta Gold ou Business.", - "step2Title": "Abrir DevTools", - "step2DescPrefix": "Pressione", - "step2DescSuffix": "para abrir as Ferramentas do Desenvolvedor.", - "step3Title": "Vá para Aplicativo → Cookies", - "step3DescPrefix": "No", - "step3DescMiddle": "expanda", - "step3DescSuffix": "e clique em", - "step4Title": "Copie o valor do cookie para", - "step4DescPrefix": "Encontre o cookie chamado", - "step4DescMiddle": "na lista. Clique nele e copie o conteúdo da", - "step4DescSuffix": "coluna. Ele começa com", - "step5Title": "Cole aqui e salve", - "step5DescPrefix": "Clique em", - "step5DescMiddle": "cole o", - "step5DescSuffix": "valor no campo API Key e salve. O OmniRoute atualizará a sessão automaticamente.", - "tipLabel": "Dica:", - "tipPrefix": "O", - "tipSuffix": "cookie é de longa duração, geralmente por meses. Você só precisa renová-lo se sair ou se o Adapta invalidar a sessão." + "title": "__MISSING__:How to connect Adapta Web", + "introPrefix": "__MISSING__:Adapta authenticates through Clerk. The token", + "introSuffix": "__MISSING__:is a long-lived JWT that lets OmniRoute refresh sessions automatically.", + "or": "__MISSING__:or", + "step1Title": "__MISSING__:Open Adapta chat", + "step1DescPrefix": "__MISSING__:Open", + "step1DescSuffix": "__MISSING__:and sign in with your Gold or Business account.", + "step2Title": "__MISSING__:Open DevTools", + "step2DescPrefix": "__MISSING__:Press", + "step2DescSuffix": "__MISSING__:to open Developer Tools.", + "step3Title": "__MISSING__:Go to Application → Cookies", + "step3DescPrefix": "__MISSING__:In the", + "step3DescMiddle": "__MISSING__:expand", + "step3DescSuffix": "__MISSING__:and click", + "step4Title": "__MISSING__:Copy the cookie value for", + "step4DescPrefix": "__MISSING__:Find the cookie named", + "step4DescMiddle": "__MISSING__:in the list. Click it and copy the content from the", + "step4DescSuffix": "__MISSING__:column. It starts with", + "step5Title": "__MISSING__:Paste it here and save", + "step5DescPrefix": "__MISSING__:Click", + "step5DescMiddle": "__MISSING__:paste the", + "step5DescSuffix": "__MISSING__:value into the API Key field, then save. OmniRoute will refresh the session automatically.", + "tipLabel": "__MISSING__:Tip:", + "tipPrefix": "__MISSING__:The", + "tipSuffix": "__MISSING__:cookie is long-lived, usually for months. You only need to renew it if you sign out or Adapta invalidates the session." }, "editProvider": "Editar Provedor", "deleteProvider": "Excluir Provedor", @@ -5029,30 +5031,30 @@ "testAllFree": "Testar todas as conexões gratuitas", "testAllApiKey": "Testar todas as conexões por chave de API", "testAllCompatible": "Testar todas as conexões compatíveis", - "testAllModels": "Testar todos os modelos", - "testAllModelsConfirm": "Testar todos os modelos visíveis? Os modelos que falharem serão ocultados se a ocultação automática estiver ativada.", - "testingAllModels": "Testando {done}/{total}...", - "testAllResults": "{ok} de {total} modelos funcionando", - "noModelsToTest": "Nenhum modelo corresponde ao filtro atual", - "showAllModels": "Todos", + "testAllModels": "__MISSING__:Test all models", + "testAllModelsConfirm": "__MISSING__:Test all visible models? Failed models will be hidden if auto-hide is enabled.", + "testingAllModels": "__MISSING__:Testing {done}/{total}...", + "testAllResults": "__MISSING__:{ok} of {total} models working", + "noModelsToTest": "__MISSING__:No models match the current filter", + "showAllModels": "__MISSING__:All", "showVisibleOnly": "Somente visíveis", "freeFilterAll": "Todos", "freeFilterFreeOnly": "Somente gratuitos", "freeFilterPaidOnly": "Somente pagos", - "sortFreeFirst": "Gratuitos primeiro", + "sortFreeFirst": "__MISSING__:Free first", "showHiddenOnly": "Somente ocultos", "filterByVisibility": "Filtrar por visibilidade", - "autoHideFailed": "Ocultar automaticamente modelos que falharem", - "autoHideFailedHint": "Quando ativado, o Testar todos oculta falhas não transitórias de catálogos públicos, como /v1/models. Testes de modelo único nunca são ocultados automaticamente.", + "autoHideFailed": "__MISSING__:Auto-hide failed models", + "autoHideFailedHint": "__MISSING__:When enabled, Test all hides non-transient failures from public catalogs such as /v1/models. Single-model tests never auto-hide.", "connected": "{count} Conectado(s)", "errorCount": "{count} Erro ({code})", "errorCountNoCode": "{count} Erro", - "testAllCompleted": "Testados {total} modelos: {ok} OK, {failed} falharam", - "modelAutoHidden": "Modelo {model} ocultado automaticamente (falha no teste)", + "testAllCompleted": "__MISSING__:Tested {total} models: {ok} OK, {failed} failed", + "modelAutoHidden": "__MISSING__:Model {model} auto-hidden (test failed)", "filterAll": "Todos", "filterVisible": "Somente visíveis", "filterHidden": "Somente ocultos", - "modelsHiddenCount": "{count} ocultos", + "modelsHiddenCount": "__MISSING__:{count} hidden", "warningCount": "{count} Aviso", "noConnections": "Sem conexões", "expiredBadge": "Expired", @@ -5165,17 +5167,17 @@ "batchUpdateNone": "Nenhuma conexão foi atualizada (podem não existir mais)", "batchRetestLimit": "Reteste até {max} conexões por vez", "noConnectionsToTest": "Nenhuma conexão correspondente para testar", - "batchDeleteConfirmTitle": "Excluir conexões", - "batchDeleteConfirmButton": "Excluir", + "batchDeleteConfirmTitle": "__MISSING__:Delete connections", + "batchDeleteConfirmButton": "__MISSING__:Delete", "filterActive": "Ativo", "filterError": "Erro", "filterBanned": "Banido", "filterCreditsExhausted": "Créditos esgotados", "accountSearchPlaceholder": "Search accounts…", - "noFilteredConnections": "Nenhuma conexão corresponde ao filtro atual.", + "noFilteredConnections": "__MISSING__:No connections match the current filter.", "failedSetAlias": "Falha ao definir alias", - "setAliasSuccess": "Alias {alias} definido", - "deleteAliasSuccess": "Alias {alias} excluído", + "setAliasSuccess": "__MISSING__:Alias {alias} set", + "deleteAliasSuccess": "__MISSING__:Alias {alias} deleted", "failedSaveConnection": "Falha ao salvar conexão", "failedSaveConnectionRetry": "Falha ao salvar conexão. Tente novamente.", "failedRetestConnection": "Falha ao retestar conexão", @@ -5212,8 +5214,8 @@ "fetchingModels": "Buscando modelos disponíveis...", "failedFetchModels": "Falha ao buscar modelos", "noFreeModelsFound": "Nenhum modelo gratuito encontrado para este provedor — nada importado.", - "fetchModelsSuccess": "Encontrados {count} novos modelos", - "fetchModelsFailed": "Não foi possível buscar os modelos automaticamente (você pode tentar novamente nas configurações)", + "fetchModelsSuccess": "__MISSING__:Found {count} new models", + "fetchModelsFailed": "__MISSING__:Could not auto-fetch models (you can retry from settings)", "noModelsFound": "Nenhum modelo encontrado", "importFailed": "Falha na importação", "noNewModelsAdded": "Nenhum novo modelo foi adicionado.", @@ -5222,8 +5224,8 @@ "importingModelsTitle": "Importando Modelos", "copyModel": "Copiar modelo", "filterModels": "Filtrar modelos...", - "testAllRateLimited": "Limite de taxa atingido, interrompido antecipadamente", - "hideFailedAuto": "Ocultar automaticamente modelos que falharem", + "testAllRateLimited": "__MISSING__:Rate limit reached, stopped early", + "hideFailedAuto": "__MISSING__:Auto-hide failed models", "selectAllModels": "Selecionar todos", "hideAllModels": "Ocultar todos", "modelsActive": "ativos", @@ -5238,9 +5240,9 @@ "quotaVisibilityUpdateFailed": "Não foi possível atualizar a visibilidade em Cotas dos Provedores", "enableRateLimitProtection": "Clique para habilitar proteção de limite de taxa", "disableRateLimitProtection": "Clique para desabilitar proteção de limite de taxa", - "testAllProgress": "Testados {done}/{total}", - "testAllFailedHidden": "{count} modelos com falha ocultos", - "testAllDone": "Todos os modelos testados", + "testAllProgress": "__MISSING__:Tested {done}/{total}", + "testAllFailedHidden": "__MISSING__:{count} failed models hidden", + "testAllDone": "__MISSING__:All models tested", "productionKey": "Chave de Produção", "enterNewApiKey": "Insira a nova chave API", "codexApplyModalTitle": "Inscreva-se no Codex Local", @@ -5320,8 +5322,8 @@ "errorTypeNetworkError": "Erro de rede", "errorTypeTestUnsupported": "Teste não suportado", "errorTypeUpstreamError": "Erro upstream", - "errorTypeCreditsExhausted": "Sem créditos", - "errorTypeBanned": "403 Banido", + "errorTypeCreditsExhausted": "__MISSING__:No credits", + "errorTypeBanned": "__MISSING__:403 Banned", "proxySourceGlobal": "Global", "proxySourceProvider": "Provedor", "proxySourceKey": "Chave", @@ -5364,17 +5366,17 @@ "compatProtocolOpenAI": "OpenAI Chat Completions", "compatProtocolOpenAIResponses": "OpenAI Responses API", "compatProtocolClaude": "Anthropic Messages", - "targetFormatLabel": "Formato de destino", - "targetFormatHint": "Substitua o formato de transmissão upstream. Use 'Anthropic Messages' para rotear provedores compatíveis com a OpenAI (ex.: opencode-go) pelo endpoint /v1/messages.", - "targetFormatAuto": "Padrão (automático)", - "targetFormatGemini": "Gemini", - "targetFormatAntigravity": "Antigravity", + "targetFormatLabel": "__MISSING__:Target Format", + "targetFormatHint": "__MISSING__:Override the upstream wire format. Use 'Anthropic Messages' to route OpenAI-compatible providers (e.g. opencode-go) through the /v1/messages endpoint.", + "targetFormatAuto": "__MISSING__:Default (auto)", + "targetFormatGemini": "__MISSING__:Gemini", + "targetFormatAntigravity": "__MISSING__:Antigravity", "contextWindowOverrideLabel": "Substituição de Janela de Contexto", "contextWindowOverridePlaceholder": "ex.: 131072", "contextWindowOverrideHint": "Define manualmente a janela de contexto real (tokens) deste modelo quando o provedor a reporta incorretamente. Tem prioridade sobre os valores detectados automaticamente/do catálogo e evita que o roteamento de combo descarte o modelo.", "contextWindowOverrideInvalid": "A substituição de janela de contexto deve ser um número inteiro positivo de tokens", - "visionCapableLabel": "Compatível com visão", - "visionCapableHint": "Marque manualmente este modelo como compatível com visão quando os metadados de descoberta do provedor não informarem uma modalidade de entrada de imagem (comum em backends locais/auto-hospedados).", + "visionCapableLabel": "__MISSING__:Vision capable", + "visionCapableHint": "__MISSING__:Manually flag this model as vision-capable when the provider's discovery metadata doesn't report an image input modality (common for self-hosted/local backends).", "compatParamFiltersLabel": "Filtros de parâmetros", "compatBlockedParamsHint": "Parâmetros bloqueados (removidos das requisições)", "compatAllowedParamsHint": "Parâmetros permitidos (readicionados após o bloqueio)", @@ -5402,18 +5404,18 @@ "interceptFetchHint": "Reescreve chamadas nativas de web_fetch para /v1/web/fetch da OmniRoute.", "interceptionLoadError": "Falha ao carregar configuração de interceptação: {error}", "interceptionSaveError": "Falha ao salvar configuração de interceptação: {error}", -"ccAliasSectionTitle": "Expose em Claude Code (claude/…)", -"ccAliasSectionHint": "Anuncie os modelos deste provedor sob claude/<provider>/<model> IDs de espelho para que a descoberta de modelos do gateway do Claude Code possa listá-los. Desativado por padrão — habilitar isso dobra as entradas do catálogo para todos os clientes.", -"ccAliasProviderLevelLabel": "Provedor padrão", -"ccAliasModelOverridesLabel": "Substituições por modelo", -"ccAliasModelOverrideAriaLabel": "Substituição para {modelId}", -"ccAliasStateInherit": "Herdar", -"ccAliasStateOn": "Ligado", -"ccAliasStateOff": "Desligado", -"ccAliasAddModelPlaceholder": "ID do modelo (por exemplo, gpt-4o)", -"ccAliasAddModelButton": "Adicionar substituição", -"ccAliasLoadError": "Falha ao carregar as configurações de discovery-alias: {error}", -"ccAliasSaveError": "Falha ao salvar a configuração de discovery-alias: {error}", + "ccAliasSectionTitle": "Expose em Claude Code (claude/…)", + "ccAliasSectionHint": "Anuncie os modelos deste provedor sob claude/<provider>/<model> IDs de espelho para que a descoberta de modelos do gateway do Claude Code possa listá-los. Desativado por padrão — habilitar isso dobra as entradas do catálogo para todos os clientes.", + "ccAliasProviderLevelLabel": "Provedor padrão", + "ccAliasModelOverridesLabel": "Substituições por modelo", + "ccAliasModelOverrideAriaLabel": "Substituição para {modelId}", + "ccAliasStateInherit": "Herdar", + "ccAliasStateOn": "Ligado", + "ccAliasStateOff": "Desligado", + "ccAliasAddModelPlaceholder": "ID do modelo (por exemplo, gpt-4o)", + "ccAliasAddModelButton": "Adicionar substituição", + "ccAliasLoadError": "Falha ao carregar as configurações de discovery-alias: {error}", + "ccAliasSaveError": "Falha ao salvar a configuração de discovery-alias: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -5471,9 +5473,9 @@ "editCompatibleTitle": "Editar Compatível {type}", "compatibleBaseUrlHint": "Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.", "apiKeyForCheck": "Chave de API (para verificação)", - "testModelIdLabel": "ID do modelo (opcional)", - "testModelIdPlaceholder": "ex.: my-model-id", - "testModelIdHint": "Se o provedor não tiver um endpoint /models, insira um ID de modelo para validar via /chat/completions.", + "testModelIdLabel": "__MISSING__:Model ID (optional)", + "testModelIdPlaceholder": "__MISSING__:e.g. my-model-id", + "testModelIdHint": "__MISSING__:If the provider lacks a /models endpoint, enter a model ID to validate via /chat/completions instead.", "compatibleProdPlaceholder": "{type} Compatível (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", @@ -5558,19 +5560,19 @@ "codexAuthApplyFailed": "Falha ao aplicar o auth.json do Codex localmente", "codexAuthExported": "auth.json do Codex exportado", "codexAuthExportFailed": "Falha ao exportar o auth.json do Codex", - "codexCliGuideButton": "Guia da CLI do Codex", - "codexCliGuideTitle": "Guia da CLI do Codex", - "codexCliGuideLoading": "Carregando guia...", - "codexCliGuideLoadFailed": "Não foi possível carregar o guia.", - "codexExternalLinkButton": "Link externo do Codex", - "codexExternalLinkModalTitle": "Link externo do Codex", - "codexExternalLinkModalDescription": "Compartilhe este link de uso único com a pessoa que autenticará a conta do Codex. Ela o abrirá em seu próprio navegador, concluirá o login da OpenAI e a conexão será registrada aqui. O link expira em 15 minutos.", - "codexExternalLinkGenerating": "Gerando link...", - "codexExternalLinkWaiting": "Aguardando autenticação no navegador. Esta janela é atualizada automaticamente.", - "codexExternalLinkCreateFailed": "Falha ao gerar o link.", - "codexExternalLinkNetworkError": "Não foi possível contatar o servidor.", - "codexExternalLinkConnected": "Conta do Codex conectada por meio do link externo.", - "codexExternalLinkExpired": "O link expirou antes da conclusão.", + "codexCliGuideButton": "__MISSING__:Codex CLI Guide", + "codexCliGuideTitle": "__MISSING__:Codex CLI Guide", + "codexCliGuideLoading": "__MISSING__:Loading guide...", + "codexCliGuideLoadFailed": "__MISSING__:Could not load the guide.", + "codexExternalLinkButton": "__MISSING__:External Codex link", + "codexExternalLinkModalTitle": "__MISSING__:External Codex link", + "codexExternalLinkModalDescription": "__MISSING__:Share this single-use link with the person who will authenticate the Codex account. They open it in their own browser, complete the OpenAI login, and the connection is registered here. The link expires in 15 minutes.", + "codexExternalLinkGenerating": "__MISSING__:Generating link...", + "codexExternalLinkWaiting": "__MISSING__:Waiting for browser authentication. This window refreshes automatically.", + "codexExternalLinkCreateFailed": "__MISSING__:Failed to generate the link.", + "codexExternalLinkNetworkError": "__MISSING__:Could not contact the server.", + "codexExternalLinkConnected": "__MISSING__:Codex account connected through the external link.", + "codexExternalLinkExpired": "__MISSING__:The link expired before completion.", "importCodexAuth": "Importar autenticação", "codexImportModalTitle": "Importar autenticação do Codex", "codexImportTabSingle": "Solteiro", @@ -5640,7 +5642,7 @@ "audioProvidersHeading": "Provedores de Áudio", "cloudAgentProviders": "Provedores de agentes em nuvem", "audioShortLabel": "Áudio", - "azureOpenAiBaseUrlHint": "Obrigatório: cole o endpoint do seu recurso Azure OpenAI. O OmniRoute adicionará /openai/deployments/{model}/chat/completions?api-version=....", + "azureOpenAiBaseUrlHint": "Obrigatório: cole o endpoint do seu recurso Azure OpenAI. O OmniRoute adicionará /openai/deployments/'{model}'/chat/completions?api-version=....", "bailianBaseUrlHint": "Opcional: URL base customizada para o provedor bailian-coding-plan.", "claudeWebCookieHint": "Open claude.ai → DevTools → Application → Cookies → claude.ai, copy the 'sessionKey' value. Also need cf_clearance, __cf_bm, _cfuvid for Cloudflare.", "claudeWebCookiePlaceholder": "sessionKey=sk-ant-...", @@ -5649,10 +5651,10 @@ "t3ChatWebCookieHint": "Abra t3.chat → DevTools → Aplicativo → Armazenamento local → https://t3.chat, copie 'convex-session-id'. Em seguida, abra DevTools → Rede, copie o cabeçalho completo do cookie de qualquer solicitação de chat. Cole os dois valores nos campos abaixo.", "t3ChatWebCookiePlaceholder": "id-de-sessão-convexa=abc123...", "grokWebCookieHint": "Cole o cookie sso do grok.com. Um valor completo `sso=...` também funciona.", - "blockClaudeExtraUsageDescription": "Quando ativado, o OmniRoute marca esta conexão Claude como indisponível assim que a API de uso relata uso extra em fila, para que a alternativa mude para outra conexão em vez de continuar com a cobrança extra pay-as-you-go.", - "blockClaudeExtraUsageLabel": "Bloquear uso extra do Claude", - "disableCoolingDescription": "Ignore o cooldown transitório para que esta conexão permaneça qualificada mesmo após erros recuperáveis (estados terminais como banido/expirado ainda se aplicam).", - "disableCoolingLabel": "Desativar cooldown para esta conexão", + "blockClaudeExtraUsageDescription": "Quando habilitado, o OmniRoute marca esta conta do Claude Code como indisponível assim que a API de usage reporta `extra_usage.queued`, para que o fallback troque para outra conta antes de continuar com cobranças extras pay-as-you-go.", + "blockClaudeExtraUsageLabel": "Bloquear Claude Extra Usage", + "disableCoolingDescription": "__MISSING__:Skip the transient cooldown so this connection stays eligible even after recoverable errors (terminal states like banned/expired still apply).", + "disableCoolingLabel": "__MISSING__:Disable cooldown for this connection", "bulkPasteAdded": "{count, plural, one {1 chave adicionada} other {# chaves adicionadas}}", "bulkPasteDuplicatesIgnored": "{count, plural, one {1 duplicata ignorada} other {# duplicatas ignoradas}}", "bulkPasteHint": "Cole uma chave de API por linha. Linhas vazias são ignoradas e chaves duplicadas são puladas.", @@ -5769,17 +5771,17 @@ "personalAccessTokenLabel": "Personal Access Token", "qoderPatHint": "Fluxo suportado: PAT via qodercli. OAuth pelo navegador continua experimental.", "qoderPatPlaceholder": "Cole seu Personal Access Token do Qoder", - "rateLimitOverridesSection": "Substituições de limite de taxa", - "rateLimitOverridesMaxConcurrentHint": "Substituição de máximo de solicitações simultâneas para esta conexão. Substitui o limite no nível da conta.", - "rateLimitOverridesMaxConcurrentLabel": "Máximo simultâneo (limite de taxa)", - "rateLimitOverridesMinTimeHint": "Tempo mínimo (ms) entre solicitações. Substitui o atraso padrão do limitador de taxa.", - "rateLimitOverridesMinTimeLabel": "Intervalo mínimo (ms)", - "rateLimitOverridesRpmHint": "Máximo de solicitações por minuto para esta conexão. Substitui o padrão do provedor.", - "rateLimitOverridesRpmLabel": "RPM (Solicitações/min)", - "rateLimitOverridesTpdHint": "Máximo de tokens por dia para esta conexão. Substitui o padrão do provedor.", - "rateLimitOverridesTpdLabel": "TPD (Tokens/dia)", - "rateLimitOverridesTpmHint": "Máximo de tokens por minuto para esta conexão. Substitui o padrão do provedor.", - "rateLimitOverridesTpmLabel": "TPM (Tokens/min)", + "rateLimitOverridesSection": "__MISSING__:Rate Limit Overrides", + "rateLimitOverridesMaxConcurrentHint": "__MISSING__:Max concurrent requests override for this connection. Overrides the account-level cap.", + "rateLimitOverridesMaxConcurrentLabel": "__MISSING__:Max Concurrent (Rate Limit)", + "rateLimitOverridesMinTimeHint": "__MISSING__:Minimum time (ms) between requests. Overrides the default rate limiter delay.", + "rateLimitOverridesMinTimeLabel": "__MISSING__:Min Interval (ms)", + "rateLimitOverridesRpmHint": "__MISSING__:Max requests per minute for this connection. Overrides the provider default.", + "rateLimitOverridesRpmLabel": "__MISSING__:RPM (Requests/min)", + "rateLimitOverridesTpdHint": "__MISSING__:Max tokens per day for this connection. Overrides the provider default.", + "rateLimitOverridesTpdLabel": "__MISSING__:TPD (Tokens/day)", + "rateLimitOverridesTpmHint": "__MISSING__:Max tokens per minute for this connection. Overrides the provider default.", + "rateLimitOverridesTpmLabel": "__MISSING__:TPM (Tokens/min)", "refreshOauthTokenTitle": "Atualizar token OAuth manualmente", "regionHint": "ex.: us-central1 ou europe-west4. Modelos partner usam a região global automaticamente.", "regionLabel": "Região", @@ -5828,26 +5830,26 @@ "webCookieProviders": "Provedores Web / Cookie", "weeklyShort": "Semanal", "xiaomiMimoBaseUrlHint": "Opcional: URL base token-plan do Xiaomi MiMo. Exemplos: https://token-plan-ams.xiaomimimo.com/v1, https://token-plan-sgp.xiaomimimo.com/v1, https://token-plan-cn.xiaomimimo.com/v1. O app adicionará /chat/completions.", - "globalCodexServiceMode": "Modo de serviço global do Codex", + "globalCodexServiceMode": "Modo de serviço Global Codex", "connect": "Conectar", "manualApiKey": "Chave de API manual", "addPat": "Adicionar PAT", "experimentalOauth": "OAuth experimental", "importAuth": "Importar autenticação", "importGrokAuth": "Importar autenticação do Grok Build", - "zedImportTitle": "Importar do chaveiro do Zed", - "zedImportDescription": "Descubra credenciais de provedores de IA (OpenAI, Anthropic, Google, Mistral, xAI) armazenadas pelo Zed IDE no chaveiro do SO e importe-as como conexões. O Zed IDE deve estar instalado nesta máquina.", + "zedImportTitle": "Importar do Zed Keychain", + "zedImportDescription": "Descubra credenciais de provedores de IA (OpenAI, Anthropic, Google, Mistral, xAI) armazenadas pelo Zed IDE no keychain do sistema operacional e importe-as como conexões. O Zed IDE precisa estar instalado nesta máquina.", "zedImportButton": "Importar do Zed", - "zedImportFailed": "Falha na importação do Zed", + "zedImportFailed": "Falha ao importar do Zed IDE.", "zedImportHint": "Importar credenciais do Zed IDE", "zedImportNetworkError": "Erro de rede ao tentar importar do Zed.", "zedImportNone": "Nenhuma credencial OAuth suportada encontrada no Zed IDE.", - "zedImportSuccess": "Credencial(ais) {credentials} importada(s) do Zed para o(s) provedor(es) {providers}", - "zedImporting": "Importando…", - "zedNoCredentials": "Nenhuma credencial do Zed encontrada no chaveiro", - "zedUnsupportedCredentials": "Encontrada(s) {count} credencial(is) no chaveiro, mas nenhuma correspondeu aos provedores suportados", - "zedManualTitle": "Importação manual de token", - "zedManualDescription": "Use isso quando o OmniRoute for executado no Docker ou o chaveiro estiver indisponível. Cole a chave de API que o Zed armazenou em ~/.config/zed/settings.json ou copie-a do painel de configurações do Zed AI.", + "zedImportSuccess": "Importadas {count} credencial(is) do Zed IDE ({providers}).", + "zedImporting": "Importando...", + "zedNoCredentials": "Nenhuma credencial do Zed encontrada no keychain", + "zedUnsupportedCredentials": "{count} credencial(is) encontrada(s) no keychain, mas nenhuma correspondeu a provedores suportados", + "zedManualTitle": "Importação Manual de Token", + "zedManualDescription": "Use isto quando o OmniRoute roda em Docker ou o keychain não está disponível. Cole a chave de API que o Zed armazenou em ~/.config/zed/settings.json, ou copie-a do painel de configurações de IA do Zed.", "zedPasteApiKey": "Colar chave de API…", "zedSaving": "Salvando…", "zedImportAction": "Importar", @@ -5856,20 +5858,20 @@ "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", "zedManualImportFailed": "Falha na importação manual", "zedManualImportSuccess": "Token do {provider} importado do Zed", - "grokImportTitle": "Importar autenticação do Grok Build", - "grokImportDescription": "Importe seu arquivo ~/.grok/auth.json do Grok Build. Você pode obtê-lo executando grok login no seu terminal.", - "grokUploadFile": "Fazer upload de arquivo", + "grokImportTitle": "Importar Autenticação do Grok Build", + "grokImportDescription": "Importe seu arquivo do Grok Build ~/.grok/auth.json. Você pode obtê-lo executando grok login no seu terminal.", + "grokUploadFile": "Carregar arquivo", "grokPasteJson": "Colar JSON", - "grokInvalidAuth": "Este não é um arquivo auth.json do Grok Build válido. Esperava-se um objeto com uma chave contendo um JWT.", + "grokInvalidAuth": "Este não é um arquivo auth.json válido do Grok Build. Esperava-se um objeto com uma chave contendo um JWT.", "grokParseFailed": "Não foi possível analisar o JSON", - "grokImportFailed": "Falha ao importar a autenticação do Grok Build", + "grokImportFailed": "Falha ao importar autenticação do Grok Build", "grokImportSuccess": "Conexão do Grok Build importada com sucesso", - "grokValidToken": "Token do Grok Build válido detectado", - "grokRefreshIncluded": "Token de atualização incluído — a renovação automática de token está ativada", - "grokRefreshMissing": "Nenhum token de atualização encontrado — reimporte após a expiração do token", + "grokValidToken": "Token válido do Grok Build detectado", + "grokRefreshIncluded": "Refresh token incluído — a renovação automática de token está ativada", + "grokRefreshMissing": "Nenhum refresh token encontrado — reimporte após o token expirar", "grokConnectionName": "Nome da conexão (opcional)", "grokSaving": "Salvando…", - "grokSaveConnection": "Salvar conexão", + "grokSaveConnection": "Salvar Conexão", "freeTierProviders": "Provedores de nível gratuito", "freeTierLabel": "Nível gratuito disponível", "freeTierProvidersDesc": "Provedores com níveis gratuitos – alguns exigem uma inscrição de chave de API, outros não precisam de nenhuma credencial.", @@ -5886,11 +5888,11 @@ "providerDetailPathAutoDetectedAllOs": "O caminho é detectado automaticamente por sistema operacional (Linux/Mac/Windows).", "providerDetailMyClaudeAccountPlaceholder": "Minha conta Claude", "providerDetailPathAutoDetected": "O caminho é detectado automaticamente por sistema operacional (Linux/Mac).", - "compatBlockedParamsPlaceholder": "thinking, … (separado por vírgulas)", - "compatAllowedParamsPlaceholder": "reasoning, … (separado por vírgulas)", + "compatBlockedParamsPlaceholder": "thinking, … (separados por vírgula)", + "compatAllowedParamsPlaceholder": "reasoning, … (separados por vírgula)", "compatSaving": "salvando…", - "paramFiltersBlockedPlaceholder": "thinking, reasoning_budget, … (separado por vírgulas)", - "paramFiltersAllowedPlaceholder": "reasoning, … (separado por vírgulas)", + "paramFiltersBlockedPlaceholder": "thinking, reasoning_budget, … (separados por vírgula)", + "paramFiltersAllowedPlaceholder": "reasoning, … (separados por vírgula)", "customGatewayNamePlaceholder": "Meu Gateway", "inherit": "Herdar", "claudeImportEntryName": "entrada {number}", @@ -5983,152 +5985,152 @@ "onboardingStartOAuthFlow": "Iniciar fluxo OAuth", "onboardingProviderDescriptions": { "360ai": "Obtenha a chave de API em ai.360.cn", - "agentrouter": "Ganhe $200 em créditos grátis em https://agentrouter.org/register — sem necessidade de cartão de crédito.", + "agentrouter": "Obtenha $200 em créditos gratuitos em https://agentrouter.org/register — sem necessidade de cartão de crédito.", "unorouter": "Crie uma chave de API em https://unorouter.ai e cole aqui como Bearer token.", "agnes": "Obtenha a chave de API em agnes-ai.com", - "aimlapi": "Nível gratuito pausado (2026) — A API de IA/ML agora é apenas pague pelo que usar (recarga mínima de $20); sem créditos gratuitos recorrentes.", - "ai21": "$10 em créditos de teste ao se cadastrar (válidos por 3 meses), sem necessidade de cartão de crédito", - "alibaba": "Conecte o Alibaba com uma chave de API.", - "alibaba-cn": "Conecte o Alibaba (China) com uma chave de API.", + "aimlapi": "Nível gratuito pausado (2026) — a AI/ML API agora é apenas pay-as-you-go (recarga mínima de $20); sem créditos gratuitos recorrentes.", + "ai21": "$10 em créditos de teste no cadastro (válidos por 3 meses), sem necessidade de cartão de crédito", + "alibaba": "Conecte a Alibaba com uma chave de API.", + "alibaba-cn": "Conecte a Alibaba (China) com uma chave de API.", "bailian-coding-plan": "Conecte o Alibaba Coding Plan com uma chave de API.", - "bedrock": "Integração nativa do Bedrock: a descoberta de modelos usa os modelos de fundação e perfis de inferência do Bedrock, enquanto o chat usa as APIs regionais Bedrock Runtime Converse/ConverseStream.", + "bedrock": "Integração nativa com o Bedrock: a descoberta de modelos usa os foundation models e perfis de inferência do Bedrock, enquanto o chat usa as APIs regionais Bedrock Runtime Converse/ConverseStream.", "anthropic": "Conecte a Anthropic com uma chave de API.", "ant-ling": "Registre-se e crie uma chave de API no console da Ant Ling (https://chat.ant-ling.com/open) e cole-a aqui. O OmniRoute envia o tráfego de chat para https://api.ant-ling.com/v1/chat/completions; o provedor é compatível com OpenAI e também expõe uma superfície compatível com Anthropic.", "api-airforce": "Obtenha sua chave de API em https://panel.api.airforce — endpoint compatível com OpenAI em https://api.airforce/v1", "arcee-ai": "Obtenha a chave de API em arcee.ai", - "azure-ai": "O Foundry usa a interface v1 da OpenAI com nomes de implantação como modelos. O OmniRoute normaliza as URLs de recursos raiz para os endpoints v1 chat e /models.", - "azure-openai": "Use sua chave de API do Azure OpenAI. A URL base deve ser o endpoint do seu recurso, por exemplo, https://my-resource.openai.azure.com.", - "bai": "Chave de API Bearer para o gateway de LLM compatível com OpenAI da b.ai (diferente do TheB.AI). Crie uma chave em https://docs.b.ai e use https://api.b.ai/v1 como a URL base compatível com OpenAI.", + "azure-ai": "O Foundry usa a superfície OpenAI v1 com nomes de deployment como modelos. O OmniRoute normaliza URLs de recurso raiz para os endpoints v1 chat e /models.", + "azure-openai": "Use sua chave de API do Azure OpenAI. A URL base deve ser o endpoint do seu recurso, por exemplo https://my-resource.openai.azure.com.", + "bai": "Chave de API Bearer para o gateway de LLM compatível com OpenAI do b.ai (diferente do TheB.AI). Crie uma chave em https://docs.b.ai e use https://api.b.ai/v1 como URL base compatível com OpenAI.", "baichuan": "Obtenha a chave de API em platform.baichuan-ai.com", "baidu": "Obtenha a chave de API em console.bce.baidu.com", - "qianfan": "Use uma chave de API do Qianfan da Baidu AI Cloud. O endpoint padrão é compatível com OpenAI v2.", - "baseten": "$30 em créditos de teste gratuitos para inferência de GPU", - "bazaarlink": "Crie uma chave de API gratuita em https://bazaarlink.ai — o modelo 'auto:free' direciona para inferência de custo zero. Todos os modelos usam o formato provedor/nome-do-modelo, ex: xiaomi/mimo-v2.5-pro.", + "qianfan": "Use uma chave de API Qianfan do Baidu AI Cloud. O endpoint padrão é compatível com OpenAI v2.", + "baseten": "$30 em créditos de teste gratuitos para inferência em GPU", + "bazaarlink": "Crie uma chave de API gratuita em https://bazaarlink.ai — o modelo 'auto:free' roteia para inferência de custo zero. Todos os modelos usam o formato provider/model-name, por exemplo xiaomi/mimo-v2.5-pro.", "black-forest-labs": "Conecte o Black Forest Labs com uma chave de API.", "blackbox": "Nível gratuito: chat básico ilimitado mais Minimax-M2.5, sem necessidade de cartão de crédito", "bluesminds": "Obtenha sua chave de API em https://www.bluesminds.com — endpoint compatível com OpenAI em https://api.bluesminds.com/v1 com créditos diários gratuitos. Modelos VIP (Claude Opus 4.5, Gemini 2.5 Pro) consomem créditos pi.", "byteplus": "Conecte o BytePlus ModelArk com uma chave de API.", - "bytez": "$1 em créditos grátis, renovados a cada 4 semanas", - "cerebras": "Teste Gratuito: 1M de tokens/dia, 30K TPM, 5 RPM — sem cartão de crédito.", + "bytez": "$1 em créditos gratuitos, renovados a cada 4 semanas", + "cerebras": "Teste gratuito: 1M tokens/dia, 30K TPM, 5 RPM — sem cartão de crédito.", "charm-hyper": "Crie uma chave de API em https://hyper.charm.land e cole-a aqui como um token Bearer.", - "chutes": "Chave de API Bearer para o gateway compatível com OpenAI da Chutes.", - "clarifai": "O Clarifai expõe chat, respostas e /models compatíveis com OpenAI em /v2/ext/openai/v1. Modelos públicos/comunitários geralmente exigem um PAT; chaves com escopo de aplicativo funcionam apenas para recursos dentro desse aplicativo.", - "cloudflare-ai": "Requer Token de API E ID da Conta (encontrado em dash.cloudflare.com)", + "chutes": "Chave de API Bearer para o gateway compatível com OpenAI do Chutes.", + "clarifai": "O Clarifai expõe chat, responses e /models compatíveis com OpenAI em /v2/ext/openai/v1. Modelos públicos/da comunidade geralmente exigem um PAT; chaves com escopo de app só funcionam para recursos dentro desse app.", + "cloudflare-ai": "Requer Token de API E ID de Conta (encontrados em dash.cloudflare.com)", "clova-studio": "O CLOVA Studio (HyperCLOVA X) é compatível com OpenAI em /v1/openai. O OmniRoute sonda /v1/openai/models e roteia o tráfego de chat para /v1/openai/chat/completions. Usa o host atual clovastudio.stream.ntruss.com — o endpoint legado clovastudio.apigw.ntruss.com está sendo descontinuado.", "codestral": "Conecte o Codestral com uma chave de API.", - "cohere": "Teste Gratuito: 1.000 chamadas de API/mês para testes, sem necessidade de cartão de crédito", + "cohere": "Teste gratuito: 1.000 chamadas de API/mês para testes, sem necessidade de cartão de crédito", "command-code": "Crie ou copie uma chave de API do Command Code e cole-a aqui como um token Bearer.", "coze": "Obtenha a chave de API em coze.com/open/api", "crof": "Conecte o CrofAI com uma chave de API.", "databricks": "Conecte o Databricks com uma chave de API.", - "datarobot": "O gateway padrão cataloga modelos ativos de /genai/llmgw/catalog/. URLs de implantação também são suportadas para solicitações diretas de chat compatíveis com OpenAI.", - "deepinfra": "Créditos de cadastro gratuitos para testes de API e exploração de modelos", - "deepseek": "5M tokens grátis no cadastro - sem necessidade de cartão de crédito", - "dgrid": "Crie uma chave de API do DGrid em https://dgrid.ai e use https://api.dgrid.ai/v1 como a URL base compatível com OpenAI.", + "datarobot": "O gateway padrão cataloga modelos ativos a partir de /genai/llmgw/catalog/. URLs de deployment também são suportadas para solicitações de chat diretas compatíveis com OpenAI.", + "deepinfra": "Créditos gratuitos no cadastro para testes de API e exploração de modelos", + "deepseek": "5M tokens gratuitos no cadastro - sem necessidade de cartão de crédito", + "dgrid": "Crie uma chave de API do DGrid em https://dgrid.ai e use https://api.dgrid.ai/v1 como URL base compatível com OpenAI.", "dify": "Obtenha a chave de API da sua instância do Dify.", - "digitalocean": "Conecte a DigitalOcean com uma chave de API.", - "dit": "dit.ai (Distributed Intelligence Trade) é um roteador/gateway compatível com OpenAI com precificação dinâmica por requisição, expondo /v1/chat/completions em https://api.dit.ai/v1. O OmniRoute usa o protocolo OpenAI; as análises de gastos/economia ficam no painel do dit.ai.", + "digitalocean": "Conecte o DigitalOcean com uma chave de API.", + "dit": "dit.ai (Distributed Intelligence Trade) é um roteador/gateway compatível com OpenAI com precificação dinâmica por solicitação, expondo /v1/chat/completions em https://api.dit.ai/v1. O OmniRoute usa o protocolo OpenAI; os analytics de gasto/economia ficam no dashboard do dit.ai.", "doubao": "Obtenha a chave de API em console.volcengine.com", - "empower": "O Empower expõe chat compatível com OpenAI em https://app.empower.dev/api/v1 com suporte a chamadas de ferramentas em empower-functions.", - "factory": "Obtenha sua chave de API da Factory em https://app.factory.ai/settings/api-keys e cole-a como um token Bearer. Endpoint compatível com OpenAI em https://api.factory.ai/v1.", + "empower": "O Empower expõe chat compatível com OpenAI em https://app.empower.dev/api/v1 com suporte a tool-calling em empower-functions.", + "factory": "Obtenha sua chave de API do Factory em https://app.factory.ai/settings/api-keys e cole-a como um token Bearer. Endpoint compatível com OpenAI em https://api.factory.ai/v1.", "fal-ai": "Conecte o Fal.ai com uma chave de API.", - "featherless-ai": "Plano gratuito disponível — sem necessidade de cartão de crédito", - "fenayai": "Chave de API Bearer para o gateway compatível com OpenAI da FenayAI.", + "featherless-ai": "Nível gratuito disponível — sem necessidade de cartão de crédito", + "fenayai": "Chave de API Bearer para o gateway compatível com OpenAI do FenayAI.", "firecrawl": "Conecte o Firecrawl com uma chave de API.", - "fireworks": "$1 em créditos iniciais grátis no cadastro para testes de API", + "fireworks": "$1 em créditos iniciais gratuitos no cadastro para testes de API", "freeaiapikey": "Proxy de API com desconto para mais de 40 modelos, incluindo GPT-5, Claude Opus 4.6, Claude Sonnet 4.6, Qwen 3.5. Obtenha sua chave de API em https://freeaiapikey.com/dashboard. URL base: https://freeaiapikey.com/v1.", - "freemodel-dev": "Obtenha $300 em créditos de API grátis em https://freemodel.dev — sem necessidade de informações de pagamento. Endpoint compatível com OpenAI. Modelos GPT-5.4 e GPT-5.5 disponíveis.", - "friendliai": "Plano gratuito para inferência serverless — sem necessidade de cartão de crédito", - "gemini": "Grátis para sempre: 1.500 req/dia para o Gemini 2.5 Flash — sem cartão de crédito, obtenha a chave em aistudio.google.com", + "freemodel-dev": "Obtenha $300 em créditos de API gratuitos em https://freemodel.dev — sem necessidade de dados de pagamento. Endpoint compatível com OpenAI. Modelos GPT-5.4 e GPT-5.5 disponíveis.", + "friendliai": "Nível gratuito para inferência serverless — sem necessidade de cartão de crédito", + "gemini": "Gratuito para sempre: 1.500 solicitações/dia para o Gemini 2.5 Flash — sem cartão de crédito, obtenha a chave em aistudio.google.com", "gigachat": "Conecte o GigaChat (Sber) com uma chave de API.", "github-models": "Crie um PAT do GitHub com o escopo 'models: read' em github.com/settings/tokens", - "gitlab": "Token de acesso pessoal do GitLab para a API pública de Code Suggestions. Configure uma URL base auto-hospedada quando não estiver usando o gitlab.com.", - "gitlawb-gmi": "Obtenha sua chave de API no painel do Gitlawb Opengateway.", - "gitlawb": "Obtenha sua chave de API no painel do Gitlawb Opengateway.", + "gitlab": "Token de acesso pessoal do GitLab para a API pública de Code Suggestions. Configure uma URL base self-hosted quando não estiver usando gitlab.com.", + "gitlawb-gmi": "Obtenha sua chave de API no dashboard do Gitlawb Opengateway.", + "gitlawb": "Obtenha sua chave de API no dashboard do Gitlawb Opengateway.", "glm": "Conecte o GLM Coding com uma chave de API.", "glm-cn": "Conecte o GLM Coding (China) com uma chave de API.", - "glmt": "Perfil GLM predefinido com maior limite de tokens, pensamento ativado e tempo limite mais longo.", + "glmt": "Perfil GLM pré-configurado com orçamento de tokens maior, thinking ativado e timeout mais longo.", "getgoapi": "Conecte o GoAPI com uma chave de API.", - "groq": "Plano gratuito: 30 RPM / 14,4K RPD — sem cartão de crédito", - "hackclub": "Faça login com sua conta do Hack Club em ai.hackclub.com.", + "groq": "Nível gratuito: 30 RPM / 14,4K RPD — sem cartão de crédito", + "hackclub": "Entre com sua conta Hack Club em ai.hackclub.com.", "haiper": "Obtenha a chave de API em haiper.ai/haiper-api", "heroku": "Conecte o Heroku AI com uma chave de API.", "hcnsec": "Obtenha a chave de API em api.hcnsec.cn", - "huggingface": "API de inferência gratuita para milhares de modelos (Whisper, VITS, SDXL…)", + "huggingface": "API de Inferência gratuita para milhares de modelos (Whisper, VITS, SDXL…)", "hyperbolic": "$1-5 em créditos de teste no cadastro para inferência serverless", - "watsonx": "O gateway de modelos do watsonx expõe /chat/completions e /models compatíveis com OpenAI sob /ml/gateway/v1.", + "watsonx": "O gateway de modelos do watsonx expõe /chat/completions e /models compatíveis com OpenAI em /ml/gateway/v1.", "ideogram": "Obtenha a chave de API em ideogram.ai/docs/api", "iflytek": "Obtenha a chave de API em console.xfyun.cn", "inception": "A Inception Labs é compatível com OpenAI em https://api.inceptionlabs.ai/v1. O mercury-2 é o primeiro LLM de difusão (dLLM) do catálogo — geração 5-10x mais rápida que modelos autoregressivos comparáveis, com chamadas de ferramentas, json_mode e saídas estruturadas.", - "inference-net": "$25 em créditos grátis no cadastro, além de bolsas de pesquisa disponíveis", + "inference-net": "$25 em créditos gratuitos no cadastro, além de bolsas de pesquisa disponíveis", "internlm": "Cota mensal gratuita de ~1M tokens de entrada / 3M de saída (~10 RPM)", - "jina-ai": "Chave de API Bearer para a API de rerank da Jina AI.", + "jina-ai": "Chave de API Bearer para a API de rerank do Jina AI.", "jina-reader": "Conecte o Jina Reader com uma chave de API.", - "kenari": "O Kenari expõe um endpoint de chat completions compatível com OpenAI em https://kenari.id/v1/chat/completions, além de um catálogo ativo de /v1/models cobrindo Claude, GPT, DeepSeek, GLM, Kimi e mais. O OmniRoute usa o protocolo OpenAI e lista os modelos via passthrough.", + "kenari": "O Kenari expõe um endpoint de chat completions compatível com OpenAI em https://kenari.id/v1/chat/completions, além de um catálogo /v1/models ao vivo cobrindo Claude, GPT, DeepSeek, GLM, Kimi e outros. O OmniRoute usa o protocolo OpenAI e lista modelos via passthrough.", "kie": "Conecte o KIE.AI com uma chave de API.", "kilo-gateway": "Conecte o Kilo Gateway com uma chave de API.", "kimi": "Conecte o Kimi com uma chave de API.", - "kimi-coding-apikey": "Conecte o Kimi Coding (API Key) com uma chave de API.", + "kimi-coding-apikey": "Conecte o Kimi Coding (Chave de API) com uma chave de API.", "lambda-ai": "Conecte o Lambda AI com uma chave de API.", "laozhang": "Conecte o LaoZhang AI com uma chave de API.", "leonardo": "Obtenha a chave de API em leonardo.ai/developer", "liquid": "Obtenha a chave de API em liquid.ai", "llamagate": "Conecte o LlamaGate com uma chave de API.", - "llm7": "Funciona sem chave de API (use 'unused' como chave). Obtenha um token gratuito em token.llm7.io para limites maiores.", - "longcat": "Gratuito: concessão única de 10M de tokens após o cadastro da conta + verificação KYC (LongCat-2.0). Apenas uma vez — não é uma franquia diária/mensal recorrente.", + "llm7": "Funciona sem chave de API (use 'unused' como chave). Obtenha um token gratuito em token.llm7.io para limites mais altos.", + "longcat": "Gratuito: concessão única de 10M tokens após cadastro de conta + verificação KYC (LongCat-2.0). Apenas uma vez — não é uma cota diária/mensal recorrente.", "maritalk": "Conecte o Maritalk com uma chave de API.", - "meta-llama": "Conecte o Meta Llama API com uma chave de API.", + "meta-llama": "Conecte a Meta Llama API com uma chave de API.", "minimax-cn": "Conecte o Minimax (China) com uma chave de API.", "minimax": "Conecte o Minimax Coding com uma chave de API.", - "mistral": "Nível de Experimento Gratuito: acesso com limite de taxa a todos os modelos, sem necessidade de cartão de crédito", - "modal": "O Modal geralmente serve aplicativos compatíveis com OpenAI hospedados pelo usuário em /v1. O OmniRoute investigará /v1/models e roteará o tráfego de chat para /v1/chat/completions.", - "modelscope": "Nível gratuito via ModelScope API-Inference — conta Alibaba necessária.", + "mistral": "Nível gratuito Experiment: acesso com limite de taxa a todos os modelos, sem necessidade de cartão de crédito", + "modal": "O Modal geralmente serve aplicativos hospedados pelo usuário compatíveis com OpenAI em /v1. O OmniRoute vai sondar /v1/models e rotear o tráfego de chat para /v1/chat/completions.", + "modelscope": "Nível gratuito via ModelScope API-Inference — requer conta Alibaba.", "monsterapi": "Obtenha a chave de API em monsterapi.ai", - "moonshot": "Conecte o Moonshot AI com uma chave de API.", + "moonshot": "Conecte o Kimi com uma chave de API.", "morph": "Nível gratuito: 250K créditos/mês, $0", "nanogpt": "Conecte o NanoGPT com uma chave de API.", "nebius": "~$1 em créditos de teste no cadastro para testes de API", - "nlpcloud": "O NLP Cloud usa uma API de chatbot proprietária em vez de chat/completions da OpenAI. O OmniRoute adapta as mensagens da OpenAI para entrada/contexto/histórico e expõe um catálogo local de modelos de chatbot suportados.", + "nlpcloud": "O NLP Cloud usa uma API de chatbot proprietária em vez de chat/completions da OpenAI. O OmniRoute adapta mensagens OpenAI para input/context/history e expõe um catálogo local dos modelos de chatbot suportados.", "nomic": "Obtenha a chave de API em atlas.nomic.ai", - "nous-research": "O Nous expõe uma superfície /v1 compatível com OpenAI com um grande catálogo remoto de /models. O endpoint /chat/completions requer uma chave de API válida para inferência programática.", + "nous-research": "O Nous expõe uma superfície /v1 compatível com OpenAI com um grande catálogo remoto /models. O endpoint /chat/completions requer uma chave de API válida para inferência programática.", "novita": "$0,50 em créditos de teste no cadastro (válidos por cerca de 1 ano)", "nscale": "$5 em créditos gratuitos no cadastro para testes de inferência", "nube": "Conecte o Nube.sh com uma chave de API.", "nvidia": "Acesso gratuito para desenvolvedores: ~40 RPM, mais de 70 modelos (Kimi K2.5, GLM 4.7, DeepSeek V3.2...)", - "oci": "O OCI expõe endpoints de chat e respostas compatíveis com a OpenAI. O Project ID é opcional no OmniRoute, mas pode ser necessário para Responses e fluxos de trabalho de agentes.", + "oci": "A OCI expõe endpoints de chat e responses compatíveis com OpenAI. O Project ID é opcional no OmniRoute, mas pode ser necessário para Responses e fluxos agênticos.", "ollama-cloud": "Conecte o Ollama Cloud com uma chave de API.", - "openadapter": "O OpenAdapter expõe um endpoint de chat completions compatível com a OpenAI em https://api.openadapter.in/v1/chat/completions, agregando mais de 70 modelos de código aberto (DeepSeek, Qwen, Kimi, MiniMax, GLM, Llama, Mistral, …). O OmniRoute usa o protocolo da OpenAI.", + "openadapter": "O OpenAdapter expõe um endpoint de chat completions compatível com OpenAI em https://api.openadapter.in/v1/chat/completions, agregando mais de 70 modelos open-source (DeepSeek, Qwen, Kimi, MiniMax, GLM, Llama, Mistral, …). O OmniRoute usa o protocolo OpenAI.", "openai": "Conecte a OpenAI com uma chave de API.", "opencode-go": "Conecte o OpenCode Go com uma chave de API.", "opencode-zen": "Conecte o OpenCode Zen com uma chave de API.", "openrouter": "Modelos gratuitos a $0/token com o sufixo :free - 20 RPM / 200 RPD", "openvecta": "Créditos gratuitos no cadastro para inferência compatível com OpenAI em LLMs, embeddings e modelos de raciocínio", - "orcarouter": "Crie uma chave de API (começa com sk-orca-) em https://www.orcarouter.ai e, em seguida, cole-a como um token Bearer. Endpoint compatível com OpenAI em https://api.orcarouter.ai/v1.", + "orcarouter": "Crie uma chave de API (começa com sk-orca-) em https://www.orcarouter.ai e cole-a como um token Bearer. Endpoint compatível com OpenAI em https://api.orcarouter.ai/v1.", "ovhcloud": "Conecte o OVHcloud AI com uma chave de API.", "perplexity": "Conecte o Perplexity com uma chave de API.", "piapi": "Conecte o PiAPI com uma chave de API.", - "pioneer": "$75 em créditos de uso gratuito — sem necessidade de cartão de crédito", + "pioneer": "$75 em créditos de uso gratuitos — sem necessidade de cartão de crédito", "plamo": "O PLaMo é compatível com OpenAI em https://api.platform.preferredai.jp/v1. Desenvolvido pela Preferred Networks e otimizado para o japonês. A documentação está principalmente em japonês.", - "poe": "O Poe expõe chat e respostas compatíveis com OpenAI em https://api.poe.com/v1, com verificações de saldo autenticadas em /usage/current_balance.", - "pollinations": "Nível gratuito sem chave: openai, openai-fast, openai-large, qwen-coder, mistral, deepseek, grok, gemini-flash-lite-3.1, perplexity-fast, perplexity-reasoning. Modelos premium (claude, gemini, midijourney) exigem uma chave de API do Pollinations de enter.pollinations.ai.", - "publicai": "Requer uma chave de API — crédito único de inscrição, depois pago", - "puter": "Obtenha o token em puter.com/dashboard → Copiar Auth Token", - "qiniu": "Crie uma chave de API de inferência de IA da Qiniu em https://portal.qiniu.com/ai-inference/api-key e cole-a aqui como um token Bearer. Endpoint compatível com OpenAI em https://api.qnaigc.com/v1, fazendo proxy de DeepSeek, Claude, Kimi e outros sob uma única chave.", + "poe": "O Poe expõe chat e responses compatíveis com OpenAI em https://api.poe.com/v1, com verificação autenticada de saldo em /usage/current_balance.", + "pollinations": "Nível gratuito sem chave: openai, openai-fast, openai-large, qwen-coder, mistral, deepseek, grok, gemini-flash-lite-3.1, perplexity-fast, perplexity-reasoning. Modelos premium (claude, gemini, midijourney) requerem uma chave de API do Pollinations em enter.pollinations.ai.", + "publicai": "Requer uma chave de API — crédito único no cadastro, depois pago", + "puter": "Obtenha o token em puter.com/dashboard → Copy Auth Token", + "qiniu": "Crie uma chave de API de inferência Qiniu AI em https://portal.qiniu.com/ai-inference/api-key e cole-a aqui como um token Bearer. Endpoint compatível com OpenAI em https://api.qnaigc.com/v1, fazendo proxy de DeepSeek, Claude, Kimi e outros por trás de uma única chave.", "recraft": "Conecte o Recraft com uma chave de API.", "reka": "O Reka Chat é compatível com OpenAI em /v1. O OmniRoute sonda /v1/models e roteia o tráfego de chat para /v1/chat/completions.", - "requesty": "Crie uma chave de API em https://app.requesty.ai e cole-a aqui como um token Bearer. Endpoint compatível com OpenAI em https://router.requesty.ai/v1, com um catálogo /v1/models ativo.", - "runwayml": "A geração de vídeo do Runway é baseada em tarefas. O OmniRoute envia trabalhos de texto para vídeo ou imagem para vídeo, consulta /v1/tasks/[id] e normaliza as saídas de vídeo concluídas de volta na resposta /v1/videos/generations semelhante à da OpenAI.", - "sambanova": "$5 em créditos gratuitos ao se inscrever (validade de 30 dias), sem necessidade de cartão de crédito", - "sap": "A descoberta de modelos usa /v2/lm/scenarios/foundation-models/models em AI_API_URL. As solicitações de chat usam deploymentUrl/chat/completions e exigem AI-Resource-Group.", + "requesty": "Crie uma chave de API em https://app.requesty.ai e cole-a aqui como um token Bearer. Endpoint compatível com OpenAI em https://router.requesty.ai/v1, com um catálogo /v1/models ao vivo.", + "runwayml": "A geração de vídeo do Runway é baseada em tarefas. O OmniRoute envia jobs de texto-para-vídeo ou imagem-para-vídeo, consulta /v1/tasks/[id] periodicamente e normaliza as saídas de vídeo concluídas de volta para a resposta /v1/videos/generations no estilo OpenAI.", + "sambanova": "$5 em créditos gratuitos no cadastro (validade de 30 dias), sem necessidade de cartão de crédito", + "sap": "A descoberta de modelos usa /v2/lm/scenarios/foundation-models/models em AI_API_URL. As solicitações de chat usam deploymentUrl/chat/completions e requerem AI-Resource-Group.", "sarvam": "O Sarvam AI é compatível com OpenAI em /v1. O OmniRoute sonda /v1/models e roteia o tráfego de chat para /v1/chat/completions. Os modelos são ajustados para línguas indianas.", - "scaleway": "1M de tokens gratuitos para novas contas — em conformidade com a UE/GDPR (Paris), Qwen3 235B e Llama 70B", + "scaleway": "1M tokens gratuitos para novas contas — compatível com UE/GDPR (Paris), Qwen3 235B e Llama 70B", "sensenova": "Obtenha a chave de API em platform.sensenova.cn", - "siliconflow": "$1 em créditos gratuitos mais modelos permanentemente gratuitos após verificação de identidade", + "siliconflow": "$1 em créditos gratuitos, além de modelos permanentemente gratuitos após verificação de identidade", "snowflake": "Conecte o Snowflake Cortex com uma chave de API.", "sparkdesk": "Obtenha a chave de API em console.xfyun.cn", - "stability-ai": "Conecte o Stability AI com uma chave de API.", + "stability-ai": "Conecte a Stability AI com uma chave de API.", "stepfun": "Obtenha a chave de API em platform.stepfun.com", - "sumopod": "O SumoPod expõe um endpoint de chat completions compatível com OpenAI em https://ai.sumopod.com/v1/chat/completions, além de um catálogo /v1/models ativo. O OmniRoute usa o protocolo OpenAI e lista modelos via passthrough.", + "sumopod": "O SumoPod expõe um endpoint de chat completions compatível com OpenAI em https://ai.sumopod.com/v1/chat/completions, além de um catálogo /v1/models ao vivo. O OmniRoute usa o protocolo OpenAI e lista modelos via passthrough.", "suno": "Cole o cookie de sessão do suno.ai (autenticação Clerk)", "synthetic": "Conecte o Synthetic com uma chave de API.", "tencent": "Obtenha a chave de API em console.cloud.tencent.com", @@ -6139,47 +6141,47 @@ "topaz": "Conecte o Topaz com uma chave de API.", "typhoon": "O Typhoon é compatível com OpenAI em /v1. Desenvolvido pela SCB 10X (Tailândia); o typhoon-v2.5-30b-a3b-instruct é um modelo multilíngue com foco no idioma tailandês.", "udio": "Cole o cookie de sessão do udio.com (autenticação Supabase)", - "uncloseai": "Nenhuma autenticação necessária. A API aceita qualquer string não vazia como chave para identificação.", + "uncloseai": "Não requer autenticação. A API aceita qualquer string não vazia como chave para identificação.", "upstage": "Conecte o Upstage com uma chave de API.", "v0-vercel": "Conecte o v0 (Vercel) com uma chave de API.", "venice": "Conecte o Venice.ai com uma chave de API.", "vercel-ai-gateway": "Conecte o Vercel AI Gateway com uma chave de API.", - "vertex": "Forneça o JSON da Conta de Serviço ou o access_token do OAuth", - "vertex-partner": "Forneça o mesmo JSON da Conta de Serviço usado para os modelos parceiros do Vertex AI.", + "vertex": "Forneça o JSON da Service Account ou um access_token OAuth", + "vertex-partner": "Forneça o mesmo JSON de Service Account usado para os modelos parceiros do Vertex AI.", "volcengine": "Conecte o Volcengine com uma chave de API.", - "voyage-ai": "Chave de API Bearer para as APIs de embeddings e rerank da Voyage AI.", + "voyage-ai": "Chave de API Bearer para as APIs de embeddings e rerank do Voyage AI.", "wafer": "Chave de API de https://wafer.ai", "wandb": "Conecte o Weights & Biases Inference com uma chave de API.", "writer": "O Writer Palmyra é compatível com OpenAI em https://api.writer.com/v1. O palmyra-x5 oferece uma janela de contexto de 1M de tokens.", - "x5lab": "O X5Lab expõe um endpoint de chat completions compatível com a OpenAI em https://api.x5lab.dev/v1/chat/completions, além de um catálogo de modelos /v1/models ativo. O OmniRoute usa o protocolo da OpenAI e lista os modelos via passthrough.", - "xai": "Conecte o xAI (Grok) com uma chave de API.", + "x5lab": "O X5Lab expõe um endpoint de chat completions compatível com OpenAI em https://api.x5lab.dev/v1/chat/completions, além de um catálogo /v1/models ao vivo. O OmniRoute usa o protocolo OpenAI e lista modelos via passthrough.", + "xai": "Conecte a xAI (Grok) com uma chave de API.", "xiaomi-mimo": "Conecte o Xiaomi MiMo com uma chave de API.", "yi": "Obtenha a chave de API em platform.lingyiwanwu.com", "zai": "Chave de API de https://open.bigmodel.cn/usercenter/apikeys", - "zenmux": "O ZenMux expõe um endpoint de chat completions compatível com a OpenAI em /api/v1/chat/completions, além das superfícies de protocolo Anthropic Messages (/api/anthropic/v1/messages) e Google Gemini (/api/vertex-ai). O OmniRoute usa o protocolo da OpenAI.", + "zenmux": "O ZenMux expõe um endpoint de chat completions compatível com OpenAI em /api/v1/chat/completions, além de superfícies de protocolo Anthropic Messages (/api/anthropic/v1/messages) e Google Gemini (/api/vertex-ai). O OmniRoute usa o protocolo OpenAI.", "galadriel": "Conecte o Galadriel com uma chave de API.", - "predibase": "$25 em créditos de teste gratuito (validade de 30 dias)", - "chenzk": "Gateway compatível com a OpenAI com um catálogo de modelos ativo em chenzk.top.", - "freepik": "Gere imagens com a Mystic API do Freepik.", - "freetheai": "Gateway gratuito compatível com a OpenAI com suporte a modelos via passthrough.", - "g4f-gemini": "Proxy reverso gratuito sem chave do g4f.space para o Gemini, limitado a 5 requisições por minuto.", - "g4f-groq": "Proxy reverso gratuito sem chave do g4f.space para o Groq, limitado a 5 requisições por minuto.", - "g4f-nvidia": "Proxy reverso gratuito sem chave do g4f.space para o NVIDIA NIM, limitado a 5 requisições por minuto.", - "g4f-ollama": "Gateway Ollama hospedado gratuito sem chave do g4f.space, limitado a 5 requisições por minuto.", - "g4f-pollinations": "Proxy reverso gratuito sem chave do g4f.space para o Pollinations, limitado a 5 requisições por minuto.", + "predibase": "$25 em créditos de teste gratuitos (validade de 30 dias)", + "chenzk": "Gateway compatível com OpenAI com um catálogo de modelos ao vivo em chenzk.top.", + "freepik": "Gere imagens com a API Mystic do Freepik.", + "freetheai": "Gateway gratuito compatível com OpenAI com suporte a modelos via passthrough.", + "g4f-gemini": "Proxy reverso gratuito e sem chave do g4f.space para o Gemini, limitado a 5 solicitações por minuto.", + "g4f-groq": "Proxy reverso gratuito e sem chave do g4f.space para o Groq, limitado a 5 solicitações por minuto.", + "g4f-nvidia": "Proxy reverso gratuito e sem chave do g4f.space para o NVIDIA NIM, limitado a 5 solicitações por minuto.", + "g4f-ollama": "Gateway Ollama hospedado, gratuito e sem chave, do g4f.space, limitado a 5 solicitações por minuto.", + "g4f-pollinations": "Proxy reverso gratuito e sem chave do g4f.space para o Pollinations, limitado a 5 solicitações por minuto.", "mixedbread": "Crie embeddings com a API do Mixedbread.", - "segmind": "Gere imagens e vídeos com os modelos hospedados da Segmind.", + "segmind": "Gere imagens e vídeos com os modelos hospedados do Segmind.", "amazon-q": "Usa o mesmo AWS Builder ID ou fluxo de refresh-token importado do Kiro, mas mantém as conexões do Amazon Q separadas.", "antigravity": "Conecte o Antigravity com o fluxo OAuth existente.", - "agy": "Importe seu login da CLI do Antigravity (`agy`) (cole/carregue seu arquivo de token), detecte automaticamente um login de CLI local ou faça login com o Google. Compartilha o backend do Antigravity (incl. modelos Claude).", + "agy": "Importe seu login da Antigravity CLI (`agy`) (cole/envie o arquivo de token), detecte automaticamente um login local da CLI, ou entre com o Google. Compartilha o backend do Antigravity (incluindo modelos Claude).", "claude": "Conecte o Claude Code com o fluxo OAuth existente.", "cline": "Conecte o Cline com o fluxo OAuth existente.", "cursor": "Conecte o Cursor IDE com o fluxo OAuth existente.", "github": "Conecte o GitHub Copilot com o fluxo OAuth existente.", - "gitlab-duo": "Aplicativo OAuth com escopos ai_features + read_user. Configure GITLAB_DUO_OAUTH_CLIENT_ID e opcionalmente GITLAB_DUO_OAUTH_CLIENT_SECRET nesta instância do OmniRoute.", + "gitlab-duo": "Aplicação OAuth com os escopos ai_features + read_user. Configure GITLAB_DUO_OAUTH_CLIENT_ID e, opcionalmente, GITLAB_DUO_OAUTH_CLIENT_SECRET nesta instância do OmniRoute.", "kilocode": "Conecte o Kilo Code com o fluxo OAuth existente.", "kimi-coding": "Conecte o Kimi Coding com o fluxo OAuth existente.", - "kiro": "Nível gratuito: 50 créditos/mês (~25K–100K tokens). ⚠️ Os Termos de Serviço (ToS) do Kiro proíbem o uso de proxy/harness de terceiros.", + "kiro": "Nível gratuito: 50 créditos/mês (~25K–100K tokens). ⚠️ Os Termos de Serviço do Kiro proíbem o uso de proxy/harness de terceiros.", "codex": "Conecte o OpenAI Codex com o fluxo OAuth existente.", "qwen": "Conecte o Qwen Code com o fluxo OAuth existente." }, @@ -6212,18 +6214,18 @@ "webSessionCredentialValidationFailed": "Falha na validação da credencial da sessão. Faça login novamente, copie uma nova credencial e tente novamente.", "checkCookie": "Verifique o cookie", "checkWebToken": "Verifique o token", - "huggingchatLabel": "HuggingChat (Gratuito)", - "huggingchatDesc": "Chat de LLM gratuito via huggingface.co/chat", - "poeWebLabel": "Poe Web", - "poeWebDesc": "Chat multimodelo via poe.com", - "veniceWebLabel": "Venice Web", - "veniceWebDesc": "Chat de IA focado em privacidade", - "v0VercelWebLabel": "v0 Vercel Web", - "v0VercelWebDesc": "Geração de código por IA via v0.dev", - "kimiWebLabel": "Kimi Web", - "kimiWebDesc": "Chat de consumidor da Moonshot AI via www.kimi.com (internacional, API Connect-RPC)", - "doubaoWebLabel": "Doubao Web", - "doubaoWebDesc": "Chat de IA da ByteDance via doubao.com", + "huggingchatLabel": "__MISSING__:HuggingChat (Free)", + "huggingchatDesc": "__MISSING__:Free LLM chat via huggingface.co/chat", + "poeWebLabel": "__MISSING__:Poe Web", + "poeWebDesc": "__MISSING__:Multi-model chat via poe.com", + "veniceWebLabel": "__MISSING__:Venice Web", + "veniceWebDesc": "__MISSING__:Privacy-focused AI chat", + "v0VercelWebLabel": "__MISSING__:v0 Vercel Web", + "v0VercelWebDesc": "__MISSING__:AI code generation via v0.dev", + "kimiWebLabel": "__MISSING__:Kimi Web", + "kimiWebDesc": "__MISSING__:Moonshot AI consumer chat via www.kimi.com (international, Connect-RPC API)", + "doubaoWebLabel": "__MISSING__:Doubao Web", + "doubaoWebDesc": "__MISSING__:ByteDance AI chat via doubao.com", "overrideBaseUrlAdvanced": "Avançado: sobrescrever URL base", "overrideBaseUrlHint": "Avançado: aponta este provedor embutido para um endpoint personalizado. Deixe em branco para usar o padrão.", "apiProtocolLabel": "Protocolo da API", @@ -6231,86 +6233,87 @@ "apiProtocolHint": "Alguns provedores publicam os mesmos modelos em mais de um protocolo. Mantenha o padrão a menos que precise da alternativa.", "bulkAddFormatHintCloudflare": "Uma chave por linha. Formato: nome|accountId|apiKey (ID de conta Cloudflare + token de API).", "lmarenaWebCookieHint": "Abra arena.ai, faça login e depois copie o cabeçalho Cookie completo de uma requisição de rede. Inclua arena-auth-prod-v1.0 e arena-auth-prod-v1.1 (e outros fragmentos, se houver), preferencialmente com cf_clearance. Não cole apenas o cookie vazio arena-auth-prod-v1. Opcional: providerSpecificData.recaptchaV3Token se create-evaluation ainda retornar 403.", - "kimiOfficialSupporterBadge": "Amigo Fundador", - "kimiOfficialSupporterTooltip": "A Kimi (Moonshot AI) é a amiga fundadora de código aberto do OmniRoute", + "kimiOfficialSupporterBadge": "Apoiador Oficial", + "kimiOfficialSupporterTooltip": "A Kimi (Moonshot AI) é parceira oficial de lançamento do OmniRoute", "cheaperInferenceSupporterBadge": "Amigo do Código Aberto", "cheaperInferenceSupporterTooltip": "A Cheaper Inference apoia o OmniRoute como amiga do código aberto", - "kimiPartnerLinkNote": "Link de parceiro — apoia o OmniRoute sem custo extra para você", -"anonymousFallbackTitle": "Fallback anônimo", -"anonymousFallbackDesc": "Quando todas as conexões configuradas estiverem esgotadas (cota, créditos ou expiração), use temporariamente a camada sem chave deste provedor. Desative para ignorar este provedor em vez de enviar solicitações anônimas — recomendado quando a camada sem chave as rejeita (401).", -"anonymousFallbackEnabled": "Fallback anônimo ativado para {provider}", -"anonymousFallbackDisabled": "Fallback anônimo desativado para {provider} — conexões esgotadas ignorarão este provedor", -"anonymousFallbackUpdateFailed": "Falha ao atualizar a configuração de fallback anônimo", -"batchDeleteFailed": "__MISSING__:Batch delete failed", -"batchDeleteNetworkError": "__MISSING__:Network error during batch delete", -"batchUpdateFailed": "__MISSING__:Batch update failed", -"batchUpdateNetworkError": "__MISSING__:Network error during batch update", -"categoryAudio": "__MISSING__:Audio", -"categoryCloudAgent": "__MISSING__:Cloud Agent", -"categoryIde": "__MISSING__:IDE", -"categoryLocal": "__MISSING__:Local", -"categorySearch": "__MISSING__:Search", -"categoryWebCookie": "__MISSING__:Web Cookie", -"claudeExtraUsageBlockingDisabled": "__MISSING__:Claude extra-usage blocking disabled (extra usage is allowed)", -"claudeExtraUsageBlockingEnabled": "__MISSING__:Claude extra-usage blocking enabled (extra usage will be blocked)", -"claudeRoutingPreferenceDisabled": "__MISSING__:Unprefixed Claude models no longer prefer Claude Code", -"claudeRoutingPreferenceEnabled": "__MISSING__:Unprefixed Claude models now prefer Claude Code", -"clearMediaFilter": "__MISSING__:Clear", -"cliproxyRoutingDisabled": "__MISSING__:Requests now use native OmniRoute (direct)", -"cliproxyRoutingEnabled": "__MISSING__:Requests now route through CLIProxyAPI (deeper emulation)", -"codexLimitPolicyUpdated": "__MISSING__:Codex limit policy updated", -"codexServiceModeUpdated": "__MISSING__:Codex service mode updated", -"codexServiceTierActive": "__MISSING__:Codex {tier} service tier is active", -"codexTierFastLabel": "__MISSING__:Fast", -"codexTierFlexLabel": "__MISSING__:Flex", -"commandCodeApplyFailed": "__MISSING__:Failed to apply Command Code auth", -"commandCodeApplyingApproval": "__MISSING__:Browser approved, applying…", -"commandCodeApplyingKey": "__MISSING__:Applying browser-approved key…", -"commandCodeApprovalInstructions": "__MISSING__:Open the auth URL, approve access, then paste the returned key/JSON/URL below…", -"commandCodeAuthExpired": "__MISSING__:Command Code auth expired", -"commandCodeConnected": "__MISSING__:Command Code connected", -"commandCodeConnectionAdded": "__MISSING__:Command Code connection added", -"commandCodeLinkExpired": "__MISSING__:Command Code link expired", -"commandCodeOpeningStudio": "__MISSING__:Opening Command Code Studio…", -"commandCodePopupBlocked": "__MISSING__:Popup blocked. Please allow popups and try Command Code Connect again.", -"commandCodeStartFailed": "__MISSING__:Failed to start Command Code auth", -"connectionDeleted": "__MISSING__:Connection deleted", -"connectionFallback": "__MISSING__:connection", -"coolingConnectionsDescription": "__MISSING__:These connections returned a 429 (rate-limit) on their last request. OmniRoute will skip them until the timer expires — no manual disable required.", -"coolingConnectionsTitle": "__MISSING__:Currently cooling ({count})", -"failedDeleteAlias": "__MISSING__:Failed to delete alias", -"failedDeleteConnection": "__MISSING__:Failed to delete connection", -"failedDistributeProxies": "__MISSING__:Failed to distribute proxies.", -"failedSaveModelEndpointSettings": "__MISSING__:Failed to save model endpoint settings", -"failedUpdateClaudeExtraUsagePolicy": "__MISSING__:Failed to update Claude extra-usage policy", -"failedUpdateClaudeRoutingPreference": "__MISSING__:Failed to update Claude Code routing preference", -"failedUpdateCliproxyRouting": "__MISSING__:Failed to update CLIProxyAPI routing", -"failedUpdateCodexLimitPolicy": "__MISSING__:Failed to update Codex limit policy", -"failedUpdateCodexServiceMode": "__MISSING__:Failed to update Codex service mode", -"filterByMedia": "__MISSING__:Media", -"freeBadge": "__MISSING__:Free", -"kimiCodeApiKeyLabel": "__MISSING__:Kimi Code API Key", -"modelTestFailed": "__MISSING__:Model test failed", -"modelTestNetworkError": "__MISSING__:Network error testing model", -"networkError": "__MISSING__:Network error", -"networkErrorDeletingAlias": "__MISSING__:Network error deleting alias", -"networkErrorSettingAlias": "__MISSING__:Network error setting alias", -"noProvidersMatch": "__MISSING__:No providers match your search.", -"noSavedProxies": "__MISSING__:No saved proxies found. Add proxies in Settings → Proxy first.", -"pageLoadErrorDescription": "__MISSING__:We could not load provider data right now. Check your connection and try again.", -"pageLoadErrorId": "__MISSING__:Error ID: {id}", -"pageLoadErrorRetry": "__MISSING__:Try Again", -"pageLoadErrorTitle": "__MISSING__:Failed to load providers", -"playgroundTitle": "__MISSING__:Playground", -"providerDetailConnectionFlexActive": "__MISSING__:Codex flex service tier is active for this connection", -"providerDetailConnectionPriorityActive": "__MISSING__:Codex priority service tier is active for this connection", -"providerDetailGlobalFlexActive": "__MISSING__:Global Codex flex service tier is active", -"providerDetailGlobalPriorityActive": "__MISSING__:Global Codex priority service tier is active", -"proxiesDistributed": "__MISSING__:Distributed {assigned} proxy assignment(s) across {tagLabel}{total} connection(s).", -"rerankEndpoint": "__MISSING__:Rerank", -"savedModelEndpointSettings": "__MISSING__:Saved model endpoint settings", -"searchByModelAria": "__MISSING__:Search by model", -"selectSupportedEndpoint": "__MISSING__:Select at least one supported endpoint" + "kimiPartnerLinkNote": "Link de parceria — apoia o OmniRoute sem custo extra para você", + "anonymousFallbackTitle": "Fallback anônimo", + "anonymousFallbackDesc": "Quando todas as conexões configuradas estiverem esgotadas (cota, créditos ou expiração), use temporariamente a camada sem chave deste provedor. Desative para ignorar este provedor em vez de enviar solicitações anônimas — recomendado quando a camada sem chave as rejeita (401).", + "anonymousFallbackEnabled": "Fallback anônimo ativado para {provider}", + "anonymousFallbackDisabled": "Fallback anônimo desativado para {provider} — conexões esgotadas ignorarão este provedor", + "anonymousFallbackUpdateFailed": "Falha ao atualizar a configuração de fallback anônimo", + "batchDeleteFailed": "__MISSING__:Batch delete failed", + "batchDeleteNetworkError": "__MISSING__:Network error during batch delete", + "batchUpdateFailed": "__MISSING__:Batch update failed", + "batchUpdateNetworkError": "__MISSING__:Network error during batch update", + "categoryAudio": "__MISSING__:Audio", + "categoryCloudAgent": "__MISSING__:Cloud Agent", + "categoryIde": "__MISSING__:IDE", + "categoryLocal": "__MISSING__:Local", + "categorySearch": "__MISSING__:Search", + "categoryWebCookie": "__MISSING__:Web Cookie", + "claudeExtraUsageBlockingDisabled": "__MISSING__:Claude extra-usage blocking disabled (extra usage is allowed)", + "claudeExtraUsageBlockingEnabled": "__MISSING__:Claude extra-usage blocking enabled (extra usage will be blocked)", + "claudeRoutingPreferenceDisabled": "__MISSING__:Unprefixed Claude models no longer prefer Claude Code", + "claudeRoutingPreferenceEnabled": "__MISSING__:Unprefixed Claude models now prefer Claude Code", + "clearMediaFilter": "__MISSING__:Clear", + "cliproxyRoutingDisabled": "__MISSING__:Requests now use native OmniRoute (direct)", + "cliproxyRoutingEnabled": "__MISSING__:Requests now route through CLIProxyAPI (deeper emulation)", + "codexLimitPolicyUpdated": "__MISSING__:Codex limit policy updated", + "codexServiceModeUpdated": "__MISSING__:Codex service mode updated", + "codexServiceTierActive": "__MISSING__:Codex {tier} service tier is active", + "codexTierFastLabel": "__MISSING__:Fast", + "codexTierFlexLabel": "__MISSING__:Flex", + "commandCodeApplyFailed": "__MISSING__:Failed to apply Command Code auth", + "commandCodeApplyingApproval": "__MISSING__:Browser approved, applying…", + "commandCodeApplyingKey": "__MISSING__:Applying browser-approved key…", + "commandCodeApprovalInstructions": "__MISSING__:Open the auth URL, approve access, then paste the returned key/JSON/URL below…", + "commandCodeAuthExpired": "__MISSING__:Command Code auth expired", + "commandCodeConnected": "__MISSING__:Command Code connected", + "commandCodeConnectionAdded": "__MISSING__:Command Code connection added", + "commandCodeLinkExpired": "__MISSING__:Command Code link expired", + "commandCodeOpeningStudio": "__MISSING__:Opening Command Code Studio…", + "commandCodePopupBlocked": "__MISSING__:Popup blocked. Please allow popups and try Command Code Connect again.", + "commandCodeStartFailed": "__MISSING__:Failed to start Command Code auth", + "connectionDeleted": "__MISSING__:Connection deleted", + "connectionFallback": "__MISSING__:connection", + "coolingConnectionsDescription": "__MISSING__:These connections returned a 429 (rate-limit) on their last request. OmniRoute will skip them until the timer expires — no manual disable required.", + "coolingConnectionsTitle": "__MISSING__:Currently cooling ({count})", + "failedDeleteAlias": "__MISSING__:Failed to delete alias", + "failedDeleteConnection": "__MISSING__:Failed to delete connection", + "failedDistributeProxies": "__MISSING__:Failed to distribute proxies.", + "failedSaveModelEndpointSettings": "__MISSING__:Failed to save model endpoint settings", + "failedUpdateClaudeExtraUsagePolicy": "__MISSING__:Failed to update Claude extra-usage policy", + "failedUpdateClaudeRoutingPreference": "__MISSING__:Failed to update Claude Code routing preference", + "failedUpdateCliproxyRouting": "__MISSING__:Failed to update CLIProxyAPI routing", + "failedUpdateCodexLimitPolicy": "__MISSING__:Failed to update Codex limit policy", + "failedUpdateCodexServiceMode": "__MISSING__:Failed to update Codex service mode", + "filterByMedia": "__MISSING__:Media", + "freeBadge": "__MISSING__:Free", + "kimiCodeApiKeyLabel": "__MISSING__:Kimi Code API Key", + "modelTestFailed": "__MISSING__:Model test failed", + "modelTestNetworkError": "__MISSING__:Network error testing model", + "networkError": "__MISSING__:Network error", + "networkErrorDeletingAlias": "__MISSING__:Network error deleting alias", + "networkErrorSettingAlias": "__MISSING__:Network error setting alias", + "noProvidersMatch": "__MISSING__:No providers match your search.", + "noSavedProxies": "__MISSING__:No saved proxies found. Add proxies in Settings → Proxy first.", + "pageLoadErrorDescription": "__MISSING__:We could not load provider data right now. Check your connection and try again.", + "pageLoadErrorId": "__MISSING__:Error ID: {id}", + "pageLoadErrorRetry": "__MISSING__:Try Again", + "pageLoadErrorTitle": "__MISSING__:Failed to load providers", + "playgroundTitle": "__MISSING__:Playground", + "providerDetailConnectionFlexActive": "__MISSING__:Codex flex service tier is active for this connection", + "providerDetailConnectionPriorityActive": "__MISSING__:Codex priority service tier is active for this connection", + "providerDetailGlobalFlexActive": "__MISSING__:Global Codex flex service tier is active", + "providerDetailGlobalPriorityActive": "__MISSING__:Global Codex priority service tier is active", + "proxiesDistributed": "__MISSING__:Distributed {assigned} proxy assignment(s) across {tagLabel}{total} connection(s).", + "rerankEndpoint": "__MISSING__:Rerank", + "savedModelEndpointSettings": "__MISSING__:Saved model endpoint settings", + "searchByModelAria": "__MISSING__:Search by model", + "selectSupportedEndpoint": "__MISSING__:Select at least one supported endpoint", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Configurações", @@ -6432,7 +6435,7 @@ "memoryDesc": "Memória conversacional persistente entre sessões", "memoryEnabled": "Ativar Memória", "memoryEnabledDesc": "Quando ativado, injetará o contexto passado relevante de forma dinâmica.", - "memoryTokenCostWarning": "Atenção: com a memória ativada, o OmniRoute injeta até {tokens} tokens de contexto recuperado em cada solicitação de chat — isso aumenta o uso de tokens e o custo. Para ignorar a injeção em uma solicitação específica, envie o cabeçalho \"x-omniroute-no-memory: true\" .", + "memoryTokenCostWarning": "__MISSING__:Heads up: with memory enabled, OmniRoute injects up to {tokens} tokens of retrieved context into every chat request — this increases token usage and cost. To skip injection for a specific request, send the \"x-omniroute-no-memory: true\" header.", "maxTokens": "Tokens Máximos", "retentionDays": "Retenção", "recent": "Recente", @@ -6474,27 +6477,27 @@ "logToolSourcesToggle": "Registrar fontes de ferramentas", "logToolSourcesDescription": "Emite uma linha de log de diagnóstico por requisição resumindo a contagem de ferramentas e a origem MCP/hospedada/cliente.", "homePinProviderQuotaToHome": "Fixar informações na página inicial", - "homePinnedSectionsDesc": "Escolha quais seções fixar no topo da página inicial.", + "homePinnedSectionsDesc": "Escolha quais seções fixar no topo da página Início.", "homeProviderQuotaLimits": "Limites de cota dos provedores", "homeProviderQuotaLimitsDesc": "Fixe o painel de status de cotas dos provedores (com botão Atualizar tudo) no topo da página inicial.", "homeQuickStart": "Início rápido", "homeQuickStartDesc": "Mostrar o painel de início rápido na página inicial.", "homeProviderTopology": "Topologia dos provedores", "homeProviderTopologyDesc": "Mostrar a topologia dos provedores na página inicial.", - "accountEmailVisibility": "Visibilidade do e-mail da conta", - "accountEmailVisibilityDesc": "Mostrar e-mails completos da conta nas telas de provedores, combos, logs, cotas e playground. Desative isso para mascará-los por padrão.", + "accountEmailVisibility": "__MISSING__:Account email visibility", + "accountEmailVisibilityDesc": "__MISSING__:Show full account emails across providers, combos, logs, quota, and playground screens. Turn this off to mask them by default.", "comboConfigMode": "Modo de configuração de combo", - "comboConfigModeDesc": "Escolha como a caixa de diálogo de criação e edição de combo é organizada.", + "comboConfigModeDesc": "Escolha como o diálogo de criação e edição de combo é organizado.", "comboConfigModeGuided": "Guiado", "comboConfigModeGuidedDesc": "Use o construtor de combo passo a passo atual.", "comboConfigModeExpert": "Especialista", - "comboConfigModeExpertDesc": "Mostrar todas as opções de combo em uma página e habilitar a inserção direta de modelos.", - "providerQuotaAutoRefresh": "Atualização automática de cota do provedor", - "providerQuotaAutoRefreshDesc": "Atualizar a visualização de Limites do Provedor automaticamente enquanto ela permanecer aberta.", + "comboConfigModeExpertDesc": "Mostra todas as opções de combo em uma página e permite a entrada direta de modelo.", + "providerQuotaAutoRefresh": "Atualização automática da Cota do Provedor", + "providerQuotaAutoRefreshDesc": "Atualiza automaticamente a visualização de Limites do Provedor enquanto ela permanece aberta.", "providerQuotaAutoRefreshToggle": "Atualização automática", - "providerQuotaAutoRefreshToggleDesc": "Atualizar a visualização de cotas a cada poucos minutos enquanto a página estiver visível.", + "providerQuotaAutoRefreshToggleDesc": "Atualiza a visualização de cota a cada poucos minutos enquanto a página está visível.", "providerQuotaAutoRefreshInterval": "Intervalo de atualização", - "providerQuotaAutoRefreshIntervalDesc": "Com que frequência a visualização de cotas deve ser atualizada, em segundos.", + "providerQuotaAutoRefreshIntervalDesc": "Com que frequência a visualização de cota deve atualizar, em segundos.", "seconds": "segundos", "sidebarVisibilityToggle": "Show Sidebar Items", "enableCache": "Ativar Cache", @@ -6529,17 +6532,17 @@ "autoDisableDescription": "Marca permanentemente conexões de provedor como desativadas quando retornam sinais terminais de banimento (ex.: HTTP 403 'verify your account'). Isso remove a conexão da rotação de combos.", "autoDisableThreshold": "Limite de banimento", "autoDisableThresholdDesc": "Quantidade de sinais consecutivos de banimento antes da desativação permanente.", - "customBannedSignals": "Palavras-chave banidas", - "customBannedSignalsDesc": "Palavras-chave adicionais que acionam a detecção de banimento permanente da conta. As palavras-chave integradas sempre se aplicam.", - "customBannedSignalsPlaceholder": "ex: api key revoked", - "noCustomBannedSignals": "Nenhuma palavra-chave personalizada. Apenas as palavras-chave integradas estão ativas.", + "customBannedSignals": "__MISSING__:Banned Keywords", + "customBannedSignalsDesc": "__MISSING__:Additional keywords that trigger permanent account ban detection. Built-in keywords always apply.", + "customBannedSignalsPlaceholder": "__MISSING__:e.g. api key revoked", + "noCustomBannedSignals": "__MISSING__:No custom keywords. Only built-in keywords are active.", "resilienceStructureTitle": "Estrutura de resiliência", "resilienceStructureDesc": "Esta página configura apenas o comportamento. O estado ao vivo de circuit breaker aparece na página Saúde. Controle de retry específico por combo e slot de round-robin continuam nas configurações de combos.", "enableThinking": "Ativar Raciocínio", "maxThinkingTokens": "Máximo de Tokens de Raciocínio", "enableProxy": "Ativar Proxy", - "perKeyProxyEnabled": "Habilitar atribuição de proxy por chave", - "perKeyProxyEnabledDesc": "Quando ativado, cada conexão de provedor pode usar sua própria atribuição de proxy", + "perKeyProxyEnabled": "__MISSING__:Enable per-key proxy assignment", + "perKeyProxyEnabledDesc": "__MISSING__:When enabled, each provider connection can use its own proxy assignment", "proxyUrl": "URL do Proxy", "pricingRates": "Formato de Taxas de Preço", "currentPricing": "Visão Geral de Preços Atual", @@ -6610,13 +6613,13 @@ "uploadFavicon": "Upload Favicon", "resetFavicon": "Reset Favicon", "faviconPreview": "Favicon Preview", - "logoFileTooLarge": "O arquivo do logotipo deve ter menos de 500KB", - "faviconFileTooLarge": "O arquivo do favicon deve ter menos de 50KB", - "invalidLogoFileType": "Tipo de arquivo inválido. Carregue PNG, JPG, SVG, GIF ou WebP.", - "invalidFaviconFileType": "Tipo de arquivo inválido. Carregue PNG, ICO, SVG, GIF ou WebP.", + "logoFileTooLarge": "O arquivo de logo deve ter menos de 500KB", + "faviconFileTooLarge": "O arquivo de favicon deve ter menos de 50KB", + "invalidLogoFileType": "Tipo de arquivo inválido. Envie PNG, JPG, SVG, GIF ou WebP.", + "invalidFaviconFileType": "Tipo de arquivo inválido. Envie PNG, ICO, SVG, GIF ou WebP.", "failedToReadFile": "Falha ao ler o arquivo", - "startOnLogin": "Iniciar ao fazer login", - "startOnLoginDesc": "Iniciar automaticamente o OmniRoute na inicialização do sistema e executá-lo silenciosamente na bandeja do sistema.", + "startOnLogin": "Iniciar no Login", + "startOnLoginDesc": "Inicia automaticamente o OmniRoute na inicialização do sistema e executa silenciosamente na bandeja em segundo plano.", "flushCache": "Limpar Cache", "flushing": "Limpando…", "size": "Tamanho", @@ -6640,78 +6643,78 @@ "NEEDS_CORE_NOT_CONFIGURED": "Esta assinatura tem nós que precisam de um core local (SS/VMess/Trojan/VLESS); eles não são roteados até você configurar o endpoint SOCKS5 do core local.", "NO_USABLE_NODES": "A assinatura não retornou nós utilizáveis (http/https/socks5 ou nós com endpoint de core local)." }, -"description": "Cole o link de assinatura do seu proxy. Uma vez ativado, o tráfego é roteado através do pool de proxy no modo global ou de regra (Provedor especificado). Os nós de assinatura são sincronizados automaticamente no pool de proxy e reutilizam mecanismos existentes de pesquisa, verificação de integridade e antivazamento.", -"addSubscription": "Adicionar assinatura", -"newSubscription": "Adicionar assinatura", -"editSubscription": "Editar assinatura", -"name": "Nome", -"namePlaceholder": "por exemplo Minha assinatura A", -"url": "URL de assinatura", -"urlPlaceholder": "https://.../subscribe?token=...", -"mode": "Modo", -"globalMode": "Modo Global", -"ruleMode": "Modo de regra", -"globalModeDesc": "Todo o tráfego do Provedor passa pelo pool de proxy desta assinatura.", -"ruleModeDesc": "Apenas o tráfego dos Provedores selecionados passa pelo proxy; o resto se conecta diretamente.", -"localCoreEndpoint": "Ponto final SOCKS5/HTTP de núcleo local (opcional)", -"localCoreEndpointPlaceholder": "meias5://127.0.0.1:1080", -"localCoreEndpointDesc": "Aceita apenas 127.0.0.1 / localhost (SS/VMess/Trojan/VLESS requerem um núcleo sing-box/clash local).", -"routeByProvider": "Rota por provedor (seleção múltipla)", -"loadingProviders": "Carregando lista de provedores…", -"autoRefreshInterval": "Intervalo de atualização automática (minutos)", -"enableAfterCreate": "Ativar na criação (sincronizar e entrar em vigor imediatamente)", -"saving": "Salvando…", -"saveChanges": "Salvar alterações", -"createSubscription": "Criar assinatura", -"loading": "Carregando…", -"noSubscriptions": "Ainda não há assinaturas. Clique em \"Adicionar assinatura\" para começar.", -"statusOk": "OK", -"statusError": "Erro", -"statusEmpty": "Vazio", -"global": "Globais", -"rule": "Regra", -"enabled": "Habilitado", -"disabled": "Desativado", -"nodeCount": "Nós: {count}", -"needsCoreCount": "{count} precisa de núcleo local", -"lastSynced": "Última sincronização: {time}", -"consecutiveFailures": "{count} falhas consecutivas", -"lastError": "Último erro: {time}", -"coreHintTitle": "Esta assinatura possui nós {count} que requerem um núcleo de proxy local (SS/VMess/Trojan/VLESS, etc.) e atualmente não são roteados.", -"coreHintDesc": "Esses protocolos não podem ser encaminhados diretamente pelo OmniRoute. Por favor, inicie um núcleo sing-box ou Clash (Clash.Meta) em sua máquina, exponha-o como um endpoint SOCKS5/HTTP e preencha-o via Editar (apenas 127.0.0.1/localhost é aceito).", -"copy": "Copiar", -"goConfigure": "Configurar", -"disable": "Desativar", -"enable": "Habilitar", -"refreshNodes": "Atualizar nós", -"edit": "Editar", -"delete": "Excluir", -"confirmDelete": "Tem certeza de que deseja excluir a assinatura \"{name}\"? Os nós proxy associados também serão removidos.", -"nameRequired": "Por favor insira um nome", -"urlRequired": "Insira um URL de assinatura", -"ruleModeProviderRequired": "Selecione pelo menos um provedor no modo de regra", -"saveFailed": "Falha ao salvar", -"loadFailed": "Falha ao carregar a lista de assinaturas", -"toggleFailed": "Falha ao alternar o interruptor", -"refreshFailed": "Falha ao atualizar", -"deleteFailed": "Falha ao excluir", -"add": "__MISSING__:Add", -"cancel": "__MISSING__:Cancel", -"configure": "__MISSING__:Configure", -"copyEndpoint": "__MISSING__:Copy Endpoint", -"coreEndpointHint": "__MISSING__:Core Endpoint Hint", -"coreNodesHint": "__MISSING__:Core Nodes Hint", -"create": "__MISSING__:Create", -"deleteConfirm": "__MISSING__:Delete Confirm", -"empty": "__MISSING__:Empty", -"globalModeDescription": "__MISSING__:Global Mode Description", -"localCoreHint": "__MISSING__:Local Core Hint", -"nodeSummary": "__MISSING__:Node Summary", -"providerRequired": "__MISSING__:Provider Required", -"providerRouting": "__MISSING__:Provider Routing", -"refresh": "__MISSING__:Refresh", -"refreshInterval": "__MISSING__:Refresh Interval", -"ruleModeDescription": "__MISSING__:Rule Mode Description" + "description": "Cole o link de assinatura do seu proxy. Uma vez ativado, o tráfego é roteado através do pool de proxy no modo global ou de regra (Provedor especificado). Os nós de assinatura são sincronizados automaticamente no pool de proxy e reutilizam mecanismos existentes de pesquisa, verificação de integridade e antivazamento.", + "addSubscription": "Adicionar assinatura", + "newSubscription": "Adicionar assinatura", + "editSubscription": "Editar assinatura", + "name": "Nome", + "namePlaceholder": "por exemplo Minha assinatura A", + "url": "URL de assinatura", + "urlPlaceholder": "https://.../subscribe?token=...", + "mode": "Modo", + "globalMode": "Modo Global", + "ruleMode": "Modo de regra", + "globalModeDesc": "Todo o tráfego do Provedor passa pelo pool de proxy desta assinatura.", + "ruleModeDesc": "Apenas o tráfego dos Provedores selecionados passa pelo proxy; o resto se conecta diretamente.", + "localCoreEndpoint": "Ponto final SOCKS5/HTTP de núcleo local (opcional)", + "localCoreEndpointPlaceholder": "meias5://127.0.0.1:1080", + "localCoreEndpointDesc": "Aceita apenas 127.0.0.1 / localhost (SS/VMess/Trojan/VLESS requerem um núcleo sing-box/clash local).", + "routeByProvider": "Rota por provedor (seleção múltipla)", + "loadingProviders": "Carregando lista de provedores…", + "autoRefreshInterval": "Intervalo de atualização automática (minutos)", + "enableAfterCreate": "Ativar na criação (sincronizar e entrar em vigor imediatamente)", + "saving": "Salvando…", + "saveChanges": "Salvar alterações", + "createSubscription": "Criar assinatura", + "loading": "Carregando…", + "noSubscriptions": "Ainda não há assinaturas. Clique em \"Adicionar assinatura\" para começar.", + "statusOk": "OK", + "statusError": "Erro", + "statusEmpty": "Vazio", + "global": "Globais", + "rule": "Regra", + "enabled": "Habilitado", + "disabled": "Desativado", + "nodeCount": "Nós: {count}", + "needsCoreCount": "{count} precisa de núcleo local", + "lastSynced": "Última sincronização: {time}", + "consecutiveFailures": "{count} falhas consecutivas", + "lastError": "Último erro: {time}", + "coreHintTitle": "Esta assinatura possui nós {count} que requerem um núcleo de proxy local (SS/VMess/Trojan/VLESS, etc.) e atualmente não são roteados.", + "coreHintDesc": "Esses protocolos não podem ser encaminhados diretamente pelo OmniRoute. Por favor, inicie um núcleo sing-box ou Clash (Clash.Meta) em sua máquina, exponha-o como um endpoint SOCKS5/HTTP e preencha-o via Editar (apenas 127.0.0.1/localhost é aceito).", + "copy": "Copiar", + "goConfigure": "Configurar", + "disable": "Desativar", + "enable": "Habilitar", + "refreshNodes": "Atualizar nós", + "edit": "Editar", + "delete": "Excluir", + "confirmDelete": "Tem certeza de que deseja excluir a assinatura \"{name}\"? Os nós proxy associados também serão removidos.", + "nameRequired": "Por favor insira um nome", + "urlRequired": "Insira um URL de assinatura", + "ruleModeProviderRequired": "Selecione pelo menos um provedor no modo de regra", + "saveFailed": "Falha ao salvar", + "loadFailed": "Falha ao carregar a lista de assinaturas", + "toggleFailed": "Falha ao alternar o interruptor", + "refreshFailed": "Falha ao atualizar", + "deleteFailed": "Falha ao excluir", + "add": "__MISSING__:Add", + "cancel": "__MISSING__:Cancel", + "configure": "__MISSING__:Configure", + "copyEndpoint": "__MISSING__:Copy Endpoint", + "coreEndpointHint": "__MISSING__:Core Endpoint Hint", + "coreNodesHint": "__MISSING__:Core Nodes Hint", + "create": "__MISSING__:Create", + "deleteConfirm": "__MISSING__:Delete Confirm", + "empty": "__MISSING__:Empty", + "globalModeDescription": "__MISSING__:Global Mode Description", + "localCoreHint": "__MISSING__:Local Core Hint", + "nodeSummary": "__MISSING__:Node Summary", + "providerRequired": "__MISSING__:Provider Required", + "providerRouting": "__MISSING__:Provider Routing", + "refresh": "__MISSING__:Refresh", + "refreshInterval": "__MISSING__:Refresh Interval", + "ruleModeDescription": "__MISSING__:Rule Mode Description" }, "bulkHealthcheck": "Verificação de integridade em massa", "bulkHealthcheckDesc": "Teste todos os proxies configurados contra uma URL de destino para encontrar quais funcionam.", @@ -6743,11 +6746,11 @@ "vercelRelayTokenRequired": "Token obrigatório", "vercelRelayDeployFailed": "Falha no deploy", "vercelRelayTokenHint": "O token é usado apenas durante o deploy e nunca é armazenado.", - "denoRelayTokenRequired": "O token do Deno Deploy é obrigatório", - "denoRelayOrgDomainRequired": "O domínio da organização é obrigatório", - "denoRelayDeployFailed": "Falha no Deno Deploy", - "denoRelayTokenHint": "Token da organização (prefixo ddo_) de console.deno.com → Organization → Settings → Organization Tokens. Usado uma vez para o deploy e nunca armazenado.", - "denoRelayOrgDomainHint": "O domínio padrão da sua organização no Deno Deploy (ex: acme.deno.net). O relay estará acessível em https://<app-name>.<org-slug>.deno.net.", + "denoRelayTokenRequired": "__MISSING__:Deno Deploy token is required", + "denoRelayOrgDomainRequired": "__MISSING__:Organization domain is required", + "denoRelayDeployFailed": "__MISSING__:Deno Deploy failed", + "denoRelayTokenHint": "__MISSING__:Organization token (prefix ddo_) from console.deno.com → Organization → Settings → Organization Tokens. Used once for deploy and never stored.", + "denoRelayOrgDomainHint": "__MISSING__:Your Deno Deploy organization's default domain (e.g. acme.deno.net). The relay will be reachable at https://..deno.net.", "proxyFreePoolFilterProtocol": "Filtrar por protocolo", "proxyFreePoolProtocol": "Protocolo", "proxyFreePoolCountryPlaceholder": "País (ex.: US)", @@ -7063,7 +7066,7 @@ "systemStorage": "Sistema e Armazenamento", "allDataLocal": "Todos os dados armazenados localmente na sua máquina", "databasePath": "Caminho do Banco de Dados", - "export": "Exportar", + "export": "__MISSING__:Export", "exportDatabase": "Exportar Banco de Dados", "exportAll": "Exportar Tudo (.tar.gz)", "importDatabase": "Importar Banco de Dados", @@ -7142,7 +7145,7 @@ "howPricingWorks": "Como os Preços Funcionam", "cacheWrite": "Escrita em Cache", "unsaved": "não salvo", - "resetDefaults": "Restaurar padrões", + "resetDefaults": "Restaurar Padrões", "saveProvider": "Salvar Provedor", "model": "Modelo", "models": "modelos", @@ -7179,11 +7182,11 @@ "adaptiveVolumeRoutingDesc": "Escala conexões dinamicamente com base no volume e pressão na taxa de transferência.", "lkgpToggleTitle": "Last Known Good Provider (LKGP)", "lkgpToggleDesc": "When enabled, the router remembers which provider last served a successful response and tries it first on subsequent requests.", - "echoRequestedModelTitle": "Ecoar nome do modelo solicitado nas respostas", - "echoRequestedModelDesc": "Quando ativado, o campo `model` da resposta ecoa o alias ou nome do combo que o cliente solicitou em vez do nome do modelo upstream. Corrige clientes estritos (por exemplo, Claude Desktop) que rejeitam uma resposta cujo modelo não corresponde à solicitação.", - "webSearchRouteTitle": "Roteamento de pesquisa na web", - "webSearchRouteDesc": "Quando uma solicitação inclui uma ferramenta nativa web_search, roteia toda a solicitação para este modelo em vez do padrão — útil para provedores que não implementam a ferramenta de servidor web_search da Anthropic. Deixe em branco para desativar.", - "webSearchRoutePlaceholder": "ex.: openrouter,anthropic/claude-3.5-sonnet", + "echoRequestedModelTitle": "__MISSING__:Echo requested model name in responses", + "echoRequestedModelDesc": "__MISSING__:When enabled, the response `model` field echoes the alias or combo name the client requested instead of the upstream model name. Fixes strict clients (e.g. Claude Desktop) that reject a response whose model does not match the request.", + "webSearchRouteTitle": "__MISSING__:Web search routing", + "webSearchRouteDesc": "__MISSING__:When a request includes a native web_search tool, route the whole request to this model instead of the default — useful for providers that don't implement Anthropic's web_search server tool. Leave blank to disable.", + "webSearchRoutePlaceholder": "__MISSING__:e.g. openrouter,anthropic/claude-3.5-sonnet", "paidModelPatternWarning": "Este padrão corresponde apenas a modelos pagos — habilite modelos pagos ou ajuste o padrão.", "clearLkgpCache": "Clear LKGP Cache", "lkgpCacheCleared": "LKGP cache cleared successfully", @@ -7196,7 +7199,7 @@ "purgeLogsFailed": "Falha ao purgar logs", "logsDeleted": "{count, plural, =0 {Nenhum log expirado removido} one {# log expirado removido} other {# logs expirados removidos}}", "resetUsageData": "Redefinir dados de uso", - "resetUsageDataDesc": "Selecione até onde você deseja excluir dados de uso, logs de solicitação e dados de análise. A configuração do provedor, conexões, chaves de API, combinações e configurações são preservadas. Esta ação não pode ser desfeita.", + "resetUsageDataDesc": "Selecione quanto tempo no passado você deseja excluir dados de uso. Esta ação não pode ser desfeita.", "resetUsagePeriod_5m": "5 minutos", "resetUsagePeriod_1h": "1 hora", "resetUsagePeriod_3h": "3 horas", @@ -7272,16 +7275,16 @@ "compressionGuidanceHide": "Ocultar detalhes", "compressionGuidanceSafeDefault": "Padrão seguro", "compressionGuidanceCacheImpact": "Impacto no cache", - "tokenSaverTitle": "Economizador de Tokens", - "tokenSaverSubtitle": "Gaste menos tokens em cada solicitação.", - "tokenSaverToolOutput": "Saída da ferramenta", - "tokenSaverToolOutputDesc": "Limpar a saída de git, grep, ls, tree e log antes que ela chegue ao provedor.", - "tokenSaverLlmOutput": "Saída do LLM", - "tokenSaverLlmOutputDesc": "Injetar instruções de resposta concisas sem reescrever a saída do provedor.", - "tokenSaverInputCompression": "Compressão de entrada", - "tokenSaverInputCompressionDesc": "Reescrever o histórico de chat elegível preservando o código, URLs e a intenção.", - "tokenSaverFineTunePrefix": "Fazer ajuste fino de cada mecanismo em", - "tokenSaverFineTuneSuffix": "ou combinar mecanismos por solicitação em", + "tokenSaverTitle": "__MISSING__:Token Saver", + "tokenSaverSubtitle": "__MISSING__:Spend fewer tokens on every request.", + "tokenSaverToolOutput": "__MISSING__:Tool output", + "tokenSaverToolOutputDesc": "__MISSING__:Clean git, grep, ls, tree, and log output before it reaches the provider.", + "tokenSaverLlmOutput": "__MISSING__:LLM output", + "tokenSaverLlmOutputDesc": "__MISSING__:Inject terse response instructions without rewriting provider output.", + "tokenSaverInputCompression": "__MISSING__:Input compression", + "tokenSaverInputCompressionDesc": "__MISSING__:Rewrite eligible chat history while preserving code, URLs, and intent.", + "tokenSaverFineTunePrefix": "__MISSING__:Fine-tune each engine on", + "tokenSaverFineTuneSuffix": "__MISSING__:or combine engines per request on", "compressionMode": "Compression Mode", "compressionModeOff": "Off", "compressionModeOffDesc": "No compression applied", @@ -7301,11 +7304,11 @@ "compressionUltraMinScore": "Minimum Score Threshold", "compressionUltraSlmFallback": "Fallback to Aggressive", "compressionUltraModelPath": "SLM Model Path", - "compressionUltraEngine": "Nível Ultra", - "compressionUltraEngineHeuristic": "Heuristic (Tier-A, default)", - "compressionUltraEngineSlm": "SLM (LLMLingua-2, opt-in)", - "compressionUltraSlmHint": "SLM downloads a small ONNX model on first use (cold-start) and transparently falls back to the heuristic on timeout or if unavailable.", - "compressionUltraSlmPrewarm": "Pre-warm SLM model on enable", + "compressionUltraEngine": "__MISSING__:Ultra tier", + "compressionUltraEngineHeuristic": "__MISSING__:Heuristic (Tier-A, default)", + "compressionUltraEngineSlm": "__MISSING__:SLM (LLMLingua-2, opt-in)", + "compressionUltraSlmHint": "__MISSING__:SLM downloads a small ONNX model on first use (cold-start) and transparently falls back to the heuristic on timeout or if unavailable.", + "compressionUltraSlmPrewarm": "__MISSING__:Pre-warm SLM model on enable", "compressionSummarizerEnabled": "Enable Summarizer", "compressionMaxTokensPerMessage": "Max Tokens Per Message", "compressionMinSavings": "Min Savings Threshold", @@ -7510,81 +7513,81 @@ "resilienceNo": "Não", "resilienceDefault": "Default", "storageDatabaseBackupRetention": "Retenção de backup de banco de dados", - "storageDatabaseBackups": "Database backups", - "storageBackupRetentionDescription": "Automatic SQLite backups are stored in", - "storageBackupRetentionHelp": "Configure how many snapshots to keep and optionally delete backups older than a chosen number of days.", + "storageDatabaseBackups": "__MISSING__:Database backups", + "storageBackupRetentionDescription": "Os backups automáticos do SQLite são armazenados em", + "storageBackupRetentionHelp": "Configure quantos snapshots manter e, opcionalmente, exclua backups mais antigos que um número escolhido de dias.", "storageBackupCount": "{count} backups", - "storageBackupMaximum": "Max {count}", - "storageBackupAgeRetention": "{count}d retention", - "storageBackupAgeRetentionOff": "Age retention off", - "storageBackupKeepLatest": "Keep latest backups", - "storageBackupDeleteOlderThan": "Delete older than days", - "storageBackupSaveRetention": "Save retention", - "storageBackupCleanOld": "Clean old backups", - "storageDatabaseStatistics": "Database Statistics", - "storageIntegrityNotChecked": "Not checked", - "backupRetentionSaved": "Backup retention saved.", - "backupRetentionSaveFailed": "Failed to save backup retention", - "backupCleanupSuccess": "Deleted {backups} backup set(s) and {files} file(s).", - "backupCleanupFailed": "Failed to clean database backups", - "purgeQuotaSnapshotsSuccess": "Purged {count} quota snapshots", - "purgeQuotaSnapshotsFailed": "Failed to purge quota snapshots", - "purgeCallLogsSuccess": "Purged {count} call logs", - "purgeCallLogsFailed": "Failed to purge call logs", - "purgeDetailedLogsSuccess": "Purged {count} detailed logs", - "purgeDetailedLogsFailed": "Failed to purge detailed logs", - "vacuumCompleted": "VACUUM completed", - "vacuumFailed": "VACUUM failed", - "jsonExportFailed": "JSON export failed", - "invalidJsonFileType": "Invalid file type. Only .json files are allowed.", - "legacyJsonImportSuccess": "Legacy JSON imported successfully!", - "jsonImportFailed": "Failed to import JSON", - "jsonImportError": "Error during JSON import", + "storageBackupMaximum": "Máx. {count}", + "storageBackupAgeRetention": "retenção de {count}d", + "storageBackupAgeRetentionOff": "Retenção por idade desligada", + "storageBackupKeepLatest": "Manter os backups mais recentes", + "storageBackupDeleteOlderThan": "Excluir mais antigos que (dias)", + "storageBackupSaveRetention": "Salvar retenção", + "storageBackupCleanOld": "Limpar backups antigos", + "storageDatabaseStatistics": "Estatísticas do Banco de Dados", + "storageIntegrityNotChecked": "Não verificado", + "backupRetentionSaved": "Retenção de backup salva.", + "backupRetentionSaveFailed": "Falha ao salvar retenção de backup", + "backupCleanupSuccess": "Excluído(s) {backups} conjunto(s) de backup e {files} arquivo(s).", + "backupCleanupFailed": "Falha ao limpar backups do banco de dados", + "purgeQuotaSnapshotsSuccess": "{count} snapshots de cota removidos", + "purgeQuotaSnapshotsFailed": "Falha ao remover snapshots de cota", + "purgeCallLogsSuccess": "{count} logs de chamadas removidos", + "purgeCallLogsFailed": "Falha ao remover logs de chamadas", + "purgeDetailedLogsSuccess": "{count} logs detalhados removidos", + "purgeDetailedLogsFailed": "Falha ao remover logs detalhados", + "vacuumCompleted": "VACUUM concluído", + "vacuumFailed": "Falha no VACUUM", + "jsonExportFailed": "Falha na exportação de JSON", + "invalidJsonFileType": "Tipo de arquivo inválido. Apenas arquivos .json são permitidos.", + "legacyJsonImportSuccess": "JSON legado importado com sucesso!", + "jsonImportFailed": "Falha ao importar JSON", + "jsonImportError": "Erro durante a importação de JSON", "storagePurgeData": "Limpar dados", - "storagePurgeDataDesc": "Immediately delete all records without applying retention checks. Use with caution.", - "storageRetentionCleanup": "Retention Settings", - "storageRetentionCleanupDesc": "Configure operational record retention and database backup cleanup.", - "retentionCallDays": "Call {count}d", - "retentionAppDays": "App {count}d", - "retentionRows": "{count} rows", + "storagePurgeDataDesc": "__MISSING__:Immediately delete all records without applying retention checks. Use with caution.", + "storageRetentionCleanup": "__MISSING__:Retention Settings", + "storageRetentionCleanupDesc": "__MISSING__:Configure operational record retention and database backup cleanup.", + "retentionCallDays": "__MISSING__:Call {count}d", + "retentionAppDays": "__MISSING__:App {count}d", + "retentionRows": "__MISSING__:{count} rows", "retentionQuotaSnapshots": "Instantâneos de cota (dias)", - "retentionCompressionAnalytics": "Análise de compressão (dias)", + "retentionCompressionAnalytics": "__MISSING__:Compression Analytics (days)", "retentionMcpAudit": "Auditoria MCP (dias)", "retentionA2aEvents": "Eventos A2A (dias)", "retentionCallLogs": "Registros de chamadas (dias)", "retentionUsageHistory": "Histórico de uso (dias)", "retentionMemoryEntries": "Entradas de memória (dias)", "retentionXpAuditLog": "Log de Auditoria de XP (dias)", - "saveRetentionSettings": "Salvar configurações de retenção", + "saveRetentionSettings": "__MISSING__:Save retention settings", "storageAutoVacuumMode": "Modo de vácuo automático", "storageScheduledVacuum": "Vácuo programado", "storageVacuumHour": "Hora de Vácuo (0-23)", "storagePageSize": "Tamanho da página (bytes)", - "storageOptimizationSettings": "Configurações de otimização", + "storageOptimizationSettings": "Configurações de Otimização", "storageJournalModeNone": "Nenhum", - "storageJournalModeFull": "Completo", + "storageJournalModeFull": "Completa", "storageJournalModeIncremental": "Incremental", "storageVacuumNever": "Nunca", "storageVacuumDaily": "Diário", "storageVacuumWeekly": "Semanal", "storageVacuumMonthly": "Mensal", - "storageCacheSizeKb": "Tamanho do cache (KB)", - "storageOptimizeOnStartup": "Otimizar na inicialização", - "storageSaveOptimization": "Salvar configurações de otimização", - "storageCompressionAggregation": "Configurações de compressão e agregação", - "storageEnableAggregation": "Ativar agregação de dados", - "storageRawDataRetention": "Retenção de dados brutos (dias)", + "storageCacheSizeKb": "Tamanho do Cache (KB)", + "storageOptimizeOnStartup": "Otimizar na Inicialização", + "storageSaveOptimization": "Salvar Configurações de Otimização", + "storageCompressionAggregation": "Configurações de Compressão e Agregação", + "storageEnableAggregation": "Ativar Agregação de Dados", + "storageRawDataRetention": "Retenção de Dados Brutos (dias)", "storageGranularity": "Granularidade", "storageHourly": "Por hora", "storageDaily": "Diário", "storageWeekly": "Semanal", - "storageSaveAggregation": "Salvar configurações de agregação", + "storageSaveAggregation": "Salvar Configurações de Agregação", "exportJson": "Exportar JSON", "importJson": "Importar JSON", - "manualVacuum": "VACUUM manual", - "purgeQuotaSnapshots": "Limpar snapshots de cota", - "purgeCallLogs": "Limpar logs de chamadas", - "purgeDetailedLogs": "Limpar logs detalhados", + "manualVacuum": "VACUUM Manual", + "purgeQuotaSnapshots": "Remover Snapshots de Cota", + "purgeCallLogs": "Remover Logs de Chamadas", + "purgeDetailedLogs": "Remover Logs Detalhados", "storageDatabaseSize": "Tamanho do banco de dados", "storagePageCount": "Contagem de páginas", "storageFreelistCount": "Contagem de lista livre", @@ -7594,9 +7597,9 @@ "storageIntegrityOk": "✓ OK", "storageIntegrityError": "✗ Erro", "storageUsageTokenBuffer": "Buffer de token de uso", - "storageUsageTokenBufferDesc": "Tokens extras adicionados ao uso relatado para compensar a sobrecarga do prompt do sistema.", - "storageUsageTokenBufferHint": "Defina como 0 para relatar a contagem bruta de tokens do provedor. Padrão: 2000.", - "storageUsageTokenBufferCurrent": "Atual: {value}", + "storageUsageTokenBufferDesc": "__MISSING__:Extra tokens added to reported usage to account for system prompt overhead.", + "storageUsageTokenBufferHint": "__MISSING__:Set to 0 to report raw provider token counts. Default: 2000.", + "storageUsageTokenBufferCurrent": "__MISSING__:Current: {value}", "redisLauncherTitle": "Redis local", "redisLauncherDesc": "Inicie com um clique um contêiner Redis 7 (Podman ou Docker) para cache de resposta, controle de cota e limitação de taxa.", "redisLauncherRefresh": "Atualizar", @@ -7610,35 +7613,35 @@ "redisLauncherHint": "Equivalente a executar `omniroute redis up`. O contêiner é chamado `omniroute-redis` e escuta em 127.0.0.1:6379.", "compressionSettingsAutoTriggerMode": "Modo de disparo automático", "compressionSettingsMcpDescriptionCompression": "Compressão de descrição MCP", - "mcpAccessibilityTitle": "Saída de acessibilidade do MCP", + "mcpAccessibilityTitle": "__MISSING__:MCP accessibility output", "compressionSettingsCavemanIntensity": "Intensidade do homem das cavernas", "compressionSettingsCavemanOutputMode": "Modo de saída do homem das cavernas", - "compressionSettingsOutputStyles": "Estilos de saída", - "compressionStylesTileTitle": "Estilos de saída", + "compressionSettingsOutputStyles": "__MISSING__:Output styles", + "compressionStylesTileTitle": "__MISSING__:Output styles", "compressionSettingsOutputIntensity": "Intensidade de saída", "compressionSettingsAutoClarityBypass": "Desvio de clareza automática", "compressionEffectivePipeline": "Pipeline efetivo:", - "compressionDerivedOff": "desativado", - "compressionDerivedRuns": "execuções: {pipeline}", + "compressionDerivedOff": "desligado", + "compressionDerivedRuns": "executa: {pipeline}", "compressionDerivedMode": "modo: {mode}", - "compressionAdaptiveOff": "Orçamento de contexto adaptativo: desativado (acionamento automático legado)", - "compressionAdaptiveTarget": "Adaptativo ({mode}, política: {policy}) — meta ≈ {target, number} tokens (para uma janela de {contextLimit, number} tokens)", - "compressionOutputStylesDescription": "Injete instruções de modelagem de resposta sem reescrever a saída do provedor. Combine livremente.", - "mcpAccessibilityDescription": "Define o escopo das saídas de ferramentas MCP (armazenamento separado).", + "compressionAdaptiveOff": "Orçamento de contexto adaptativo: desligado (auto-gatilho legado)", + "compressionAdaptiveTarget": "Adaptativo ({mode}, política: {policy}) — alvo ≈ {target, number} tokens (para uma janela de {contextLimit, number} tokens)", + "compressionOutputStylesDescription": "Injeta instruções de modelagem de resposta sem reescrever a saída do provedor. Combine livremente.", + "mcpAccessibilityDescription": "Delimita o escopo das saídas de ferramentas MCP (armazenamento separado).", "compressionStylesTileSummary": "{tokens, number} tokens economizados · {runs, plural, one {# execução estilizada} other {# execuções estilizadas}}", - "compressionStylesTileEmpty": "Nenhuma execução estilizada ainda.", + "compressionStylesTileEmpty": "Ainda não há execuções estilizadas.", "compressionLevel": { - "minimal": "Mínimo", + "minimal": "Minima", "standard": "Padrão", - "aggressive": "Agressivo", + "aggressive": "Aggressive", "lite": "Lite", - "full": "Completo", + "full": "Completa", "ultra": "Ultra" }, "compressionEngine": { "session-dedup": { - "label": "Desduplicação de sessão", - "description": "Desduplicação de blocos entre turnos." + "label": "Session Dedup", + "description": "Deduplicação de blocos entre turnos." }, "ccr": { "label": "CCR (Recuperação)", @@ -7650,7 +7653,7 @@ }, "rtk": { "label": "RTK", - "description": "Filtragem de saída de comandos." + "description": "Filtragem de saída de comando." }, "codex-responses": { "label": "Responses Tool Output", @@ -7658,18 +7661,18 @@ }, "headroom": { "label": "Headroom", - "description": "Compactação de JSON tabular." + "description": "Compactação tabular de JSON." }, "relevance": { "label": "Relevância", - "description": "Pontuação extrativa de sentenças em relação à última consulta do usuário." + "description": "Pontuação extrativa de frases em relação à última consulta do usuário." }, "caveman": { "label": "Caveman", "description": "Compressão de prosa baseada em regras." }, "aggressive": { - "label": "Agressivo", + "label": "Aggressive", "description": "Resume e envelhece turnos antigos." }, "llmlingua": { @@ -7688,11 +7691,11 @@ "compressionOutputStyle": { "terse-prose": { "label": "Prosa concisa", - "description": "Remove preenchimentos, artigos e rodeios mantendo a substância técnica exata." + "description": "Remove enchimento, artigos e ressalvas, mantendo a substância técnica exata." }, "less-code": { "label": "Menos código", - "description": "Escada YAGNI: menor alteração funcional, sem abstrações não solicitadas." + "description": "Escada YAGNI: menor mudança funcional, sem abstrações não solicitadas." }, "ponytail": { "label": "Ponytail (lazy senior dev)", @@ -7700,7 +7703,7 @@ }, "terse-cjk": { "label": "CJK conciso (文言)", - "description": "Estilo ultraconciso em chinês clássico (disponível apenas para chinês)." + "description": "Estilo ultra-conciso em chinês clássico (disponível apenas para chinês)." } }, "resilienceWaitForCooldown": "Aguarde o resfriamento", @@ -7716,9 +7719,9 @@ "cliproxyapiUrl": "URL CLIProxyAPI", "cliproxyapiStatus": "Status CLIProxyAPI", "cliproxyapiNotDetected": "Não detectado", - "cliproxyapiImportAuthTitle": "Importar contas do CLIProxyAPI", - "cliproxyapiImportAuthDesc": "Importe as contas OAuth que o CLIProxyAPI já salvou em ~/.cli-proxy-api/ como conexões do OmniRoute, para que você não precise fazer login em cada conta novamente. Os tipos de conta compatíveis (Gemini, Codex, Claude, Antigravity, Qwen, Kimi) são importados; os outros são ignorados.", - "cliproxyapiImportAuthButton": "Importar contas", + "cliproxyapiImportAuthTitle": "__MISSING__:Import accounts from CLIProxyAPI", + "cliproxyapiImportAuthDesc": "__MISSING__:Import the OAuth accounts CLIProxyAPI already saved in ~/.cli-proxy-api/ as OmniRoute connections, so you don't have to log in to each account again. Supported account types (Gemini, Codex, Claude, Antigravity, Qwen, Kimi) are imported; others are skipped.", + "cliproxyapiImportAuthButton": "__MISSING__:Import accounts", "payloadRulesTitle": "Regras de carga útil", "payloadRulesDesc": "Configure mutações de carga útil de solicitação por modelo e protocolo. As alterações são persistidas nas configurações e recarregadas no runtime imediatamente após o salvamento.", "payloadRuleDefaultTitle": "padrão (default)", @@ -7751,7 +7754,7 @@ "maxResponseTokensDesc": "Total máximo de tokens permitidos em uma única resposta.", "modelCooldownsTitle": "Modelos em espera", "modelCooldownsEmpty": "Nenhum modelo em espera no momento.", - "modelCooldownsDescription": "Modelos temporariamente isolados após uma falha. Quando o cooldown expirar, eles voltam automaticamente.", + "modelCooldownsDescription": "Modelos temporariamente isolados após uma falha. Quando o cooldown expira, eles voltam automaticamente.", "modelCooldownsLoadFailed": "Falha ao carregar cooldowns", "modelCooldownReactivated": "Modelo reativado: {model}", "modelCooldownClearFailed": "Falha ao limpar cooldown", @@ -7760,14 +7763,14 @@ "modelCooldownsReactivateAll": "Reativar todos", "modelCooldownsReasonRemaining": "motivo: {reason} • restante: {remaining}", "modelCooldownsReactivate": "Reativar", - "responsesStateTitle": "Estado de Responses", - "responsesStateDesc": "Controle como o OmniRoute encaminha o previous_response_id.", - "responsesStateModeLabel": "Tratamento de previous_response_id", - "responsesStateModeAuto": "Auto", - "responsesStateModeStrip": "Remover", - "responsesStateModePreserve": "Preservar", - "responsesStateHint": "Auto remove o previous_response_id a menos que uma conexão habilite explicitamente o armazenamento do OpenAI Responses. Remover é o mais seguro para clientes sem estado, como o VS Code Custom Endpoint; o contexto então depende do envio do histórico completo pelo cliente.", - "responsesStateSaveError": "Falha ao atualizar a configuração de estado de Responses", + "responsesStateTitle": "__MISSING__:Responses State", + "responsesStateDesc": "__MISSING__:Control how OmniRoute forwards previous_response_id.", + "responsesStateModeLabel": "__MISSING__:previous_response_id handling", + "responsesStateModeAuto": "__MISSING__:Auto", + "responsesStateModeStrip": "__MISSING__:Strip", + "responsesStateModePreserve": "__MISSING__:Preserve", + "responsesStateHint": "__MISSING__:Auto strips previous_response_id unless a connection explicitly enables OpenAI Responses storage. Strip is safest for stateless clients such as VS Code Custom Endpoint; context then depends on the client sending full history.", + "responsesStateSaveError": "__MISSING__:Failed to update Responses state setting", "codexFastTierTitle": "Camada rápida do Codex", "codexFastTierDesc": "Injete globalmente service_tier=priority para solicitações do OpenAI Codex.", "codexFastTierHint": "Quando habilitado, o OmniRoute adiciona service_tier=priority às solicitações de saída do Codex para conexões que ainda não especificam uma camada. O nível de prioridade requer uma chave de API OpenAI Enterprise ou o caminho ChatGPT-auth Codex; outros tipos de chave receberão um erro relacionado ao nível do OpenAI. As configurações por conexão na página do provedor Codex têm precedência.", @@ -7886,23 +7889,23 @@ "resilienceEnableServerWaitDesc": "Quando ativado, o OmniRoute aguarda o primeiro resfriamento expirar e tenta novamente automaticamente.", "resilienceMaxAttempts": "Máximo de tentativas", "resilienceMaxWaitPerAttempt": "Espera máxima por tentativa", - "resilienceComboCooldownWaitTitle": "Tempo de espera do cooldown do combo", - "resilienceComboCooldownWaitDesc": "Para todas as estratégias de combo: aguarde um curto tempo de espera transitório e reenvie em vez de retornar um 429 imediatamente. Nunca aguarda em quota_exhausted.", - "resilienceComboCooldownWaitToggleDesc": "Todas as estratégias de combo; nunca espera pelo quota_exhausted.", + "resilienceComboCooldownWaitTitle": "Espera de cooldown do combo de cota compartilhada", + "resilienceComboCooldownWaitDesc": "Somente para combos de cota compartilhada: aguarda um cooldown transitório curto e reenvia em vez de retornar um 429 imediatamente. Nunca espera em quota_exhausted.", + "resilienceComboCooldownWaitToggleDesc": "Somente combos de cota compartilhada; nunca espera em quota_exhausted.", "resilienceComboCooldownMaxWaitMs": "Espera máxima por tentativa", "resilienceComboCooldownBudgetMs": "Orçamento total de espera", "resilienceQuotaShareConcurrencyTitle": "Concorrência por conexão de cota compartilhada", "resilienceQuotaShareConcurrencyDesc": "Somente para combos de cota compartilhada: quando uma conexão define um limite de Concorrência Máxima, serializa as requisições concorrentes para essa conta de assinatura para que nunca seja inundada além do teto. Requisições excedentes esperam na fila em vez de receber um 429. O limite vem do campo Concorrência Máxima de cada conexão; este botão apenas habilita ou desabilita seu respeito.", "resilienceQuotaShareConcurrencyToggleDesc": "Somente combos de cota compartilhada; respeita o limite de Concorrência Máxima de cada conexão.", - "resilienceProviderCooldownTitle": "Cooldown do provedor", - "resilienceProviderCooldownScope": "Todas as requisições combo", - "resilienceProviderCooldownTrigger": "Quando um provedor/conexão falha", - "resilienceProviderCooldownEffect": "Ignora o provedor com falha por um período de cooldown antes de tentar novamente", - "resilienceProviderCooldownDesc": "Evita que requisições subsequentes percorram novamente os mesmos provedores com falha. O cooldown aumenta exponencialmente com falhas consecutivas.", - "resilienceProviderCooldownEnabled": "Ativar cooldown global de provedores", - "resilienceProviderCooldownEnabledDesc": "Quando ativado, os provedores com falha são rastreados globalmente e ignorados por um período de cooldown.", - "resilienceProviderCooldownMin": "Cooldown mínimo", - "resilienceProviderCooldownMax": "Cooldown máximo", + "resilienceProviderCooldownTitle": "__MISSING__:Provider Cooldown", + "resilienceProviderCooldownScope": "__MISSING__:All combo requests", + "resilienceProviderCooldownTrigger": "__MISSING__:When a provider/connection fails", + "resilienceProviderCooldownEffect": "__MISSING__:Skips the failed provider for a cooldown period before retrying", + "resilienceProviderCooldownDesc": "__MISSING__:Prevents subsequent requests from re-walking the same failing providers. Cooldown scales exponentially with consecutive failures.", + "resilienceProviderCooldownEnabled": "__MISSING__:Enable global provider cooldown", + "resilienceProviderCooldownEnabledDesc": "__MISSING__:When enabled, failed providers are tracked globally and skipped for a cooldown period.", + "resilienceProviderCooldownMin": "__MISSING__:Minimum cooldown", + "resilienceProviderCooldownMax": "__MISSING__:Maximum cooldown", "forcedFingerprintTitle": "Sempre ativado para {provider} — necessário para a segurança da conta OAuth; não pode ser desativado.", "forcedFingerprintBadge": "Obrigatório", "sessionAffinityTitle": "Afinidade de sessão", @@ -7924,198 +7927,198 @@ "vercelRelayFreeTierNote": "Relays são endpoints de proxy leves implantados no plano gratuito da Vercel para contornar limitações de rede local/região.", "vercelRelayDeploying": "Implantando...", "vercelRelayDeploy": "Implantar", - "deployRelayButton": "Implantar Relay", - "denoRelayButton": "Implantar Deno Relay", - "denoRelayModalTitle": "Implantar Deno Relay", - "denoRelayWarning": "Aviso: É necessário um token de organização do Deno Deploy. Este token será usado apenas para criar o aplicativo de relay e nunca será armazenado pelo OmniRoute.", - "denoRelayTokenLabel": "Token de organização do Deno Deploy", - "denoRelayOrgDomainLabel": "Domínio da organização", - "denoRelayProjectNameLabel": "Nome do aplicativo Deno", - "denoRelayFreeTierNote": "O Deno Deploy v2 é executado em uma rede edge global. Nível gratuito: 1M de requisições e 100GiB de tráfego de saída por mês, sem limites de CPU por requisição, até 20 aplicativos ativos e 50 domínios personalizados.", - "denoRelayDeploying": "Implantando...", - "denoRelayDeploy": "Implantar", - "cloudflareRelaySuccess": "Cloudflare Relay implantado com sucesso", - "cloudflareRelayButton": "Implantar Cloudflare Relay", - "cloudflareRelayModalTitle": "Implantar Cloudflare Worker Relay", - "cloudflareRelayWarning": "Implanta um Cloudflare Worker que faz proxy de requisições de LLM através da rede edge da Cloudflare — mascarando o IP do host atrás de endereços dinâmicos da Cloudflare. O Worker impõe um segredo de autenticação de uso único para que a URL pública workers.dev não possa ser reutilizada como um relay aberto.", - "cloudflareRelayTokenHowto": "Crie o token de API em Meu perfil -> Tokens de API -> Criar token -> Token personalizado -> Conta / Scripts do Workers / Editar.", - "cloudflareRelayAccountIdLabel": "ID da conta Cloudflare", - "cloudflareRelayAccountIdHint": "Encontrado no lado direito da página de visão geral do painel da Cloudflare.", - "cloudflareRelayApiTokenLabel": "Token de API da Cloudflare", - "cloudflareRelayApiTokenHint": "Requer a permissão 'Workers Scripts: Edit'. O token é usado apenas no momento da implantação e nunca é armazenado.", - "cloudflareRelayProjectNameLabel": "Nome do Worker", - "cloudflareRelayFreeTierNote": "Plano gratuito: 100.000 requisições/dia por conta Cloudflare.", - "cloudflareRelayDeploying": "Implantando...", - "cloudflareRelayDeploy": "Implantar", - "cloudflareRelayCredsRequired": "O ID da conta e o Token de API são obrigatórios", - "cloudflareRelayDeployFailed": "Falha na implantação", - "modelLockout": "Bloqueio de modelo", - "modelLockoutPageDescription": "Configure quais códigos de erro HTTP acionam o bloqueio por modelo e controle o comportamento do cooldown.", - "modelLockoutLoadFailed": "Falha ao carregar as configurações de bloqueio de modelo", - "modelLockoutSaveFailed": "Falha ao salvar as configurações de bloqueio de modelo", + "deployRelayButton": "__MISSING__:Deploy Relay", + "denoRelayButton": "__MISSING__:Deploy Deno Relay", + "denoRelayModalTitle": "__MISSING__:Deploy Deno Relay", + "denoRelayWarning": "__MISSING__:Warning: A Deno Deploy organization token is required. This token will only be used to create the relay app and will never be stored by OmniRoute.", + "denoRelayTokenLabel": "__MISSING__:Deno Deploy Organization Token", + "denoRelayOrgDomainLabel": "__MISSING__:Organization Domain", + "denoRelayProjectNameLabel": "__MISSING__:Deno App Name", + "denoRelayFreeTierNote": "__MISSING__:Deno Deploy v2 runs on a global edge network. Free tier: 1M requests & 100GiB outbound traffic per month, no per-request CPU limits, up to 20 active apps & 50 custom domains.", + "denoRelayDeploying": "__MISSING__:Deploying...", + "denoRelayDeploy": "__MISSING__:Deploy", + "cloudflareRelaySuccess": "__MISSING__:Cloudflare Relay deployed successfully", + "cloudflareRelayButton": "__MISSING__:Deploy Cloudflare Relay", + "cloudflareRelayModalTitle": "__MISSING__:Deploy Cloudflare Worker Relay", + "cloudflareRelayWarning": "__MISSING__:Deploys a Cloudflare Worker that proxies LLM requests through Cloudflare's edge network — masking the host IP behind dynamic Cloudflare addresses. The Worker enforces a one-time auth secret so the public workers.dev URL cannot be reused as an open relay.", + "cloudflareRelayTokenHowto": "__MISSING__:Create the API token under My Profile -> API Tokens -> Create Token -> Custom Token -> Account / Workers Scripts / Edit.", + "cloudflareRelayAccountIdLabel": "__MISSING__:Cloudflare Account ID", + "cloudflareRelayAccountIdHint": "__MISSING__:Found on the right side of the Cloudflare dashboard overview page.", + "cloudflareRelayApiTokenLabel": "__MISSING__:Cloudflare API Token", + "cloudflareRelayApiTokenHint": "__MISSING__:Requires 'Workers Scripts: Edit' permission. The token is used only at deploy time and is never stored.", + "cloudflareRelayProjectNameLabel": "__MISSING__:Worker Name", + "cloudflareRelayFreeTierNote": "__MISSING__:Free tier: 100,000 requests/day per Cloudflare account.", + "cloudflareRelayDeploying": "__MISSING__:Deploying...", + "cloudflareRelayDeploy": "__MISSING__:Deploy", + "cloudflareRelayCredsRequired": "__MISSING__:Account ID and API Token are required", + "cloudflareRelayDeployFailed": "__MISSING__:Deploy failed", + "modelLockout": "__MISSING__:Model Lockout", + "modelLockoutPageDescription": "__MISSING__:Configure which HTTP error codes trigger per-model lockout and control the cooldown behavior.", + "modelLockoutLoadFailed": "Falha ao carregar configurações de bloqueio de modelo", + "modelLockoutSaveFailed": "Falha ao salvar configurações de bloqueio de modelo", "modelLockoutLoading": "Carregando configurações de bloqueio de modelo...", - "modelLockoutBaseRangeError": "O Cooldown base deve estar entre 5.000ms e 600.000ms", - "modelLockoutMaxRangeError": "O Cooldown máximo deve estar entre 5.000ms e 3.600.000ms", - "modelLockoutOrderError": "O Cooldown máximo deve ser maior ou igual ao Cooldown base", - "modelLockoutStepsRangeError": "As Etapas máximas de backoff devem estar entre 0 e 20", + "modelLockoutBaseRangeError": "O Cooldown Base deve estar entre 5.000ms e 600.000ms", + "modelLockoutMaxRangeError": "O Cooldown Máximo deve estar entre 5.000ms e 3.600.000ms", + "modelLockoutOrderError": "O Cooldown Máximo deve ser maior ou igual ao Cooldown Base", + "modelLockoutStepsRangeError": "As Etapas Máximas de Backoff devem estar entre 0 e 20", "removeErrorCode": "Remover {code}", "addErrorCode": "Adicionar código de erro...", "suggestions": "Sugestões:", - "modelLockoutMaxCooldownHint": "≥ Cooldown base — 3.600.000ms", - "modelLockoutEnabled": "Ativar bloqueio de modelo", - "modelLockoutEnabledDescription": "Quando ativado, os modelos que falharem com os códigos de erro configurados serão bloqueados temporariamente para evitar loops de repetição.", - "modelLockoutErrorCodes": "Códigos de erro", - "modelLockoutErrorCodesDescription": "Códigos de status HTTP que acionam o bloqueio do modelo. Digite um código e clique em Adicionar ou selecione a partir das sugestões.", - "modelLockoutBaseCooldown": "Cooldown base (ms)", - "modelLockoutBaseCooldownDescription": "Duração inicial do cooldown em milissegundos antes que uma nova tentativa possa ser feita no modelo.", - "modelLockoutMaxCooldown": "Cooldown máximo (ms)", - "modelLockoutMaxCooldownDescription": "Duração máxima do cooldown em milissegundos. Evita bloqueios excessivamente longos.", - "modelLockoutExponentialBackoff": "Backoff exponencial", - "modelLockoutExponentialBackoffDescription": "Quando ativado, cada falha consecutiva aumenta a duração do cooldown exponencialmente.", - "modelLockoutMaxBackoffSteps": "Etapas máximas de backoff", - "modelLockoutMaxBackoffStepsDescription": "Número máximo de etapas de backoff antes que o cooldown pare de aumentar. O limite do Cooldown máximo é atingido primeiro na maioria das configurações, tornando este um teto de segurança para quando o Cooldown máximo for aumentado.", + "modelLockoutMaxCooldownHint": "≥ Cooldown Base — 3.600.000ms", + "modelLockoutEnabled": "__MISSING__:Enable Model Lockout", + "modelLockoutEnabledDescription": "__MISSING__:When enabled, models that fail with configured error codes are temporarily locked to prevent retry loops.", + "modelLockoutErrorCodes": "__MISSING__:Error Codes", + "modelLockoutErrorCodesDescription": "__MISSING__:HTTP status codes that trigger model lockout. Type a code and click Add, or select from suggestions.", + "modelLockoutBaseCooldown": "__MISSING__:Base Cooldown (ms)", + "modelLockoutBaseCooldownDescription": "__MISSING__:Initial cooldown duration in milliseconds before a model can be retried.", + "modelLockoutMaxCooldown": "__MISSING__:Max Cooldown (ms)", + "modelLockoutMaxCooldownDescription": "__MISSING__:Maximum cooldown duration in milliseconds. Prevents excessively long lockouts.", + "modelLockoutExponentialBackoff": "__MISSING__:Exponential Backoff", + "modelLockoutExponentialBackoffDescription": "__MISSING__:When enabled, each consecutive failure increases the cooldown duration exponentially.", + "modelLockoutMaxBackoffSteps": "__MISSING__:Max Backoff Steps", + "modelLockoutMaxBackoffStepsDescription": "__MISSING__:Maximum number of backoff steps before the cooldown stops growing. The Max Cooldown cap is reached first in most configurations, making this a safety ceiling for when Max Cooldown is raised.", "disableSessionStickiness": "Desabilitar fixação de sessão", "disableSessionStickinessDesc": "Combos round-robin e aleatórios alternam para uma conexão diferente a cada requisição, em vez de fixar toda a conversa em uma conexão pelo hash da primeira mensagem. Deixe desativado para preservar acertos de cache de prompt em conversas com múltiplos turnos. Sobrescritas por combo têm prioridade.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", - "credentialRedaction": "Ocultação de credenciais", - "credentialRedactionDesc": "Oculte chaves de API, tokens e segredos do contexto enviado aos provedores e das respostas.", - "enableCredentialRedaction": "Ativar ocultação de credenciais", - "enableCredentialRedactionDesc": "Remove chaves de API, tokens, chaves privadas e JWTs de mensagens, chamadas de ferramentas e respostas.", + "credentialRedaction": "__MISSING__:Credential Redaction", + "credentialRedactionDesc": "__MISSING__:Redact API keys, tokens, and secrets from context sent to providers and from responses.", + "enableCredentialRedaction": "__MISSING__:Enable credential redaction", + "enableCredentialRedactionDesc": "__MISSING__:Scrubs API keys, tokens, private keys, and JWTs from messages, tool calls, and responses.", "pricingAutoSyncDisabled": "Sincronização automática desativada", "pricingAutoSyncEnabled": "Sincronização automática ativada", -"modalityBridgeIntro": "Conecte conteúdo multimodal ao texto antes que ele chegue a modelos apenas de texto. A visão está ativa; o áudio chega com o AudioBridge; o vídeo está no roadmap.", -"modalityBridgeVisionTab": "Visão", -"modalityBridgeAudioTab": "Áudio", -"modalityBridgeVideoTab": "Vídeo", -"modalityBridgeSubTabsAria": "Seções da Ponte de Modalidade", -"modalityBridgeVisionTitle": "Ponte de Visão", -"modalityBridgeVisionDesc": "Descreva imagens com um modelo de visão e continue com o modelo de texto escolhido pelo usuário.", -"modalityBridgeMode": "Modo", -"modalityBridgeModeAuto": "Automático (recomendado)", -"modalityBridgeModeAutoHint": "Heurística legada: redirecionar modelos individuais sem credenciais; descreva de outra forma.", -"modalityBridgeModeDescribe": "Sempre descreva", -"modalityBridgeModeDescribeHint": "O modelo que você escolheu sempre responde; imagens são substituídas por descrições de texto.", -"modalityBridgeModeReroute": "Sempre redirecionar", -"modalityBridgeModeRerouteHint": "Envie toda a solicitação para o melhor modelo com capacidade de visão (retorna para descrever quando nenhum é utilizável).", -"modalityBridgeVisionModel": "Modelo de Visão", -"modalityBridgeVisionModelAuto": "Automático (melhor disponível)", -"modalityBridgeTaskAware": "Descrição ciente da tarefa", -"modalityBridgeTaskAwareDesc": "Inclua a pergunta do usuário como foco para que o modelo de visão descreva o que importa e transcreva o texto visível.", -"modalityBridgePrompt": "Prompt de descrição", -"modalityBridgeAdvanced": "Avançado", -"modalityBridgeTimeoutMs": "Tempo Limite (ms)", -"modalityBridgeMaxImages": "Máx. de imagens por solicitação", -"modalityBridgeCacheEnabled": "Descrições de cache", -"modalityBridgeCacheEnabledDesc": "Reutilizar descrições para imagens idênticas (chaveadas por SHA-256, em memória).", -"modalityBridgeCacheTtlMinutes": "Cache TTL (minutos)", -"modalityBridgeCacheMaxEntries": "Máximo de entradas em cache", -"modalityBridgeStatsBridged": "conectado", -"modalityBridgeStatsCacheHits": "acertos de cache", -"modalityBridgeStatsFailures": "falhas", -"modalityBridgeStatsLastUsed": "último usado", -"modalityBridgeStatsNever": "nunca", -"modalityBridgeTestButton": "Teste com imagem de amostra", -"modalityBridgeTestRunning": "Testando…", -"modalityBridgeTestOk": "Bridge OK — {count} imagem(ns) descrita(s) por {model}", -"modalityBridgeTestReroute": "O Bridge redirecionou a solicitação para {model}", -"modalityBridgeTestNoop": "A ponte não foi ativada (o modelo pode suportar visão nativamente ou a ponte está desativada)", -"modalityBridgeTestError": "Teste falhou: {message}", -"modalityBridgeAudioComingSoon": "A ponte de áudio (fala → texto via /v1/audio/transcriptions) será lançada na próxima versão. As chaves de configuração já estão reservadas.", -"modalityBridgeVideoComingSoon": "A ponte de vídeo (amostragem de quadros + legendagem) está no backlog — veja a issue #9760.", -"modalityBridgeMovedTitle": "Vision Bridge movido", -"modalityBridgeMovedBody": "As configurações do Vision Bridge agora estão na página dedicada do Modality Bridge.", -"modalityBridgeMovedCta": "Abra as configurações do Modality Bridge", -"modalityBridgeAudioTitle": "Ponte de Áudio", -"modalityBridgeAudioDesc": "Transcreva o áudio com um modelo de reconhecimento de fala antes de continuar com o modelo de texto escolhido.", -"modalityBridgeAudioEnabled": "Ativar Ponte de Áudio", -"modalityBridgeAudioEnabledDesc": "Substitua as partes de áudio por transcrições quando o modelo de destino não puder processar áudio.", -"modalityBridgeAudioModel": "Modelo de fala para texto", -"modalityBridgeAudioModelAuto": "Automático (primeiro provedor STT conectado)", -"modalityBridgeAudioMaxClips": "Máx. de clipes de áudio por solicitação", -"modalityBridgeAudioTestButton": "Teste com áudio de amostra", -"modalityBridgeAudioTestRunning": "Testando áudio…", -"modalityBridgeAudioTestOk": "Audio Bridge OK — {count} clipe(s) transcrito(s) por {model}", -"modalityBridgeAudioTestNoop": "O Audio Bridge não foi ativado (o destino pode suportar áudio, nenhum provedor de STT está conectado ou a ponte está desativada)", -"modalityBridgeAudioTestError": "Teste de áudio falhou: {message}", -"modelRoutingDescriptionPlaceholder": "__MISSING__:Route Opus models to frontier combo", -"cliproxyapiFallbackCodes": "__MISSING__:Cliproxyapi Fallback Codes", -"cliproxyapiFallbackDescription": "__MISSING__:Cliproxyapi Fallback Description", -"cliproxyapiHealthLabel": "__MISSING__:Cliproxyapi Health Label", -"cliproxyapiImportFailed": "__MISSING__:Cliproxyapi Import Failed", -"cliproxyapiImportResult": "__MISSING__:Cliproxyapi Import Result", -"cliproxyapiInvalidUrl": "__MISSING__:Cliproxyapi Invalid URL", -"cliproxyapiLifecycleNoticeAfter": "__MISSING__:Cliproxyapi Lifecycle Notice After", -"cliproxyapiLifecycleNoticeBefore": "__MISSING__:Cliproxyapi Lifecycle Notice Before", -"cliproxyapiLifecycleNoticeLink": "__MISSING__:Cliproxyapi Lifecycle Notice Link", -"cliproxyapiPortLabel": "__MISSING__:Cliproxyapi Port Label", -"cliproxyapiStatusLabel": "__MISSING__:Cliproxyapi Status Label", -"cliproxyapiVersionLabel": "__MISSING__:Cliproxyapi Version Label", -"collection": "__MISSING__:Collection", -"errorPage": { + "modalityBridgeIntro": "Conecte conteúdo multimodal ao texto antes que ele chegue a modelos apenas de texto. A visão está ativa; o áudio chega com o AudioBridge; o vídeo está no roadmap.", + "modalityBridgeVisionTab": "Visão", + "modalityBridgeAudioTab": "Áudio", + "modalityBridgeVideoTab": "Vídeo", + "modalityBridgeSubTabsAria": "Seções da Ponte de Modalidade", + "modalityBridgeVisionTitle": "Ponte de Visão", + "modalityBridgeVisionDesc": "Descreva imagens com um modelo de visão e continue com o modelo de texto escolhido pelo usuário.", + "modalityBridgeMode": "Modo", + "modalityBridgeModeAuto": "Automático (recomendado)", + "modalityBridgeModeAutoHint": "Heurística legada: redirecionar modelos individuais sem credenciais; descreva de outra forma.", + "modalityBridgeModeDescribe": "Sempre descreva", + "modalityBridgeModeDescribeHint": "O modelo que você escolheu sempre responde; imagens são substituídas por descrições de texto.", + "modalityBridgeModeReroute": "Sempre redirecionar", + "modalityBridgeModeRerouteHint": "Envie toda a solicitação para o melhor modelo com capacidade de visão (retorna para descrever quando nenhum é utilizável).", + "modalityBridgeVisionModel": "Modelo de Visão", + "modalityBridgeVisionModelAuto": "Automático (melhor disponível)", + "modalityBridgeTaskAware": "Descrição ciente da tarefa", + "modalityBridgeTaskAwareDesc": "Inclua a pergunta do usuário como foco para que o modelo de visão descreva o que importa e transcreva o texto visível.", + "modalityBridgePrompt": "Prompt de descrição", + "modalityBridgeAdvanced": "Avançado", + "modalityBridgeTimeoutMs": "Tempo Limite (ms)", + "modalityBridgeMaxImages": "Máx. de imagens por solicitação", + "modalityBridgeCacheEnabled": "Descrições de cache", + "modalityBridgeCacheEnabledDesc": "Reutilizar descrições para imagens idênticas (chaveadas por SHA-256, em memória).", + "modalityBridgeCacheTtlMinutes": "Cache TTL (minutos)", + "modalityBridgeCacheMaxEntries": "Máximo de entradas em cache", + "modalityBridgeStatsBridged": "conectado", + "modalityBridgeStatsCacheHits": "acertos de cache", + "modalityBridgeStatsFailures": "falhas", + "modalityBridgeStatsLastUsed": "último usado", + "modalityBridgeStatsNever": "nunca", + "modalityBridgeTestButton": "Teste com imagem de amostra", + "modalityBridgeTestRunning": "Testando…", + "modalityBridgeTestOk": "Bridge OK — {count} imagem(ns) descrita(s) por {model}", + "modalityBridgeTestReroute": "O Bridge redirecionou a solicitação para {model}", + "modalityBridgeTestNoop": "A ponte não foi ativada (o modelo pode suportar visão nativamente ou a ponte está desativada)", + "modalityBridgeTestError": "Teste falhou: {message}", + "modalityBridgeAudioComingSoon": "A ponte de áudio (fala → texto via /v1/audio/transcriptions) será lançada na próxima versão. As chaves de configuração já estão reservadas.", + "modalityBridgeVideoComingSoon": "A ponte de vídeo (amostragem de quadros + legendagem) está no backlog — veja a issue #9760.", + "modalityBridgeMovedTitle": "Vision Bridge movido", + "modalityBridgeMovedBody": "As configurações do Vision Bridge agora estão na página dedicada do Modality Bridge.", + "modalityBridgeMovedCta": "Abra as configurações do Modality Bridge", + "modalityBridgeAudioTitle": "Ponte de Áudio", + "modalityBridgeAudioDesc": "Transcreva o áudio com um modelo de reconhecimento de fala antes de continuar com o modelo de texto escolhido.", + "modalityBridgeAudioEnabled": "Ativar Ponte de Áudio", + "modalityBridgeAudioEnabledDesc": "Substitua as partes de áudio por transcrições quando o modelo de destino não puder processar áudio.", + "modalityBridgeAudioModel": "Modelo de fala para texto", + "modalityBridgeAudioModelAuto": "Automático (primeiro provedor STT conectado)", + "modalityBridgeAudioMaxClips": "Máx. de clipes de áudio por solicitação", + "modalityBridgeAudioTestButton": "Teste com áudio de amostra", + "modalityBridgeAudioTestRunning": "Testando áudio…", + "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} clipe(s) transcrito(s) por {model}", + "modalityBridgeAudioTestNoop": "O Audio Bridge não foi ativado (o destino pode suportar áudio, nenhum provedor de STT está conectado ou a ponte está desativada)", + "modalityBridgeAudioTestError": "Teste de áudio falhou: {message}", + "modelRoutingDescriptionPlaceholder": "__MISSING__:Route Opus models to frontier combo", + "cliproxyapiFallbackCodes": "__MISSING__:Cliproxyapi Fallback Codes", + "cliproxyapiFallbackDescription": "__MISSING__:Cliproxyapi Fallback Description", + "cliproxyapiHealthLabel": "__MISSING__:Cliproxyapi Health Label", + "cliproxyapiImportFailed": "__MISSING__:Cliproxyapi Import Failed", + "cliproxyapiImportResult": "__MISSING__:Cliproxyapi Import Result", + "cliproxyapiInvalidUrl": "__MISSING__:Cliproxyapi Invalid URL", + "cliproxyapiLifecycleNoticeAfter": "__MISSING__:Cliproxyapi Lifecycle Notice After", + "cliproxyapiLifecycleNoticeBefore": "__MISSING__:Cliproxyapi Lifecycle Notice Before", + "cliproxyapiLifecycleNoticeLink": "__MISSING__:Cliproxyapi Lifecycle Notice Link", + "cliproxyapiPortLabel": "__MISSING__:Cliproxyapi Port Label", + "cliproxyapiStatusLabel": "__MISSING__:Cliproxyapi Status Label", + "cliproxyapiVersionLabel": "__MISSING__:Cliproxyapi Version Label", + "collection": "__MISSING__:Collection", + "errorPage": { "description": "__MISSING__:We could not load settings right now. Please retry in a few seconds.", "errorId": "__MISSING__:Error ID: {id}", "retry": "__MISSING__:Try Again", "title": "__MISSING__:Failed to load settings" }, -"host": "__MISSING__:Host", -"notInstalled": "__MISSING__:Not installed", -"oneproxyActions": "__MISSING__:Oneproxy Actions", -"oneproxyActive": "__MISSING__:Oneproxy Active", -"oneproxyAnonymity": "__MISSING__:Oneproxy Anonymity", -"oneproxyCountry": "__MISSING__:Oneproxy Country", -"oneproxyDelete": "__MISSING__:Oneproxy Delete", -"oneproxyEmpty": "__MISSING__:Oneproxy Empty", -"oneproxyHost": "__MISSING__:Oneproxy Host", -"oneproxyLatency": "__MISSING__:Oneproxy Latency", -"oneproxyProtocol": "__MISSING__:Oneproxy Protocol", -"oneproxyQuality": "__MISSING__:Oneproxy Quality", -"oneproxySyncFailed": "__MISSING__:Sync failed: {error}", -"oneproxySyncSuccess": "__MISSING__:Synced {total} proxies ({added} new, {updated} updated)", -"proxyDocumentationSocks5DescAfter": "__MISSING__:Proxy Documentation Socks5 Desc After", -"proxyFreePoolAddProxy": "__MISSING__:Proxy Free Pool Add Proxy", -"proxyFreePoolAdding": "__MISSING__:Proxy Free Pool Adding", -"proxyFreePoolSelectProxy": "__MISSING__:Proxy Free Pool Select Proxy", -"proxyStatusActive": "__MISSING__:Proxy Status Active", -"proxyStatusInactive": "__MISSING__:Proxy Status Inactive", -"routingAddEntry": "__MISSING__:Add entry", -"settingSaveFailed": "__MISSING__:Setting Save Failed", -"settingSaved": "__MISSING__:Setting Saved", -"skillsmpApiKeyHintAfter": "__MISSING__:. Rate limit: {limit} requests/day.", -"skillsmpApiKeyHintBefore": "__MISSING__:Get your API key from", -"syncFailed": "__MISSING__:Sync failed", -"unhealthy": "__MISSING__:Unhealthy", -"oneproxyDescription": "__MISSING__:Fetch and rotate free validated proxies from the 1proxy community platform", -"oneproxySyncing": "__MISSING__:Syncing...", -"oneproxySyncNow": "__MISSING__:Sync Now", -"oneproxyClearAll": "__MISSING__:Clear All", -"oneproxyGoogle": "Google", -"oneproxyClearAllConfirm": "__MISSING__:Clear all 1proxy proxies?", -"memorySkillsSkillsmpDescription": "__MISSING__:Connect to SkillsMP to discover and install skills from the marketplace.", -"memorySkillsActiveProviderDescription": "__MISSING__:Choose which provider the Skills page uses for search and install.", -"memorySkillsSkillsmpProviderTitle": "__MISSING__:SkillsMP Marketplace", -"memorySkillsSkillsmpProviderDescription": "__MISSING__:Authenticated marketplace (uses your SkillsMP API key).", -"memorySkillsSkillsshProviderTitle": "__MISSING__:skills.sh Directory", -"memorySkillsSkillsshProviderDescription": "__MISSING__:Public directory provider (no API key required).", -"routingCcBridgeCatalogName": "__MISSING__:Anthropic-compatible CC bridge", -"routingClaudeProviderName": "__MISSING__:Claude (OAuth)", -"routingClaudeProviderDescription": "__MISSING__:Native Claude provider with OAuth-issued tokens.", -"routingCcBridgeName": "__MISSING__:Claude-Code Bridge", -"routingCcBridgeDescription": "__MISSING__:Relay endpoints using API keys (anthropic-compatible-cc-*).", -"routingCustomProviderDescription": "__MISSING__:Custom provider.", -"routingUnknownOpKind": "__MISSING__:Unknown op kind: {kind}", -"routingInvalidJson": "__MISSING__:Invalid JSON: {error}", -"routingConfigMustBeObject": "__MISSING__:Config must be a JSON object", -"routingEnabledMustBeBoolean": "__MISSING__:`enabled` must be true or false", -"routingPipelineMustBeArray": "__MISSING__:`pipeline` must be an array of ops", -"routingPipelineTooLong": "__MISSING__:Pipeline cannot exceed 50 ops", -"routingOpMissingKind": "__MISSING__:Op #{index}: missing or invalid `kind`", -"routingOpUnknownKind": "__MISSING__:Op #{index}: unknown kind \"{kind}\"", -"routingJsonEditorHide": "__MISSING__:Hide JSON editor", -"routingJsonEditorImportExport": "__MISSING__:Import / export JSON", -"routingJsonEditorLabel": "__MISSING__:JSON (edit and apply, or paste to import)", -"routingApplyJson": "__MISSING__:Apply JSON", -"routingTransformsFootnote": "__MISSING__:All transform ops are idempotent on re-run. Changes take effect immediately on the next request." + "host": "__MISSING__:Host", + "notInstalled": "__MISSING__:Not installed", + "oneproxyActions": "__MISSING__:Oneproxy Actions", + "oneproxyActive": "__MISSING__:Oneproxy Active", + "oneproxyAnonymity": "__MISSING__:Oneproxy Anonymity", + "oneproxyCountry": "__MISSING__:Oneproxy Country", + "oneproxyDelete": "__MISSING__:Oneproxy Delete", + "oneproxyEmpty": "__MISSING__:Oneproxy Empty", + "oneproxyHost": "__MISSING__:Oneproxy Host", + "oneproxyLatency": "__MISSING__:Oneproxy Latency", + "oneproxyProtocol": "__MISSING__:Oneproxy Protocol", + "oneproxyQuality": "__MISSING__:Oneproxy Quality", + "oneproxySyncFailed": "__MISSING__:Sync failed: {error}", + "oneproxySyncSuccess": "__MISSING__:Synced {total} proxies ({added} new, {updated} updated)", + "proxyDocumentationSocks5DescAfter": "__MISSING__:Proxy Documentation Socks5 Desc After", + "proxyFreePoolAddProxy": "__MISSING__:Proxy Free Pool Add Proxy", + "proxyFreePoolAdding": "__MISSING__:Proxy Free Pool Adding", + "proxyFreePoolSelectProxy": "__MISSING__:Proxy Free Pool Select Proxy", + "proxyStatusActive": "__MISSING__:Proxy Status Active", + "proxyStatusInactive": "__MISSING__:Proxy Status Inactive", + "routingAddEntry": "__MISSING__:Add entry", + "settingSaveFailed": "__MISSING__:Setting Save Failed", + "settingSaved": "__MISSING__:Setting Saved", + "skillsmpApiKeyHintAfter": "__MISSING__:. Rate limit: {limit} requests/day.", + "skillsmpApiKeyHintBefore": "__MISSING__:Get your API key from", + "syncFailed": "__MISSING__:Sync failed", + "unhealthy": "__MISSING__:Unhealthy", + "oneproxyDescription": "__MISSING__:Fetch and rotate free validated proxies from the 1proxy community platform", + "oneproxySyncing": "__MISSING__:Syncing...", + "oneproxySyncNow": "__MISSING__:Sync Now", + "oneproxyClearAll": "__MISSING__:Clear All", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "__MISSING__:Clear all 1proxy proxies?", + "memorySkillsSkillsmpDescription": "__MISSING__:Connect to SkillsMP to discover and install skills from the marketplace.", + "memorySkillsActiveProviderDescription": "__MISSING__:Choose which provider the Skills page uses for search and install.", + "memorySkillsSkillsmpProviderTitle": "__MISSING__:SkillsMP Marketplace", + "memorySkillsSkillsmpProviderDescription": "__MISSING__:Authenticated marketplace (uses your SkillsMP API key).", + "memorySkillsSkillsshProviderTitle": "__MISSING__:skills.sh Directory", + "memorySkillsSkillsshProviderDescription": "__MISSING__:Public directory provider (no API key required).", + "routingCcBridgeCatalogName": "__MISSING__:Anthropic-compatible CC bridge", + "routingClaudeProviderName": "__MISSING__:Claude (OAuth)", + "routingClaudeProviderDescription": "__MISSING__:Native Claude provider with OAuth-issued tokens.", + "routingCcBridgeName": "__MISSING__:Claude-Code Bridge", + "routingCcBridgeDescription": "__MISSING__:Relay endpoints using API keys (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "__MISSING__:Custom provider.", + "routingUnknownOpKind": "__MISSING__:Unknown op kind: {kind}", + "routingInvalidJson": "__MISSING__:Invalid JSON: {error}", + "routingConfigMustBeObject": "__MISSING__:Config must be a JSON object", + "routingEnabledMustBeBoolean": "__MISSING__:`enabled` must be true or false", + "routingPipelineMustBeArray": "__MISSING__:`pipeline` must be an array of ops", + "routingPipelineTooLong": "__MISSING__:Pipeline cannot exceed 50 ops", + "routingOpMissingKind": "__MISSING__:Op #{index}: missing or invalid `kind`", + "routingOpUnknownKind": "__MISSING__:Op #{index}: unknown kind \"{kind}\"", + "routingJsonEditorHide": "__MISSING__:Hide JSON editor", + "routingJsonEditorImportExport": "__MISSING__:Import / export JSON", + "routingJsonEditorLabel": "__MISSING__:JSON (edit and apply, or paste to import)", + "routingApplyJson": "__MISSING__:Apply JSON", + "routingTransformsFootnote": "__MISSING__:All transform ops are idempotent on re-run. Changes take effect immediately on the next request." }, "contextRtk": { "title": "Motor RTK", @@ -8167,20 +8170,20 @@ "tooltipDedup": "Quão agressivamente remover linhas repetidas.", "tooltipMaxChars": "Máximo de caracteres por bloco de saída.", "tooltipMaxLines": "Máximo de linhas a serem mantidas na saída do comando. O excesso é truncado.", - "learnDiscoverTitle": "Aprender & Descobrir filtros", - "learnDiscoverDesc": "Mine a saída de comando capturada (a retenção de Raw Output deve estar ativada) para sugerir novos filtros RTK. Apenas sugestões — você as revisa e salva.", - "discoverHeading": "Descobrir ruído repetido", - "discoverButton": "Escanear amostras", - "discoverScanning": "Escaneando…", - "discoverEmpty": "Nenhum ruído repetido encontrado. Ative a retenção de Raw Output e execute alguns comandos primeiro.", - "discoverSamples": "{count} amostra(s) escaneada(s)", - "discoverHits": "{hits}× nas amostras", - "learnHeading": "Aprender um filtro para um comando", - "learnCommandPlaceholder": "ex.: npm install", - "learnButton": "Sugerir filtro", - "learnEmpty": "Nenhuma sugestão ainda. Digite um comando que você executou e escaneie.", - "learnSamplesUsed": "Aprendido a partir de {count} amostra(s) correspondente(s)", - "suggestionError": "Não foi possível carregar as sugestões. Verifique a autenticação de gerenciamento e tente novamente.", + "learnDiscoverTitle": "__MISSING__:Learn & Discover filters", + "learnDiscoverDesc": "__MISSING__:Mine your captured command output (Raw Output retention must be on) to suggest new RTK filters. Suggestions only — you review and save them.", + "discoverHeading": "__MISSING__:Discover repeated noise", + "discoverButton": "__MISSING__:Scan samples", + "discoverScanning": "__MISSING__:Scanning…", + "discoverEmpty": "__MISSING__:No repeated noise found. Enable Raw Output retention and run a few commands first.", + "discoverSamples": "__MISSING__:{count} sample(s) scanned", + "discoverHits": "__MISSING__:{hits}× across samples", + "learnHeading": "__MISSING__:Learn a filter for a command", + "learnCommandPlaceholder": "__MISSING__:e.g. npm install", + "learnButton": "__MISSING__:Suggest filter", + "learnEmpty": "__MISSING__:No suggestion yet. Type a command you have run and scan.", + "learnSamplesUsed": "__MISSING__:Learned from {count} matching sample(s)", + "suggestionError": "__MISSING__:Could not load suggestions. Check management auth and try again.", "tomlImportTitle": "Importar filtros TOML do RTK", "tomlImportDesc": "Valide os filtros do esquema TOML v1 do RTK e instale-os globalmente. A instalação grava em DATA_DIR/rtk/filters.toml; arquivos existentes só são substituídos após confirmação explícita.", "tomlChooseFile": "Escolher um arquivo TOML", @@ -8203,22 +8206,22 @@ }, "compressionEngineConfig": { "loading": "Carregando…", - "loadFailed": "Falha ao carregar as informações do mecanismo.", - "engineNotFound": "Mecanismo \"{engine}\" não encontrado.", - "saveFailed": "Falha ao salvar a configuração.", + "loadFailed": "Falha ao carregar informações da engine.", + "engineNotFound": "Engine \"{engine}\" não encontrada.", + "saveFailed": "Falha ao salvar configuração.", "previewFailed": "Falha na pré-visualização.", "panelPointerPrefix": "Ative ou desative esta camada e defina seu nível em", - "compressionSettings": "Configurações de compressão", + "compressionSettings": "Compression Settings", "panelPointerSuffix": ". Esta página edita apenas sua configuração detalhada.", - "configuration": "Configuração", + "configuration": "Configuration", "noAdditionalConfiguration": "Nenhuma configuração adicional.", "save": "Salvar", "saving": "Salvando…", - "globalSettingsOnly": "Esta camada é configurada pelas configurações globais; ainda não há substituição por mecanismo para salvar aqui.", - "preview": "Pré-visualização", - "previewInput": "Entrada da pré-visualização", + "globalSettingsOnly": "Esta camada é configurada pelas configurações globais; ainda não há substituição por engine para salvar aqui.", + "preview": "Visualização", + "previewInput": "Entrada de pré-visualização", "processing": "Processando…", - "previewSample": "A rápida raposa marrom salta sobre o cão preguiçoso. Esta é uma mensagem de exemplo usada para pré-visualizar a compressão. Ela contém texto suficiente para mostrar uma economia significativa de tokens.", + "previewSample": "The quick brown fox jumps over the lazy dog. Esta é uma mensagem de exemplo usada para pré-visualizar a compressão. Ela contém texto suficiente para mostrar uma economia de tokens significativa.", "originalTokens": "Tokens originais", "compressedTokens": "Tokens comprimidos", "savings": "Economia", @@ -8226,9 +8229,9 @@ "compressed": "Comprimido", "diff": "Diff", "last7Days": "Últimos 7 dias", - "noDataYet": "Nenhum dado ainda", + "noDataYet": "Sem dados ainda", "runs": "Execuções", - "tokensSaved": "Tokens economizados", + "tokensSaved": "Tokens salvos", "averageSavings": "Economia média", "diffLabels": { "change": "Alteração", @@ -8242,7 +8245,7 @@ "description": "Compactação tabular sem perdas de arrays JSON homogêneos com marcadores explícitos de contagem de linhas." }, "session-dedup": { - "name": "Deduplicação de sessão", + "name": "Session Dedup", "description": "Deduplicação de blocos entre turnos com marcadores de conteúdo recuperáveis." }, "ccr": { @@ -8250,44 +8253,44 @@ "description": "Marcadores de recuperação endereçados por conteúdo para blocos de contexto repetidos." }, "llmlingua": { - "name": "LLMLingua-2 (Poda semântica)", - "description": "Classificação semântica de tokens baseada em ONNX. Comprime apenas prosa; blocos de código e construções preservadas são protegidos. Falha em modo aberto em caso de erros de modelo ou worker." + "name": "LLMLingua-2 (Poda Semântica)", + "description": "Classificação semântica de tokens baseada em ONNX. Comprime apenas prosa; blocos de código e construções preservadas são protegidos. Falha aberta em caso de erros de modelo ou worker." }, "lite": { - "name": "Leve", - "description": "Redução rápida de espaços em branco, resultados de ferramentas e URLs de imagens." + "name": "Lite", + "description": "Redução rápida de espaços em branco, resultados de ferramentas e URLs de imagem." }, "aggressive": { - "name": "Agressivo", - "description": "Sumarização, compressão de resultados de ferramentas e envelhecimento progressivo." + "name": "Aggressive", + "description": "Resumo, compressão de resultados de ferramentas e envelhecimento progressivo." }, "ultra": { "name": "Ultra", - "description": "Poda heurística de tokens com fallback opcional para SLM local." + "description": "Poda heurística de tokens com fallback opcional para um SLM local." } }, "fields": { "minBlockChars": { - "label": "Mínimo de caracteres do bloco", - "description": "Contagem mínima de caracteres para que um bloco de sufixo seja um candidato à deduplicação." + "label": "Caracteres mínimos por bloco", + "description": "Contagem mínima de caracteres para que um bloco de sufixo seja candidato à deduplicação." }, "fuzzy": { - "label": "Deduplicação difusa de quase duplicados", - "description": "Ative para substituir mensagens inteiras que sejam pelo menos cerca de 85% semelhantes a uma mensagem anterior por um marcador CCR recuperável." + "label": "Deduplicação difusa de quase-duplicatas", + "description": "Opte por substituir mensagens inteiras com pelo menos cerca de 85% de similaridade a uma mensagem anterior por um marcador CCR recuperável." }, "minChars": { - "label": "Mínimo de caracteres do bloco", - "description": "Contagem mínima de caracteres para que um bloco seja um candidato a CCR." + "label": "Caracteres mínimos por bloco", + "description": "Contagem mínima de caracteres para que um bloco seja candidato a CCR." }, "retrievalRampFactor": { "label": "Fator de rampa de recuperação (H8)", - "description": "Controla com que intensidade blocos recuperados frequentemente resistem à compressão. Cada recuperação anterior aumenta o tamanho mínimo efetivo do bloco linearmente; 1 desativa a rampa." + "description": "Controla o quanto blocos recuperados com frequência resistem à compressão. Cada recuperação anterior aumenta linearmente o tamanho mínimo efetivo do bloco; 1 desativa a rampa." }, "model": { "label": "Modelo" }, "minTokens": { - "label": "Mínimo de tokens (piso)" + "label": "Tokens mínimos (piso)" }, "compressionRate": { "label": "Taxa de compressão" @@ -8296,14 +8299,14 @@ "label": "Caminho do modelo" }, "minRows": { - "label": "Mínimo de linhas para compactar", - "description": "Mínimo de linhas em um array JSON homogêneo necessárias para acionar a compactação tabular. Padrão: 8." + "label": "Linhas mínimas para compactar", + "description": "Número mínimo de linhas em um array JSON homogêneo necessário para acionar a compactação tabular. Padrão: 8." }, "preserveSystemPrompt": { - "label": "Preservar prompt do sistema" + "label": "Preservar prompt de sistema" }, "summarizerEnabled": { - "label": "Ativar sumarizador" + "label": "Ativar resumidor" }, "maxTokensPerMessage": { "label": "Máximo de tokens por mensagem" @@ -8315,7 +8318,7 @@ "label": "Limite mínimo de pontuação" }, "slmFallbackToAggressive": { - "label": "Recorrer ao Agressivo" + "label": "Recorrer ao modo Aggressive" }, "intensity": { "label": "Intensidade" @@ -8331,10 +8334,10 @@ "engineFields": { "llmlingua": { "compressionRate": { - "label": "Taxa de compressão (proporção a manter)" + "label": "Taxa de compressão (proporção de retenção)" }, "modelPath": { - "label": "Caminho do modelo (sobrescrever offline)" + "label": "Caminho do modelo (substituição offline)" } } }, @@ -8345,7 +8348,7 @@ }, "intensity": { "lite": "Lite", - "full": "Completo", + "full": "Completa", "ultra": "Ultra" } }, @@ -8382,63 +8385,63 @@ "enabled": "Ativo", "loading": "Carregando…", "hubTitle": "Hub de Compressão", - "hubDescription": "Escolha qual perfil de compressão será executado globalmente.", + "hubDescription": "Escolha qual perfil de compressão é executado globalmente.", "hideExplanation": "Ocultar explicação", "howItWorks": "Como funciona", - "saveSettingsFailed": "Falha ao salvar as configurações.", - "explanationIntro": "A compressão reduz tokens e custos reescrevendo o histórico antes de ser enviado ao provedor, preservando o significado.", - "explanationActiveProfile": "Perfil ativo: escolhe qual perfil de compressão é executado globalmente — o Padrão derivado do painel ou uma de suas combinações nomeadas salvas.", - "explanationDefault": "Padrão (do painel): derivado da chave mestra e das alternâncias por mecanismo que você configura nas Configurações de Compressão.", - "explanationNamedCombos": "Combinações nomeadas: pipelines salvos que você cria no editor de combinações nomeadas. Selecionar um o torna o perfil ativo para cada solicitação.", - "explanationPreview": "Visualização: mostra quais mecanismos o perfil ativo executa, em ordem.", + "saveSettingsFailed": "Falha ao salvar configurações.", + "explanationIntro": "A compressão reduz tokens e custo reescrevendo o histórico antes de enviá-lo ao provedor, preservando o significado.", + "explanationActiveProfile": "Perfil ativo: escolhe qual perfil de compressão é executado globalmente — o Padrão derivado do painel ou um dos seus combos nomeados salvos.", + "explanationDefault": "Padrão (do painel): derivado do interruptor mestre e das alternâncias por engine que você configura em Configurações de Compressão.", + "explanationNamedCombos": "Combos nomeados: pipelines salvos que você cria no editor de combos nomeados. Selecionar um o torna o perfil ativo para cada solicitação.", + "explanationPreview": "Pré-visualização: mostra quais engines o perfil ativo executa, em ordem.", "activeProfile": "Perfil ativo", - "activeProfileDescription": "Escolha qual perfil de compressão é executado globalmente — o Padrão derivado do painel ou uma combinação nomeada salva.", + "activeProfileDescription": "Escolha qual perfil de compressão é executado globalmente — o Padrão derivado do painel ou um combo nomeado salvo.", "defaultFromPanel": "Padrão (do painel)", "runs": "Executa:", "defaultConfiguredPrefix": "Padrão — configurado em", - "compressionSettings": "Configurações de Compressão", + "compressionSettings": "Compression Settings", "providerDelegated": "Compressão delegada ao provedor", "contextEditingClaude": "Edição de Contexto (Claude)", "contextEditingDescription": "Permite que o provedor limpe blocos antigos de uso de ferramentas no lado do servidor, sem reescrever a mensagem.", "contextEditingAria": "Edição de Contexto", - "contextEditingNote": "Atualmente disponível apenas para o Claude (Anthropic). É um modo delegado: o provedor limpa blocos antigos de uso de ferramentas no lado do servidor — nós não reescrevemos a mensagem. Não afeta outros provedores.", - "namedCombos": "Combinações nomeadas", - "namedCombosDescription": "Salve pipelines diferentes e atribua-os a combinações de roteamento específicas.", - "comboNamePlaceholder": "Nome da combinação", - "descriptionPlaceholder": "Descrição", - "nameRequired": "Insira um nome para a combinação antes de salvar.", + "contextEditingNote": "Atualmente disponível apenas para Claude (Anthropic). É um modo delegado: o provedor limpa blocos antigos de uso de ferramentas no lado do servidor — não reescrevemos a mensagem. Não afeta outros provedores.", + "namedCombos": "Combos nomeados", + "namedCombosDescription": "Salve pipelines diferentes e atribua-os a combos de roteamento específicos.", + "comboNamePlaceholder": "Nome do combo", + "descriptionPlaceholder": "Description", + "nameRequired": "Digite um nome de combo antes de salvar.", "pipelineRequired": "Adicione pelo menos uma etapa de pipeline antes de salvar.", - "saveComboFailed": "Falha ao salvar a combinação (HTTP {status}).", - "deleteNamedConfirm": "Excluir combinação “{name}”?", + "saveComboFailed": "Falha ao salvar combo (HTTP {status}).", + "deleteNamedConfirm": "Excluir combo “{name}”?", "intensityLite": "Lite", - "intensityFull": "Completo", + "intensityFull": "Completa", "intensityUltra": "Ultra", "active": "Ativo", "languagePacksList": "Pacotes de idioma: {packs}", "dragToReorder": "Arraste para reordenar a etapa", - "engine": "Mecanismo", + "engine": "Engine", "intensity": "Intensidade" }, "compressionStudio": { "noRun": "Nenhuma execução de compressão disponível.", - "liveDataHint": "Os dados em tempo real chegam pelo canal de compressão WebSocket.", - "cockpitView": "Visualização do cockpit", + "liveDataHint": "Os dados em tempo real chegam pelo canal de compressão via WebSocket.", + "cockpitView": "Visão de cockpit", "canvas": "Canvas", - "waterfall": "Cascata", + "waterfall": "Waterfall", "replayDone": "Replay concluído", "pauseReplay": "Pausar replay", "playReplay": "Reproduzir replay", "pause": "Pausar", "replay": "Replay", - "resetReplay": "Reiniciar replay", + "resetReplay": "Redefinir replay", "stepProgress": "etapa {current}/{total}", "inlineView": "Inline", - "splitComingSoon": "Visualização dividida (em breve)", + "splitComingSoon": "Visão dividida (em breve)", "inputPlaceholder": "Cole um prompt, saída de ferramenta ou contexto…", "activeCombined": "Ativo no fluxo combinado", "requiresOnnx": "requer um modelo ONNX", "verifyFidelity": "Verificar fidelidade (rejeitar qualquer camada que corrompa o conteúdo)", - "fuzzyDedup": "Deduplicação difusa (quase duplicado → CCR)", + "fuzzyDedup": "Deduplicação difusa (quase-duplicata → CCR)", "protectSensitive": "Proteger conteúdo sensível (gate de risco)", "quantumLock": "QuantumLock (estabilizar o prefixo do cache)", "saliencyHeatmap": "Mapa de calor de saliência", @@ -8450,86 +8453,86 @@ "eachLayer": "Cada camada separadamente", "diff": "Diferença", "combined": "combinado", - "skipped": "pular", + "skipped": "ignorado", "input": "ENTRADA", "output": "SAÍDA", "tokenCount": "{count, number} tokens", "tokenShort": "tok", "provider": "Provedor", - "judgeModel": "Modelo juiz", + "judgeModel": "Modelo julgador", "judgeModelPlaceholder": "ex.: claude-haiku", - "maxCostUsd": "Limite em USD", - "enterJudgeModel": "Insira um modelo juiz", + "maxCostUsd": "Teto em USD", + "enterJudgeModel": "Informe um modelo juiz", "verifying": "Verificando…", - "verifyAll": "Verificar todos", + "verifyAll": "Verificar tudo", "spent": "gasto ${spent} / ${cap}", - "capReached": "limite atingido", + "capReached": "teto atingido", "loadAb": "Carregar A/B", - "engine": "Motor", + "engine": "Engine", "savings": "Economia", "retention": "Retenção", "outputTokensShort": "Tokens de saída", "fidelity": "Fidelidade", - "playTab": "Executar", + "playTab": "Reproduzir", "compareTab": "Comparar", - "encoderComparison": "Codificador A/B — {count} array(s)", + "encoderComparison": "Encoder A/B — {count} array(s)", "encoderWinner": "vencedor: {winner}", - "encoder": "codificador", + "encoder": "encoder", "bytes": "bytes", "tokensCl100k": "tokens (cl100k)" }, "omniglyph": { "preview": "Visualização", - "description": "Compressão de contexto como imagem. Renderiza o prompt do sistema, a documentação da ferramenta e o histórico denso como páginas PNG compactas que o Claude Fable 5 lê em vez de texto. Os tokens de imagem são cobrados por dimensões em vez de caracteres, portanto, o bloco convertido custa cerca de 10× menos. Apenas rota direta da Anthropic.", - "economicsTitle": "Aspectos econômicos", + "description": "Compressão de contexto como imagem. Renderiza o prompt de sistema, a documentação de ferramentas e o histórico denso como páginas PNG compactas que o Claude Fable 5 lê em vez de texto. Os tokens de imagem são cobrados por dimensões em vez de caracteres, então o bloco convertido custa cerca de 10× menos. Somente na rota direta da Anthropic.", + "economicsTitle": "A economia", "economics": { "fewerTokens": "menos tokens no bloco convertido", "savings": "economia de ponta a ponta (medida)", - "imageTokens": "tokens de imagem para uma página de 1568×728 (cerca de 28k caracteres)", + "imageTokens": "tokens de imagem para uma página de 1568×728 (cerca de 28 mil caracteres)", "accuracy": "precisão de leitura no Fable 5 (n=30)" }, "beforeAfterTitle": "Antes → depois", - "blockSavings": "−{percent}% tokens neste bloco", - "realRender": "Uma renderização real de {characters, number} caracteres de documentação densa de ferramentas — não um mockup.", + "blockSavings": "−{percent}% de tokens neste bloco", + "realRender": "Uma renderização real de {characters, number} caracteres de documentação densa de ferramentas — não é um mockup.", "textTokens": "Texto · ≈ {tokens, number} tokens", "renderedTokens": "Página renderizada · ≈ {tokens, number} tokens", "renderedImageAlt": "Página densa renderizada, {width}×{height}px", "gatesTitle": "Quando é acionado", - "gatesDescription": "Falha fechada: todos os gates devem passar, ou a requisição passa inalterada (cada desvio é registrado como skip:<reason>).", + "gatesDescription": "Fail-closed: todo gate precisa passar, ou a solicitação passa intacta (cada omissão é registrada como skip:<reason>).", "gates": { "model": { "label": "Modelo", "pass": "claude-fable-5", - "why": "Apenas o Fable 5 lê páginas densas com 100% de precisão (medido, n=30). GPT-5.5 e Gemini 2.5 Flash estão bloqueados." + "why": "Somente o Fable 5 lê páginas densas com 100% de precisão (medido, n=30). GPT-5.5 e Gemini 2.5 Flash são bloqueados." }, "transport": { "label": "Transporte", - "pass": "Anthropic direto", - "why": "Agregadores reamostram imagens e destroem a legibilidade — apenas a rota direta é autoritativa." + "pass": "direto Anthropic", + "why": "Agregadores reamostram imagens e destroem a legibilidade — apenas a rota direta é confiável." }, "format": { "label": "Formato", "pass": "Claude nativo", - "why": "O corpo deve usar o formato Claude e nunca deve colocar uma função de sistema dentro das mensagens." + "why": "O corpo deve usar o formato Claude e nunca colocar um papel system dentro de messages." }, "profitable": { - "label": "Lucrativo", + "label": "Rentável", "pass": "denso o suficiente", - "why": "O limite de custo exato do patch de 28px decide por solicitação; textos pequenos ou esparsos passam sem alterações." + "why": "O gate exato de custo por patch de 28px decide por solicitação; texto pequeno ou esparso passa intacto." } }, - "enableTitle": "Habilitar o mecanismo", - "enableDescription": "Executa por último na pilha (após o RTK/Caveman limpar o texto, o OmniGlyph converte o restante em imagens) e também executa de forma autônoma através do modo omniglyph. Esta é uma prévia e permanece desativada por padrão até que a validação de ponta a ponta seja concluída.", + "enableTitle": "Ativar a engine", + "enableDescription": "Executa por último na pilha (depois que RTK/Caveman limpa o texto, o OmniGlyph converte o restante em imagens) e também roda de forma independente pelo modo omniglyph. Este é um preview e permanece desativado por padrão até que a validação de ponta a ponta seja concluída.", "saved": "Salvo.", "saveFailed": "Não foi possível salvar.", - "enableAria": "Habilitar o mecanismo OmniGlyph" + "enableAria": "Ativar a engine OmniGlyph" }, "embeddedServices": { - "title": "Serviços incorporados", - "description": "Mecanismos locais gerenciados sob demanda — CLIProxyAPI, 9Router, Mux e Bifrost. Acessíveis apenas em loopback.", - "stateRunning": "Em execução", - "stateStopped": "Parado", - "stateStarting": "Iniciando", + "title": "Serviços Embarcados", + "description": "Engines locais gerenciadas sob demanda — CLIProxyAPI, 9Router, Mux e Bifrost. Acessíveis apenas via loopback.", + "stateRunning": "Running", + "stateStopped": "Stopped", + "stateStarting": "Starting", "stateStopping": "Parando", "stateError": "Erro", "stateNotInstalled": "Não instalado", @@ -8537,10 +8540,10 @@ "port": "porta {port}", "externalBadge": "Gerenciado externamente", "externalTitle": "9Router externo detectado", - "externalDescription": "O OmniRoute encontrou o 9Router em {host}:{port}. Seu ciclo de vida, logs, atualizações e chave de serviço permanecem gerenciados pela instalação externa.", - "start": "Iniciar", + "externalDescription": "O OmniRoute encontrou o 9Router em {host}:{port}. Seu ciclo de vida, logs, atualizações e chave de serviço continuam gerenciados pela instalação externa.", + "start": "Início", "starting": "Iniciando…", - "stop": "Parar", + "stop": "Pare", "stopping": "Parando…", "restart": "Reiniciar", "restarting": "Reiniciando…", @@ -8548,33 +8551,33 @@ "updating": "Atualizando…", "install": "Instalar", "installing": "Instalando…", - "autoStart": "Iniciar automaticamente", - "autoStartDescription": "Iniciar {name} automaticamente quando o OmniRoute iniciar", + "autoStart": "Início automático", + "autoStartDescription": "Inicia {name} automaticamente quando o OmniRoute é iniciado", "apiKey": "Chave de API", - "apiKeyDescription": "Chave usada pelo OmniRoute para se autenticar com o {name}", - "keyRotated": "Chave rotacionada — {name} reiniciado para aplicar a nova chave", + "apiKeyDescription": "Chave usada pelo OmniRoute para autenticar com {name}", + "keyRotated": "Chave rotacionada — {name} foi reiniciado para aplicar a nova chave", "keyRotateFailed": "Falha ao rotacionar a chave", "keyRevealFailed": "Falha ao revelar a chave", - "keyRevealEmpty": "Falha ao revelar: chave não retornada", + "keyRevealEmpty": "Falha na revelação: chave não retornada", "reveal": "Revelar", "revealing": "Revelando…", - "hide": "Ocultar", + "hide": "Hide", "rotateKey": "Rotacionar chave", "rotating": "Rotacionando…", "keyAutoHide": "A chave será ocultada automaticamente em 30 segundos.", - "revealTitle": "Revelar chave de API", + "revealTitle": "Revelar Chave de API", "revealConfirm": "Revelar a chave de API será registrado na trilha de auditoria. Continuar?", "cancel": "Cancelar", "install9Router": "Instalar 9Router", "install9RouterDescription": "Baixa e instala o 9Router via npm. Requer aproximadamente 500 MB de espaço em disco.", - "version": "Versão", - "versionHint": "Insira “latest” ou uma versão específica (por exemplo, 1.2.3).", + "version": "Version", + "versionHint": "Digite “latest” ou uma versão específica (por exemplo, 1.2.3).", "servicePort": "Porta", - "servicePortHint": "O OmniRoute e o 9Router devem usar portas diferentes. A porta padrão do 9Router é 20130.", + "servicePortHint": "O OmniRoute e o 9Router precisam usar portas diferentes. A porta padrão do 9Router é 20130.", "installationFailed": "Falha na instalação (HTTP {status})", "installationSucceeded": "9Router instalado com sucesso. Iniciando…", "networkInstallFailed": "Erro de rede — não foi possível alcançar o endpoint de instalação", - "availableModels": "Modelos disponíveis", + "availableModels": "Modelos Disponíveis", "modelsLoading": "Carregando…", "modelsDiscovered": "{count, plural, one {# modelo descoberto} other {# modelos descobertos}}", "modelsLoadFailed": "Falha ao carregar modelos", @@ -8585,37 +8588,37 @@ "pageOf": "Página {page} de {total}", "previous": "Anterior", "next": "Próximo", - "providerExposure": "Exposição do provedor", - "providerExposureDescription": "Expor modelos do 9Router como um destino de roteamento sob o prefixo 9router/.", + "providerExposure": "Exposição do Provedor", + "providerExposureDescription": "Expõe os modelos do 9Router como alvo de roteamento sob o prefixo 9router/.", "providerExposureLabel": "Expor como 9router/…", - "providerExposureHint": "Quando ativado, os modelos descobertos aparecem nos seletores de provedores em todo o OmniRoute.", + "providerExposureHint": "Quando ativado, os modelos descobertos aparecem nos seletores de provedor em todo o OmniRoute.", "providerExposureUpdateFailed": "Falha ao atualizar (HTTP {status})", "providerExposureNetworkFailed": "Erro de rede — não foi possível atualizar a configuração de exposição do provedor", - "webUi": "9Router Web UI", - "openNewTab": "Abrir em nova guia", + "webUi": "Interface Web do 9Router", + "openNewTab": "Abrir em nova aba", "filterLogs": "Filtrar logs…", "resume": "Retomar", "pause": "Pausar", - "clear": "Limpar", + "clear": "Claro", "download": "Baixar", - "noLogs": "Nenhuma saída de log ainda.", + "noLogs": "Ainda não há saída de log.", "logStreamFailed": "Não foi possível transmitir os logs de {name}. Verifique o acesso local e o status do serviço.", "fallbackRouting": "Roteamento de Fallback", - "fallbackRoutingDescription": "Tentar novamente requisições de provedor com falha através da CLIProxyAPI", - "enableFallback": "Habilitar fallback", - "cliproxyUrl": "URL da CLIProxyAPI", + "fallbackRoutingDescription": "Tenta novamente solicitações de provedor com falha por meio do CLIProxyAPI", + "enableFallback": "Ativar fallback", + "cliproxyUrl": "URL CLIProxyAPI", "fallbackCodes": "Códigos de status de fallback (separados por vírgula)", "invalidUrl": "URL inválida — deve começar com http:// ou https://", "saved": "Salvo", "saveFailed": "Falha ao salvar configuração", "modelMapping": "Mapeamento de Modelos", - "modelMappingDescription": "Mapear IDs de modelo do OmniRoute para IDs de modelo da CLIProxyAPI (por exemplo, \"gpt-4o\": \"openai-gpt-4o\")", + "modelMappingDescription": "Mapeie IDs de modelo do OmniRoute para IDs de modelo do CLIProxyAPI (por exemplo, \"gpt-4o\": \"openai-gpt-4o\")", "modelMappingEditor": "Editor JSON de mapeamento de modelos", "mappingSaved": "Mapeamento salvo", "mappingSaveFailed": "Falha ao salvar mapeamento", "mappingInvalidJson": "JSON inválido.", "mappingMustBeObject": "O mapeamento deve ser um objeto JSON, não um array ou valor primitivo.", - "mappingValueMustBeString": "O valor para a chave “{key}” deve ser uma string.", + "mappingValueMustBeString": "O valor da chave “{key}” deve ser uma string.", "save": "Salvar" }, "contextCaveman": { @@ -8643,7 +8646,7 @@ "inputCompressionDesc": "Reescreve o histórico do chat com termos mais curtos. Reduz os tokens de entrada em aproximadamente 50%.", "analyticsTitle": "Analytics de Compressao", "noAnalytics": "Sem analytics de compressao ainda.", - "masterDisabledWarning": "A chave mestra do Token Saver está DESLIGADA — estas configurações não afetarão as requisições até que você a ative nas Configurações de Compressão ou a altere aqui.", + "masterDisabledWarning": "O interruptor mestre do Token Saver está DESLIGADO — essas configurações não afetarão as solicitações até que você o ative em Configurações de Compressão ou o altere aqui.", "outputMode": "Modo de saída", "outputModeDesc": "Instrui o LLM a responder em formato curto e compacto.", "outputModeTitle": "Output Mode", @@ -8823,8 +8826,8 @@ "translationPipeline": "Pipeline de Tradução", "loading": "Carregando…", "compressionOriginal": "Original", - "compressionCompressed": "Compactado", - "compressionSaved": "Economizado", + "compressionCompressed": "Comprimido", + "compressionSaved": "Salvo", "compressionDuration": "Duração", "pipelineStepsAria": "Etapas do pipeline", "copyIntermediateJson": "Copiar JSON intermediário", @@ -8963,18 +8966,18 @@ "conceptDiagramHubTooltip": "Hub intermediário usado pelo translator para converter entre formatos que não têm mapeamento direto.", "conceptDiagramSourceTooltip": "O formato de API que sua app fala (ex: SDK Anthropic = claude).", "conceptDiagramTargetTooltip": "O provider para onde a requisição será realmente enviada.", - "compressionEmptyHint": "Preencha o campo de entrada na guia Traduzir (Controles Simples ou JSON Bruto) para habilitar a visualização.", - "compressionModeLabel": "Modo de compressão", - "compressionPreviewButton": "Visualizar Compressão", - "compressionPreviewing": "Pré-visualizando…", + "compressionEmptyHint": "__MISSING__:Fill in the input field on the Translate tab (Simple Controls or Raw JSON) to enable the preview.", + "compressionModeLabel": "__MISSING__:Compression mode", + "compressionPreviewButton": "__MISSING__:Preview Compression", + "compressionPreviewing": "__MISSING__:Previewing…", "compressionPreviewFailed": "Falha na pré-visualização da compressão", - "tokens": "tokens", + "tokens": "fichas", "pauseAutoRefresh": "Pausar atualização automática", "resumeAutoRefresh": "Retomar atualização automática", "live": "Ao vivo", "copyInput": "Copiar entrada", "copyOutput": "Copiar saída", - "streamTransformFailed": "Falha ao transformar stream" + "streamTransformFailed": "Falha ao transformar o stream" }, "usage": { "title": "Uso", @@ -9131,10 +9134,10 @@ "loadingQuotas": "Carregando...", "showMoreQuotas": "Mostrar mais {count}", "showLessQuotas": "Mostrar menos", - "hideQuotaRow": "Ocultar esta linha de cota", - "showQuotaRow": "Mostrar esta linha de cota", - "hiddenQuotaRowsLabel": "Oculto:", - "quotaVisibilityUpdateFailed": "Falha ao atualizar a visibilidade da cota", + "hideQuotaRow": "__MISSING__:Hide this quota row", + "showQuotaRow": "__MISSING__:Show this quota row", + "hiddenQuotaRowsLabel": "__MISSING__:Hidden:", + "quotaVisibilityUpdateFailed": "__MISSING__:Failed to update quota visibility", "account": "Conta", "modelQuotas": "Cotas de Modelo", "lastUsed": "Last Refreshed", @@ -9335,21 +9338,21 @@ "budgetKpiBlocked": "Bloqueado", "budgetKpiAtRisk": "Em risco", "budgetKpiActiveKeys": "Chaves ativas", - "budgetPageTitle": "Orçamento", + "budgetPageTitle": "Budget", "budgetPageDescription": "Defina limites de gastos diários, semanais e mensais para cada chave de API.", - "budgetTemplateStorageHint": "{count, plural, one {# modelo} other {# modelos}} · editar via localStorage:", + "budgetTemplateStorageHint": "{count, plural, one {# modelo} other {# modelos}} · edite via localStorage:", "budgetAboveLimitShort": "acima do limite ⚠", "budgetOnTrackShort": "dentro do esperado", - "budgetAtOrAboveWarning": "≥ limiar de alerta", + "budgetAtOrAboveWarning": "≥ limite de aviso", "budgetTemplates": "Modelos", "budgetSelectKeysFirst": "Selecione as chaves primeiro para aplicar", "budgetApplyToSelected": "Aplicar a {count, plural, one {# chave selecionada} other {# chaves selecionadas}}", - "budgetSelectedTemplateHint": "{count, plural, one {# selecionada} other {# selecionadas}} · clique em um modelo para aplicar", + "budgetSelectedTemplateHint": "{count, plural, one {# selecionado} other {# selecionados}} · clique em um modelo para aplicar", "budgetTemplateMonthlyAmount": "${amount}/mês", "budgetTemplateDailyAmount": "${amount}/dia", "budgetNoKeysSelected": "Nenhuma chave selecionada", - "budgetTemplateApplied": "Aplicado \"{template}\" a {count, plural, one {# chave} other {# chaves}}", - "budgetTemplateApplyFailed": "Falha ao aplicar o modelo", + "budgetTemplateApplied": "\"{template}\" aplicado a {count, plural, one {# chave} other {# chaves}}", + "budgetTemplateApplyFailed": "Falha ao aplicar modelo", "budgetTemplateNames": { "tpl-prod": "Produção", "tpl-dev": "Desenvolvimento", @@ -9361,7 +9364,7 @@ "alerting": "Alertando", "warning": "Aviso", "safe": "Seguro", - "no-limit": "Sem limite" + "no-limit": "No limit" }, "budgetColumnKey": "Chave", "budgetColumnToday": "Hoje", @@ -9375,7 +9378,7 @@ "budgetColDailyLim": "Limite diário", "budgetColMonthlyLim": "Limite mensal", "budgetColUsedPct": "% usado", - "percentUsed": "{pct}% usado", + "percentUsed": "__MISSING__:{pct}% used", "budgetLoading": "Carregando…", "budgetNoKeysMatch": "Nenhuma chave corresponde aos filtros", "budgetLinearExtrapolation": "extrapolação linear", @@ -9384,13 +9387,13 @@ "budgetByProvider": "por provedor", "budgetProjection": "Projeção", "budgetAboveMonthlyLimit": "⚠ acima de {limit}/mês", - "budgetCostBreakdown30d": "Detalhamento de custos (30 dias)", + "budgetCostBreakdown30d": "Detalhamento de custo (30 dias)", "budgetLimits": "Limites", "budgetResetDaily": "Diário", "budgetResetWeekly": "Semanal", "budgetResetMonthly": "Mensal", "budgetNextReset": "Próxima redefinição", - "budgetHardCapComingSoon": "A política de limite rígido e os alertas por e-mail estarão disponíveis em breve", + "budgetHardCapComingSoon": "A política de limite rígido e alertas por e-mail estão chegando em breve", "unknownProvider": "Provedor desconhecido", "budgetDailyDollar": "Diariamente $", "budgetWeeklyDollar": "Semanal $", @@ -10163,8 +10166,8 @@ "agentDescriptions": { "jules": "Agente de codificação autônomo do Google", "devin": "Engenheiro de software de IA da Cognition", - "codexCloud": "Agente de codificação baseado em nuvem da OpenAI", - "cursorCloud": "Agentes de Nuvem / Segundo Plano do Cursor (chave de API oficial)" + "codexCloud": "Agente de codificação em nuvem da OpenAI", + "cursorCloud": "Agentes em segundo plano / nuvem do Cursor (chave de API oficial)" }, "activityTypes": { "plan": "Plano", @@ -10451,6 +10454,7 @@ "tabPasteApiKey": "__MISSING__:Paste API Key", "windsurfPasteDescription": "__MISSING__:In the Windsurf / VS Code IDE, run the \"Windsurf: Provide Auth Token\" command from the command palette (or click the Jupyter \"Get Windsurf Authentication Token\" button), then copy the shown token and paste it below. Opening windsurf.com/show-auth-token directly only shows a \"Redirecting\" page — the IDE must initiate the flow.", "grokAuthJsonDescription": "__MISSING__:Paste the FULL contents of ~/.grok/auth.json (not just the JWT \"key\" field). A bare JWT has no refresh_token, so the connection dies after expiry (#7610). Prefer the dedicated Import auth.json modal when available.", + "devinDesktopPasteDescription": "__MISSING__:Paste an existing Devin API key from an authenticated Devin session. Key export availability and steps vary by Devin version and account.", "devinPasteDescription": "__MISSING__:Provide your WINDSURF_API_KEY (obtained via `devin auth login`, or via the Windsurf IDE \"Windsurf: Provide Auth Token\" command).", "grokAuthJsonPlaceholder": "__MISSING__:{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", "grokAuthJsonLabel": "__MISSING__:Grok Build auth.json", @@ -10465,7 +10469,8 @@ "gitlabDuoSetupTitle": "__MISSING__:GitLab Duo OAuth setup", "gitlabDuoSetupMessage": "__MISSING__:GitLab Duo OAuth is not configured. Register an OAuth application at {applicationsUrl} with redirect URI {redirectUri} and scopes \"{scopes}\", then set {clientIdEnv} (and optionally {clientSecretEnv}) and restart.", "gitlabDuoSetupDescription": "__MISSING__:After the application is registered and the env vars are set on this OmniRoute instance, click Continue to start the OAuth login.", - "continue": "__MISSING__:Continue" + "continue": "__MISSING__:Continue", + "googleOAuthWarning": "Acesso remoto + Google OAuth: as credenciais padrão aceitam apenas redirecionamentos para localhost. Após a autorização, seu navegador tentará abrir localhost — copie o URL completo e cole-o abaixo. Para uso totalmente remoto sem esta etapa manual, configure suas próprias credenciais OAuth." }, "cursorAuthModal": { "title": "Conecte o Cursor IDE", @@ -10530,11 +10535,11 @@ "modalEditTitle": "Modal Edit Title", "labelName": "Label Name", "labelType": "Tipo", - "labelFamily": "Família de IP", - "familyAuto": "Automático (dual-stack)", - "familyIpv4": "Apenas IPv4", - "familyIpv6": "Apenas IPv6", - "familyHint": "Família de endereços de saída. Automático mantém dual-stack; IPv4/IPv6 fixam este proxy nessa família (evita vazamento de v4 sob um proxy apenas IPv6).", + "labelFamily": "__MISSING__:IP family", + "familyAuto": "__MISSING__:Auto (dual-stack)", + "familyIpv4": "__MISSING__:IPv4 only", + "familyIpv6": "__MISSING__:IPv6 only", + "familyHint": "__MISSING__:Egress address family. Auto keeps dual-stack; IPv4/IPv6 pin this proxy to that family (prevents a v4 leak under an IPv6-only proxy).", "labelHost": "Anfitrião", "labelPort": "Porto", "labelUsername": "Nome de usuário", @@ -10652,7 +10657,7 @@ "audioFile": "Arquivo de áudio", "attachImages": "Anexar imagens", "multipartFormData": "Multipart Form Data", - "upToImages": "Até {count} imagens", + "upToImages": "Até 4 imagens", "selectAudioFile": "Selecionar arquivo de áudio", "clearAll": "Limpar tudo", "request": "Requisição", @@ -10669,17 +10674,17 @@ "endpointOptions": { "chat": "Chat", "responses": "Responses", - "completions": "Conclusões", + "completions": "Completions", "images": "Images", "embeddings": "Embeddings", "speech": "Speech", "transcription": "Transcription", "video": "Video", "music": "Music", - "moderations": "Moderações", + "moderations": "Moderations", "rerank": "Rerank", "search": "Search", - "webFetch": "Busca na web" + "webFetch": "Busca na Web" }, "conversationalChat": "Bate-papo conversacional", "clearChat": "Limpar bate-papo", @@ -10719,10 +10724,10 @@ "improvePromptTitle": "Melhorar seu prompt com IA", "setModelFirst": "Defina um modelo primeiro", "setModelInConfigFirst": "Defina um modelo no painel de Configuração primeiro.", - "improvePromptFailed": "Falha ao melhorar o prompt.", - "improvePromptAria": "Melhorar prompt usando IA", - "confirmImprovePrompt": "Confirmar melhoria do prompt", - "improvePromptDescription": "Isso enviará seu prompt do sistema atual para para gerar uma versão melhorada.", + "improvePromptFailed": "Falha ao aprimorar o prompt.", + "improvePromptAria": "Aprimorar prompt usando IA", + "confirmImprovePrompt": "Confirmar aprimoramento de prompt", + "improvePromptDescription": "Isto enviará seu prompt de sistema atual para para gerar uma versão aprimorada.", "improveQuotaWarning": "Isso consumirá cota do modelo configurado no painel Config.", "improveConfirm": "Melhorar", "exportCode": "Exportar código", @@ -10752,9 +10757,9 @@ "done": "concluído", "error": "erro" }, - "cancelStream": "Cancelar transmissão", + "cancelStream": "Cancelar stream", "removeColumn": "Remover coluna", - "removeModelColumn": "Remover coluna para {model}", + "removeModelColumn": "Remover coluna de {model}", "readyToRun": "Pronto para executar.", "errorLabel": "Erro", "unknownError": "Ocorreu um erro desconhecido.", @@ -10765,9 +10770,9 @@ "tokensLabel": "Tokens", "costLabel": "Custo", "costEstimated": "(estimado)", - "ttftTitle": "Tempo até o primeiro token (estimativa do lado do cliente)", - "tpsTitle": "Tokens por segundo (estimativa do lado do cliente)", - "tokenCountsTitle": "Tokens do prompt ↑ / Tokens de conclusão ↓", + "ttftTitle": "Tempo até o primeiro token (estimativa no cliente)", + "tpsTitle": "Tokens por segundo (estimativa no cliente)", + "tokenCountsTitle": "Tokens de prompt ↑ / Tokens de conclusão ↓", "estimatedCostTitle": "Custo estimado (precisão não garantida)", "toolsLabel": "Ferramentas", "toolsCount": "Ferramentas ({count})", @@ -10777,8 +10782,8 @@ "toolNamePlaceholder": "Nome da função", "toolNameRequiredPlaceholder": "Nome da função *", "toolDescPlaceholder": "Descrição (opcional)", - "toolParamsLabel": "Parâmetros (esquema JSON)", - "toolParamsJsonSchema": "Esquema JSON para parâmetros", + "toolParamsLabel": "Parâmetros (schema JSON)", + "toolParamsJsonSchema": "Schema JSON para parâmetros", "toolParamsInvalid": "Parâmetros devem ser JSON válido", "structuredOutputLabel": "Saída Estruturada", "enableJsonMode": "Ativar modo JSON", @@ -10786,20 +10791,20 @@ "invalidJson": "JSON inválido", "jsonMode": "Modo JSON", "jsonModeDescription": "Força response_format: json_schema", - "schemaName": "Nome do esquema", - "jsonSchema": "Esquema JSON", - "jsonSchemaEditor": "Editor de esquema JSON", - "schemaValidated": "Esquema validado", - "validateSchema": "Validar esquema", - "seed": "Semente", + "schemaName": "Nome do schema", + "jsonSchema": "Schema JSON", + "jsonSchemaEditor": "Editor de schema JSON", + "schemaValidated": "Schema validado", + "validateSchema": "Validar schema", + "seed": "Seed", "stopSequences": "Sequências de parada", "stopSequencesPlaceholder": "ex.: \"\\n\\n\" ou \"END\"", - "autoProvider": "Automático", + "autoProvider": "Auto", "httpError": "Erro {status}", "requestCancelled": "Solicitação cancelada", - "networkError": "Erro de rede", - "regenerateLastResponse": "Regerar última resposta", - "regenerate": "Regerar", + "networkError": "Network error", + "regenerateLastResponse": "Regenerar última resposta", + "regenerate": "Regenerar", "startConversation": "Inicie uma conversa — digite uma mensagem abaixo", "role": { "system": "sistema", @@ -10808,8 +10813,8 @@ }, "generating": "Gerando…", "typeMessageWithShortcut": "Digite uma mensagem... (Enter para enviar, Shift+Enter para nova linha)", - "stop": "Parar", - "noResponseBody": "Nenhum corpo de resposta", + "stop": "Pare", + "noResponseBody": "Sem corpo de resposta", "comparePromptPlaceholder": "Digite seu prompt aqui…", "userPrompt": "Prompt do usuário", "cancelAllStreams": "Cancelar todos os streams", @@ -10818,7 +10823,7 @@ "addColumn": "Adicionar coluna", "addModelColumn": "Adicionar coluna de modelo", "columnCount": "{count}/{max} colunas", - "addModelToCompare": "Adicionar uma coluna de modelo para comparar", + "addModelToCompare": "Adicione uma coluna de modelo para comparar", "modelsSimultaneously": "Até {max} modelos simultaneamente", "running": "Executando…", "runLabel": "Executar", @@ -10880,24 +10885,24 @@ "audioFile": "Arquivo de áudio", "fileTooLarge25Mb": "O arquivo é muito grande. Tamanho máximo: 25 MB.", "selectAudioFirst": "Selecione um arquivo de áudio primeiro.", - "speechToText": "Fala para texto", + "speechToText": "Fala para Texto", "chooseFile": "Escolher arquivo", - "audioFormats25Mb": "MP3, WAV, M4A, OGG ou FLAC · Máximo de 25 MB", - "musicSample": "Uma faixa ambiente calma com piano acolhedor e cordas suaves", + "audioFormats25Mb": "MP3, WAV, M4A, OGG ou FLAC · Máximo 25 MB", + "musicSample": "Uma faixa ambiente calma com piano quente e cordas suaves", "noAudioUrl": "A resposta não incluiu uma URL de áudio: {response}", "music": "Música", - "embeddingSample": "O OmniRoute roteia solicitações de IA entre vários provedores.", + "embeddingSample": "O OmniRoute roteia solicitações de IA entre múltiplos provedores.", "embedding": "Embedding", "imageSample": "Uma cidade futurista ao pôr do sol, iluminação cinematográfica", - "image": "Imagem", + "image": "Image", "ttsSample": "Olá do OmniRoute. Este é um teste de texto para fala.", - "textToSpeech": "Texto para fala", + "textToSpeech": "Texto para Fala", "videoSample": "Um avião de papel voando sobre uma cidade futurista", "video": "Vídeo", - "webFetch": "Busca na Web", + "webFetch": "Web Fetch", "webSearchSample": "O que é o OmniRoute?", - "webSearch": "Pesquisa na Web", - "documentUrl": "URL do documento", + "webSearch": "Web Search", + "documentUrl": "URL do Documento", "browserAudioUnsupported": "Seu navegador não suporta áudio.", "browserVideoUnsupported": "Seu navegador não suporta vídeo.", "searchResultFallback": "Resultado {number}", @@ -10906,14 +10911,14 @@ "latency": "{ms}ms", "statsLine": "{ms}ms · {tokensIn} entrada / {tokensOut} saída tokens", "defaultKey": "(padrão)", - "clear": "Limpar", + "clear": "Claro", "emptyConversation": "Envie uma mensagem para iniciar a conversa", "sendHint": "Shift+Enter para nova linha · Enter para enviar", "you": "Você", - "assistant": "Assistente", + "assistant": "Assistant", "errorLabel": "Erro", "requestFailed": "Falha na requisição", - "stop": "Parar" + "stop": "Pare" }, "requestLogger": { "recording": "Recording", @@ -10981,8 +10986,8 @@ "noLogs": "No logs yet. Make some API calls to see them here.", "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", - "loadMore": "Carregar mais", - "loadingMore": "Carregando mais...", + "loadMore": "__MISSING__:Load More", + "loadingMore": "__MISSING__:Loading more...", "correlationId": "__MISSING__:Correlation ID", "group": { "showAllRows": "__MISSING__:Show all rows", @@ -11091,7 +11096,7 @@ "colProvider": "Provider", "colTarget": "Target", "colLatency": "Latency", - "colClientIp": "IP do cliente", + "colClientIp": "__MISSING__:Client IP", "colTime": "Time", "recording": "Recording", "paused": "Paused", @@ -11375,17 +11380,17 @@ "status": "Status", "enabled": "Enabled", "disabled": "Disabled", - "installedTab": "Instalado", - "marketplaceTab": "Marketplace", - "marketplaceUrlLabel": "URL personalizada do marketplace", - "marketplaceUrlPlaceholder": "Deixe em branco para o registro oficial do Omniroute", - "saveMarketplaceUrl": "Salvar e recarregar", - "marketplaceUrlSaved": "URL do marketplace atualizada", - "marketplaceEmpty": "Nenhum plugin encontrado no marketplace.", + "installedTab": "__MISSING__:Installed", + "marketplaceTab": "__MISSING__:Marketplace", + "marketplaceUrlLabel": "__MISSING__:Custom Marketplace URL", + "marketplaceUrlPlaceholder": "__MISSING__:Leave empty for official Omniroute registry", + "saveMarketplaceUrl": "__MISSING__:Save & Reload", + "marketplaceUrlSaved": "__MISSING__:Marketplace URL updated", + "marketplaceEmpty": "__MISSING__:No plugins found in marketplace.", "marketplaceInstallComingSoon": "Instalações via marketplace em breve.", - "verified": "Verificado", - "install": "Instalar", - "installedFromMarketplace": "Plugin {name} instalado!", + "verified": "__MISSING__:Verified", + "install": "__MISSING__:Install", + "installedFromMarketplace": "__MISSING__:Plugin {name} installed!", "hooks": "Hooks" }, "quotaPlans": { @@ -11436,10 +11441,10 @@ "filterSystem": "Sistema", "filterAria": "Filtrar por tipo de evento", "refresh": "Atualizar", - "refreshAria": "Atualizar feed de atividades", + "refreshAria": "Atualizar feed de atividade", "loading": "Carregando", - "loadingActivity": "Carregando atividades…", - "fetchFailed": "Falha ao buscar atividades", + "loadingActivity": "Carregando atividade…", + "fetchFailed": "Falha ao buscar atividade", "relative": { "justNow": "agora há pouco", "minutesAgo": "há {n} min", @@ -11591,28 +11596,28 @@ "quickLinkProviders": "Configurar provedores", "quickLinkInspector": "Ver tráfego no Traffic Inspector", "unknownError": "Erro desconhecido", - "maintenanceTitle": "Manutenção e diagnósticos", - "maintenanceSubtitle": "Faça o autoteste do pipeline de captura, desfaça o estado residual do sistema e mova sua configuração entre máquinas.", - "orphanedStateWarning": "Uma sessão anterior deixou resíduos no estado do sistema (DNS spoof, CA ou proxy do sistema). Execute Reparar para limpá-lo.", - "diagnose": "Diagnosticar", - "diagnosing": "Diagnosticando…", - "diagnoseHealthy": "O pipeline de captura está saudável.", - "diagnoseUnhealthy": "O pipeline de captura tem problemas:", - "repair": "Reparar", - "repairing": "Reparando…", - "repairDone": "Reparado: {items}", - "repairNothing": "Nada a reparar — o estado do sistema está limpo.", - "removeCa": "Remover CA", - "removeCaConfirm": "Remover CA?", - "removeCaDone": "CA raiz MITM removida do repositório de confiança do SO.", - "removing": "Removendo…", - "confirm": "Confirmar", - "exportConfig": "Exportar configuração", - "exporting": "Exportando…", - "importConfig": "Importar configuração", - "importing": "Importando…", - "importInvalidJson": "O arquivo selecionado não é um JSON válido.", - "importDone": "Importados {bypass} bypass · {hosts} hosts · {agents} agentes", + "maintenanceTitle": "__MISSING__:Maintenance & Diagnostics", + "maintenanceSubtitle": "__MISSING__:Self-test the capture pipeline, undo leftover system state, and move your setup between machines.", + "orphanedStateWarning": "__MISSING__:A previous session left system state behind (DNS spoof, CA, or system proxy). Run Repair to clean it up.", + "diagnose": "__MISSING__:Diagnose", + "diagnosing": "__MISSING__:Diagnosing…", + "diagnoseHealthy": "__MISSING__:Capture pipeline is healthy.", + "diagnoseUnhealthy": "__MISSING__:Capture pipeline has problems:", + "repair": "__MISSING__:Repair", + "repairing": "__MISSING__:Repairing…", + "repairDone": "__MISSING__:Repaired: {items}", + "repairNothing": "__MISSING__:Nothing to repair — system state is clean.", + "removeCa": "__MISSING__:Remove CA", + "removeCaConfirm": "__MISSING__:Remove CA?", + "removeCaDone": "__MISSING__:MITM root CA removed from the OS trust store.", + "removing": "__MISSING__:Removing…", + "confirm": "__MISSING__:Confirm", + "exportConfig": "__MISSING__:Export config", + "exporting": "__MISSING__:Exporting…", + "importConfig": "__MISSING__:Import config", + "importing": "__MISSING__:Importing…", + "importInvalidJson": "__MISSING__:The selected file is not valid JSON.", + "importDone": "__MISSING__:Imported {bypass} bypass · {hosts} hosts · {agents} agents", "save": "Salvar", "saving": "Salvando…", "cancel": "Cancelar", @@ -11632,35 +11637,35 @@ "unknownError": "Erro desconhecido", "loading": "Carregando estatísticas do provedor...", "loadFailed": "Falha ao carregar estatísticas do provedor: {error}", - "retry": "Tentar novamente", + "retry": "Retry", "updated": "Atualizado {time}", "refresh": "Atualizar", - "totalRequests": "Total de requisições", - "avgLatency": "Latência média", - "successRate": "Taxa de sucesso", - "activeProviders": "Provedores ativos", - "providerBreakdown": "Detalhamento por provedor", + "totalRequests": "Total Requests", + "avgLatency": "Avg Latency", + "successRate": "Taxa de Sucesso", + "activeProviders": "Active Providers", + "providerBreakdown": "Detalhamento por Provedor", "providerCount": "{count} provedores", "provider": "Provedor", "requests": "Requisições", "success": "Sucesso", "rate": "Taxa", - "tokensIn": "Tokens de entrada", - "tokensOut": "Tokens de saída", - "ttftAfterTool": "TTFT após ferramenta", - "gapAfterTool": "Intervalo após ferramenta", + "tokensIn": "Tokens de Entrada", + "tokensOut": "Tokens de Saída", + "ttftAfterTool": "TTFT Após Ferramenta", + "gapAfterTool": "Intervalo Após Ferramenta", "model": "Modelo", "noProviderData": "Nenhum dado de provedor registrado ainda.", - "comboMetrics": "Métricas de combo", - "comboMetricsDescription": "Latência e taxa de transferência por combo a partir do streaming", - "avgTtft": "TTFT médio", - "avgTotal": "Total médio", - "requestTelemetry": "Telemetria de requisições", + "comboMetrics": "Métricas de Combo", + "comboMetricsDescription": "Latência e throughput por combo a partir do streaming", + "avgTtft": "TTFT Médio", + "avgTotal": "Total Médio", + "requestTelemetry": "Telemetria de Solicitações", "requestTelemetryDescription": "Detalhamento do pipeline de 7 fases (últimos 5 minutos)" }, "relay": { "title": "Proxies de Relay Serverless", - "description": "Crie endpoints de API públicos que façam proxy para o OmniRoute com limitação de taxa e controle de acesso", + "description": "Crie endpoints de API públicos que fazem proxy para o OmniRoute com limitação de taxa e controle de acesso", "created": "Token de relay criado", "createFailed": "Falha ao criar token", "toggleFailed": "Falha ao alternar token", @@ -11671,17 +11676,17 @@ "newToken": "Novo Token de Relay", "createTitle": "Criar Token de Relay", "nameRequired": "Nome *", - "tokenDescription": "Descrição", + "tokenDescription": "Description", "descriptionPlaceholder": "Para minhas funções serverless", - "maxPerMinute": "Máx. de Requisições/Minuto", - "maxPerDay": "Máx. de Requisições/Dia", + "maxPerMinute": "Máx. de Solicitações/Minuto", + "maxPerDay": "Máx. de Solicitações/Dia", "createButton": "Criar Token", - "createdTitle": "Token Criado — Copie-o agora!", + "createdTitle": "Token Criado — Copie agora!", "tokenFor": "Token para {name}:", - "shownOnce": "Este token não será exibido novamente. Armazene-o com segurança.", + "shownOnce": "Este token não será exibido novamente. Guarde-o com segurança.", "dismiss": "Dispensar", "usage": "Uso", - "usageDescription": "Envie requisições para o seu endpoint de relay:", + "usageDescription": "Envie solicitações para o seu endpoint de relay:", "tokenCount": "Tokens de Relay ({count})", "loading": "Carregando...", "empty": "Nenhum token de relay configurado. Crie um para começar.", @@ -11701,8 +11706,8 @@ "httpProxyModeDesc": "Usar variável de ambiente HTTP_PROXY", "systemWideMode": "Sistema inteiro", "systemWideModeDesc": "Interceptar todo o tráfego do sistema (avançado)", - "tproxyMode": "Descriptografia TPROXY", - "tproxyModeUnavailable": "A descriptografia TPROXY requer Linux + root + o addon nativo", + "tproxyMode": "__MISSING__:TPROXY Decrypt", + "tproxyModeUnavailable": "__MISSING__:TPROXY decrypt requires Linux + root + the native addon", "filterBarTitle": "Filtros", "profileLlmOnly": "Apenas LLM", "profileCustom": "Personalizado", @@ -11759,7 +11764,7 @@ "httpProxyTitle": "Snippet de Proxy HTTP — porta {port}", "notRecording": "Sem gravação", "anyStatus": "Qualquer status", - "liveOnly": "Ao vivo", + "liveOnly": "__MISSING__:Live", "viewingRecordedSession": "Visualizando sessão gravada", "backToLive": "Voltar ao live", "untitledSession": "Sessão sem nome", @@ -11785,24 +11790,24 @@ "timingResponseSize": "Tamanho da resposta", "pausedNewBadge": "{count} novos", "clearContextFilter": "limpar", - "invalidHostname": "Hostname inválido", + "invalidHostname": "Nome de host inválido", "invalidHost": "Host inválido", "addHostFailed": "Falha ao adicionar host", - "networkError": "Erro de rede", + "networkError": "Network error", "close": "Fechar", "removeHost": "Remover {host}", - "requestDetails": "Detalhes da requisição", + "requestDetails": "Detalhes da solicitação", "filterByContext": "Filtrar por este contexto", "filteringContext": "Filtrando: contexto {context}", "clear": "limpar", "trafficProfile": "Perfil de tráfego", "roleSystem": "Sistema", - "roleUser": "Usuário", - "roleAssistant": "Assistente", + "roleUser": "User", + "roleAssistant": "Assistant", "roleTool": "Ferramenta", "expand": "Expandir", "collapse": "Recolher", - "systemPromptHidden": "Prompt do sistema oculto — clique para expandir", + "systemPromptHidden": "Prompt de sistema oculto — clique para expandir", "sessionName": "Sessão {id}", "sessions": "Sessões", "requestCountShort": "{count} reqs", @@ -11810,14 +11815,14 @@ "saving": "Salvando…", "sensitiveHeaders": "Cabeçalhos sensíveis", "show": "Mostrar", - "hide": "Ocultar", + "hide": "Hide", "name": "Nome", - "value": "Valor", + "value": "Value", "noSseEvents": "Nenhum evento SSE", - "noRequestBody": "Nenhum corpo de requisição.", - "noResponseBody": "Nenhum corpo de resposta.", - "formatted": "Formatado", - "raw": "Bruto" + "noRequestBody": "Sem corpo de solicitação.", + "noResponseBody": "Sem corpo de resposta.", + "formatted": "Formatted", + "raw": "Raw" }, "cliCommon": { "concept": { @@ -11843,7 +11848,7 @@ "comparison": { "title": "Entenda os 3 tipos de CLI no OmniRoute", "thisPage": "[Esta página ✓]", - "open": "Abrir →", + "open": "__MISSING__:Open →", "code": { "title": "Ferramenta de código", "desc": "Aponta para o Omni", @@ -11874,11 +11879,11 @@ "manualConfig": "Manual config", "installGuide": "Install guide", "endpointLabel": "Endpoint", - "baseUrlFull": "URL Base Completa", + "baseUrlFull": "__MISSING__:Full Base URL", "baseUrlPartial": "Base URL parcial", "refreshDetection": "Atualizar detecção", "alsoAcp": "também ACP", - "connectProviderHint": "Conecte um provedor em Provedores" + "connectProviderHint": "__MISSING__:Connect a provider in Providers" }, "detail": { "back": "Voltar", @@ -11959,187 +11964,187 @@ "catalog": { "omni-auth": { "name": "Autenticação", - "description": "Gerencie a autenticação por chave de API e tokens de sessão. Comece aqui para autenticar requisições via token Bearer, obter cookies de sessão e configurar requisitos de login para a API do OmniRoute." + "description": "Gerencie a autenticação por chave de API e tokens de sessão. Comece aqui para autenticar solicitações via token Bearer, obter cookies de sessão e configurar requisitos de login para a API do OmniRoute." }, "omni-providers": { - "name": "Provedores", - "description": "Gerencie conexões de provedores, chaves de API, fluxos OAuth e testes de conexão via API REST. Liste, adicione, atualize, remova e teste integrações de provedores de IA (OpenAI, Anthropic, Gemini e mais de 160)." + "name": "Providers", + "description": "Gerencie conexões de provedor, chaves de API, fluxos OAuth e testes de conexão via API REST. Liste, adicione, atualize, remova e teste integrações de provedores de IA (OpenAI, Anthropic, Gemini e mais de 160)." }, "omni-models": { "name": "Modelos", - "description": "Consulte modelos de IA disponíveis em todos os provedores configurados. Liste modelos, resolva aliases de modelos e navegue pelo catálogo completo de modelos, incluindo variantes específicas de provedores." + "description": "Consulte os modelos de IA disponíveis em todos os provedores configurados. Liste modelos, resolva aliases de modelo e navegue pelo catálogo completo, incluindo variantes específicas de provedor." }, "omni-combos-routing": { - "name": "Combos & Roteamento", - "description": "Crie e gerencie combos de roteamento com 14 estratégias (prioridade, ponderada, round-robin, Auto-combo, etc.). Configure cadeias de fallback, teste resultados de roteamento e obtenha métricas de combos." + "name": "Combos e Roteamento", + "description": "Crie e gerencie combos de roteamento com 14 estratégias (priority, weighted, round-robin, Auto-combo, etc.). Configure cadeias de fallback, teste resultados de roteamento e obtenha métricas de combo." }, "omni-api-keys": { - "name": "Chaves de API", + "name": "Gerenciador API", "description": "Crie, liste, rotacione e revogue chaves de API do OmniRoute. Controle escopos por chave, limites de gastos e expiração. As chaves controlam o acesso a todos os endpoints de proxy e gerenciamento." }, "omni-usage-logs": { "name": "Uso e Logs", - "description": "Acesse logs de chamadas detalhados e análises de uso. Filtre por provedor, modelo, intervalo de tempo, status e custo. Exporte logs e agregue o uso de tokens em todas as conexões." + "description": "Acesse logs detalhados de chamadas e análises de uso. Filtre por provedor, modelo, período, status e custo. Exporte logs e agregue o uso de tokens em todas as conexões." }, "omni-budget": { "name": "Orçamento e Limites de Taxa", - "description": "Configure limites de gastos, cotas de tokens e políticas de limite de taxa por chave de API ou globalmente. Inspecione o consumo atual e aplique controles de custos entre provedores." + "description": "Configure limites de gastos, cotas de tokens e políticas de limite de taxa por chave de API ou globalmente. Inspecione o consumo atual e aplique controles de custo entre provedores." }, "omni-settings": { "name": "Configurações", - "description": "Leia e atualize as configurações globais do aplicativo: prompts do sistema, orçamento de pensamento, filtros de IP, regras de payload, padrões de combo e configuração de require-login." + "description": "Leia e atualize as configurações globais da aplicação: prompts de sistema, orçamento de raciocínio, filtros de IP, regras de payload, padrões de combo e configuração de exigência de login." }, "omni-proxies": { "name": "Configuração de Proxy", - "description": "Configure proxies HTTP/HTTPS/SOCKS para requisições a provedores upstream. Defina regras de proxy globais ou por provedor, teste a conectividade e gerencie a rotação de proxies." + "description": "Configure proxies HTTP/HTTPS/SOCKS para solicitações ao provedor upstream. Defina regras de proxy por provedor ou globais, teste a conectividade e gerencie a rotação de proxies." }, "omni-cache": { "name": "Cache", - "description": "Gerencie o cache de respostas de LLM. Visualize estatísticas de cache, limpe entradas, configure políticas de TTL e controle limites de cache por similaridade semântica." + "description": "Gerencie o cache de respostas de LLM. Veja estatísticas do cache, limpe entradas, configure políticas de TTL e controle os limites de cache por similaridade semântica." }, "omni-compression": { - "name": "Compressão", - "description": "Configure os modos de compressão RTK (saída de comando), Caveman (prosa) e empilhada. Gerencie pacotes de idiomas, regras personalizadas e teste a compressão de prompts reduzindo tokens em 60–90%." + "name": "Compression", + "description": "Configure os modos de compressão RTK (saída de comando), Caveman (prosa) e empilhados. Gerencie pacotes de idioma, regras personalizadas e teste a compressão de prompt, reduzindo tokens em 60–90%." }, "omni-context-rtk": { "name": "Contexto e RTK", - "description": "Configure filtros RTK, regras de engenharia de contexto e configurações de relay de contexto. Teste a compressão com amostras reais de prompts e gerencie pipelines de transformação de contexto." + "description": "Configure filtros RTK, regras de engenharia de contexto e configurações de context relay. Teste a compressão com amostras reais de prompt e gerencie pipelines de transformação de contexto." }, "omni-resilience": { "name": "Resiliência e Monitoramento", - "description": "Monitore a integridade do provedor, estados de circuit-breaker, métricas de latência p50/p95/p99 e alertas de proteção de orçamento. Inspecione cooldowns de conexão e bloqueios de modelos em tempo real." + "description": "Monitore a saúde do provedor, estados do circuit breaker, métricas de latência p50/p95/p99 e alertas de guarda de orçamento. Inspecione cooldowns de conexão e bloqueios de modelo em tempo real." }, "omni-cli-tools": { - "name": "Ferramentas de CLI", - "description": "Gerencie integrações de ferramentas de CLI expostas via API. Liste, configure e invoque plugins de ferramentas de CLI que estendem a superfície de automação do OmniRoute." + "name": "Ferramentas CLI", + "description": "Gerencie integrações de ferramentas CLI expostas via API. Liste, configure e invoque plugins de ferramentas CLI que estendem a superfície de automação do OmniRoute." }, "omni-tunnels": { "name": "Túneis", "description": "Crie e gerencie túneis seguros (ngrok, Cloudflare Tunnel, personalizado) para expor o OmniRoute à internet ou compartilhar acesso com agentes remotos e pipelines de CI." }, "omni-sync-cloud": { - "name": "Sincronização na Nuvem", - "description": "Sincronize a configuração do OmniRoute, conexões de provedores e definições de/para o armazenamento em nuvem. Gerencie a autenticação de workers na nuvem e destinos de backup remoto." + "name": "Sincronização em Nuvem", + "description": "Sincronize a configuração do OmniRoute, conexões de provedor e configurações com armazenamento em nuvem. Gerencie a autenticação do cloud worker e destinos de backup remoto." }, "omni-db-backups": { "name": "Banco de Dados e Backups", - "description": "Acione backups do sistema, restaure a partir de arquivos de backup e gerencie o ciclo de vida do banco de dados SQLite. Suporta estratégias de exportação, importação e snapshots incrementais." + "description": "Acione backups do sistema, restaure a partir de arquivos de backup e gerencie o ciclo de vida do banco de dados SQLite. Suporta estratégias de exportação, importação e snapshot incremental." }, "omni-webhooks": { "name": "Webhooks", "description": "Registre, liste, teste e remova endpoints de webhook. Configure assinaturas de eventos (request.completed, provider.error, budget.exceeded, etc.) e gerencie novas tentativas de entrega." }, "omni-mcp": { - "name": "Servidor MCP", + "name": "MCP", "description": "Conecte-se ao servidor MCP do OmniRoute (37 ferramentas, 3 transportes: SSE/stdio/HTTP). Abrange ferramentas de roteamento, cache, compressão, memória, skills, provedores e auditoria em 16 escopos de permissão." }, "omni-agents-a2a": { "name": "Agentes e Protocolo A2A", - "description": "Interaja com o OmniRoute via protocolo agente-a-agente JSON-RPC 2.0. 6 skills A2A integradas: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities." + "description": "Interaja com o OmniRoute via protocolo agent-to-agent JSON-RPC 2.0. 6 skills A2A integradas: smart-routing, quota-management, provider-discovery, cost-analysis, health-report, list-capabilities." }, "omni-version-manager": { "name": "Gerenciador de Versões", - "description": "Instale, inicie, pare, reinicie e atualize serviços incorporados (9Router, CLIProxyAPI). Monitore o status do serviço, recupere logs e configure o início automático para endpoints de serviço exclusivamente locais." + "description": "Instale, inicie, pare, reinicie e atualize serviços embutidos (9Router, CLIProxyAPI). Monitore o status do serviço, obtenha logs e configure o início automático para endpoints de serviço somente locais." }, "omni-inference": { "name": "Inferência (compatível com OpenAI)", - "description": "Os principais endpoints de inferência compatíveis com OpenAI: chat completions, embeddings, imagens, áudio (TTS/STT), moderações, rerank e a Responses API. A principal superfície de integração para agentes de IA." + "description": "Os endpoints de inferência principais compatíveis com OpenAI: chat completions, embeddings, imagens, áudio (TTS/STT), moderações, rerank e a Responses API. A principal superfície de integração para agentes de IA." }, "cli-serve": { "name": "CLI: Serve", - "description": "Inicie, pare e reinicie o servidor OmniRoute a partir da CLI. Gerencie o modo daemon, configuração de portas, recuperação automática, integração com a bandeja do sistema e o atalho para abrir o painel." + "description": "Inicie, pare e reinicie o servidor OmniRoute a partir da CLI. Gerencie o modo daemon, configuração de porta, recuperação automática, integração com a bandeja do sistema e o atalho para abrir o dashboard." }, "cli-health": { "name": "CLI: Health", - "description": "Verifique a integridade do servidor, o status dos componentes e métricas em tempo real a partir da CLI. Execute `health`, `health components` e `health watch` para obter um painel em tempo real de circuit breakers e status dos provedores." + "description": "Verifique a saúde do servidor, o status dos componentes e métricas em tempo real a partir da CLI. Execute `health`, `health components` e `health watch` para um dashboard em tempo real dos circuit breakers e do status dos provedores." }, "cli-providers": { "name": "CLI: Providers", - "description": "Gerencie conexões de provedores a partir da CLI: liste provedores disponíveis/configurados, adicione, teste, test-all, valide, rotacione chaves de API e visualize métricas por provedor." + "description": "Gerencie conexões de provedor a partir da CLI: liste provedores disponíveis/configurados, adicione, teste, test-all, valide, rotacione chaves de API e veja métricas por provedor." }, "cli-keys": { - "name": "CLI: Chaves de API", - "description": "Crie, liste, rotacione e revogue chaves de API do OmniRoute a partir da CLI. Gerencie fluxos OAuth para autenticação de provedores e inspecione escopos e expiração de chaves." + "name": "CLI: API Keys", + "description": "Crie, liste, rotacione e revogue chaves de API do OmniRoute a partir da CLI. Gerencie fluxos OAuth para autenticação de provedor e inspecione escopos e expiração de chave." }, "cli-models": { - "name": "CLI: Modelos", - "description": "Consulte modelos de IA disponíveis, liste aliases de modelos e navegue pelo catálogo completo de modelos a partir da CLI. Filtre por provedor, pesquise por capacidade e resolva variantes de nomes de modelos." + "name": "CLI: Models", + "description": "Consulte os modelos de IA disponíveis, liste aliases de modelo e navegue pelo catálogo completo a partir da CLI. Filtre por provedor, pesquise por capacidade e resolva variantes de nome de modelo." }, "cli-chat": { "name": "CLI: Chat", - "description": "Envie conclusões de chat, transmita respostas e inicie uma sessão REPL interativa a partir da CLI. Suporta todos os provedores do OmniRoute, roteamento de combos e configuração de prompt do sistema." + "description": "Envie chat completions, transmita respostas e inicie uma sessão REPL interativa a partir da CLI. Suporta todos os provedores do OmniRoute, roteamento por combo e configuração de prompt de sistema." }, "cli-routing": { "name": "CLI: Roteamento e Combos", - "description": "Crie, liste, atualize e exclua combos de roteamento a partir da CLI. Teste estratégias de roteamento, inspecione métricas de combos e configure cadeias de fallback interativamente." + "description": "Crie, liste, atualize e exclua combos de roteamento a partir da CLI. Teste estratégias de roteamento, inspecione métricas de combo e configure cadeias de fallback interativamente." }, "cli-resilience": { "name": "CLI: Resiliência e Cotas", - "description": "Inspecione e gerencie estados de circuit-breaker, cooldowns de conexão, limites de cotas e níveis de backoff a partir da CLI. Reinicie provedores travados e configure limites de resiliência." + "description": "Inspecione e gerencie estados do circuit breaker, cooldowns de conexão, limites de cota e níveis de backoff a partir da CLI. Redefina provedores travados e configure limites de resiliência." }, "cli-compression": { - "name": "CLI: Compressão", - "description": "Configure e teste a compressão de prompts a partir da CLI. Gerencie filtros RTK, regras Caveman, modos de compressão empilhados e visualize a saída da compressão com prompts reais." + "name": "CLI: Compression", + "description": "Configure e teste a compressão de prompt a partir da CLI. Gerencie filtros RTK, regras Caveman, modos de compressão empilhados e pré-visualize a saída da compressão com prompts reais." }, "cli-contexts": { "name": "CLI: Contextos e Sessões", - "description": "Gerencie configurações de engenharia de contexto, conjuntos de filtros RTK e sessões de conversa a partir da CLI. Aplique configurações de context-relay e inspecione pipelines de contexto ativos." + "description": "Gerencie configurações de engenharia de contexto, conjuntos de filtros RTK e sessões de conversa a partir da CLI. Aplique configurações de context relay e inspecione pipelines de contexto ativos." }, "cli-cost-usage": { "name": "CLI: Custo e Uso", - "description": "Visualize detalhamentos de custos, uso de tokens e logs de chamadas a partir da CLI. Filtre por provedor, modelo ou intervalo de datas. Exporte relatórios de uso e inspecione os gastos por conexão." + "description": "Veja detalhamentos de custo, uso de tokens e logs de chamadas a partir da CLI. Filtre por provedor, modelo ou período. Exporte relatórios de uso e inspecione gastos por conexão." }, "cli-mcp": { "name": "CLI: MCP", - "description": "Inspecione o status do servidor MCP, liste ferramentas e escopos registrados, execute invocações de ferramentas e gerencie logs de auditoria do MCP a partir da CLI." + "description": "Inspecione o status do servidor MCP, liste ferramentas e escopos registrados, execute invocações de ferramentas e gerencie logs de auditoria MCP a partir da CLI." }, "cli-a2a": { "name": "CLI: Protocolo A2A", - "description": "Interaja com o servidor A2A do OmniRoute a partir da CLI. Envie tarefas, inspecione o histórico de execução de habilidades e teste o protocolo agente a agente JSON-RPC 2.0 interativamente." + "description": "Interaja com o servidor A2A do OmniRoute a partir da CLI. Envie tarefas, inspecione o histórico de execução de skills e teste o protocolo agent-to-agent JSON-RPC 2.0 interativamente." }, "cli-tunnel": { "name": "CLI: Túneis", - "description": "Inicie e pare conexões de túnel (ngrok, Cloudflare, personalizado) a partir da CLI. Inspecione URLs de túneis ativos, configure a autenticação e teste a acessibilidade externa." + "description": "Inicie e pare conexões de túnel (ngrok, Cloudflare, personalizado) a partir da CLI. Inspecione URLs de túnel ativas, configure a autenticação e teste a alcançabilidade externa." }, "cli-backup-sync": { "name": "CLI: Backup e Sincronização", - "description": "Faça backup e restaure dados do OmniRoute a partir da CLI. Dispare snapshots incrementais, sincronize com o armazenamento em nuvem, gerencie cronogramas de backup e restaure a partir de arquivos de backup." + "description": "Faça backup e restaure dados do OmniRoute a partir da CLI. Acione snapshots incrementais, sincronize com armazenamento em nuvem, gerencie agendamentos de backup e restaure a partir de arquivos de arquivamento." }, "cli-policy-audit": { "name": "CLI: Política e Auditoria", - "description": "Inspecione logs de auditoria, gerencie políticas de acesso, visualize dados de telemetria e revise o histórico de solicitações a partir da CLI. Filtre por tipo de evento, usuário ou intervalo de tempo para fluxos de trabalho de conformidade." + "description": "Inspecione logs de auditoria, gerencie políticas de acesso, veja dados de telemetria e revise o histórico de solicitações a partir da CLI. Filtre por tipo de evento, usuário ou período para fluxos de conformidade." }, "cli-batches": { "name": "CLI: Lotes e Arquivos", - "description": "Envie e monitore trabalhos de inferência em lote a partir da CLI. Faça upload e gerencie arquivos para processamento em lote, recupere resultados e integre pipelines de lote com fluxos de trabalho de CI/CD." + "description": "Envie e monitore jobs de inferência em lote a partir da CLI. Envie e gerencie arquivos para processamento em lote, obtenha resultados e integre pipelines de lote com fluxos de CI/CD." }, "cli-eval": { "name": "CLI: Evals", - "description": "Crie e execute suítes de avaliação, acompanhe o progresso de benchmarks ao vivo, visualize scorecards, compare o desempenho de modelos e integre execuções de avaliação com fluxos de trabalho de CI a partir da CLI." + "description": "Crie e execute suítes de avaliação, acompanhe o progresso de benchmarks em tempo real, veja scorecards, compare o desempenho de modelos e integre execuções de eval com fluxos de CI a partir da CLI." }, "cli-plugins-skills": { - "name": "CLI: Plugins, Habilidades e Memória", + "name": "CLI: Plugins, Skills e Memória", "description": "Gerencie Omni Skills (listar, instalar, testar, remover), plugins (criar, configurar) e memória persistente (pesquisar, adicionar, limpar) a partir da CLI." }, "cli-setup": { "name": "CLI: Setup e Configuração", - "description": "Execute a configuração inicial, defina as configurações globais da CLI, gerencie variáveis de ambiente, verifique atualizações e configure a inicialização automática por meio dos comandos de setup e config da CLI." + "description": "Execute a configuração inicial, configure as opções globais da CLI, gerencie variáveis de ambiente, verifique atualizações e configure o início automático via os comandos setup e config da CLI." }, "cli-skill-collector": { - "name": "CLI: Coletor de Habilidades de Agente", - "description": "Detecte ferramentas de codificação de CLI instaladas (Claude Code, Codex, Cursor, Copilot, Cline e mais), pesquise no GitHub por habilidades de agente correspondentes e instale-as nas ferramentas detectadas por meio das APIs integradas do OmniRoute." + "name": "CLI: Coletor de Agent Skills", + "description": "Detecte ferramentas de codificação CLI instaladas (Claude Code, Codex, Cursor, Copilot, Cline e outras), pesquise no GitHub agent skills correspondentes e instale-as nas ferramentas detectadas via as APIs integradas do OmniRoute." }, "config-codex-cli": { - "name": "Configuração: Codex CLI", - "description": "Fluxo de trabalho passo a passo do agente para configurar a CLI do OpenAI Codex em qualquer máquina (Linux, macOS, Windows) para usar o OmniRoute como um backend compatível com a OpenAI. Detecta o SO e o shell, grava o arquivo config.toml e 7 perfis nomeados, define variáveis de ambiente e verifica a configuração." + "name": "Config: Codex CLI", + "description": "Fluxo de trabalho passo a passo para configurar a Codex CLI da OpenAI em qualquer máquina (Linux, macOS, Windows) para usar o OmniRoute como backend compatível com OpenAI. Detecta o SO e o shell, grava config.toml e 7 perfis nomeados, define variáveis de ambiente e verifica a configuração." }, "omni-github-skills": { - "name": "Descoberta de Habilidades do GitHub", - "description": "Pesquise, pontue, escaneie e importe habilidades de agente de repositórios do GitHub que contenham SKILL.md, CLAUDE.md, .cursorrules e arquivos de habilidades de agente semelhantes. Descubra habilidades da comunidade em mais de 160 categorias de provedores, avalie a relevância com pontuação heurística, verifique a presença de malware ou segredos codificados diretamente no código e instale nos diretórios de agentes do Hermes, Claude Code, Gemini CLI ou OpenCode." + "name": "Descoberta de Skills no GitHub", + "description": "Pesquise, pontue, escaneie e importe agent skills de repositórios do GitHub que contenham arquivos SKILL.md, CLAUDE.md, .cursorrules e similares. Descubra skills da comunidade em mais de 160 categorias de provedor, avalie a relevância com pontuação heurística, verifique malware ou segredos codificados, e instale nos diretórios de agente do Hermes, Claude Code, Gemini CLI ou OpenCode." } }, "pageTitle": "Agent Skills", - "pageSubtitle": "Ensine seu agente a operar o OmniRoute — 23 áreas de API + 21 famílias de CLI", + "pageSubtitle": "Ensine seu agente a operar o OmniRoute — 22 áreas de API + 20 famílias de CLI", "conceptCard": { "agent": { "title": "Agent Skills — Saída", @@ -12193,8 +12198,8 @@ "coverageLabel": "Cobertura", "mcpUrl": "URL MCP", "a2aLink": "A2A", - "mcpPrompt": "Adicione este endpoint MCP ao seu agente para fornecer a ele 37 ferramentas OmniRoute.", - "a2aPrompt": "Registre este Agent Card com seu orquestrador para habilitar a delegação de tarefas A2A.", + "mcpPrompt": "Adicione este endpoint MCP ao seu agente para dar a ele 37 ferramentas do OmniRoute.", + "a2aPrompt": "Registre este Agent Card no seu orquestrador para habilitar a delegação de tarefas A2A.", "refresh": "Atualizar", "copyUrl": "Copiar URL", "viewOnGithub": "Ver no GitHub", @@ -12213,25 +12218,25 @@ "regenerateError": "Falha ao regenerar skills." }, "freeProviderRankingsPage": { - "title": "Classificações de Provedores Gratuitos", - "subtitle": "Melhores provedores gratuitos classificados pelas pontuações de ELO dos modelos dos rankings da Arena AI", - "loading": "Carregando classificações...", - "errorLoading": "Falha ao carregar classificações", - "emptyState": "Nenhuma classificação disponível ainda. Os dados de ELO da Arena são sincronizados na inicialização (diariamente) — volte em breve ou acione uma sincronização manual. Desative a Sincronização de ELO da Arena em Feature Flags ou defina ARENA_ELO_SYNC_ENABLED=false para desativar.", - "bestModel": "Melhores", - "allCategories": "Todas as Categorias", - "categoryDefault": "Padrão", - "categoryCoding": "Programação", - "categoryReview": "Revisão", - "categoryDocumentation": "Documentação", - "categoryDebugging": "Depuração", - "colRank": "Posição", - "colProvider": "Provedor", - "colTopModel": "Melhor Modelo", - "colScore": "Pontuação", - "colAvgScore": "Pontuação Média", - "colModels": "Modelos", - "colType": "Tipo", + "title": "__MISSING__:Free Provider Rankings", + "subtitle": "__MISSING__:Best free providers ranked by model ELO scores from Arena AI leaderboards", + "loading": "__MISSING__:Loading rankings...", + "errorLoading": "__MISSING__:Failed to load rankings", + "emptyState": "__MISSING__:No rankings available yet. Arena ELO data syncs on startup (daily) — check back shortly, or trigger a manual sync. Disable Arena ELO Sync in Feature Flags or set ARENA_ELO_SYNC_ENABLED=false to opt out.", + "bestModel": "__MISSING__:Best", + "allCategories": "__MISSING__:All Categories", + "categoryDefault": "__MISSING__:Default", + "categoryCoding": "__MISSING__:Coding", + "categoryReview": "__MISSING__:Review", + "categoryDocumentation": "__MISSING__:Documentation", + "categoryDebugging": "__MISSING__:Debugging", + "colRank": "__MISSING__:Rank", + "colProvider": "__MISSING__:Provider", + "colTopModel": "__MISSING__:Top Model", + "colScore": "__MISSING__:Score", + "colAvgScore": "__MISSING__:Avg Score", + "colModels": "__MISSING__:Models", + "colType": "__MISSING__:Type", "filterConfiguredOnly": "Somente configurados", "filterAvailableOnly": "Somente disponíveis", "filterAvailableOnlyHelp": "Ocultar provedores cujas conexões estão todas limitadas por taxa ou sem cota.", @@ -12239,13 +12244,13 @@ "configuredOnlyHint": "Mostrar apenas provedores com conexões ativas", "noConfiguredProviders": "Nenhum provedor configurado encontrado. Adicione uma conexão de provedor primeiro.", "colConfigured": "Status", - "typeAll": "Todos os Tipos", - "typeNoauth": "Sem Cadastro", - "typeOauth": "Login via OAuth", - "typeApikey": "Chave de API", - "sortTypeFirst": "Mais fáceis primeiro", - "sortTypeFirstHelp": "Agrupar por esforço de cadastro (Sem Cadastro → Login via OAuth → Chave de API), mantendo a ordem de qualidade dentro de cada grupo", - "typeLegend": "Sem Cadastro = configuração zero · Login via OAuth = entre com sua própria conta · Chave de API = use sua própria chave ou o nível gratuito daquele provedor" + "typeAll": "__MISSING__:All Types", + "typeNoauth": "__MISSING__:No Signup", + "typeOauth": "__MISSING__:OAuth Login", + "typeApikey": "__MISSING__:API Key", + "sortTypeFirst": "__MISSING__:Easiest first", + "sortTypeFirstHelp": "__MISSING__:Group by signup effort (No Signup → OAuth Login → API Key), keeping quality order within each group", + "typeLegend": "__MISSING__:No Signup = zero setup · OAuth Login = sign in with your own account · API Key = bring your own key or that provider's free tier" }, "discovery": { "title": "Descoberta de provedores", @@ -12273,11 +12278,11 @@ "models": "Modelos" }, "noAuthProvider": { - "title": "Nenhuma autenticação necessária", - "description": "Este provedor está pronto para uso imediato — sem necessidade de cadastro ou chave de API.", - "accountDescription": "Pronto para usar — sem necessidade de cadastro. Adicione contas para rotação de limite de taxa.", + "title": "Não requer autenticação", + "description": "Este provedor está pronto para uso imediato — não requer cadastro nem chave de API.", + "accountDescription": "Pronto para uso — não requer cadastro. Adicione contas para rotação de limite de taxa.", "addAccount": "Adicionar Conta", - "accountName": "Conta {provider} {number}", + "accountName": "Conta {number} do {provider}", "accounts": "Contas ({count})", "adding": "Adicionando...", "autoGeneratedAccount": "Usando uma conta gerada automaticamente. Selecione “{addLabel}” para rotação de limite de taxa.", @@ -12286,12 +12291,12 @@ "removeAccount": "Remover conta", "proxyForAccount": "Proxy para a Conta {number}", "saved": "Salvo", - "custom": "Personalizado", + "custom": "Custom", "noSavedProxies": "Nenhum proxy salvo — adicione um em Configurações → Proxy", "directConnection": "Direto (sem proxy)", - "host": "Host", + "host": "Anfitrião", "port": "Porta", - "usernameOptional": "Nome de usuário (opcional)", + "usernameOptional": "Usuário (opcional)", "passwordOptional": "Senha (opcional)", "cancel": "Cancelar", "saving": "Salvando...", @@ -12303,29 +12308,29 @@ "updateProviderFailed": "Falha ao atualizar provedor", "providerEnabled": "{provider} ativado", "providerDisabled": "{provider} desativado", -"providerAdded": "{provider} adicionado", -"add": "Adicionar", -"manualApiKey": "Usar uma chave de API manual", -"createDahlTokenFailed": "__MISSING__:Failed to create Dahl token", -"providerProxy": "__MISSING__:Proxy", -"providerProxyConfigureHint": "__MISSING__:Configure proxy", -"providerProxyTitleConfigured": "__MISSING__:Proxy configured: {host}" + "providerAdded": "{provider} adicionado", + "add": "Adicionar", + "manualApiKey": "Usar uma chave de API manual", + "createDahlTokenFailed": "__MISSING__:Failed to create Dahl token", + "providerProxy": "__MISSING__:Proxy", + "providerProxyConfigureHint": "__MISSING__:Configure proxy", + "providerProxyTitleConfigured": "__MISSING__:Proxy configured: {host}" }, "gamification": { "leaderboardScopes": { - "allTime": "Todo o período", + "allTime": "Tudo", "weekly": "Semanal", "monthly": "Mensal", - "tokensShared": "Tokens compartilhados" + "tokensShared": "Tokens Compartilhados" }, - "leaderboardLoadFailed": "Falha ao carregar a tabela de classificação (HTTP {status})", + "leaderboardLoadFailed": "Falha ao carregar ranking (HTTP {status})", "scope": "Escopo", "tokensShared": "tokens compartilhados", "points": "pontos", - "rank": "Classificação", + "rank": "Posição", "name": "Nome", "score": "Pontuação", - "leaderboardEmpty": "Nenhuma entrada ainda para este escopo. Comece a usar o OmniRoute para aparecer na tabela de classificação!", + "leaderboardEmpty": "Ainda não há entradas para este escopo. Comece a usar o OmniRoute para aparecer no ranking!", "profileLoadFailed": "Falha ao carregar dados do perfil", "levelTitles": { "beginner": "Iniciante", @@ -12341,13 +12346,13 @@ "platinum": "Platina", "diamond": "Diamante" }, - "tierLabel": "Tier: {tier}", - "dayStreak": "Sequência de {count} dias", + "tierLabel": "Nível: {tier}", + "dayStreak": "sequência de {count} dias", "levelProgress": "Nível {current} → {next}", - "totalXpEarned": "{count} XP total ganho", + "totalXpEarned": "{count} de XP total ganho", "maintainStreak": "Continue usando o OmniRoute todos os dias para manter sua sequência!", "badgesTitle": "Emblemas ({earned}/{total})", - "noBadges": "Nenhum emblema disponível ainda.", + "noBadges": "Ainda não há emblemas disponíveis.", "hiddenBadge": "Conquista oculta", "earnedDate": "Conquistado em {date}", "earnedOn": "Conquistado em {date}", @@ -12369,23 +12374,23 @@ "badges": { "first-token": { "name": "Primeiro Token", - "description": "Fez sua primeira requisição de API", - "criteria": "Complete sua primeira requisição de API através do OmniRoute." + "description": "Fez sua primeira solicitação de API", + "criteria": "Complete sua primeira solicitação de API pelo OmniRoute." }, "token-consumer": { "name": "Consumidor de Tokens", - "description": "Fez 1.000 requisições de API", - "criteria": "Complete 1.000 requisições de API através do OmniRoute." + "description": "Fez 1.000 solicitações de API", + "criteria": "Complete 1.000 solicitações de API pelo OmniRoute." }, "token-machine": { "name": "Máquina de Tokens", - "description": "Fez 10.000 requisições de API", - "criteria": "Complete 10.000 requisições de API através do OmniRoute." + "description": "Fez 10.000 solicitações de API", + "criteria": "Complete 10.000 solicitações de API pelo OmniRoute." }, "token-whale": { "name": "Baleia de Tokens", - "description": "Fez 100.000 requisições de API", - "criteria": "Complete 100.000 requisições de API através do OmniRoute." + "description": "Fez 100.000 solicitações de API", + "criteria": "Complete 100.000 solicitações de API pelo OmniRoute." }, "generous": { "name": "Generoso", @@ -12419,18 +12424,18 @@ }, "architect": { "name": "Arquiteto", - "description": "Criou 3 rotas combo", - "criteria": "Crie 3 rotas combo." + "description": "Criou 3 rotas de combo", + "criteria": "Crie 3 rotas de combo." }, "speedster": { "name": "Velocista", - "description": "Manteve a latência média abaixo de 500 ms em 100 requisições", - "criteria": "Mantenha a latência média abaixo de 500 ms em 100 requisições." + "description": "Manteve latência média abaixo de 500 ms em 100 solicitações", + "criteria": "Mantenha a latência média abaixo de 500 ms em 100 solicitações." }, "resilient": { "name": "Resiliente", - "description": "Manteve 100% de uptime por 7 dias", - "criteria": "Mantenha 100% de uptime por 7 dias consecutivos." + "description": "Manteve 100% de disponibilidade por 7 dias", + "criteria": "Mantenha 100% de disponibilidade por 7 dias consecutivos." }, "daily-user": { "name": "Usuário Diário", @@ -12453,41 +12458,41 @@ "criteria": "Use o OmniRoute por 365 dias consecutivos." }, "early-adopter": { - "name": "Pioneiro", - "description": "Entrou no primeiro mês da gamificação", - "criteria": "Participe no primeiro mês após o lançamento da gamificação." + "name": "Adotante Pioneiro", + "description": "Entrou no primeiro mês de gamificação", + "criteria": "Entre no primeiro mês após o lançamento da gamificação." }, "bug-hunter": { "name": "Caçador de Bugs", - "description": "Relatou 5 problemas", - "criteria": "Relate 5 problemas válidos." + "description": "Reportou 5 issues", + "criteria": "Reporte 5 issues válidas." }, "contributor": { - "name": "Colaborador", - "description": "Mesclou 1 pull request", - "criteria": "Ter 1 pull request mesclado no OmniRoute." + "name": "Contribuidor", + "description": "Teve 1 pull request mesclado", + "criteria": "Tenha 1 pull request mesclado no OmniRoute." }, "community-leader": { "name": "Líder da Comunidade", "description": "Alcançou o top 10 em qualquer ranking", - "criteria": "Alcançar o top 10 em qualquer ranking." + "criteria": "Alcance o top 10 em qualquer ranking." }, "secret-badge": { "name": "???", - "description": "Uma conquista oculta aguarda...", + "description": "Uma conquista oculta espera...", "criteria": "Complete a conquista oculta para revelar este emblema." } } }, "featureFlags": { - "title": "Feature Flags", - "activeCount": "{count} ativas", - "inactiveCount": "{count} inativas", - "dbOverrideCount": "{count} substituições no BD", - "searchPlaceholder": "Buscar flags...", + "title": "Sinalizadores de recursos", + "activeCount": "{count} ativo", + "inactiveCount": "{count} inativo", + "dbOverrideCount": "{count} Substituições de banco de dados", + "searchPlaceholder": "Pesquisar sinalizadores...", "categories": { - "all": "Todas", - "security": "Segurança", + "all": "Todos", + "security": "Security", "network": "Rede", "policies": "Políticas", "runtime": "Runtime", @@ -12496,38 +12501,38 @@ "requiresRestart": "Requer Reinicialização" }, "categoryLabel": "Categoria: {category}", - "caution": "Atenção", + "caution": "Cuidado", "danger": "Perigo", "requiresRestart": "Requer reinicialização", - "source": "Origem", -"ccDiscoveryAliasesEnvWarning": "Ativo via variável de ambiente (EXPOSE_CC_DISCOVERY_ALIASES) — isso substitui qualquer alternância de painel abaixo.", + "source": "Source", + "ccDiscoveryAliasesEnvWarning": "Ativo via variável de ambiente (EXPOSE_CC_DISCOVERY_ALIASES) — isso substitui qualquer alternância de painel abaixo.", "resetFlag": "Redefinir {label} para o padrão", - "reset": "Redefinir", - "loadFailed": "Falha ao carregar as feature flags", - "updateFailedHttp": "Falha ao atualizar a flag: HTTP {status}", - "updateFailed": "Falha ao atualizar a flag", - "restartFailedHttp": "Falha ao reiniciar: HTTP {status}", - "restartFailed": "Falha ao reiniciar", - "resetOverridesFailedHttp": "Falha ao redefinir as substituições: HTTP {status}", - "resetOverridesFailed": "Falha ao redefinir as substituições", - "restartRequiredCount": "{count, plural, one {# alteração requer} other {# alterações requerem}} a reinicialização do servidor para entrar em vigor.", - "restartRequiredDescription": "Essas flags só se aplicam após o recarregamento do processo. Reinicie agora ou continue editando — as flags pendentes permanecerão na fila até que você confirme.", + "reset": "Resetar", + "loadFailed": "Falha ao carregar feature flags", + "updateFailedHttp": "Falha ao atualizar flag: HTTP {status}", + "updateFailed": "Falha ao atualizar sinalizador", + "restartFailedHttp": "Falha na reinicialização: HTTP {status}", + "restartFailed": "Falha na reinicialização", + "resetOverridesFailedHttp": "Falha ao redefinir substituições: HTTP {status}", + "resetOverridesFailed": "Falha ao redefinir substituições", + "restartRequiredCount": "{count, plural, one {# alteração requer} other {# alterações requerem}} reiniciar o servidor para ter efeito.", + "restartRequiredDescription": "Essas flags só entram em vigor depois que o processo é recarregado. Reinicie agora ou continue editando — as flags pendentes ficam na fila até você confirmar.", "restartServer": "Reiniciar Servidor", "cancel": "Cancelar", "restarting": "Reiniciando…", - "confirmRestart": "Confirmar reinicialização", - "restartViewDescription": "Essas flags só entram em vigor após a reinicialização do servidor. Alterne-as como qualquer outra flag — a alteração é mantida imediatamente, mas o novo valor só é lido na inicialização do processo. Use o banner Reiniciar servidor acima para aplicar.", - "retry": "Tentar novamente", - "noSearchResults": "Nenhuma flag corresponde à sua pesquisa", + "confirmRestart": "Confirmar Reinicialização", + "restartViewDescription": "Essas flags só entram em vigor após a reinicialização do servidor. Alterne-as como qualquer outra flag — a alteração é persistida imediatamente, mas o novo valor só é lido na inicialização do processo. Use o banner Reiniciar Servidor acima para aplicar.", + "retry": "Retry", + "noSearchResults": "Nenhuma sinalização corresponde à sua pesquisa", "resetAllOverrides": "Redefinir todas as substituições", - "confirmResetOverrides": "Redefinir todas as {count} substituições de banco de dados?", - "resetting": "Redefinindo...", - "confirmReset": "Confirmar redefinição", + "confirmResetOverrides": "Redefinir todas as {count} substituição(ões) do banco de dados?", + "resetting": "Resetando...", + "confirmReset": "Confirmar Redefinição", "enumValues": { - "off": "Desativado", + "off": "Off", "warn": "Avisar", "block": "Bloquear", - "redact": "Ocultar", + "redact": "Redigir", "disabled": "Desativado", "dual": "Dual", "alias": "Alias", @@ -12535,198 +12540,198 @@ }, "definitions": { "REQUIRE_API_KEY": { - "description": "Exigir uma chave de API para todas as solicitações de entrada." + "description": "Exige uma chave de API para todas as solicitações recebidas." }, "INPUT_SANITIZER_ENABLED": { - "description": "Habilitar a sanitização de entrada para todas as solicitações." + "description": "Ativa a sanitização de entrada para todas as solicitações." }, "INJECTION_GUARD_MODE": { - "description": "Definir o modo de proteção contra injeção de prompt." + "description": "Define o modo de proteção contra injeção de prompt." }, "PII_REDACTION_ENABLED": { - "description": "Ocultar informações de identificação pessoal das solicitações." + "description": "Redige informações de identificação pessoal das solicitações." }, "PII_RESPONSE_SANITIZATION": { - "description": "Sanitizar informações de identificação pessoal nas respostas do provedor." + "description": "Sanitiza informações de identificação pessoal nas respostas do provedor." }, "PII_RESPONSE_SANITIZATION_MODE": { - "description": "Escolha como a PII da resposta é tratada: ocultar a substitui, avisar apenas a registra, bloquear rejeita a resposta e desativado desabilita a sanitização." + "description": "Escolha como as PII da resposta são tratadas: redact as substitui, warn apenas as registra, block rejeita a resposta, e off desativa a sanitização." }, "OUTBOUND_SSRF_GUARD_ENABLED": { - "description": "Bloquear solicitações de saída para intervalos de IP privados ou internos." + "description": "Bloqueia solicitações de saída para faixas de IP privadas ou internas." }, "ALLOW_API_KEY_REVEAL": { - "description": "Permitir que usuários autenticados do painel revelem chaves de API armazenadas em vez de ver apenas valores mascarados." + "description": "Permite que usuários autenticados do dashboard revelem chaves de API armazenadas em vez de ver apenas valores mascarados." }, "ENABLE_TLS_FINGERPRINT": { - "description": "Habilitar o modo furtivo de impressão digital TLS." + "description": "Ativa o modo furtivo de fingerprint TLS." }, "ONEPROXY_ENABLED": { - "description": "Habilitar o proxy de solicitações por meio do 1proxy." + "description": "Ativa o proxy de solicitações via 1proxy." }, "PROXY_AUTO_SELECT_ENABLED": { - "description": "Quando nenhum proxy for atribuído a uma conexão, selecionar automaticamente o primeiro proxy de registro em funcionamento. Desativado por padrão porque, caso contrário, um proxy de registro se torna um fallback global para todo o tráfego (#3332)." + "description": "Quando nenhum proxy é atribuído a uma conexão, seleciona automaticamente o primeiro proxy funcional do registro. Desativado por padrão porque, caso contrário, um proxy do registro se torna um fallback global para todo o tráfego (#3332)." }, "OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK": { - "description": "Permitir que os fluxos de OAuth e validação de provedor ignorem um proxy fixado quando as verificações de acessibilidade do proxy falharem. Desativado por padrão porque isso pode alterar o IP de saída da conta." + "description": "Permite que fluxos de OAuth e validação de provedor ignorem um proxy fixado quando as verificações de alcançabilidade do proxy falham. Desativado por padrão porque isso pode alterar o IP de saída da conta." }, "MITM_DISABLE_TLS_VERIFY": { - "description": "Desativar a verificação de certificado TLS para o proxy MITM." + "description": "Desativa a verificação de certificado TLS para o proxy MITM." }, "OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS": { - "description": "Permitir URLs de provedores que apontam para redes privadas ou internas." + "description": "Permite URLs de provedor que apontam para redes privadas ou internas." }, "OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS": { - "description": "Permitir provedores em localhost, LAN e intervalos de IP privados. Isso é necessário para modelos locais compatíveis com a OpenAI e vem habilitado por padrão. Endpoints de metadados de nuvem, como 169.254.169.254, permanecem bloqueados." + "description": "Permite provedores em localhost, LAN e faixas de IP privadas. Isso é necessário para modelos locais compatíveis com OpenAI e está ativado por padrão. Endpoints de metadados de nuvem como 169.254.169.254 permanecem bloqueados." }, "ENABLE_CC_COMPATIBLE_PROVIDER": { - "description": "Habilitar o modo de provedor compatível com o Claude Code." + "description": "Ativa o modo de provedor compatível com o Claude Code." }, "TOOL_POLICY_MODE": { - "description": "Definir o modo de aplicação da política de uso de ferramentas." + "description": "Define o modo de aplicação da política de uso de ferramentas." }, "RATE_LIMIT_AUTO_ENABLE": { - "description": "Habilitar automaticamente o limite de taxa com base nos padrões de uso." + "description": "Ativa automaticamente a limitação de taxa com base em padrões de uso." }, "ALLOW_MULTI_CONNECTIONS_PER_COMPAT_NODE": { - "description": "Permitir várias conexões para cada nó de compatibilidade." + "description": "Permite múltiplas conexões para cada nó de compatibilidade." }, "RESPONSES_PASSTHROUGH_DROP_COMMENTARY": { - "description": "Remover itens de saída internos da fase de comentário dos fluxos de passagem da API de Respostas antes de encaminhá-los aos clientes. Desative esta flag para receber comentários brutos de upstream." + "description": "Remove itens de saída da fase de comentário interno dos streams de passthrough da Responses API antes de encaminhá-los aos clientes. Desative esta flag para receber o comentário bruto do upstream." }, "OMNIROUTE_MCP_ENFORCE_SCOPES": { - "description": "Impor restrições de escopo para o acesso a ferramentas MCP." + "description": "Aplica restrições de escopo para o acesso a ferramentas MCP." }, "OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS": { - "description": "Comprimir as descrições das ferramentas MCP para reduzir o uso de tokens." + "description": "Comprime as descrições de ferramentas MCP para reduzir o uso de tokens." }, "OMNIROUTE_ENABLE_RUNTIME_BACKGROUND_TASKS": { - "description": "Habilitar o processamento de tarefas em segundo plano em tempo de execução." + "description": "Ativa o processamento de tarefas em segundo plano em runtime." }, "OMNIROUTE_DISABLE_BACKGROUND_SERVICES": { - "description": "Desativar todos os serviços em segundo plano, incluindo atualização de cota e sincronização." + "description": "Desativa todos os serviços em segundo plano, incluindo atualização de cota e sincronização." }, "OMNIROUTE_RTK_TRUST_PROJECT_FILTERS": { - "description": "Confiar nos filtros RTK no nível do projeto sem validação." + "description": "Confia em filtros RTK de nível de projeto sem validação." }, "OMNIROUTE_ENABLE_LIVE_WS": { - "description": "Iniciar o servidor WebSocket do painel em tempo real na importação na porta de loopback 20132. Defina a flag como 0 ou false para desativá-lo. A exposição à LAN também requer LIVE_WS_HOST=0.0.0.0 e LIVE_WS_ALLOWED_ORIGINS." + "description": "Inicia o servidor WebSocket do dashboard em tempo real na importação, na porta loopback 20132. Defina a flag como 0 ou false para desativá-lo. A exposição na LAN também requer LIVE_WS_HOST=0.0.0.0 e LIVE_WS_ALLOWED_ORIGINS." }, "OMNIROUTE_CODEX_WS_ENABLED": { - "description": "Permitir que o Codex use Responses via WebSocket. Quando desativado, o Codex recorre a HTTP Responses." + "description": "Permite que o Codex use Responses via WebSocket. Quando desativado, o Codex recorre a Responses via HTTP." }, "OMNIROUTE_EMERGENCY_FALLBACK": { - "description": "Rotear requisições com orçamento esgotado para o provedor e modelo de fallback gratuito de emergência." + "description": "Roteia solicitações com orçamento esgotado para o provedor e modelo de fallback gratuito de emergência." }, "STREAM_RECOVERY_ENABLED": { - "description": "Tentar novamente fluxos SSE upstream truncados de forma transparente antes que qualquer byte de resposta chegue ao cliente." + "description": "Tenta novamente streams SSE truncados do upstream de forma transparente antes que qualquer byte de resposta chegue ao cliente." }, "STREAM_RECOVERY_MIDSTREAM_ENABLED": { - "description": "Permitir que a recuperação de fluxo solicite a resposta novamente e a costure após os bytes já terem chegado ao cliente." + "description": "Permite que a recuperação de stream solicite a resposta novamente e a costure depois que bytes já chegaram ao cliente." }, "MODEL_CATALOG_INCLUDE_NAMES": { - "description": "Incluir campos de nome amigáveis para exibição nas respostas de /v1/models. Desative isso para clientes que aceitam apenas IDs de modelo." + "description": "Inclui campos de nome amigável para exibição nas respostas de /v1/models. Desative isso para clientes que aceitam apenas IDs de modelo." }, "MODELS_CATALOG_PREFIX_MODE": { - "description": "Controlar prefixos de ID de modelo em /v1/models: dual emite prefixos alias e canônicos, alias emite apenas prefixos curtos e canonical emite apenas IDs de provedor completos." + "description": "Controla os prefixos de ID de modelo em /v1/models: dual emite prefixos de alias e canônicos, alias emite apenas prefixos curtos, e canonical emite apenas IDs completos de provedor." }, "ARENA_ELO_SYNC_ENABLED": { - "description": "Sincronizar periodicamente os dados de ELO da tabela de classificação da Arena AI para classificações de inteligência de modelo." + "description": "Sincroniza periodicamente os dados de ELO do ranking Arena AI para classificações de inteligência de modelo." }, "CLI_COMPAT_ALL": { - "description": "Habilitar o modo de compatibilidade para todos os clientes CLI." + "description": "Ativa o modo de compatibilidade para todos os clientes CLI." }, "MODEL_ALIAS_COMPAT_ENABLED": { - "description": "Habilitar a camada de compatibilidade de alias de modelo." + "description": "Ativa a camada de compatibilidade de alias de modelo." }, "PRICING_SYNC_ENABLED": { - "description": "Sincronizar dados de preços automaticamente. A variável de ambiente PRICING_SYNC_ENABLED também deve ser true." + "description": "Sincroniza automaticamente os dados de preços. A variável de ambiente PRICING_SYNC_ENABLED também deve ser true." }, "OMNIROUTE_AUTO_SYNC_CODEX_PROFILES": { - "description": "Após a sincronização do provedor-modelo, regenerar os perfis ~/.codex/*.config.toml a partir do catálogo ativo. Isso nunca altera a configuração ativa ou padrão do Codex e fica desativado por padrão." + "description": "Após a sincronização de modelos do provedor, regenera os perfis ~/.codex/*.config.toml a partir do catálogo ativo. Isso nunca altera a configuração ativa ou padrão do Codex e está desativado por padrão." }, "OMNIROUTE_AUTO_SYNC_CLAUDE_PROFILES": { - "description": "Após a sincronização do provedor-modelo, regenerar os perfis ~/.claude/profiles//settings.json a partir do catálogo ativo. Isso nunca altera a configuração ativa ou padrão do Claude e fica desativado por padrão." + "description": "Após a sincronização de modelos do provedor, regenera os perfis ~/.claude/profiles//settings.json a partir do catálogo ativo. Isso nunca altera a configuração ativa ou padrão do Claude e está desativado por padrão." }, "OMNIROUTE_DISABLE_LOCAL_HEALTHCHECK": { - "description": "Desativar o endpoint de verificação de integridade da instância local." + "description": "Desativa o endpoint de verificação de saúde da instância local." }, "OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK": { - "description": "Desativar a verificação de integridade de validação de token." + "description": "Desativa a verificação de saúde de validação de token." }, "SKILLS_SANDBOX_NETWORK_ENABLED": { - "description": "Habilitar acesso à rede no sandbox de habilidades." + "description": "Ativa o acesso à rede no sandbox de skills." } } }, "comboControl": { - "title": "Central de Controle de Combos", - "unavailable": "Central de Controle de Combos indisponível", + "title": "Central de Controle de Combo", + "unavailable": "Central de Controle de Combo indisponível", "backToCombos": "Voltar para Combos", - "loadFailed": "Falha ao carregar a central de controle de combos", + "loadFailed": "Falha ao carregar a central de controle de combo", "state": { - "healthy": "Saudável", + "healthy": "Healthy", "warning": "Precisa de atenção", "critical": "Crítico", "idle": "Ocioso" }, "active": "Ativo", "disabled": "Desativado", - "description": "Visualização central somente leitura para comportamento de roteamento, integridade, cota, métricas de tempo de execução e decisões recentes para .", + "description": "Visão central somente leitura do comportamento de roteamento, saúde, cota, métricas de runtime e decisões recentes para .", "refresh": "Atualizar", "editInCombos": "Editar em Combos", "requests": "Requisições", "success": "Sucesso", - "latency": "Latência", + "latency": "Latency", "quota": "Cota", - "rangeWindow": "Janela de {range}", - "runtimeHealthBlend": "combinação de runtime/health", + "rangeWindow": "janela de {range}", + "runtimeHealthBlend": "combinação runtime/saúde", "averageResponseTime": "tempo médio de resposta", "worstQuota": "Pior cota", "providerAccountTelemetry": "telemetria de provedor/conta", "overview": "Visão geral", "overviewDescription": "Estratégia, status de runtime e links de controle para este combo.", - "strategy": "Estratégia", + "strategy": "Strategy", "targets": "Alvos", - "providers": "Provedores", + "providers": "Providers", "targetCounts": "{configured} configurados · {resolved} resolvidos", - "healthReasons": "Motivos de integridade", + "healthReasons": "Motivos de saúde", "healthReason": { - "noRecentTraffic": "Nenhum tráfego recente do combo", - "lowSuccessRate": "Baixa taxa de sucesso", + "noRecentTraffic": "Nenhum tráfego recente de combo", + "lowSuccessRate": "Taxa de sucesso baixa", "successBelowTarget": "Taxa de sucesso abaixo da meta", - "highFallbackRate": "Alta taxa de fallback", + "highFallbackRate": "Taxa de fallback alta", "elevatedFallbackRate": "Taxa de fallback elevada", "quotaExhausted": "Pelo menos uma cota está esgotada", "quotaNearlyExhausted": "A cota está quase esgotada", "quotaGettingLow": "A cota está ficando baixa", - "trafficHighlySkewed": "A distribuição de tráfego está altamente desequilibrada", + "trafficHighlySkewed": "A distribuição de tráfego está muito desequilibrada", "comboHealthy": "O combo parece saudável" }, "configuredTargets": "Alvos configurados", - "configuredTargetsDescription": "As etapas salvas do combo, enriquecidas com dados de integridade correspondentes quando disponíveis.", + "configuredTargetsDescription": "As etapas salvas do combo, enriquecidas com dados de saúde correspondentes quando disponíveis.", "noConfiguredTargets": "Nenhum alvo configurado.", "runtimeConfig": "Configuração de runtime", "runtimeConfigDescription": "Configurações avançadas selecionadas para este combo.", "noRuntimeConfig": "Nenhuma configuração de runtime personalizada.", "resolvedTargets": "Alvos de runtime resolvidos", - "resolvedTargetsDescription": "Alvos achatados após a resolução de combos aninhados e métricas no nível do alvo.", - "noResolvedTargetHealth": "Nenhuma integridade de alvo resolvida ainda.", + "resolvedTargetsDescription": "Alvos achatados após a resolução de combos aninhados e métricas por alvo.", + "noResolvedTargetHealth": "Ainda não há saúde de alvo resolvida.", "quotaDistribution": "Cota e distribuição", - "noQuotaSnapshots": "Nenhum snapshot de cota para esta janela de combo.", - "usageSkew": "Desequilíbrio de uso", + "noQuotaSnapshots": "Nenhum snapshot de cota para esta janela do combo.", + "usageSkew": "Distorção de uso", "recentDecisions": "Decisões de roteamento recentes", - "recentDecisionsDescription": "Logs de chamadas recentes filtrados por este nome de combo. Abra o Analytics para explicabilidade total.", - "noRecentLogs": "Nenhum log de chamada de combo recente encontrado.", - "quickLinks": "Links rápidos", - "comboHealth": "Integridade do combo", - "callLogs": "Logs de chamadas", + "recentDecisionsDescription": "Logs de chamadas recentes filtrados pelo nome deste combo. Abra Analytics para explicabilidade completa.", + "noRecentLogs": "Nenhum log de chamada recente encontrado para este combo.", + "quickLinks": "Atalhos", + "comboHealth": "Combo Health", + "callLogs": "Logs de Chamadas", "costs": "Custos", "playground": "Playground", "nestedCombo": "Combo aninhado", - "modelTarget": "Alvo do modelo", - "weight": "{value}% de peso", - "comboReference": "Referência do combo", + "modelTarget": "Alvo de modelo", + "weight": "peso de {value}%", + "comboReference": "Referência de combo", "accountShort": "conta {id}", "keyShort": "chave {id}", "stepShort": "etapa {id}", @@ -12738,27 +12743,27 @@ }, "usageLimits": { "usdUsageQuota": "Cota de uso em USD", - "usdUsageQuotaDescription": "Bloqueia esta chave com um erro de API 400 após o gasto local em USD atingir a cota diária ou semanal configurada.", + "usdUsageQuotaDescription": "Bloqueia esta chave com um erro de API 400 depois que o gasto local em USD atinge a cota diária ou semanal configurada.", "dailyQuotaUsd": "Cota diária (USD)", "weeklyQuotaUsd": "Cota semanal (USD)", - "quotaWindowDescription": "A cota semanal segue a redefinição semanal em cache do Claude quando disponível; caso contrário, recorre a uma janela móvel de 7 dias. A cota diária usa o dia do calendário de Fortaleza.", + "quotaWindowDescription": "A cota semanal segue a redefinição semanal em cache do Claude quando disponível; caso contrário, recorre a uma janela contínua de 7 dias. A cota diária usa o dia de calendário de Fortaleza.", "apiKeyUsdQuota": "Cota em USD da chave de API", - "apiKeyUsdQuotaDescription": "Quando ativado, @@om-usage retorna cota diária, cota semanal, gasto diário e gasto semanal em USD. O semanal segue a redefinição em cache do Claude quando disponível.", + "apiKeyUsdQuotaDescription": "Quando ativado, @@om-usage retorna cota diária, cota semanal, gasto diário e gasto semanal em USD. A semanal segue a redefinição em cache do Claude quando disponível.", "enabled": "Ativado", "disabled": "Desativado", "dailySpend": "Gasto diário", "weeklySpend": "Gasto semanal", "dailyQuota": "Cota diária", "weeklyQuota": "Cota semanal", - "fallbackRollingDays": "fallback: {days} dias móveis", - "fallbackRollingDaysShort": "Fallback de {days}d móveis", - "resetDueNow": "redefinição pendente agora", + "fallbackRollingDays": "fallback: janela contínua de {days} dias", + "fallbackRollingDaysShort": "Fallback contínuo {days}d", + "resetDueNow": "redefinição prevista para agora", "resetsInHours": "redefine em {count}h", "resetsInDays": "redefine em {count}d", - "saveFailed": "Falha ao salvar os limites de uso", + "saveFailed": "Falha ao salvar limites de uso", "saving": "Salvando...", "saveQuota": "Salvar cota", - "loadUsdCostsFailed": "Falha ao carregar os custos em USD", + "loadUsdCostsFailed": "Falha ao carregar custos em USD", "usdCost": "Custo em USD", "close": "Fechar", "loadingUsdCosts": "Carregando custos em USD", @@ -12768,53 +12773,53 @@ "rows": "Linhas", "window": "Janela", "unknown": "desconhecido", - "fromRecordedReset": "A partir do reset de {quota} registrado", - "fromObservedReset": "A partir do reset de {quota} observado", - "fromReset": "A partir do reset de {quota}", + "fromRecordedReset": "A partir da redefinição {quota} registrada", + "fromObservedReset": "A partir da redefinição {quota} observada", + "fromReset": "A partir da redefinição {quota}", "quotaEstimator": "Estimador de cota", "noApiKeyUsage": "Nenhum uso de chave de API nesta janela do provedor.", - "requestTokenCounts": "{requests} requisições · {tokens} tokens", - "noUsdLimit": "Sem limite de USD" + "requestTokenCounts": "{requests} solicitações · {tokens} tokens", + "noUsdLimit": "Sem limite em USD" }, "freeBudget": { "title": "Orçamento de tokens gratuitos", "remaining": "{remaining} restantes · {percent}% de {total}", - "steadyMonth": "Estável / mês", + "steadyMonth": "Constante / mês", "firstMonth": "Primeiro mês (+ créditos)", "usedThisMonth": "Usado este mês", - "segmentHint": "Cada segmento = um pool gratuito · pool com deduplicação, contagem honesta (sem tetos inflados de limite de taxa).", - "boost": "Desbloqueie mais ~{tokens}/mês com uma recarga única de $10 no OpenRouter (50 → 1000 req/dia)", - "uncapped": "Permanentemente gratuito, sem limite publicado (com limite de taxa) — acesso real, não contabilizado no destaque:", - "tosRestricted": "{count, plural, one {# modelo marcado como restrito por ToS} other {# modelos marcados como restritos por ToS}} — você decide", + "segmentHint": "Cada segmento = um pool gratuito · deduplicado por pool, contagem honesta (sem tetos de limite de taxa inflados).", + "boost": "Desbloqueie ~{tokens} a mais/mês com uma recarga única de $10 na OpenRouter (50 → 1000 solicitações/dia)", + "uncapped": "Permanentemente gratuito, sem teto publicado (limitado por taxa) — acesso real, não contabilizado no total principal:", + "tosRestricted": "{count, plural, one {# modelo} other {# modelos}} sinalizado(s) como restrito(s) pelos Termos de Serviço — você decide", "provider": "Provedor", "model": "Modelo", "modelName": "Nome do modelo", "type": "Tipo", "tokensMonth": "Tokens/mês", "credit": "{tokens} de crédito", - "hideTosRestricted": "Ocultar restritos por ToS", + "hideTosRestricted": "Ocultar restritos pelos Termos de Serviço", "sort": "Ordenar", "freeType": { "daily": "diário", "monthly": "mensal", "creditMonthly": "crédito/mês", - "uncapped": "sem limite", + "uncapped": "sem teto", "signupCredit": "crédito de cadastro", "keyless": "sem chave", "discontinued": "descontinuado" }, "tosTitle": { - "avoid": "Restrito por ToS — revise os termos", - "caution": "Atenção — cláusulas de uso pessoal / proxy", + "avoid": "Restrito pelos Termos de Serviço — revise os termos", + "caution": "Cuidado — cláusulas de uso pessoal / proxy", "ok": "Geralmente permissivo" } }, "providerHealthAutopilot": { "title": "Piloto Automático de Saúde do Provedor", - "description": "Encontra provedores instáveis, tempos de espera de conta, erros obsoletos e correções manuais seguras.", + "description": "Encontra provedores instáveis, cooldowns de conta, erros desatualizados e correções manuais seguras.", "loadFailed": "Falha ao carregar o relatório do piloto automático", - "actionApplied": "{action} aplicado.", - "actionFailed": "Ação do piloto automático falhou", + "actionApplied": "{action} aplicado(a).", + "actionFailed": "Falha na ação do piloto automático", "refresh": "Atualizar", "status": "Status", "issues": "Problemas", @@ -12827,57 +12832,57 @@ "loading": "carregando" }, "loadingRecommendations": "Carregando recomendações do provedor...", - "noRecommendations": "Nenhuma recomendação de integridade do provedor no momento.", + "noRecommendations": "Nenhuma recomendação de saúde do provedor no momento.", "providerMetrics": "pontuação {score}% · ativos {active}/{total} · cooldown {cooldown} · bloqueios de modelo {lockouts}", "providerState": { "healthy": "saudável", "degraded": "degradado", - "down": "inoperante" + "down": "inativo" }, "severity": { - "info": "info", + "info": "informação", "warning": "aviso", "critical": "crítico" }, - "remainingSeconds": "{seconds}s restantes", + "remainingSeconds": "restam {seconds}s", "errorCode": "código {code}", "applying": "Aplicando...", "issue": { - "circuitOpenTitle": "O disjuntor do provedor está aberto", - "circuitOpenRecommendation": "Verifique a recuperação do upstream e, em seguida, redefina o disjuntor do provedor ou aguarde a janela de nova tentativa.", + "circuitOpenTitle": "O circuit breaker do provedor está aberto", + "circuitOpenRecommendation": "Verifique a recuperação do upstream e, em seguida, redefina o circuit breaker do provedor ou aguarde a janela de nova tentativa.", "circuitRecoveryTitle": "O provedor está testando a recuperação", - "circuitRecoveryRecommendation": "Aguarde a conclusão da próxima sondagem ou redefina o disjuntor após a verificação manual.", - "terminalTitle": "{label} tem um estado de conta terminal", - "terminalRecommendation": "Verifique o faturamento, autentique-se novamente ou substitua a credencial antes de reativá-la.", + "circuitRecoveryRecommendation": "Deixe a próxima sondagem terminar ou redefina o breaker após verificação manual.", + "terminalTitle": "{label} está em um estado terminal de conta", + "terminalRecommendation": "Verifique o faturamento, reautentique ou substitua a credencial antes de reativá-la.", "cooldownTitle": "{label} está em cooldown temporário", "cooldownRecommendation": "Aguarde a janela de nova tentativa do upstream ou limpe o cooldown após validar a recuperação.", - "staleErrorTitle": "{label} tem um estado de erro desatualizado", - "staleErrorRecommendation": "Limpe os campos de erro desatualizados para que a conexão fique elegível para o roteamento normal novamente.", + "staleErrorTitle": "{label} tem estado de erro desatualizado", + "staleErrorRecommendation": "Limpe os campos de erro desatualizados para que a conexão volte a ser elegível para o roteamento normal.", "inactiveTitle": "{label} está desativado", "inactiveRecommendation": "Reative apenas se isso não tiver sido desativado intencionalmente.", "modelLockoutTitle": "{model} está bloqueado para uma conexão", - "modelLockoutRecommendation": "Resolva o estado da conexão ou confirme se a cota/disponibilidade do modelo foi recuperada antes de limpar o bloqueio.", - "quotaTitle": "O monitor de cota relata {status}", - "quotaRecommendation": "Revise o uso da cota e alterne o tráfego para outra conexão saudável, se necessário." + "modelLockoutRecommendation": "Resolva o estado da conexão ou confirme que a cota/disponibilidade do modelo se recuperou antes de limpar o bloqueio.", + "quotaTitle": "O monitor de cota reporta {status}", + "quotaRecommendation": "Revise o uso da cota e redirecione o tráfego para outra conexão saudável, se necessário." }, "action": { - "resetProviderBreaker": "Redefinir disjuntor do provedor", + "resetProviderBreaker": "Redefinir breaker do provedor", "clearConnectionCooldown": "Limpar cooldown da conexão", "disableConnection": "Desativar esta conexão", "clearStaleError": "Limpar estado de erro desatualizado", "reactivateConnection": "Reativar conexão", - "clearModelLockout": "Limpar bloqueio do modelo" + "clearModelLockout": "Limpar bloqueio de modelo" } }, "changelogPage": { "newsTab": "Novidades", - "changelogTab": "Registro de alterações", - "loading": "Carregando registro de alterações...", - "announcementsLoadFailed": "Não foi possível carregar os comunicados. Tente novamente mais tarde.", - "noAnnouncements": "Nenhum comunicado novo no momento.", + "changelogTab": "Changelog", + "loading": "Carregando changelog...", + "announcementsLoadFailed": "Não foi possível carregar os anúncios. Tente novamente mais tarde.", + "noAnnouncements": "Nenhum anúncio novo no momento.", "learnMore": "Saiba mais", - "changelogLoadFailed": "Não foi possível carregar o registro de alterações. Tente novamente mais tarde.", - "retry": "Tentar novamente", + "changelogLoadFailed": "Não foi possível carregar o changelog. Tente novamente mais tarde.", + "retry": "Retry", "viewFullHistory": "Ver histórico completo no GitHub" }, "reasoningRouting": { @@ -12986,31 +12991,31 @@ "testButton": "Testar Chaos Mode", "testTask": "Escreva um poema curto sobre inteligência artificial", "loadingProviderModels": "Carregando provedores...", - "systemPromptPlaceholder": "Opcional: substituir o prompt do sistema padrão do modo caos...", + "systemPromptPlaceholder": "Opcional: substituir o prompt de sistema padrão do modo caos...", "enabled": "Ativado", "disabled": "Desativado", - "maxTokens": "Máximo de tokens", - "maxTokensDesc": "Máximo de tokens por resposta do modelo. Valores mais altos custam mais e demoram mais.", + "maxTokens": "Tokens Máximos", + "maxTokensDesc": "Número máximo de tokens por resposta do modelo. Valores mais altos custam mais e demoram mais.", "providerIdPlaceholder": "ID do provedor (digite ou selecione)", "modelIdPlaceholder": "ID do modelo (opcional)", "on": "LIGADO", "off": "DESLIGADO", "availableProviders": "Provedores disponíveis ({count})", - "noProviderOverrides": "Sem substituições — todos os provedores ativos participarão com seus modelos padrão", + "noProviderOverrides": "Nenhuma substituição — todos os provedores ativos participarão com seus modelos padrão", "resetFailed": "__MISSING__:Reset failed", "resetSuccess": "__MISSING__:Config reset to defaults", "running": "__MISSING__:Running...", "testFailed": "__MISSING__:Test failed" }, "kimiSponsorBanner": { - "title": "A Kimi (Moonshot AI) é a amiga fundadora de código aberto do OmniRoute", - "description": "O Kimi K3 traz uma janela de contexto de 1M de tokens e desempenho de codificação de ponta para o OmniRoute por uma fração do custo.", - "cta": "Obter Kimi Code", - "partnerLinkNote": "Link de parceiro", - "dismissAriaLabel": "Descartar" + "foundingFriendTitle": "A Kimi (Moonshot AI) é a Amiga do Código Aberto fundadora do OmniRoute", + "description": "Use o Kimi K3 no OmniRoute pela API oficial da Kimi. Aproveite inteligência de fronteira gastando menos.", + "cta": "Obter uma chave de API da Kimi", + "partnerLinkNote": "Link de parceria", + "dismissAriaLabel": "Dispensar" }, -"featureFlagExposeFunctionalGatewayMirrorsDescription": "Anuncie os IDs de espelho / em /v1/models para modelos cujo proprietário canônico não possui credenciais ativas, mas um gateway de passagem com credenciais ativas os roteia. Aviso: adiciona entradas de catálogo para todos os clientes quando ativado globalmente.", -"radarPage": { + "featureFlagExposeFunctionalGatewayMirrorsDescription": "Anuncie os IDs de espelho / em /v1/models para modelos cujo proprietário canônico não possui credenciais ativas, mas um gateway de passagem com credenciais ativas os roteia. Aviso: adiciona entradas de catálogo para todos os clientes quando ativado globalmente.", + "radarPage": { "title": "Catálogo Radar", "subtitle": "Catálogo de modelos gratuitos enriquecido com inteligência comunitária", "loading": "Carregando catálogo...", @@ -13066,7 +13071,7 @@ "campaignsUpsellCommunity": "Limited-time campaigns are a supporter extra. Everything on this page's fixed links stays free for everyone.", "campaignsValidUntil": "Valid until {date}" }, -"radarSetupPage": { + "radarSetupPage": { "title": "Configuração do Provedor", "setupTitle": "Configuração: {provider}", "setupSubtitle": "Siga os passos abaixo para configurar este provedor", @@ -13091,7 +13096,7 @@ "addConnectionDescription": "Ainda não tem uma conexão? Adicione uma no painel de provedores.", "addConnectionLink": "Ir para provedores →" }, -"resilienceConnections": { + "resilienceConnections": { "title": "Resiliência de Conexão", "table": { "status": "Status", @@ -13185,12 +13190,12 @@ "degraded.source.modelLockouts": "Bloqueios de Modelo", "degraded.source.count": "Contagem de Conexões" }, -"featureFlagCapabilityFilterEnabledDescription": "Rejeitar requisições antes do despacho quando o modelo alvo nao possui as capacidades necessarias (visao, ferramentas, saída estruturada, janela de contexto). Protege requisições diretas que ignoram o filtro de compatibilidade do combo.", -"capabilityFilter.visionMismatch": "O provedor nao suporta visao para esta requisicao de imagem", -"capabilityFilter.toolsMismatch": "O provedor nao suporta chamada de ferramentas", -"capabilityFilter.structuredOutputMismatch": "O provedor nao suporta saida estruturada", -"capabilityFilter.contextWindowMismatch": "A requisicao excede a janela de contexto do provedor", -"publicSystem": { + "featureFlagCapabilityFilterEnabledDescription": "Rejeitar requisições antes do despacho quando o modelo alvo nao possui as capacidades necessarias (visao, ferramentas, saída estruturada, janela de contexto). Protege requisições diretas que ignoram o filtro de compatibilidade do combo.", + "capabilityFilter.visionMismatch": "O provedor nao suporta visao para esta requisicao de imagem", + "capabilityFilter.toolsMismatch": "O provedor nao suporta chamada de ferramentas", + "capabilityFilter.structuredOutputMismatch": "O provedor nao suporta saida estruturada", + "capabilityFilter.contextWindowMismatch": "A requisicao excede a janela de contexto do provedor", + "publicSystem": { "notFound": { "title": "__MISSING__:Page not found", "description": "__MISSING__:The page you're looking for doesn't exist or has been moved.", @@ -13327,7 +13332,7 @@ } } }, -"kiroAuthModal": { + "kiroAuthModal": { "title": "__MISSING__:Connect {providerLabel}", "chooseMethod": "__MISSING__:Choose your authentication method:", "builderId": "__MISSING__:AWS Builder ID", @@ -13369,7 +13374,7 @@ "errorApiKeyImportFailed": "__MISSING__:API key import failed", "errorIdcStartUrlRequired": "__MISSING__:Please enter your IDC start URL" }, -"kiroSocialOAuthModal": { + "kiroSocialOAuthModal": { "title": "__MISSING__:Connect {providerLabel} via {providerName}", "errorStartAuthorization": "__MISSING__:Failed to start authorization", "errorAuthorizationExpired": "__MISSING__:Authorization expired. Start the login flow again.", @@ -13388,7 +13393,7 @@ "errorTitle": "__MISSING__:Connection Failed", "close": "__MISSING__:Close" }, -"traeAuthModal": { + "traeAuthModal": { "errorAuthorizationFailed": "__MISSING__:Authorization failed", "errorPopupBlocked": "__MISSING__:Popup blocked — allow popups for this site, or paste the token manually below.", "errorPopupClosed": "__MISSING__:Authorization window was closed before completing.", @@ -13414,14 +13419,14 @@ "importToken": "__MISSING__:Import Token", "cancel": "__MISSING__:Cancel" }, -"sharedComponents": { + "sharedComponents": { "distributeProxies": { "distributing": "__MISSING__:Distributing...", "complete": "__MISSING__:Complete", "defaultLabel": "__MISSING__:Distribute Proxies" } }, -"providerTest": { + "providerTest": { "dialogLabel": "__MISSING__:Test {provider}", "deprecated": "__MISSING__:deprecated", "risk": "__MISSING__:risk", @@ -13456,7 +13461,7 @@ "tokens": "__MISSING__:Tokens" } }, -"proxyLog": { + "proxyLog": { "detailAriaLabel": "__MISSING__:Proxy log detail", "event": "__MISSING__:Proxy Event", "close": "__MISSING__:Close proxy detail modal", @@ -13474,7 +13479,7 @@ "error": "__MISSING__:Error", "configuration": "__MISSING__:Proxy Configuration" }, -"requestTimeline": { + "requestTimeline": { "title": "__MISSING__:Request Timeline", "modes": { "follow": "__MISSING__:Follow", @@ -13499,13 +13504,62 @@ "unknownModel": "__MISSING__:unknown", "pending": "__MISSING__:pending" }, -"metadata": { + "metadata": { "compressionTitle": "__MISSING__:Compression", "compressionDescription": "__MISSING__:Configure context compression settings to reduce token usage and costs.", "relayTitle": "__MISSING__:OmniRoute — Relay Proxies", "relayDescription": "__MISSING__:Serverless relay proxy endpoints for your AI infrastructure", "trafficInspectorTitle": "__MISSING__:Traffic Inspector — OmniRoute", "trafficInspectorDescription": "__MISSING__:Monitor LLM calls + debug any application's HTTPS traffic" + }, + "conductor": { + "title": "Conductor — frota de agentes CLI", + "subtitle": "Hub OmniConductor: runners, fila de tasks e councils, ao vivo", + "runners": "Runners", + "tasks": "Tasks", + "colName": "Nome", + "colClis": "CLIs", + "colStatus": "Status", + "colTask": "Task", + "colMode": "Modo", + "colRunner": "Runner", + "colSummary": "Resumo", + "online": "online", + "offline": "offline", + "draining": "drenando", + "hubOffline": "Hub do Conductor fora do ar ou não configurado (CONDUCTOR_HUB_URL) — melhor nada do que dado velho.", + "noRunners": "Nenhum runner registrado", + "noTasks": "Nenhuma task ainda", + "detailTitle": "Detalhe da task", + "prompt": "Prompt", + "branch": "Branch", + "fetchHint": "Busque o resultado com: git fetch origin {branch}", + "council": "Council", + "candidates": "Candidatos", + "cancel": "Cancelar task", + "cancelConfirmTitle": "Cancelar esta task?", + "cancelConfirmMessage": "O hub aborta a execução no runner. Não dá para desfazer.", + "cancelFailed": "O hub recusou o cancelamento", + "close": "Fechar", + "error": "Erro", + "faroTitle": "Faro — porta-voz da frota", + "faroSubtitle": "Chat e voz, ancorados nos eventos reais da frota. Comandos destrutivos sempre pedem confirmação.", + "faroEmpty": "Pergunte sobre a frota — ex.: \"como está a frota?\"", + "faroPending": "O Faro está pedindo confirmação", + "faroPlaceholder": "fale com o Faro…", + "faroSend": "enviar", + "faroOffline": "Faro (porta-voz) fora do ar", + "yes": "Sim", + "no": "Não", + "pushToTalk": "Segure para falar", + "speakAnswers": "falar as respostas", + "voiceModels": "Modelos de voz (provider/model deste OmniRoute)", + "voiceIdle": "falar", + "voiceListening": "ouvindo…", + "voiceThinking": "pensando…", + "voiceSpeaking": "falando…", + "sttFailed": "Transcrição falhou (confira modelo/provider de STT)", + "ttsFailed": "Síntese de voz falhou (confira modelo/provider de TTS)", + "micDenied": "Microfone indisponível ou permissão negada" } } - diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index 5ada5e8c41..a5032f53a3 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Sem substituições — todos os fornecedores ativos participarão com os seus modelos predefinidos" }, "kimiSponsorBanner": { - "title": "A Kimi (Moonshot AI) é a amiga fundadora de código aberto do OmniRoute", - "description": "O Kimi K3 traz uma janela de contexto de 1M de tokens e desempenho de codificação de ponta para o OmniRoute por uma fração do custo.", - "cta": "Obter Kimi Code", + "foundingFriendTitle": "A Kimi (Moonshot AI) é a Amiga do Código Aberto fundadora do OmniRoute", + "description": "Use o Kimi K3 no OmniRoute através da API oficial da Kimi. Desfrute de inteligência de fronteira gastando menos.", + "cta": "Obter uma chave de API da Kimi", "partnerLinkNote": "Link de parceiro", "dismissAriaLabel": "Dispensar" }, diff --git a/src/i18n/messages/ro.json b/src/i18n/messages/ro.json index 4725a20288..99bc4b32e2 100644 --- a/src/i18n/messages/ro.json +++ b/src/i18n/messages/ro.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Fără suprascrieri — toți furnizorii activi vor participa cu modelele lor implicite" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) este prietenul fondator open source al OmniRoute", - "description": "Kimi K3 aduce o fereastră de context de 1M de tokeni și performanță de vârf în codificare pentru OmniRoute la o fracțiune din cost.", - "cta": "Obține Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) este prietenul open source fondator al OmniRoute", + "description": "Folosește Kimi K3 în OmniRoute prin API-ul oficial Kimi. Bucură-te de inteligență de frontieră cheltuind mai puțin.", + "cta": "Obține o cheie API Kimi", "partnerLinkNote": "Link de partener", "dismissAriaLabel": "Închide" }, diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index 196d9b75df..7fff7292fe 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Без переопределений — все активные провайдеры будут участвовать со своими моделями по умолчанию" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) — друг-основатель открытого кода OmniRoute", - "description": "Kimi K3 предлагает контекстное окно в 1M токенов и передовую производительность кодирования в OmniRoute за долю стоимости.", - "cta": "Получить Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) — друг-основатель открытого кода OmniRoute", + "description": "Используйте Kimi K3 в OmniRoute через официальный Kimi API. Наслаждайтесь передовым интеллектом, тратя меньше.", + "cta": "Получить ключ Kimi API", "partnerLinkNote": "Партнерская ссылка", "dismissAriaLabel": "Закрыть" }, diff --git a/src/i18n/messages/sk.json b/src/i18n/messages/sk.json index 256207fdd2..618269ebbd 100644 --- a/src/i18n/messages/sk.json +++ b/src/i18n/messages/sk.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Žiadne prepísania — všetci aktívni poskytovatelia sa zapoja so svojimi predvolenými modelmi" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) je zakladajúci open source priateľ OmniRoute", - "description": "Kimi K3 prináša kontextové okno s veľkosťou 1M tokenov a špičkový výkon pri kódovaní do OmniRoute za zlomok ceny.", - "cta": "Získať Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) je zakladajúci open source priateľ OmniRoute", + "description": "Používajte Kimi K3 v OmniRoute cez oficiálne Kimi API. Užite si špičkovú inteligenciu za menej peňazí.", + "cta": "Získať Kimi API kľúč", "partnerLinkNote": "Partnerský odkaz", "dismissAriaLabel": "Zavrieť" }, diff --git a/src/i18n/messages/sv.json b/src/i18n/messages/sv.json index 61728ec8ef..499ea222c2 100644 --- a/src/i18n/messages/sv.json +++ b/src/i18n/messages/sv.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Inga åsidosättningar — alla aktiva leverantörer kommer att delta med sina standardmodeller" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) är OmniRoutes grundande öppen källkod-vän", - "description": "Kimi K3 ger ett kontextfönster på 1M token och ledande kodningsprestanda till OmniRoute till en bråkdel av kostnaden.", - "cta": "Hämta Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) är OmniRoutes grundande open source-vän", + "description": "Använd Kimi K3 i OmniRoute via det officiella Kimi API:et. Njut av banbrytande intelligens till en lägre kostnad.", + "cta": "Skaffa en Kimi API-nyckel", "partnerLinkNote": "Partnerlänk", "dismissAriaLabel": "Avvisa" }, diff --git a/src/i18n/messages/sw.json b/src/i18n/messages/sw.json index 8d6e782276..b1886a820a 100644 --- a/src/i18n/messages/sw.json +++ b/src/i18n/messages/sw.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Hakuna ubatilishaji — watoa huduma wote wanaotumika watashiriki na miundo yao chaguomsingi" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) ni rafiki mwanzilishi wa chanzo huria wa OmniRoute", - "description": "Kimi K3 inaleta dirisha la muktadha la tokeni 1M na utendaji wa kiwango cha juu wa uandishi wa nambari kwenye OmniRoute kwa gharama nafuu sana.", - "cta": "Pata Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) ni Rafiki Mwanzilishi wa Open Source wa OmniRoute", + "description": "Tumia Kimi K3 kwenye OmniRoute kupitia Kimi API rasmi. Furahia akili ya kisasa kwa gharama ndogo.", + "cta": "Pata Ufunguo wa Kimi API", "partnerLinkNote": "Kiungo cha mshirika", "dismissAriaLabel": "Ondoa" }, diff --git a/src/i18n/messages/ta.json b/src/i18n/messages/ta.json index 311de3de04..f8bf80a4d7 100644 --- a/src/i18n/messages/ta.json +++ b/src/i18n/messages/ta.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "மேலெழுதல்கள் இல்லை — அனைத்து செயலில் உள்ள வழங்குநர்களும் தங்களின் இயல்புநிலை மாடல்களுடன் பங்கேற்பார்கள்" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) என்பது OmniRoute இன் நிறுவன திறந்த மூல நண்பர் ஆகும்", - "description": "Kimi K3 ஆனது 1M-டோக்கன் சூழல் சாளரத்தையும், மிகக் குறைந்த செலவில் OmniRoute க்கான அதிநவீன குறியீட்டு செயல்திறனையும் வழங்குகிறது.", - "cta": "Kimi Code-ஐப் பெறுங்கள்", + "foundingFriendTitle": "Kimi (Moonshot AI) என்பது OmniRoute-இன் நிறுவனர் ஓப்பன் சோர்ஸ் நண்பர்", + "description": "அதிகாரப்பூர்வ Kimi API வழியாக OmniRoute-இல் Kimi K3-ஐப் பயன்படுத்துங்கள். குறைந்த செலவில் முன்னணி நுண்ணறிவை அனுபவியுங்கள்.", + "cta": "Kimi API விசையைப் பெறுங்கள்", "partnerLinkNote": "பங்குதாரர் இணைப்பு", "dismissAriaLabel": "நிராகரி" }, diff --git a/src/i18n/messages/te.json b/src/i18n/messages/te.json index d94b3b37bc..8c5d306ad9 100644 --- a/src/i18n/messages/te.json +++ b/src/i18n/messages/te.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "ఓవర్‌రైడ్‌లు లేవు — యాక్టివ్‌గా ఉన్న అన్ని ప్రొవైడర్‌లు వాటి డిఫాల్ట్ మోడల్‌లతో పాల్గొంటాయి" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) అనేది OmniRoute యొక్క వ్యవస్థాపక ఓపెన్ సోర్స్ మిత్రుడు", - "description": "Kimi K3 చాలా తక్కువ ఖర్చుతో OmniRouteకు 1M-టోకెన్ కాంటెక్స్ట్ విండోను మరియు అత్యుత్తమ కోడింగ్ పనితీరును అందిస్తుంది.", - "cta": "Kimi Code పొందండి", + "foundingFriendTitle": "Kimi (Moonshot AI) అనేది OmniRoute యొక్క వ్యవస్థాపక ఓపెన్ సోర్స్ మిత్రుడు", + "description": "అధికారిక Kimi API ద్వారా OmniRouteలో Kimi K3ని ఉపయోగించండి. తక్కువ ఖర్చుతో అత్యాధునిక మేధస్సును ఆస్వాదించండి.", + "cta": "Kimi API కీ పొందండి", "partnerLinkNote": "భాగస్వామి లింక్", "dismissAriaLabel": "తీసివేయి" }, diff --git a/src/i18n/messages/th.json b/src/i18n/messages/th.json index 6488a36f2d..12ca99733c 100644 --- a/src/i18n/messages/th.json +++ b/src/i18n/messages/th.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "ไม่มีการเขียนทับ — ผู้ให้บริการที่เปิดใช้งานทั้งหมดจะเข้าร่วมด้วยโมเดลเริ่มต้นของตน" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) คือเพื่อนโอเพนซอร์สผู้ก่อตั้งของ OmniRoute", - "description": "Kimi K3 มอบหน้าต่างบริบทขนาด 1M โทเค็นและประสิทธิภาพการเขียนโค้ดระดับแนวหน้าให้กับ OmniRoute ในราคาเพียงเศษเสี้ยว", - "cta": "รับ Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) คือเพื่อนโอเพนซอร์สผู้ก่อตั้งของ OmniRoute", + "description": "ใช้ Kimi K3 ใน OmniRoute ผ่าน Kimi API อย่างเป็นทางการ เพลิดเพลินกับปัญญาระดับแนวหน้าในราคาที่ถูกลง", + "cta": "รับคีย์ Kimi API", "partnerLinkNote": "ลิงก์พันธมิตร", "dismissAriaLabel": "ปิด" }, diff --git a/src/i18n/messages/tr.json b/src/i18n/messages/tr.json index 9e7f287f85..0d23525daf 100644 --- a/src/i18n/messages/tr.json +++ b/src/i18n/messages/tr.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Geçersiz kılma yok — tüm etkin sağlayıcılar varsayılan modelleriyle katılacaktır" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI), OmniRoute'un kurucu açık kaynak dostu", - "description": "Kimi K3, maliyetin çok küçük bir kısmıyla OmniRoute'a 1M tokenlik bir bağlam penceresi ve öncü kodlama performansı getiriyor.", - "cta": "Kimi Code Edin", + "foundingFriendTitle": "Kimi (Moonshot AI), OmniRoute'un kurucu Açık Kaynak Dostudur", + "description": "Resmî Kimi API üzerinden OmniRoute'ta Kimi K3 kullanın. Daha az harcayarak öncü zekânın keyfini çıkarın.", + "cta": "Kimi API Anahtarı Alın", "partnerLinkNote": "Ortaklık bağlantısı", "dismissAriaLabel": "Kapat" }, diff --git a/src/i18n/messages/uk-UA.json b/src/i18n/messages/uk-UA.json index eefe384d24..592268cdd7 100644 --- a/src/i18n/messages/uk-UA.json +++ b/src/i18n/messages/uk-UA.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "Без перевизначень — усі активні провайдери братимуть участь зі своїми моделями за замовчуванням" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) — друг-засновник відкритого коду OmniRoute", - "description": "Kimi K3 забезпечує контекстне вікно розміром 1M токенів та передову продуктивність кодування для OmniRoute за незначну частку вартості.", - "cta": "Отримати Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) — друг-засновник відкритого коду OmniRoute", + "description": "Використовуйте Kimi K3 в OmniRoute через офіційний Kimi API. Насолоджуйтесь передовим інтелектом, витрачаючи менше.", + "cta": "Отримати ключ Kimi API", "partnerLinkNote": "Партнерське посилання", "dismissAriaLabel": "Закрити" }, diff --git a/src/i18n/messages/ur.json b/src/i18n/messages/ur.json index 4b3351a964..563c1b78e7 100644 --- a/src/i18n/messages/ur.json +++ b/src/i18n/messages/ur.json @@ -12394,9 +12394,9 @@ "noProviderOverrides": "کوئی اوور رائیڈز نہیں — تمام فعال فراہم کنندگان اپنے ڈیفالٹ ماڈلز کے ساتھ حصہ لیں گے" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) OmniRoute کا بانی اوپن سورس دوست ہے", - "description": "Kimi K3 لاگت کے ایک معمولی حصے میں OmniRoute کے لیے 1M-ٹوکن سیاق و سباق کی ونڈو اور جدید ترین کوڈنگ کارکردگی لاتا ہے۔", - "cta": "Kimi Code حاصل کریں", + "foundingFriendTitle": "Kimi (Moonshot AI) OmniRoute کا بانی اوپن سورس دوست ہے", + "description": "سرکاری Kimi API کے ذریعے OmniRoute میں Kimi K3 استعمال کریں۔ کم خرچ میں جدید ترین ذہانت سے لطف اٹھائیں۔", + "cta": "Kimi API کلید حاصل کریں", "partnerLinkNote": "پارٹنر لنک", "dismissAriaLabel": "خارج کریں" }, diff --git a/src/i18n/messages/vi.json b/src/i18n/messages/vi.json index 832d1f1bca..be4aa3a744 100644 --- a/src/i18n/messages/vi.json +++ b/src/i18n/messages/vi.json @@ -10465,6 +10465,7 @@ "tabPasteApiKey": "Dán API Key", "windsurfPasteDescription": "Trong IDE Windsurf / VS Code, hãy chạy lệnh \"Windsurf: Provide Auth Token\" từ command palette (hoặc nhấp vào nút Jupyter \"Get Windsurf Authentication Token\"), sau đó sao chép token được hiển thị và dán vào bên dưới. Mở trực tiếp windsurf.com/show-auth-token chỉ hiển thị trang \"Redirecting\" — IDE phải khởi tạo luồng này.", "grokAuthJsonDescription": "Dán TOÀN BỘ nội dung của ~/.grok/auth.json (không chỉ trường \"key\" của JWT). JWT đơn lẻ không có refresh_token nên kết nối sẽ mất sau khi hết hạn (#7610). Nếu có, hãy ưu tiên modal Nhập auth.json chuyên dụng.", + "devinDesktopPasteDescription": "Dán khóa API Devin hiện có từ một phiên Devin đã xác thực. Khả năng xuất khóa và các bước thực hiện khác nhau tùy theo phiên bản Devin và tài khoản.", "devinPasteDescription": "Cung cấp WINDSURF_API_KEY của bạn (lấy qua `devin auth login` hoặc qua lệnh \"Windsurf: Provide Auth Token\" trong IDE Windsurf).", "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", "grokAuthJsonLabel": "Grok Build auth.json", @@ -13017,9 +13018,9 @@ "testFailed": "Kiểm thử thất bại" }, "kimiSponsorBanner": { - "title": "Kimi (Moonshot AI) là người bạn mã nguồn mở sáng lập của OmniRoute", - "description": "Kimi K3 brings a 1M-token context window and frontier coding performance to OmniRoute at a fraction of the cost.", - "cta": "Get Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) là người bạn mã nguồn mở sáng lập của OmniRoute", + "description": "Dùng Kimi K3 trong OmniRoute qua Kimi API chính thức. Tận hưởng trí tuệ tiên phong với chi phí thấp hơn.", + "cta": "Nhận khóa Kimi API", "partnerLinkNote": "Partner link", "dismissAriaLabel": "Dismiss" }, @@ -13522,4 +13523,3 @@ "trafficInspectorDescription": "Theo dõi các lệnh gọi LLM và gỡ lỗi lưu lượng HTTPS của mọi ứng dụng" } } - diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index 4666bb4183..642d017a59 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -12473,9 +12473,9 @@ "noProviderOverrides": "无覆盖 — 所有活跃提供者都将使用其默认模型参与" }, "kimiSponsorBanner": { - "title": "Kimi(Moonshot AI)是 OmniRoute 的创始开源好友", - "description": "Kimi K3 为 OmniRoute 带来了 1M token 的上下文窗口和前沿的编码性能,而成本仅为极小一部分。", - "cta": "获取 Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) 是 OmniRoute 的创始开源好友", + "description": "通过官方 Kimi API 在 OmniRoute 中使用 Kimi K3。以更低的花费享受前沿智能。", + "cta": "获取 Kimi API 密钥", "partnerLinkNote": "合作伙伴链接", "dismissAriaLabel": "关闭" }, diff --git a/src/i18n/messages/zh-TW.json b/src/i18n/messages/zh-TW.json index 8426ae5bfb..7ee0dbd459 100644 --- a/src/i18n/messages/zh-TW.json +++ b/src/i18n/messages/zh-TW.json @@ -12395,9 +12395,9 @@ "noProviderOverrides": "無覆寫——所有啟用的提供者將使用其預設模型參與" }, "kimiSponsorBanner": { - "title": "Kimi(Moonshot AI)是 OmniRoute 的創始開源好友", - "description": "Kimi K3 提供 100 萬 Token 的上下文視窗與頂尖程式碼效能,但只需同類產品的一小部分成本。", - "cta": "取得 Kimi Code", + "foundingFriendTitle": "Kimi (Moonshot AI) 是 OmniRoute 的創始開源好友", + "description": "透過官方 Kimi API 在 OmniRoute 中使用 Kimi K3。以更低的花費享受前沿智慧。", + "cta": "取得 Kimi API 金鑰", "partnerLinkNote": "合作夥伴連結", "dismissAriaLabel": "關閉" }, diff --git a/src/instrumentation-node.ts b/src/instrumentation-node.ts index 7be56fb919..b3f885c93f 100755 --- a/src/instrumentation-node.ts +++ b/src/instrumentation-node.ts @@ -534,6 +534,15 @@ export async function registerNodejs(): Promise { console.warn("[STARTUP] Auto-refresh daemon failed to start (non-fatal):", msg); }), + // Conductor bridge (PRD Conductor RF1): mirrors OmniConductor hub tasks into the + // A2A TaskManager via the hub SSE. Opt-in — self-gated on CONDUCTOR_HUB_URL. + import("@/lib/conductor/boot").then((m) => { + if (m.initConductorBridge()) console.log("[STARTUP] Conductor bridge started"); + }).catch((err: unknown) => { + const msg = err instanceof Error ? err.message : String(err); + console.warn("[STARTUP] Conductor bridge failed to start (non-fatal):", msg); + }), + // Proactive connection-cooldown recovery (#8): re-validate connections whose // transient `rate_limited_until` window has elapsed OUTSIDE the request hot path, // so the first request after a cooldown does not pay the probe latency. diff --git a/src/lib/api/modelTestRunner.ts b/src/lib/api/modelTestRunner.ts index ab8f9e76bd..6738e26feb 100644 --- a/src/lib/api/modelTestRunner.ts +++ b/src/lib/api/modelTestRunner.ts @@ -23,6 +23,8 @@ const INTERNAL_ORIGIN = "http://omniroute.internal"; export const DEFAULT_MODEL_TEST_TIMEOUT_MS = 30_000; const DOLA_PRO_TEST_TIMEOUT_MS = 90_000; const DOUBAO_WEB_PROVIDER_ID = "doubao-web"; +const ZAI_WEB_PROVIDER_ID = "zai-web"; +const ZAI_WEB_TEST_TIMEOUT_MS = 60_000; const SLOW_WEB_TEST_MODELS = new Set(["dola-pro"]); const STREAMING_CHAT_TEST_MAX_TOKENS = 64; @@ -40,6 +42,12 @@ function getErrorName(error: unknown): string { return error instanceof Error ? error.name : ""; } +export function createModelTestTimeoutError(timeoutMs: number): Error { + const error = new Error(`Model test deadline exceeded after ${timeoutMs}ms`); + error.name = "TimeoutError"; + return error; +} + function extractUpstreamDetailMessage(value: unknown): string | null { const record = asRecord(value); const message = record.message; @@ -103,6 +111,10 @@ export function resolveModelTestTimeoutMs( return Math.max(requestedTimeoutMs, DOLA_PRO_TEST_TIMEOUT_MS); } + if (normalizedProviderId === ZAI_WEB_PROVIDER_ID) { + return Math.max(requestedTimeoutMs, ZAI_WEB_TEST_TIMEOUT_MS); + } + return requestedTimeoutMs; } @@ -304,6 +316,16 @@ export type ModelTestResponseText = { error?: { message: string; statusCode?: number }; }; +export function classifyModelTestOutput( + timedOut: boolean, + responseText: string, + allowsEmptyOutput: boolean +): "ok" | "empty" | "timeout" { + if (timedOut) return "timeout"; + if (!responseText && !allowsEmptyOutput) return "empty"; + return "ok"; +} + export async function extractModelTestResponseText( response: Response, streamChat: boolean @@ -419,7 +441,7 @@ export async function runSingleModelTest( let timedOut = false; const timeoutHandle = setTimeout(() => { timedOut = true; - controller.abort(); + controller.abort(createModelTestTimeoutError(effectiveTimeoutMs)); }, effectiveTimeoutMs); const runInner = async (signal: AbortSignal): Promise => { @@ -457,17 +479,17 @@ export async function runSingleModelTest( clearTimeout(timeoutHandle); const latencyMs = Date.now() - startTime; const errorName = getErrorName(error); + if (timedOut) { + return { + modelId: fullModelStr, + status: "slow", + latencyMs, + httpStatus: 504, + error: `No model output within ${Math.round(effectiveTimeoutMs / 1000)}s`, + isTimeout: true, + }; + } if (errorName === "AbortError") { - if (timedOut) { - return { - modelId: fullModelStr, - status: "slow", - latencyMs, - httpStatus: 504, - error: `No model output within ${Math.round(effectiveTimeoutMs / 1000)}s`, - isTimeout: true, - }; - } // AbortError without timeout = withRateLimit queue rejection / abort. // Surface as rate_limited so the batch endpoint can stop the loop. return { @@ -563,7 +585,12 @@ export async function runSingleModelTest( ...(quotaFlags.isQuota ? { isQuota: true } : {}), }; } - if (timedOut && !responseText) { + const outputState = classifyModelTestOutput(timedOut, responseText, isEmbedding || isRerank); + // A streaming response can yield partial text just as the test timeout + // aborts the underlying request. Partial output does not make an aborted + // request healthy: the call log correctly records that race as 499, so + // the model-test result must remain a timeout instead of turning green. + if (outputState === "timeout") { return { modelId: fullModelStr, status: "slow", @@ -582,7 +609,7 @@ export async function runSingleModelTest( responseText: "[Rerank completed successfully]", }; } - if (!responseText && !isEmbedding) { + if (outputState === "empty") { return { modelId: fullModelStr, status: "error", diff --git a/src/lib/conductor/boot.ts b/src/lib/conductor/boot.ts new file mode 100644 index 0000000000..d920cb7d48 --- /dev/null +++ b/src/lib/conductor/boot.ts @@ -0,0 +1,36 @@ +/** + * Conductor bridge boot — production wiring for `createConductorBridge`. + * + * Opt-in: only starts when `CONDUCTOR_HUB_URL` is set. Called from + * `instrumentation-node.ts` (same non-fatal pattern as the other daemons). + * No graceful-shutdown registration needed: the cursor is persisted after each + * event, so an abrupt exit loses nothing — the hub replay converges the mirror. + */ + +import { getTaskManager } from "@/lib/a2a/taskManager"; +import { getConductorCursor, setConductorCursor } from "@/lib/db/conductorBridge"; + +import { createConductorBridge, type ConductorBridge, type ConductorBridgeOptions } from "./bridge"; + +let bridge: ConductorBridge | null = null; + +/** Starts the bridge once (idempotent). Returns null when CONDUCTOR_HUB_URL is unset. */ +export function initConductorBridge(overrides: Partial = {}): ConductorBridge | null { + const hubUrl = process.env.CONDUCTOR_HUB_URL?.trim(); + if (!hubUrl) return null; + if (bridge) return bridge; + bridge = createConductorBridge({ + hubUrl, + token: process.env.CONDUCTOR_HUB_TOKEN?.trim() ?? "", + tm: getTaskManager(), + cursor: { get: getConductorCursor, set: setConductorCursor }, + ...overrides, + }); + bridge.start(); + return bridge; +} + +export function stopConductorBridge(): void { + bridge?.stop(); + bridge = null; +} diff --git a/src/lib/conductor/bridge.ts b/src/lib/conductor/bridge.ts new file mode 100644 index 0000000000..ed3396b472 --- /dev/null +++ b/src/lib/conductor/bridge.ts @@ -0,0 +1,250 @@ +/** + * Conductor Bridge — mirrors OmniConductor hub tasks into the local A2A TaskManager. + * + * The hub's SSE feed is the source of truth; this mirror is disposable and fully + * rebuildable by replay (`last_event_id`). State spelling differs on purpose: + * the Conductor follows A2A upstream with `canceled` (1 L) while OmniRoute's + * TaskManager uses `cancelled` (2 L) — the mapping here is explicit and tested. + */ + +import { z } from "zod"; + +import type { A2ATaskManager, TaskState } from "@/lib/a2a/taskManager"; + +export interface ConductorEvent { + id: string; + type: string; + payload: Record; +} + +/** Target A2A state for a Conductor event type; null = not a task-state event (tolerated). */ +export function conductorStateFor(type: string): TaskState | null { + switch (type) { + case "task.created": + return "submitted"; + case "task.scheduled": + case "task.input_required": + return "working"; + case "task.completed": + return "completed"; + case "task.failed": + return "failed"; + case "task.canceled": // Conductor/A2A upstream spelling (1 L) + return "cancelled"; // local TaskManager spelling (2 L) + default: + return null; // runner.*, council.*, terminal.*, future types — forward-compat + } +} + +/** Minimal legal path from a task's current state up to the target state. */ +const LADDER: TaskState[] = ["submitted", "working", "completed"]; + +function climb(tm: A2ATaskManager, a2aId: string, target: TaskState): void { + const task = tm.getTask(a2aId); + if (!task) return; + if (task.state === target) return; + if (task.state === "completed" || task.state === "failed" || task.state === "cancelled") return; // terminal: late events ignored + try { + if (target === "completed") { + // submitted → working → completed (the manager rejects skips) + let idx = LADDER.indexOf(task.state); + for (idx = idx + 1; idx < LADDER.length; idx++) tm.updateTask(a2aId, LADDER[idx]); + return; + } + tm.updateTask(a2aId, target); // working/failed/cancelled are reachable from any non-terminal state + } catch { + // A transition rejected by the manager must never take the bridge down; the + // hub replay will converge the mirror on the next connection. + } +} + +function ensureMirrored(tm: A2ATaskManager, index: Map, conductorId: string, payload: Record): string { + const known = index.get(conductorId); + if (known && tm.getTask(known)) return known; + const mode = typeof payload.mode === "string" ? payload.mode : "?"; + const task = tm.createTask({ + skill: "conductor", + messages: [{ role: "user", content: `Conductor task ${conductorId} (${mode})` }], + metadata: { + conductor: { + task_id: conductorId, + mode, + from: typeof payload.from === "string" ? payload.from : undefined, + }, + }, + }); + index.set(conductorId, task.id); + return task.id; +} + +function conductorMeta(tm: A2ATaskManager, a2aId: string): Record | null { + const task = tm.getTask(a2aId); + if (!task) return null; + // The manager has no public metadata mutator; direct mutation is the repo precedent + // (tests mutate task fields) and the object lives in the same process. + const meta = (task.metadata.conductor ??= {}) as Record; + return meta; +} + +/** Applies one hub event to the mirror. Never throws for event-shaped input. */ +export function applyConductorEvent(tm: A2ATaskManager, index: Map, ev: ConductorEvent): void { + const target = conductorStateFor(ev.type); + if (!target) return; + const conductorId = typeof ev.payload.task_id === "string" ? ev.payload.task_id : null; + if (!conductorId) return; + + const a2aId = ensureMirrored(tm, index, conductorId, ev.payload); + const meta = conductorMeta(tm, a2aId); + if (meta) { + if (ev.type === "task.scheduled" && typeof ev.payload.runner_id === "string") meta.runner = ev.payload.runner_id; + if (ev.type === "task.input_required") meta.input_required = true; + if (ev.type === "task.completed" || ev.type === "task.failed") { + const manifest = (ev.payload.manifest ?? {}) as Record; + if (typeof manifest.summary === "string") meta.summary = manifest.summary; + if (typeof manifest.branch === "string") meta.branch = manifest.branch; + if (typeof manifest.error === "string") meta.error = manifest.error; + } + } + if (target !== "submitted") climb(tm, a2aId, target); +} + +// ============ Incremental SSE parser ============ + +export interface SseFrame { + id?: string; + event?: string; + data: string; +} + +/** Incremental `text/event-stream` parser: feed chunks, get complete frames. Comments (`: ping`) are dropped. */ +export class SseParser { + private buffer = ""; + + push(chunk: string): SseFrame[] { + this.buffer += chunk; + const frames: SseFrame[] = []; + let cut: number; + while ((cut = this.buffer.indexOf("\n\n")) !== -1) { + const block = this.buffer.slice(0, cut); + this.buffer = this.buffer.slice(cut + 2); + const frame: SseFrame = { data: "" }; + const dataLines: string[] = []; + for (const line of block.split("\n")) { + if (line.startsWith(":")) continue; // comment/keepalive + if (line.startsWith("id:")) frame.id = line.slice(3).trim(); + else if (line.startsWith("event:")) frame.event = line.slice(6).trim(); + else if (line.startsWith("data:")) dataLines.push(line.slice(5).trimStart()); + } + if (frame.id === undefined && frame.event === undefined && dataLines.length === 0) continue; // pure comment block + frame.data = dataLines.join("\n"); + frames.push(frame); + } + return frames; + } +} + +// ============ Connection loop ============ + +/** Wire shape of the hub's SSE `data:` field — {ts, payload}; id/type live in the + * SSE frame fields (verified against the live hub, 2026-07-22). Untrusted input → Zod. */ +const hubDataSchema = z.object({ + payload: z.record(z.string(), z.unknown()), +}); + +export interface ConductorBridgeOptions { + hubUrl: string; + token: string; + tm: A2ATaskManager; + cursor: { get(): string | null; set(v: string): void }; + fetchImpl?: typeof fetch; + log?: (msg: string) => void; + backoffBaseMs?: number; +} + +export interface ConductorBridge { + start(): void; + stop(): void; + state(): "connected" | "reconnecting" | "stopped"; +} + +const BACKOFF_CAP_MS = 30_000; + +/** + * Long-lived consumer: connects to the hub SSE with the persisted cursor, mirrors + * events, reconnects with exponential backoff. A hub outage never propagates — + * errors are logged and retried; `stop()` aborts for good. + */ +export function createConductorBridge(opts: ConductorBridgeOptions): ConductorBridge { + const log = opts.log ?? ((msg: string) => console.log(`[conductor-bridge] ${msg}`)); + const doFetch = opts.fetchImpl ?? fetch; + const backoffBase = opts.backoffBaseMs ?? 1_000; + const index = new Map(); + let state: "connected" | "reconnecting" | "stopped" = "stopped"; + let abort: AbortController | null = null; + let attempt = 0; + let running = false; + + async function readStream(res: Response): Promise { + const reader = res.body?.getReader(); + if (!reader) throw new Error("SSE response without body"); + const parser = new SseParser(); + const decoder = new TextDecoder(); + for (;;) { + const { value, done } = await reader.read(); + if (done) return; + for (const frame of parser.push(decoder.decode(value, { stream: true }))) { + if (!frame.id || !frame.event) continue; // keepalive/partial frame — nada a espelhar + let payload: Record; + try { + payload = hubDataSchema.parse(JSON.parse(frame.data)).payload; + } catch { + log(`evento SSE malformado ignorado (id=${frame.id})`); + continue; + } + applyConductorEvent(opts.tm, index, { id: frame.id, type: frame.event, payload }); + opts.cursor.set(frame.id); // persisted per event — replay covers any gap on reconnect + } + } + } + + async function loop(): Promise { + while (running) { + abort = new AbortController(); + try { + const since = opts.cursor.get() ?? "0"; + const res = await doFetch(`${opts.hubUrl}/v1/events?last_event_id=${encodeURIComponent(since)}`, { + headers: { authorization: `Bearer ${opts.token}`, accept: "text/event-stream" }, + signal: abort.signal, + }); + if (!res.ok) throw new Error(`hub respondeu HTTP ${res.status}`); + state = "connected"; + attempt = 0; + log(`conectado ao hub (last_event_id=${since})`); + await readStream(res); // resolves when the hub closes the stream + throw new Error("stream encerrado pelo hub"); + } catch (err) { + if (!running) break; + state = "reconnecting"; + const wait = Math.min(backoffBase * 2 ** attempt, BACKOFF_CAP_MS); + attempt++; + log(`conexão caiu (${err instanceof Error ? err.message : String(err)}) — reconectando em ${wait}ms`); + await new Promise((resolve) => setTimeout(resolve, wait)); + } + } + state = "stopped"; + } + + return { + start() { + if (running) return; + running = true; + void loop(); + }, + stop() { + running = false; + state = "stopped"; + abort?.abort(); + }, + state: () => state, + }; +} diff --git a/src/lib/conductor/faroProxy.ts b/src/lib/conductor/faroProxy.ts new file mode 100644 index 0000000000..be10df1416 --- /dev/null +++ b/src/lib/conductor/faroProxy.ts @@ -0,0 +1,46 @@ +/** + * Server-side proxy to Faro, the OmniConductor spokesperson (Conductor PRD RF4). + * + * Faro's `/ask` requires a valid hub credential (Bearer) — that token lives only + * in server env, so the browser talks to our /api/conductor/ask route, never to + * Faro directly. The response is whitelisted to {text, pending}: `pending` set + * means Faro is asking for confirmation (the UI offers Sim/Não); the safety gate + * itself lives in Faro's engine and is never bypassed here. + */ + +import { z } from "zod"; + +const faroResponseSchema = z.object({ + text: z.string(), + pending: z.unknown().nullish(), +}); + +export interface FaroAnswer { + ok: boolean; + text: string; + pending: unknown; +} + +export interface FaroProxyOptions { + fetchImpl?: typeof fetch; +} + +const DEFAULT_FARO_URL = "http://127.0.0.1:7920"; + +export async function askFaro(message: string, opts: FaroProxyOptions = {}): Promise { + const base = process.env.CONDUCTOR_SPOKESPERSON_URL?.trim() || DEFAULT_FARO_URL; + const token = process.env.CONDUCTOR_HUB_TOKEN?.trim() ?? ""; + try { + const doFetch = opts.fetchImpl ?? fetch; + const res = await doFetch(`${base}/ask`, { + method: "POST", + headers: { authorization: `Bearer ${token}`, "content-type": "application/json" }, + body: JSON.stringify({ message }), + }); + if (!res.ok) return { ok: false, text: "", pending: null }; + const parsed = faroResponseSchema.parse(await res.json()); + return { ok: true, text: parsed.text, pending: parsed.pending ?? null }; + } catch { + return { ok: false, text: "", pending: null }; + } +} diff --git a/src/lib/conductor/fleetSkills.ts b/src/lib/conductor/fleetSkills.ts new file mode 100644 index 0000000000..d836be8799 --- /dev/null +++ b/src/lib/conductor/fleetSkills.ts @@ -0,0 +1,106 @@ +/** + * Fleet skills for the Agent Card (Conductor PRD RF2) — derives A2A skills from + * the OmniConductor hub's runner registry (`GET /v1/runners`, OASF capabilities). + * + * Fail-open by design: any problem (env unset, hub offline, bad shape) yields + * `[]` so the Agent Card stays valid, just without the fleet section. Results + * are cached for ~60s to keep the card endpoint cheap. + */ + +import { z } from "zod"; + +export interface FleetSkill { + id: string; + name: string; + description: string; + tags: string[]; +} + +/** Untrusted hub response — validate only what we read. */ +const runnersSchema = z.array( + z.object({ + online: z.boolean().optional(), + capabilities: z.object({ + clis: z + .array( + z.object({ + profile: z.string(), + models: z.array(z.object({ id: z.string() })).optional(), + }) + ) + .optional(), + skills: z.array(z.string()).optional(), + }), + }) +); + +const CACHE_TTL_MS = 60_000; +let cache: { at: number; skills: FleetSkill[] } | null = null; + +/** Test hook: resets the module cache. */ +export function clearFleetSkillsCache(): void { + cache = null; +} + +export interface FleetSkillsOptions { + fetchImpl?: typeof fetch; + nowMs?: () => number; +} + +export async function getFleetSkills(opts: FleetSkillsOptions = {}): Promise { + const hubUrl = process.env.CONDUCTOR_HUB_URL?.trim(); + if (!hubUrl) return []; + const now = opts.nowMs ?? Date.now; + if (cache && now() - cache.at < CACHE_TTL_MS) return cache.skills; + + const doFetch = opts.fetchImpl ?? fetch; + let skills: FleetSkill[] = []; + try { + const res = await doFetch(`${hubUrl}/v1/runners`, { + headers: { authorization: `Bearer ${process.env.CONDUCTOR_HUB_TOKEN?.trim() ?? ""}` }, + }); + if (res.ok) skills = deriveSkills(runnersSchema.parse(await res.json())); + } catch { + skills = []; // hub offline / shape inválido: o card omite a frota, nunca quebra + } + cache = { at: now(), skills }; + return skills; +} + +function deriveSkills(runners: z.infer): FleetSkill[] { + const online = runners.filter((r) => r.online !== false); + const byProfile = new Map }>(); + const oasfSkills = new Set(); + for (const r of online) { + for (const cli of r.capabilities.clis ?? []) { + const entry = byProfile.get(cli.profile) ?? { count: 0, models: new Set() }; + entry.count++; + for (const m of cli.models ?? []) entry.models.add(m.id); + byProfile.set(cli.profile, entry); + } + for (const s of r.capabilities.skills ?? []) oasfSkills.add(s); + } + + const skills: FleetSkill[] = []; + for (const [profile, info] of [...byProfile.entries()].sort(([a], [b]) => a.localeCompare(b))) { + const models = [...info.models].slice(0, 8); + skills.push({ + id: `conductor-cli-${profile}`, + name: `Conductor fleet: ${profile} CLI`, + description: + `Delegate coding tasks to the OmniConductor fleet's ${profile} CLI ` + + `(${info.count} runner(s) online${models.length ? `; models: ${models.join(", ")}` : ""}). ` + + "Tasks run in disposable git worktrees; results come back as branches with graduated manifests.", + tags: ["conductor", "fleet", "cli", profile], + }); + } + for (const s of [...oasfSkills].sort()) { + skills.push({ + id: `conductor-skill-${s}`, + name: `Conductor fleet skill: ${s}`, + description: `OASF skill "${s}" declared by online runners of the OmniConductor fleet.`, + tags: ["conductor", "fleet", "skill"], + }); + } + return skills; +} diff --git a/src/lib/conductor/hubProxy.ts b/src/lib/conductor/hubProxy.ts new file mode 100644 index 0000000000..e9b8dd7e73 --- /dev/null +++ b/src/lib/conductor/hubProxy.ts @@ -0,0 +1,221 @@ +/** + * Server-side proxy to the OmniConductor hub (Conductor PRD RF3). + * + * The browser NEVER talks to the hub: these helpers run only in API routes, + * authenticate with the server-side env token, and return WHITELISTED shapes — + * runner/hub tokens can never leak to the client. Fail-open: hub unset/offline + * yields a degraded snapshot ({offline: true}) instead of an error. + */ + +import { z } from "zod"; + +// ============ Whitelisted client-facing shapes ============ + +export interface FleetRunner { + id: string; + name: string; + clis: string[]; + online: boolean; + draining: boolean; +} + +export interface FleetTask { + id: string; + status: string; + mode: string; + repo: string | null; + runner: string | null; + summary: string | null; + branch: string | null; + error: string | null; + updated_at: string | null; +} + +export interface FleetSnapshot { + offline: boolean; + runners: FleetRunner[]; + tasks: FleetTask[]; +} + +export interface ConductorTaskDetail extends FleetTask { + prompt: string | null; + base_ref: string | null; + tests: unknown; + council: unknown; + created_at: string | null; +} + +// ============ Untrusted hub shapes (parse only what we read) ============ + +const hubRunnerSchema = z.object({ + id: z.string(), + online: z.boolean().optional(), + draining: z.boolean().optional(), + capabilities: z.object({ + name: z.string().optional(), + clis: z.array(z.object({ profile: z.string() })).optional(), + }), +}); + +const hubTaskSchema = z.object({ + id: z.string(), + status: z.string(), + mode: z.string().optional(), + repo: z.object({ url: z.string().optional(), base_ref: z.string().optional() }).nullish(), + spec: z.object({ prompt: z.string().optional() }).nullish(), + assigned_runner: z.string().nullish(), + manifest: z + .object({ + summary: z.string().nullish(), + branch: z.string().nullish(), + error: z.string().nullish(), + tests: z.unknown().optional(), + }) + .nullish(), + council: z.unknown().optional(), + created_at: z.string().optional(), + updated_at: z.string().optional(), +}); + +export interface HubProxyOptions { + fetchImpl?: typeof fetch; +} + +function hubConfig(): { url: string; token: string } | null { + const url = process.env.CONDUCTOR_HUB_URL?.trim(); + if (!url) return null; + return { url, token: process.env.CONDUCTOR_HUB_TOKEN?.trim() ?? "" }; +} + +async function hubGet(path: string, opts: HubProxyOptions): Promise { + const cfg = hubConfig(); + if (!cfg) return null; + const doFetch = opts.fetchImpl ?? fetch; + const res = await doFetch(`${cfg.url}${path}`, { + headers: { authorization: `Bearer ${cfg.token}` }, + }); + if (!res.ok) return null; + return res.json(); +} + +function toFleetTask(t: z.infer): FleetTask { + return { + id: t.id, + status: t.status, + mode: t.mode ?? "solo", + repo: t.repo?.url ?? null, + runner: t.assigned_runner ?? null, + summary: t.manifest?.summary ?? null, + branch: t.manifest?.branch ?? null, + error: t.manifest?.error ?? null, + updated_at: t.updated_at ?? null, + }; +} + +/** Fleet snapshot for the dashboard panel. Degraded ({offline: true}) on any failure. */ +export async function getFleetSnapshot(opts: HubProxyOptions = {}): Promise { + try { + const [rawRunners, rawTasks] = await Promise.all([ + hubGet("/v1/runners", opts), + hubGet("/v1/tasks", opts), + ]); + if (rawRunners === null || rawTasks === null) return { offline: true, runners: [], tasks: [] }; + const runners = z.array(hubRunnerSchema).parse(rawRunners).map((r) => ({ + id: r.id, + name: r.capabilities.name ?? "?", + clis: (r.capabilities.clis ?? []).map((c) => c.profile), + online: r.online !== false, + draining: r.draining === true, + })); + const tasks = z.array(hubTaskSchema).parse(rawTasks).map(toFleetTask); + return { offline: false, runners, tasks }; + } catch { + return { offline: true, runners: [], tasks: [] }; + } +} + +/** Full whitelisted detail of one task (manifest, prompt, council funnel data). */ +export async function getConductorTaskDetail( + taskId: string, + opts: HubProxyOptions = {} +): Promise { + try { + const raw = await hubGet(`/v1/tasks/${encodeURIComponent(taskId)}`, opts); + if (raw === null) return null; + const t = hubTaskSchema.parse(raw); + return { + ...toFleetTask(t), + prompt: t.spec?.prompt ?? null, + base_ref: t.repo?.base_ref ?? null, + tests: t.manifest?.tests ?? null, + council: t.council ?? null, + created_at: t.created_at ?? null, + }; + } catch { + return null; + } +} +export interface DelegationInput { + repoUrl: string; + prompt: string; + baseRef?: string; + mode?: string; + cli?: string; + model?: string; +} + +/** + * Delegates work to the fleet: translates an external A2A task into the hub's + * `POST /v1/tasks` (Conductor PRD RF5). Uses the orchestrator credential when + * set (CONDUCTOR_ORCHESTRATOR_TOKEN), falling back to the hub token. States + * flow back through the RF1 mirror — this call only creates. + */ +export async function createConductorTask( + input: DelegationInput, + opts: HubProxyOptions = {} +): Promise<{ ok: boolean; status: number; task_id?: string }> { + const cfg = hubConfig(); + if (!cfg) return { ok: false, status: 503 }; + const token = process.env.CONDUCTOR_ORCHESTRATOR_TOKEN?.trim() || cfg.token; + const body: Record = { + repo: { url: input.repoUrl, base_ref: input.baseRef?.trim() || "main" }, + spec: { prompt: input.prompt }, + mode: input.mode?.trim() || "solo", + }; + const requirements: Record = {}; + if (input.cli?.trim()) requirements.cli = input.cli.trim(); + if (input.model?.trim()) requirements.model = input.model.trim(); + if (Object.keys(requirements).length) body.requirements = requirements; + try { + const doFetch = opts.fetchImpl ?? fetch; + const res = await doFetch(`${cfg.url}/v1/tasks`, { + method: "POST", + headers: { authorization: `Bearer ${token}`, "content-type": "application/json" }, + body: JSON.stringify(body), + }); + if (!res.ok) return { ok: false, status: res.status }; + const created = z.object({ id: z.string() }).parse(await res.json()); + return { ok: true, status: res.status, task_id: created.id }; + } catch { + return { ok: false, status: 503 }; + } +} + +/** Cancels a task on the hub. Returns the hub's verdict without leaking its body on error. */ +export async function cancelConductorTask( + taskId: string, + opts: HubProxyOptions = {} +): Promise<{ ok: boolean; status: number }> { + const cfg = hubConfig(); + if (!cfg) return { ok: false, status: 503 }; + try { + const doFetch = opts.fetchImpl ?? fetch; + const res = await doFetch(`${cfg.url}/v1/tasks/${encodeURIComponent(taskId)}/cancel`, { + method: "POST", + headers: { authorization: `Bearer ${cfg.token}` }, + }); + return { ok: res.ok, status: res.status }; + } catch { + return { ok: false, status: 503 }; + } +} diff --git a/src/lib/copilot/engine.ts b/src/lib/copilot/engine.ts index 2f2366cfe6..9cef9d6c42 100644 --- a/src/lib/copilot/engine.ts +++ b/src/lib/copilot/engine.ts @@ -87,7 +87,7 @@ Use \`createCombo\` tool or \`runOmniRouteCli\` to create them.`; OmniRoute supports 212+ providers across categories: - **Free**: Qoder AI, Kiro AI -- **OAuth** (14): Claude Code, Antigravity, Codex, GitHub Copilot, Cursor, Kimi Coding, Windsurf, etc. +- **OAuth** (14): Claude Code, Antigravity, Codex, GitHub Copilot, Cursor, Kimi Coding, Devin Desktop, etc. - **API Key** (120+): OpenAI, Anthropic, Gemini, DeepSeek, Groq, xAI, Mistral, etc. - **Self-Hosted** (8+): LM Studio, vLLM, Ollama, Triton, etc. - **Custom**: \`openai-compatible-*\` and \`anthropic-compatible-*\` diff --git a/src/lib/db/conductorBridge.ts b/src/lib/db/conductorBridge.ts new file mode 100644 index 0000000000..edb0641aab --- /dev/null +++ b/src/lib/db/conductorBridge.ts @@ -0,0 +1,35 @@ +/** + * Conductor bridge persistence — SSE cursor (`last_event_id`) for the hub mirror. + * + * Uses the existing `key_value` table under a dedicated namespace (no migration + * needed — same pattern as settings.ts). The cursor lets the bridge resume the + * hub SSE from where it stopped; the hub replay covers the gap. + */ + +import { getDbInstance } from "./core"; + +const NAMESPACE = "conductor"; +const CURSOR_KEY = "last_event_id"; + +export function getConductorCursor(): string | null { + const db = getDbInstance(); + const row = db + .prepare("SELECT value FROM key_value WHERE namespace = ? AND key = ?") + .get(NAMESPACE, CURSOR_KEY) as { value: string } | undefined; + if (!row) return null; + try { + const parsed = JSON.parse(row.value); + return typeof parsed === "string" ? parsed : null; + } catch { + return null; + } +} + +export function setConductorCursor(value: string): void { + const db = getDbInstance(); + db.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES (?, ?, ?)").run( + NAMESPACE, + CURSOR_KEY, + JSON.stringify(value) + ); +} diff --git a/src/lib/db/migrationRunner/constants.ts b/src/lib/db/migrationRunner/constants.ts index 13da58e4bc..0206669f20 100644 --- a/src/lib/db/migrationRunner/constants.ts +++ b/src/lib/db/migrationRunner/constants.ts @@ -69,6 +69,95 @@ export const RENAMED_MIGRATION_COMPATIBILITY = [ toVersion: "059", toName: "manifest_routing", }, + { + fromVersion: "123", + fromName: "windsurf_to_devin_desktop", + toVersion: "151", + toName: "windsurf_to_devin_desktop", + }, + { + fromVersion: "124", + fromName: "windsurf_to_devin_desktop", + toVersion: "151", + toName: "windsurf_to_devin_desktop", + }, + { + fromVersion: "125", + fromName: "windsurf_to_devin_desktop", + toVersion: "151", + toName: "windsurf_to_devin_desktop", + }, + { + fromVersion: "126", + fromName: "windsurf_to_devin_desktop", + toVersion: "151", + toName: "windsurf_to_devin_desktop", + }, + { + fromVersion: "127", + fromName: "windsurf_to_devin_desktop", + toVersion: "151", + toName: "windsurf_to_devin_desktop", + }, + { + fromVersion: "128", + fromName: "windsurf_to_devin_desktop", + toVersion: "151", + toName: "windsurf_to_devin_desktop", + }, + { + fromVersion: "131", + fromName: "windsurf_to_devin_desktop", + toVersion: "151", + toName: "windsurf_to_devin_desktop", + }, + { + // 133 collided with 133_call_logs_session_tag once that landed on release. + fromVersion: "133", + fromName: "windsurf_to_devin_desktop", + toVersion: "151", + toName: "windsurf_to_devin_desktop", + }, + { + // 135 and 136 are canonical release migrations now. + fromVersion: "135", + fromName: "windsurf_to_devin_desktop", + toVersion: "151", + toName: "windsurf_to_devin_desktop", + }, + { + fromVersion: "136", + fromName: "windsurf_to_devin_desktop", + toVersion: "151", + toName: "windsurf_to_devin_desktop", + }, + { + // 139 and 140 are occupied by CCR and connection runtime state. + fromVersion: "139", + fromName: "windsurf_to_devin_desktop", + toVersion: "151", + toName: "windsurf_to_devin_desktop", + }, + { + fromVersion: "140", + fromName: "windsurf_to_devin_desktop", + toVersion: "151", + toName: "windsurf_to_devin_desktop", + }, + { + // 143–145 are reserved for the stacked Radar migration series. + fromVersion: "143", + fromName: "windsurf_to_devin_desktop", + toVersion: "151", + toName: "windsurf_to_devin_desktop", + }, + { + // 144 was published by this PR before the Radar reservation landed. + fromVersion: "144", + fromName: "windsurf_to_devin_desktop", + toVersion: "151", + toName: "windsurf_to_devin_desktop", + }, { fromVersion: "134", fromName: "ccr_blocks", diff --git a/src/lib/db/migrations/151_windsurf_to_devin_desktop.sql b/src/lib/db/migrations/151_windsurf_to_devin_desktop.sql new file mode 100644 index 0000000000..1ad84e67f4 --- /dev/null +++ b/src/lib/db/migrations/151_windsurf_to_devin_desktop.sql @@ -0,0 +1,214 @@ +-- 147_windsurf_to_devin_desktop.sql +-- Migrate current provider configuration from the retired public Windsurf id +-- to Devin Desktop. Historical request and usage records are intentionally +-- preserved under the provider identity that existed when they were written. + +UPDATE provider_connections +SET provider = 'devin-desktop', + default_model = CASE + WHEN default_model LIKE 'windsurf/%' + THEN 'devin-desktop/' || substr(default_model, length('windsurf/') + 1) + ELSE default_model + END +WHERE provider = 'windsurf'; + +UPDATE registered_keys +SET provider = 'devin-desktop' +WHERE provider = 'windsurf'; + +INSERT OR IGNORE INTO provider_key_limits ( + provider, + max_active_keys, + daily_issue_limit, + hourly_issue_limit, + daily_issued, + hourly_issued, + last_reset_day, + last_reset_hour, + updated_at +) +SELECT + 'devin-desktop', + max_active_keys, + daily_issue_limit, + hourly_issue_limit, + daily_issued, + hourly_issued, + last_reset_day, + last_reset_hour, + updated_at +FROM provider_key_limits +WHERE provider = 'windsurf'; + +DELETE FROM provider_key_limits WHERE provider = 'windsurf'; + +INSERT OR IGNORE INTO key_value (namespace, key, value) +SELECT namespace, 'devin-desktop', value +FROM key_value +WHERE key = 'windsurf' + AND namespace IN ('customModels', 'modelCompatOverrides', 'providerAliases'); + +DELETE FROM key_value +WHERE key = 'windsurf' + AND namespace IN ('customModels', 'modelCompatOverrides', 'providerAliases'); + +INSERT OR IGNORE INTO key_value (namespace, key, value) +SELECT + namespace, + 'devin-desktop:' || substr(key, length('windsurf:') + 1), + value +FROM key_value +WHERE namespace = 'syncedAvailableModels' + AND substr(key, 1, length('windsurf:')) = 'windsurf:'; + +DELETE FROM key_value +WHERE namespace = 'syncedAvailableModels' + AND substr(key, 1, length('windsurf:')) = 'windsurf:'; + +UPDATE key_value +SET value = '"devin-desktop/' || substr(value, length('"windsurf/') + 1) +WHERE namespace = 'modelAliases' + AND substr(value, 1, length('"windsurf/')) = '"windsurf/'; + +UPDATE combos +SET data = replace( + replace( + replace( + replace( + replace(data, '"provider":"windsurf"', '"provider":"devin-desktop"'), + '"provider": "windsurf"', + '"provider": "devin-desktop"' + ), + '"providerId":"windsurf"', + '"providerId":"devin-desktop"' + ), + '"providerId": "windsurf"', + '"providerId": "devin-desktop"' + ), + '"windsurf/', + '"devin-desktop/' +) +WHERE data LIKE '%windsurf%'; + +INSERT OR IGNORE INTO combo_adaptation_state ( + combo_id, + provider_id, + learned_score, + request_count, + success_count, + avg_latency_ms, + last_failure_at, + excluded_until, + updated_at +) +SELECT + combo_id, + 'devin-desktop', + learned_score, + request_count, + success_count, + avg_latency_ms, + last_failure_at, + excluded_until, + updated_at +FROM combo_adaptation_state +WHERE provider_id = 'windsurf'; + +DELETE FROM combo_adaptation_state WHERE provider_id = 'windsurf'; + +INSERT OR IGNORE INTO tier_assignments ( + provider, + model, + tier, + cost_per_1m_input, + cost_per_1m_output, + has_free_tier, + free_quota_limit, + reason, + updated_at +) +SELECT + 'devin-desktop', + model, + tier, + cost_per_1m_input, + cost_per_1m_output, + has_free_tier, + free_quota_limit, + reason, + updated_at +FROM tier_assignments +WHERE provider = 'windsurf'; + +DELETE FROM tier_assignments WHERE provider = 'windsurf'; + +UPDATE provider_plans SET provider = 'devin-desktop' WHERE provider = 'windsurf'; + +INSERT OR IGNORE INTO model_context_overrides ( + provider, + model_id, + real_context, + source, + refreshed_at +) +SELECT 'devin-desktop', model_id, real_context, source, refreshed_at +FROM model_context_overrides +WHERE provider = 'windsurf'; + +DELETE FROM model_context_overrides WHERE provider = 'windsurf'; + +INSERT OR IGNORE INTO model_capability_overrides ( + provider, + model_id, + override_key, + override_value, + refreshed_at +) +SELECT 'devin-desktop', model_id, override_key, override_value, refreshed_at +FROM model_capability_overrides +WHERE provider = 'windsurf'; + +DELETE FROM model_capability_overrides WHERE provider = 'windsurf'; + +INSERT OR IGNORE INTO session_account_affinity ( + session_key, + provider, + connection_id, + created_at, + last_seen_at +) +SELECT session_key, 'devin-desktop', connection_id, created_at, last_seen_at +FROM session_account_affinity +WHERE provider = 'windsurf'; + +DELETE FROM session_account_affinity WHERE provider = 'windsurf'; + +UPDATE group_model_permissions +SET provider = 'devin-desktop' +WHERE provider = 'windsurf'; + +DELETE FROM upstream_proxy_config +WHERE provider_id = 'windsurf' + AND EXISTS ( + SELECT 1 + FROM upstream_proxy_config AS destination + WHERE destination.provider_id = 'devin-desktop' + ); + +UPDATE upstream_proxy_config +SET provider_id = 'devin-desktop' +WHERE provider_id = 'windsurf'; + +DELETE FROM discovery_results +WHERE provider_id = 'windsurf' + AND EXISTS ( + SELECT 1 + FROM discovery_results AS destination + WHERE destination.provider_id = 'devin-desktop' + AND destination.method = discovery_results.method + AND destination.endpoint IS discovery_results.endpoint + ); + +UPDATE discovery_results +SET provider_id = 'devin-desktop' +WHERE provider_id = 'windsurf'; diff --git a/src/lib/db/modelCapabilityOverrides.ts b/src/lib/db/modelCapabilityOverrides.ts index b311d09542..4792b870c5 100644 --- a/src/lib/db/modelCapabilityOverrides.ts +++ b/src/lib/db/modelCapabilityOverrides.ts @@ -1,7 +1,7 @@ import { getDbInstance } from "./core"; import { invalidateDbCache } from "./readCache"; -export type ModelCapabilityOverrideKey = "max_input_tokens" | "max_output_tokens"; +export type ModelCapabilityOverrideKey = "max_input_tokens" | "max_output_tokens" | "max_token"; export interface ModelCapabilityOverride { provider: string; @@ -21,7 +21,7 @@ interface OverrideRow { } function isSupportedKey(value: unknown): value is ModelCapabilityOverrideKey { - return value === "max_input_tokens" || value === "max_output_tokens"; + return value === "max_input_tokens" || value === "max_output_tokens" || value === "max_token"; } function isPositiveInteger(value: unknown): value is number { diff --git a/src/lib/db/schemaColumns.ts b/src/lib/db/schemaColumns.ts index f3a518adfc..2b58470948 100644 --- a/src/lib/db/schemaColumns.ts +++ b/src/lib/db/schemaColumns.ts @@ -24,22 +24,15 @@ export function ensureProviderConnectionsColumns(db: SqliteDatabase) { ["email", "TEXT"], ["display_name", "TEXT"], ["provider_specific_data", "TEXT"], + ["rate_limit_protection", "INTEGER DEFAULT 0"], + ["last_used_at", "TEXT"], + ["default_model", "TEXT"], // legacy-schema hole; later data migrations read it ]) { if (!columnNames.has(column)) { db.exec(`ALTER TABLE provider_connections ADD COLUMN ${column} ${type}`); console.log(`[DB] Added provider_connections.${column} column`); } } - if (!columnNames.has("rate_limit_protection")) { - db.exec( - "ALTER TABLE provider_connections ADD COLUMN rate_limit_protection INTEGER DEFAULT 0" - ); - console.log("[DB] Added provider_connections.rate_limit_protection column"); - } - if (!columnNames.has("last_used_at")) { - db.exec("ALTER TABLE provider_connections ADD COLUMN last_used_at TEXT"); - console.log("[DB] Added provider_connections.last_used_at column"); - } if (!columnNames.has("group")) { db.exec('ALTER TABLE provider_connections ADD COLUMN "group" TEXT'); console.log('[DB] Added provider_connections."group" column'); diff --git a/src/lib/env/runtimeEnv.ts b/src/lib/env/runtimeEnv.ts index 7b0fe12f52..adf9d8104d 100644 --- a/src/lib/env/runtimeEnv.ts +++ b/src/lib/env/runtimeEnv.ts @@ -69,6 +69,11 @@ export const webRuntimeEnvSchema = z.object({ OMNIROUTE_BASE_URL: optionalHttpUrl, BASE_URL: optionalHttpUrl, NEXT_PUBLIC_BASE_URL: optionalHttpUrl, + CONDUCTOR_HUB_URL: optionalHttpUrl, + CONDUCTOR_SPOKESPERSON_URL: optionalHttpUrl, + CONDUCTOR_ORCHESTRATOR_TOKEN: optionalTrimmedString, + + CONDUCTOR_HUB_TOKEN: optionalTrimmedString, OMNIROUTE_PORT: optionalPortEnv, API_PORT: optionalPortEnv, DASHBOARD_PORT: optionalPortEnv, diff --git a/src/lib/localDb.ts b/src/lib/localDb.ts index 99993f2538..22635efee0 100755 --- a/src/lib/localDb.ts +++ b/src/lib/localDb.ts @@ -820,3 +820,4 @@ export { setRadarKey, } from "./db/radar"; export type { RadarCache, RadarSettings } from "./db/radar"; +export * from "./db/conductorBridge"; // OmniConductor hub mirror — SSE cursor (PRD Conductor RF1) diff --git a/src/lib/oauth/constants/oauth.ts b/src/lib/oauth/constants/oauth.ts index d75deffcad..0cace6c604 100644 --- a/src/lib/oauth/constants/oauth.ts +++ b/src/lib/oauth/constants/oauth.ts @@ -438,57 +438,14 @@ export const RAYCAST_CONFIG = { "macOS only: use Auto-Import (Keychain + Raycast DB) or capture Bearer, X-Raycast-DeviceId, and optional X-Raycast-Signature JWT from backend.raycast.com traffic.", }; -// Windsurf / Devin CLI Configuration -// -// 2026-05-29 (Phase 1 hotfix): -// The browser PKCE flow targeting https://app.devin.ai/editor/signin returned -// 404 post-rebrand. PKCE-only fields (`authorizeUrl`, `codeChallengeMethod`, -// `callbackPort`, `callbackPath`, `apiServerUrl`, `exchangePath`) are kept -// below for archival reference but are NO LONGER consumed by any code path — -// the provider exports flowType="import_token" only. -// -// Phase 2 will reintroduce browser login via Firebase OAuth + RegisterUser -// (ported from fendoushaonian/WindSurf-gRPC-API). -// Spec: _tasks/superpowers/specs/2026-05-29-windsurf-login-fix-design.md. -// -// Active fields: -// - inferenceUrl → used by WindsurfExecutor (open-sse/executors/windsurf.ts) -// - showAuthTokenUrl → reference URL; the real token only renders when the -// IDE "Windsurf: Provide Auth Token" command opens it -// with an IDE-supplied ?state= param (see field below) -// - firebaseApiKey → reserved for Phase 2 -// - ideName → sent in extension headers -export const WINDSURF_CONFIG = { - // RETIRED 2026-05-29 — endpoint returns 404 post-rebrand. Phase 2 will replace. - authorizeUrl: "https://app.devin.ai/editor/signin", - // RETIRED 2026-05-29 — PKCE flow disabled, see header comment. - codeChallengeMethod: "S256" as const, - // RETIRED 2026-05-29 — no callback server is started for windsurf/devin-cli. - callbackPort: 0, - // RETIRED 2026-05-29 — no callback path is registered for windsurf/devin-cli. - callbackPath: "/auth/callback", - // RETIRED 2026-05-29 — exchange endpoint no longer reached because PKCE is disabled. +// Devin Desktop / Devin CLI import-token configuration. +// Public product identity is Devin. The upstream transport still identifies +// the IDE as `windsurf`; authentication itself is import-only. +export const DEVIN_DESKTOP_CONFIG = { apiServerUrl: "https://server.codeium.com", - // RETIRED 2026-05-29 — see apiServerUrl. - exchangePath: "/exa.seat_management_pb.SeatManagementService/ExchangePKCEAuthorizationCode", - // ── Active fields (still consumed by runtime) ───────────────────────────── - // Inference server URL (gRPC-web requests go here) - inferenceUrl: "https://server.self-serve.windsurf.com", - // Primary login path: the user runs the "Windsurf: Provide Auth Token" command - // inside the Windsurf/VS Code IDE (or clicks the Jupyter "Get Windsurf - // Authentication Token" button), which opens this URL WITH an IDE-supplied - // `?state=` param and renders the token. Opening this bare URL directly - // only shows a "Redirecting" page with no token (#3324). - showAuthTokenUrl: "https://windsurf.com/show-auth-token", - // Token refresh via Firebase Secure Token Service (reserved for Phase 2). - // Default is the public Firebase Web client identifier embedded in the - // Windsurf/Devin CLI binary; users may override via WINDSURF_FIREBASE_API_KEY. - firebaseApiKey: resolvePublicCred("windsurf_fb", "WINDSURF_FIREBASE_API_KEY"), - firebaseTokenUrl: "https://securetoken.googleapis.com/v1/token", - // IDE identity sent with every gRPC request + inferenceUrl: "https://inference.codeium.com", ideName: "windsurf", - ideVersion: "3.14.0", - extensionVersion: "3.14.0", + defaultVersion: "3.6.27", }; // Zed IDE credential import — no standard OAuth flow. @@ -551,7 +508,7 @@ export const PROVIDERS = { KILOCODE: "kilocode", CLINE: "cline", CLINEPASS: "clinepass", - WINDSURF: "windsurf", + DEVIN_DESKTOP: "devin-desktop", DEVIN_CLI: "devin-cli", TRAE: "trae", CODEBUDDY_CN: "codebuddy-cn", diff --git a/src/lib/oauth/providers.ts b/src/lib/oauth/providers.ts index a369ec154f..b0f0cae5d1 100644 --- a/src/lib/oauth/providers.ts +++ b/src/lib/oauth/providers.ts @@ -126,8 +126,7 @@ export function getProvider(name) { * Generate auth data for a provider. * * Returns `{ supported: false, error }` (no `authUrl`) for providers whose - * browser-OAuth flow is currently disabled — e.g. windsurf / devin-cli post - * 2026-05 rebrand, where the legacy PKCE endpoint at app.devin.ai returns 404. + * browser-OAuth flow is currently disabled — e.g. Devin Desktop / Devin CLI. * Callers (UI / API route) should surface the `error` string and route the * user to the import-token flow instead. */ @@ -139,9 +138,9 @@ export function generateAuthData(providerName, redirectUri) { if (provider.flowType === "import_token") { let error: string; - if (providerName === "windsurf" || providerName === "devin-cli") { + if (providerName === "devin-desktop" || providerName === "devin-cli") { error = - "Browser login disabled — paste token from https://windsurf.com/show-auth-token instead. Phase 2 will restore Firebase OAuth via app.devin.ai successor."; + "Browser login disabled — use the import-token flow. Paste an existing Devin API key from an authenticated Devin session; key export availability and steps vary by Devin version and account."; } else if (providerName === "zed") { error = "Zed does not use a browser OAuth flow. Use the Zed provider page to import credentials " + diff --git a/src/lib/oauth/providers/devin-desktop.ts b/src/lib/oauth/providers/devin-desktop.ts new file mode 100644 index 0000000000..64cb3b9f84 --- /dev/null +++ b/src/lib/oauth/providers/devin-desktop.ts @@ -0,0 +1,22 @@ +import { DEVIN_DESKTOP_CONFIG } from "../constants/oauth"; + +/** Devin Desktop import-token provider. */ +export const devinDesktop = { + config: DEVIN_DESKTOP_CONFIG, + flowType: "import_token" as const, + + validateImportToken(token: string): { valid: boolean; reason?: string } { + const trimmed = (token ?? "").trim(); + if (!trimmed) return { valid: false, reason: "Token is empty" }; + if (trimmed.length < 16) return { valid: false, reason: "Token is too short" }; + return { valid: true }; + }, + + mapTokens(tokens: { accessToken: string }) { + return { + accessToken: tokens.accessToken, + refreshToken: null, + expiresIn: null as number | null, + }; + }, +}; diff --git a/src/lib/oauth/providers/index.ts b/src/lib/oauth/providers/index.ts index 97f5f013f6..596890c6bd 100644 --- a/src/lib/oauth/providers/index.ts +++ b/src/lib/oauth/providers/index.ts @@ -25,7 +25,7 @@ import { trae } from "./trae"; import { raycast } from "./raycast"; import { kilocode } from "./kilocode"; import { cline } from "./cline"; -import { windsurf } from "./windsurf"; +import { devinDesktop } from "./devin-desktop"; import { grokCli } from "./grok-cli"; import { xaiOauth } from "./xai-oauth"; import { openference } from "./openference"; @@ -54,9 +54,9 @@ export const PROVIDERS = { // type) — it is a separate catalog entry advertising the cline-pass/* (ClinePass // subscription) models. See registry/clinepass/index.ts. clinepass: cline, - windsurf, - // devin-cli shares the same token format as windsurf (WINDSURF_API_KEY / devin auth login) - "devin-cli": windsurf, + "devin-desktop": devinDesktop, + // Devin CLI shares the same imported token format and upstream credential contract. + "devin-cli": devinDesktop, // grok-cli carries BOTH the browser PKCE flow and the paste-token import flow // under this one entry (#7013) — see grok-cli.ts's mapTokens for the dispatch. "grok-cli": grokCli, diff --git a/src/lib/oauth/providers/windsurf.ts b/src/lib/oauth/providers/windsurf.ts deleted file mode 100644 index 28fb022db6..0000000000 --- a/src/lib/oauth/providers/windsurf.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { WINDSURF_CONFIG } from "../constants/oauth"; - -/** - * Windsurf / Devin CLI OAuth Provider — import-token only (Phase 1 hotfix, 2026-05-29). - * - * The previous PKCE Authorization Code flow targeting `https://app.devin.ai/editor/signin` - * stopped working post-rebrand: that endpoint now returns 404. Until Phase 2 ports the - * Firebase OAuth + RegisterUser flow (see _tasks/superpowers/specs/2026-05-29-windsurf-login-fix-design.md), - * the only supported login path is import-token: - * - * 1. In the Windsurf / VS Code IDE, the user runs the - * "Windsurf: Provide Auth Token" command from the command palette - * (or clicks the Jupyter "Get Windsurf Authentication Token" button). - * NOTE: opening https://windsurf.com/show-auth-token directly only renders - * a "Redirecting" page with no token — the IDE must initiate the flow - * (it adds a `?state=` param) for the token to be displayed. - * 2. Copies the displayed Windsurf API key (`sk-ws-...` style) - * 3. Pastes it into OmniRoute via /api/oauth/windsurf/import-token - * - * The pasted token is stored as `accessToken` and used directly by `WindsurfExecutor` - * (open-sse/executors/windsurf.ts) as the `Authorization: Bearer ...` header against - * the inference server (`server.self-serve.windsurf.com`). - */ -export const windsurf = { - config: WINDSURF_CONFIG, - flowType: "import_token" as const, - - /** - * Validate a pasted Windsurf API key. Accepts the `sk-ws-...` format issued by - * the IDE "Windsurf: Provide Auth Token" command (via windsurf.com/show-auth-token - * with the IDE-supplied `?state=...`) and the legacy raw-token format. Empty or - * whitespace-only tokens are rejected. - */ - validateImportToken(token: string): { valid: boolean; reason?: string } { - const trimmed = (token ?? "").trim(); - if (!trimmed) { - return { valid: false, reason: "Token is empty" }; - } - if (trimmed.length < 16) { - return { valid: false, reason: "Token is too short" }; - } - return { valid: true }; - }, - - /** - * Map a pasted import token onto the connection record. The token IS the - * Windsurf API key; there is no exchange step. - * - * NOTE: callers in `src/app/api/oauth/[provider]/[action]/route.ts` invoke - * this with `{ accessToken: token }` (object), matching the cursor/kiro - * signature. The earlier signature was `mapTokens(token: string)`, which - * caused the route to spread `{ accessToken: { accessToken: "sk-..." } }` - * into the DB layer and crashed the SQLite bind step: - * `SQLite3 can only bind numbers, strings, bigints, buffers, and null`. - * Keep the object signature. - */ - mapTokens(tokens: { accessToken: string }) { - return { - accessToken: tokens.accessToken, - refreshToken: null, - expiresIn: null as number | null, - }; - }, -}; diff --git a/src/lib/providerModels/managedModelImport.ts b/src/lib/providerModels/managedModelImport.ts index 0d605a901b..238628df81 100644 --- a/src/lib/providerModels/managedModelImport.ts +++ b/src/lib/providerModels/managedModelImport.ts @@ -21,6 +21,8 @@ import { ANTIGRAVITY_MODEL_ALIASES, ANTIGRAVITY_REVERSE_MODEL_ALIASES, } from "@omniroute/open-sse/config/antigravityModelAliases.ts"; +import { filterChatSelectableModels } from "@omniroute/open-sse/services/modelEndpointPolicy.ts"; +import { filterSelectableModels } from "@omniroute/open-sse/services/modelLifecycle.ts"; type JsonRecord = Record; @@ -95,9 +97,10 @@ function normalizeImportedModel(model: JsonRecord): ManagedImportedModel { return normalized; } -function normalizeImportedModels(fetchedModels: unknown): ManagedImportedModel[] { - const discovered = normalizeDiscoveredModels(fetchedModels); - return discovered.map((model) => normalizeImportedModel(model as JsonRecord)); +function normalizeImportedModels( + discoveredModels: readonly SyncedAvailableModel[] +): ManagedImportedModel[] { + return discoveredModels.map((model) => normalizeImportedModel(model as JsonRecord)); } function isImportedSource(source: unknown): boolean { @@ -250,8 +253,11 @@ export async function importManagedModels({ const previousSyncedAvailableModels = previousSyncedAvailableModelsInput ?? (await getSyncedAvailableModelsForConnection(providerId, connectionId)); - const discoveredModels = normalizeDiscoveredModels(fetchedModels); - const candidateImportedModels = normalizeImportedModels(fetchedModels); + const discoveredModels = filterChatSelectableModels( + providerId, + filterSelectableModels(providerId, normalizeDiscoveredModels(fetchedModels)) + ); + const candidateImportedModels = normalizeImportedModels(discoveredModels); const importedIds = new Set(candidateImportedModels.map((model) => model.id)); const discoveredIds = new Set(discoveredModels.map((model) => model.id)); diff --git a/src/lib/providerModels/modelDiscovery.ts b/src/lib/providerModels/modelDiscovery.ts index b11cd66785..7f6e28827b 100644 --- a/src/lib/providerModels/modelDiscovery.ts +++ b/src/lib/providerModels/modelDiscovery.ts @@ -6,6 +6,8 @@ import { } from "@/lib/db/models"; import { CANONICAL_EFFORT_VALUES } from "@/shared/reasoning/effortStandardization"; import { isObsoleteKiroModelAlias } from "@omniroute/open-sse/services/kiroModels.ts"; +import { filterChatSelectableModels } from "@omniroute/open-sse/services/modelEndpointPolicy.ts"; +import { filterSelectableModels } from "@omniroute/open-sse/services/modelLifecycle.ts"; type JsonRecord = Record; @@ -293,7 +295,10 @@ export async function persistDiscoveredModels( connectionId: string, models: unknown ): Promise { - const normalized = normalizeDiscoveredModels(models); + const normalized = filterChatSelectableModels( + providerId, + filterSelectableModels(providerId, normalizeDiscoveredModels(models)) + ); await replaceSyncedAvailableModelsForConnection(providerId, connectionId, normalized); return normalized; } diff --git a/src/lib/providers/modelListingCapability.ts b/src/lib/providers/modelListingCapability.ts index 8de0a8ecf7..070520dc6c 100644 --- a/src/lib/providers/modelListingCapability.ts +++ b/src/lib/providers/modelListingCapability.ts @@ -11,7 +11,7 @@ const TOOL_ONLY_SERVICE_KINDS = new Set(["webSearch", "webFetch"]); /** Providers whose registry catalog is the complete, intentional model list. */ -const CURATED_MODEL_ONLY_PROVIDERS = new Set(["kimi-web"]); +const CURATED_MODEL_ONLY_PROVIDERS = new Set(["kimi-web", "zai-web"]); export function providerUsesCuratedModelsOnly(providerId: string): boolean { return CURATED_MODEL_ONLY_PROVIDERS.has(providerId.trim().toLowerCase()); diff --git a/src/lib/providers/validation/webCookie.ts b/src/lib/providers/validation/webCookie.ts index 3e71cece93..6a199e38b5 100644 --- a/src/lib/providers/validation/webCookie.ts +++ b/src/lib/providers/validation/webCookie.ts @@ -3,6 +3,7 @@ // byte-identical to the original inline defs. import { WEB_COOKIE_PROVIDERS, isLocalProvider } from "@/shared/constants/providers"; import { getRegistryEntry } from "@omniroute/open-sse/config/providerRegistry.ts"; +import { extractZaiToken } from "@omniroute/open-sse/executors/zai-web.ts"; import { normalizeBaseUrl } from "./urlHelpers"; import { STANDARD_USER_AGENT, buildBearerHeaders } from "./headers"; import { @@ -12,6 +13,90 @@ import { WEB_COOKIE_PROVIDERS_WITHOUT_MODELS_API, } from "./transport"; +const UNSUPPORTED = { valid: false, error: "Provider validation not supported", unsupported: true }; + +/** + * Decide whether `provider` can be probed at all, and with what URL/headers. + * + * Every rejection here is a refusal to guess: a provider with no real API host, a + * non-http(s) baseUrl, or a missing credential cannot produce a trustworthy + * signal, and reporting "unsupported" beats reporting a false `valid: true`. + * Split out of validateWebCookieProvider so the probe itself stays readable. + */ +function resolveWebCookieProbe( + provider: string, + cookie: string +): + | { rejection: { valid: boolean; error: string; unsupported: boolean } } + | { testUrl: string; headers: Record } { + const entry = getRegistryEntry(provider); + const cookieProvider = WEB_COOKIE_PROVIDERS[provider as keyof typeof WEB_COOKIE_PROVIDERS]; + if (!entry && !cookieProvider) { + return { + rejection: { valid: false, error: "Provider not found in registry", unsupported: true }, + }; + } + if (!cookie) { + return { + rejection: { + valid: false, + error: "Cookie required for web-cookie provider", + unsupported: false, + }, + }; + } + + // Providers listed in WEB_COOKIE_PROVIDERS without a providerRegistry entry (e.g. + // gemini-business, poe-web, venice-web, v0-vercel-web) only expose a marketing + // website URL, not a real API host. Probing `${website}/models` does not reliably + // signal session validity for these — live verification showed most return + // redirects or SPA 200s regardless of cookie validity, which would silently report + // an expired/garbage cookie as "OK" (worse than an honest "not supported"). + if (!entry) return { rejection: UNSUPPORTED }; + + // Defense-in-depth: only an http(s) baseUrl without a query string is safe to probe + // by blindly appending `/models`. A ws(s):// baseUrl (e.g. copilot-web) is already + // rejected by the outbound URL guard downstream, but reject it explicitly here for + // the honest "unsupported" result instead of a confusing security-block message — + // this also covers a future http(s) baseUrl carrying a query string, which the guard + // does not currently block (#7857 acceptance criteria). + const baseUrl = normalizeBaseUrl(entry.baseUrl || ""); + if (!/^https?:\/\//i.test(baseUrl) || baseUrl.includes("?")) { + return { rejection: UNSUPPORTED }; + } + + // zai-web is the one web-cookie provider whose session is a localStorage Bearer JWT + // rather than a cookie: chat.z.ai serves its catalog at /api/models and authenticates + // with `Authorization: Bearer`, so probing `${baseUrl}/models` with a Cookie header + // reports a live session as dead. + if (provider !== "zai-web") { + return { + testUrl: `${baseUrl}/models`, + headers: { "User-Agent": STANDARD_USER_AGENT, Cookie: cookie }, + }; + } + + const zaiToken = extractZaiToken(cookie); + if (!zaiToken) { + return { + rejection: { + valid: false, + error: "Z.ai web-session credential required", + unsupported: false, + }, + }; + } + return { + testUrl: `${baseUrl}/api/models`, + headers: { + Accept: "application/json", + "Accept-Language": "en-US", + Authorization: `Bearer ${zaiToken}`, + "User-Agent": STANDARD_USER_AGENT, + }, + }; +} + /** * Validates web-cookie providers by performing a ping request to check if the session is still valid. * Returns SESSION_EXPIRED error code if the upstream returns 401/403. @@ -26,64 +111,13 @@ export async function validateWebCookieProvider({ providerSpecificData?: Record; }) { try { - const entry = getRegistryEntry(provider); - const cookieProvider = WEB_COOKIE_PROVIDERS[provider as keyof typeof WEB_COOKIE_PROVIDERS]; - if (!entry && !cookieProvider) { - return { valid: false, error: "Provider not found in registry", unsupported: true }; - } - // For web-cookie providers, apiKey contains the cookie string - const cookie = (apiKey || "").trim(); - if (!cookie) { - return { valid: false, error: "Cookie required for web-cookie provider", unsupported: false }; - } - - if (!entry) { - // Providers listed in WEB_COOKIE_PROVIDERS without a providerRegistry entry (e.g. - // gemini-business, poe-web, venice-web, v0-vercel-web) only expose a - // marketing website URL, not a real API host. Probing `${website}/models` - // does not reliably signal session validity for these — - // live verification showed most return redirects or SPA 200s regardless of - // cookie validity, which would silently report an expired/garbage cookie as - // "OK" (worse than an honest "not supported"). Until each of these providers - // has a verified, side-effect-free auth probe against its real API host, report - // unsupported instead of a false positive. - return { - valid: false, - error: "Provider validation not supported", - unsupported: true, - }; - } - - // Attempt a minimal request to check if the session is valid - // Use /models endpoint or a minimal completion request depending on the provider - const baseUrl = normalizeBaseUrl(entry.baseUrl || ""); - - // Defense-in-depth: only an http(s) baseUrl without a query string is safe to - // probe by blindly appending `/models`. A ws(s):// baseUrl (e.g. copilot-web) is - // already rejected by the outbound URL guard downstream, but reject it explicitly - // here for the honest "unsupported" result instead of a confusing security-block - // message — this also covers a future http(s) baseUrl carrying a query string, - // which the guard does not currently block (#7857 acceptance criteria). - if (!/^https?:\/\//i.test(baseUrl) || baseUrl.includes("?")) { - return { - valid: false, - error: "Provider validation not supported", - unsupported: true, - }; - } - - const testUrl = `${baseUrl}/models`; + const probe = resolveWebCookieProbe(provider, (apiKey || "").trim()); + if ("rejection" in probe) return probe.rejection; const res = await validationRead( - testUrl, - { - method: "GET", - headers: { - "User-Agent": STANDARD_USER_AGENT, - Cookie: cookie, - }, - }, + probe.testUrl, + { method: "GET", headers: probe.headers }, isLocalProvider(provider) ); diff --git a/src/shared/components/ModelSelectModal.tsx b/src/shared/components/ModelSelectModal.tsx index 91254ffeab..13d241d3cd 100644 --- a/src/shared/components/ModelSelectModal.tsx +++ b/src/shared/components/ModelSelectModal.tsx @@ -217,8 +217,11 @@ export default function ModelSelectModal({ if (!connection?.id) return null; // #9203: ask the live route to drop hidden models server-side too, so the - // operator's visibility settings apply before the rows reach the picker. - const res = await fetch(`/api/providers/${connection.id}/models?excludeHidden=true`); + // operator's visibility settings apply before the rows reach the picker, + // while chatOnly excludes media and retired models from this chat surface. + const res = await fetch( + `/api/providers/${connection.id}/models?excludeHidden=true&chatOnly=true` + ); if (!res.ok) { console.warn(`Failed to fetch models for ${providerId}: ${res.status}`); return null; diff --git a/src/shared/components/OAuthModal.tsx b/src/shared/components/OAuthModal.tsx index 53f3b474b3..aab8007e2d 100644 --- a/src/shared/components/OAuthModal.tsx +++ b/src/shared/components/OAuthModal.tsx @@ -2,6 +2,7 @@ import { useState, useEffect, useRef, useCallback, useMemo } from "react"; import { useTranslations } from "next-intl"; + import Modal from "./Modal"; import Button from "./Button"; import Input from "./Input"; @@ -50,15 +51,8 @@ const DEVICE_CODE_PROVIDERS = new Set([ "grok-cli", ]); -const TOKEN_PASTE_PROVIDERS = new Set(["windsurf", "devin-cli", "grok-cli"]); - -/** - * Phase 1 hotfix (2026-05-29): windsurf & devin-cli only support import-token. - * Their PKCE flow targeting app.devin.ai/editor/signin returned 404 post-rebrand. - * Phase 2 will reintroduce browser login via Firebase OAuth + RegisterUser. - * Spec: _tasks/superpowers/specs/2026-05-29-windsurf-login-fix-design.md. - */ -const IMPORT_TOKEN_ONLY_PROVIDERS = new Set(["windsurf", "devin-cli"]); +const TOKEN_PASTE_PROVIDERS = new Set(["devin-desktop", "devin-cli", "grok-cli"]); +const IMPORT_TOKEN_ONLY_PROVIDERS = new Set(["devin-desktop", "devin-cli"]); // POST a bare Codex access token to the access-token-only import endpoint // (#1290); shared by the bare-JWT and session-JSON paste branches (#6636). @@ -277,7 +271,7 @@ export default function OAuthModal({ [authData, provider, onSuccess, reauthConnection, t] ); - // Save a raw API token directly (windsurf / devin-cli import-token path). + // Save a raw API token directly (Devin Desktop / Devin CLI import-token path). // For grok-cli, require the full auth.json object so refresh_token is persisted (#7610). const handleSaveToken = useCallback(async () => { const raw = pasteToken.trim(); @@ -294,7 +288,7 @@ export default function OAuthModal({ } token = parsed.token; } - // POST to /import-token. Grok accepts full auth.json; windsurf/devin accept bare keys. + // POST to /import-token. Grok accepts full auth.json; Devin accepts bare keys. const res = await fetch(`/api/oauth/${provider}/import-token`, { method: "POST", headers: { "Content-Type": "application/json" }, @@ -470,8 +464,10 @@ export default function OAuthModal({ forceManual = true; } - // PKCE callback server providers (Codex, Windsurf, Devin CLI): true localhost spins - // up a callback server + polls; a LAN IP warns (#8046); remote falls through below. + // PKCE callback server providers (Codex and Grok Build): + // On localhost, spin up a local callback server and poll for the result. + // Each provider owns its registered loopback callback. A LAN IP warns (#8046). + // On remote the server is unreachable — fall through to standard manual flow. if (PKCE_CALLBACK_SERVER_PROVIDERS.has(provider)) { if (isTrueLocalhost) { try { @@ -536,11 +532,13 @@ export default function OAuthModal({ // Authorization code flow // Redirect URI strategy: // - Codex/OpenAI: always port 1455 (registered in OAuth app) - // - Windsurf/Devin CLI (remote fallback; true localhost handled above): localhost:port - // - Google OAuth providers (antigravity/agy): default to loopback (127.0.0.1 preferred — - // Google docs flag localhost firewall/name-resolution edge cases) so bundled - // native/desktop credentials keep working; the authorize route upgrades this to the - // public callback when custom Google web credentials + a public base URL are configured. + // - Devin Desktop/CLI retain the legacy localhost callback path as a fallback + // - Google OAuth providers (antigravity/agy): default to loopback so the + // bundled native/desktop credentials keep working. Prefer 127.0.0.1 over + // localhost for the Google native-app handoff; Google documents that localhost + // can run into local firewall/name-resolution edge cases. The authorize route + // upgrades this to the public callback when custom Google web credentials plus + // NEXT_PUBLIC_BASE_URL or OMNIROUTE_PUBLIC_BASE_URL are configured. // - Other providers on remote: use actual origin (supports PUBLIC_URL env var) // - Localhost: use localhost:port let redirectUri: string; @@ -550,9 +548,8 @@ export default function OAuthModal({ // Fixed native-app loopback callback, distinct ports so both can run concurrently (#7013). const grokBuildPort = provider === "xai-oauth" ? 56121 : 56122; redirectUri = `http://127.0.0.1:${grokBuildPort}/callback`; - } else if (provider === "windsurf" || provider === "devin-cli") { - // Remote fallback: use OmniRoute's port with the /auth/callback path Windsurf expects. - // On true localhost this code is never reached (callback server handles the flow above). + } else if (provider === "devin-desktop" || provider === "devin-cli") { + // Retained callback-path fallback for the retired browser flow. const port = window.location.port || "20128"; redirectUri = `http://localhost:${port}/auth/callback`; } else if (GOOGLE_OAUTH_PROVIDERS.has(provider)) { @@ -979,12 +976,12 @@ export default function OAuthModal({
)} - {/* Paste-token form (Windsurf / Devin CLI) */} + {/* Paste-token form (Devin Desktop / Devin CLI) */} {supportsTokenPaste && showPasteToken && step !== "success" && (

- {provider === "windsurf" - ? t("windsurfPasteDescription") + {provider === "devin-desktop" + ? t("devinDesktopPasteDescription") : provider === "grok-cli" ? t("grokAuthJsonDescription") : t("devinPasteDescription")} diff --git a/src/shared/components/ProviderIcon.tsx b/src/shared/components/ProviderIcon.tsx index dc09c3eeb3..50a1351a38 100644 --- a/src/shared/components/ProviderIcon.tsx +++ b/src/shared/components/ProviderIcon.tsx @@ -228,7 +228,6 @@ const KNOWN_SVGS = new Set([ "voyage", "wafer", "wandb", - "windsurf", "x5lab", "xai", "xinference", diff --git a/src/shared/components/lobeProviderIcons.ts b/src/shared/components/lobeProviderIcons.ts index a1b7ed16e4..e0e2de437f 100644 --- a/src/shared/components/lobeProviderIcons.ts +++ b/src/shared/components/lobeProviderIcons.ts @@ -468,7 +468,7 @@ const LOBE_PROVIDER_ALIASES = { voyage: "Voyage", "voyage-ai": "Voyage", watsonx: "IBM", - windsurf: "Windsurf", + "devin-desktop": "Devin", "workers-ai": "WorkersAI", workersai: "WorkersAI", xai: "XAI", diff --git a/src/shared/constants/config.ts b/src/shared/constants/config.ts index d80b94f4ef..35b3be51d1 100644 --- a/src/shared/constants/config.ts +++ b/src/shared/constants/config.ts @@ -7,6 +7,33 @@ export const PROVIDER_ENDPOINTS = { dgrid: "https://api.dgrid.ai/v1/chat/completions", bai: "https://api.b.ai/v1/chat/completions", qiniu: "https://api.qnaigc.com/v1/chat/completions", + "zylo-api": "https://api.zyloai.net/v1/chat/completions", + unorouter: "https://api.unorouter.com/v1/chat/completions", + poolside: "https://inference.poolside.ai/v1/chat/completions", + fastrouter: "https://api.fastrouter.ai/api/v1/chat/completions", + anyapi: "https://api.anyapi.ai/v1/chat/completions", + electronhub: "https://api.electronhub.ai/v1/chat/completions", + llmgateway: "https://api.llmgateway.io/v1/chat/completions", + "llm-kiwi": "https://api.llm.kiwi/v1/chat/completions", + literouter: "https://api.literouter.com/v1/chat/completions", + "mnn-ai": "https://api.mnnai.ru/v1/chat/completions", + "meganova-ai": "https://api.meganova.ai/v1/chat/completions", + mixlayer: "https://models.mixlayer.ai/v1/chat/completions", + speka: "https://speka.me/v1/chat/completions", + tokenreply: "https://api.tokenreply.com/v1/chat/completions", + "yolo-auto": "https://yolo-auto.com/v1/chat/completions", + dxnt: "https://www.dxnt.com/v1/chat/completions", + "cloudcode-one": "https://api.cloudcode.one/v1/chat/completions", + ofoxai: "https://api.ofox.ai/v1/chat/completions", + zerolimitai: "https://www.zerolimitai.com/api/v1/chat/completions", + chatanywhere: "https://api.chatanywhere.org/v1/chat/completions", + helyxai: "https://helyxai.space/v1/chat/completions", + auriko: "https://api.auriko.ai/v1/chat/completions", + "poixe-ai": "https://api.poixe.com/v1/chat/completions", + "naga-ai": "https://api.naga.ac/v1/chat/completions", + "chat-oripe": "https://api.oriper.com/v1/chat/completions", + freeinference: "https://freeinference.org/v1/chat/completions", + "free-ai": "https://api.free.ai/v1/chat/", glm: "https://api.z.ai/api/anthropic/v1/messages", glmt: "https://api.z.ai/api/anthropic/v1/messages", "bailian-coding-plan": "https://coding-intl.dashscope.aliyuncs.com/apps/anthropic/v1/messages", diff --git a/src/shared/constants/models.ts b/src/shared/constants/models.ts index 7595280708..f78d64858f 100644 --- a/src/shared/constants/models.ts +++ b/src/shared/constants/models.ts @@ -21,7 +21,10 @@ import { PROVIDER_MODELS as MODELS } from "@omniroute/open-sse/config/providerMo const PASSTHROUGH_PROVIDERS = new Set( Object.entries(AI_PROVIDERS) .filter(([, p]) => (p as any).passthroughModels) - .map(([key]) => key) + .flatMap(([key, provider]) => { + const alias = (provider as { alias?: unknown }).alias; + return typeof alias === "string" && alias.length > 0 ? [key, alias] : [key]; + }) ); // Wrap isValidModel with passthrough providers diff --git a/src/shared/constants/providers.ts b/src/shared/constants/providers.ts index 9d6b15b824..a20078ee1a 100644 --- a/src/shared/constants/providers.ts +++ b/src/shared/constants/providers.ts @@ -96,7 +96,32 @@ export const AGGREGATOR_PROVIDER_IDS = new Set([ "g4f-nvidia", "naga-ac", "chatanywhere", -]); + "zylo-api", + "fastrouter", + "anyapi", + "electronhub", + "llmgateway", + "llm-kiwi", + "literouter", + "mnn-ai", + "meganova-ai", + "mixlayer", + "speka", + "tokenreply", + "yolo-auto", + "dxnt", + "cloudcode-one", + "ofoxai", + "zerolimitai", + "helyxai", + "auriko", + "poixe-ai", + "naga-ai", + "chat-oripe", + "freeinference", + "free-ai", + +]);; export const ENTERPRISE_CLOUD_PROVIDER_IDS = new Set([ "azure-openai", diff --git a/src/shared/constants/providers/apikey/gateways.ts b/src/shared/constants/providers/apikey/gateways.ts index 26021f634b..40855ff9d0 100644 --- a/src/shared/constants/providers/apikey/gateways.ts +++ b/src/shared/constants/providers/apikey/gateways.ts @@ -53,6 +53,9 @@ export const APIKEY_PROVIDERS_GATEWAYS = { color: "#8B5CF6", textIcon: "UR", passthroughModels: true, + hasFree: true, + freeNote: + "Models with the :free suffix do not debit balance; limit is 1 request/minute per free model per user.", website: "https://unorouter.ai", apiHint: "Create an API key at https://unorouter.ai, then paste it here as a Bearer token.", }, @@ -424,6 +427,37 @@ export const APIKEY_PROVIDERS_GATEWAYS = { apiHint: "Use https://api.oriper.com/v1 only after confirming the provider's current documentation, terms and key issuance. No quota is guaranteed by this catalog.", }, + freeinference: { + id: "freeinference", + alias: "freeinference", + name: "FreeInference", + icon: "science", + color: "#8B5CF6", + textIcon: "FI", + passthroughModels: true, + website: "https://freeinference.org", + hasFree: true, + freeNote: + "Free research access without a card; non-Harvard applicants require manual approval and no numeric quota is publicly guaranteed.", + apiHint: + "Apply for a FreeInference key, then use https://freeinference.org/v1 as the OpenAI-compatible base URL. Terms allow prompt/response logging and possible publication of anonymized research data; never send sensitive or production data.", + }, + "free-ai": { + id: "free-ai", + alias: "free-ai", + name: "Free.ai", + icon: "hub", + color: "#16A34A", + textIcon: "FA", + passthroughModels: true, + website: "https://free.ai", + hasFree: true, + freeNote: + "30,000 tokens/day cover self-hosted models after email verification. Usage beyond the pool can bill at raw cost, and premium external models are paid.", + apiHint: + "Create an sk-free- key, then use the nonstandard but OpenAI-shaped https://api.free.ai/v1/chat/ endpoint. Select a self-hosted zero-price model to stay within the free pool.", + }, + dgrid: { id: "dgrid", alias: "dgrid", @@ -1181,19 +1215,4 @@ export const APIKEY_PROVIDERS_GATEWAYS = { authHint: "Get API key at naga.ac — Google/GitHub/Discord signup available.", }, - chatanywhere: { - id: "chatanywhere", - alias: "chtany", - name: "ChatAnywhere", - icon: "chat", - color: "#10B981", - textIcon: "CA", - website: "https://api.chatanywhere.tech", - hasFree: true, - freeNote: - "Free tier: 5 req/day for GPT-5/4o/4.1, 30/day DeepSeek, 200/day gpt-4o-mini. Personal non-commercial use only — see chatanywhere/GPT_API_free. Requires GitHub-account-gated API key.", - passthroughModels: true, - authHint: - "Get free API key at api.chatanywhere.tech — requires GitHub account signup.", - }, }; diff --git a/src/shared/constants/providers/apikey/inference-hosts.ts b/src/shared/constants/providers/apikey/inference-hosts.ts index 926260f5e7..678fbc7c6a 100644 --- a/src/shared/constants/providers/apikey/inference-hosts.ts +++ b/src/shared/constants/providers/apikey/inference-hosts.ts @@ -45,6 +45,21 @@ export const APIKEY_PROVIDERS_INFERENCE = { hasFree: true, freeNote: "Free plan: 3-day trial with open-source models — no credit card required", }, + poolside: { + id: "poolside", + alias: "poolside", + name: "Poolside", + icon: "memory", + color: "#111827", + textIcon: "PS", + passthroughModels: true, + website: "https://poolside.ai", + hasFree: true, + freeNote: + "Laguna S 2.1 and XS 2.1 are free during Preview; no public numeric quota is published.", + apiHint: + "Create a free developer API key, then use https://inference.poolside.ai/v1 as the OpenAI-compatible base URL.", + }, fireworks: { id: "fireworks", alias: "fireworks", diff --git a/src/shared/constants/providers/oauth.ts b/src/shared/constants/providers/oauth.ts index e0480da290..c9237f0711 100644 --- a/src/shared/constants/providers/oauth.ts +++ b/src/shared/constants/providers/oauth.ts @@ -249,23 +249,23 @@ export const OAUTH_PROVIDERS = { authHint: "ClinePass is Cline's $9.99/mo subscription bundling 10 open coding models. Sign in with your Cline account (same login as the Cline CLI/IDE), or paste a direct ClinePass API key (app.cline.bot → Settings → API Keys). A ClinePass subscription unlocks the cline-pass/* models. Reuses the Cline WorkOS OAuth flow.", }, - windsurf: { - id: "windsurf", - alias: "ws", - name: "Windsurf (Devin CLI)", - icon: "air", - color: "#00C5A0", - textIcon: "WS", + "devin-desktop": { + id: "devin-desktop", + alias: undefined, + name: "Devin Desktop", + icon: "terminal", + color: "#6366F1", + textIcon: "DD", subscriptionRisk: true, riskNoticeVariant: "oauth", authHint: - 'In the Windsurf / VS Code IDE, open the command palette and run `Windsurf: Provide Auth Token` (or click the Jupyter "Get Windsurf Authentication Token" button), then copy the shown token and paste it here. Note: opening windsurf.com/show-auth-token directly only renders a "Redirecting" page — the IDE must initiate the flow (it adds a `?state=...` param) for the token to appear.', - website: "https://windsurf.com", + "Paste an existing Devin API key from an authenticated Devin session. Key export availability and steps vary by Devin version and account.", + website: "https://devin.ai", }, "devin-cli": { id: "devin-cli", alias: "dv", - name: "Devin CLI (Official)", + name: "Devin CLI", icon: "terminal", color: "#6366F1", textIcon: "DV", diff --git a/src/shared/constants/providers/web-cookie.ts b/src/shared/constants/providers/web-cookie.ts index b094d38343..6f991ad0a4 100644 --- a/src/shared/constants/providers/web-cookie.ts +++ b/src/shared/constants/providers/web-cookie.ts @@ -410,17 +410,18 @@ export const WEB_COOKIE_PROVIDERS = { "zai-web": { id: "zai-web", alias: "zw", - name: "Z.ai Web (Free)", + name: "Z.ai Web", icon: "auto_awesome", color: "#2563EB", textIcon: "ZW", website: "https://chat.z.ai", hasFree: true, freeNote: - "Free consumer web session — GLM chat models via chat.z.ai. Distinct from the API-key zai/glm providers. No subscription required.", + "Consumer web session for the four models currently visible in chat.z.ai. Distinct from the API-key zai/glm providers.", subscriptionRisk: true, riskNoticeVariant: "webCookie", - authHint: "Paste the full Cookie header from chat.z.ai (must include the token= cookie)", + authHint: + 'Copy the "token" value from chat.z.ai → DevTools → Application → Local Storage. Do not copy cookies; OmniRoute handles the per-request CAPTCHA through its browser transport.', }, promptql: { id: "promptql", diff --git a/src/shared/constants/sidebarVisibility/sections.ts b/src/shared/constants/sidebarVisibility/sections.ts index 34488bf941..9056104dbd 100644 --- a/src/shared/constants/sidebarVisibility/sections.ts +++ b/src/shared/constants/sidebarVisibility/sections.ts @@ -243,6 +243,15 @@ const TOOLS_GROUP: SidebarItemGroup = { subtitleKey: "cloudAgentsSubtitle", icon: "cloud", }, + { + id: "conductor", + href: "/dashboard/conductor", + i18nKey: "conductor", + subtitleKey: "conductorSubtitle", + icon: "account_tree", + labelFallback: "Conductor", + subtitleFallback: "CLI-agent fleet", + }, { id: "agent-bridge", href: "/dashboard/tools/agent-bridge", diff --git a/src/shared/constants/sidebarVisibility/types.ts b/src/shared/constants/sidebarVisibility/types.ts index 4649e1c915..21fcf67984 100644 --- a/src/shared/constants/sidebarVisibility/types.ts +++ b/src/shared/constants/sidebarVisibility/types.ts @@ -29,6 +29,7 @@ export const HIDEABLE_SIDEBAR_ITEM_IDS = [ "cli-agents", "acp-agents", "cloud-agents", + "conductor", "agent-bridge", "traffic-inspector", "discovery", diff --git a/src/shared/providers/webSessionCredentials.ts b/src/shared/providers/webSessionCredentials.ts index df744c2793..42f4b333f4 100644 --- a/src/shared/providers/webSessionCredentials.ts +++ b/src/shared/providers/webSessionCredentials.ts @@ -15,6 +15,9 @@ export type WebSessionCredentialRequirement = */ hintKey?: string; hintFallback?: string; + /** Provider-specific replacement for the generic four-step DevTools guide. */ + guideSteps?: readonly string[]; + guideNote?: string; } | { kind: "none"; @@ -284,11 +287,22 @@ export const WEB_SESSION_CREDENTIAL_REQUIREMENTS = { storageKeys: ["cookie", "manus_session"], }, "zai-web": { - kind: "cookie", - credentialName: "token", - placeholder: "token=... or full Cookie header from chat.z.ai", - acceptsFullCookieHeader: true, - storageKeys: ["cookie", "token"], + kind: "token", + credentialName: 'Local Storage value named "token"', + placeholder: "eyJ... (chat.z.ai → DevTools → Application → Local Storage → token)", + acceptsFullCookieHeader: false, + storageKeys: ["token"], + hintKey: "zaiWebCredentialHint", + hintFallback: + 'Copy only the "token" value from chat.z.ai Local Storage. Do not copy a Cookie header. OmniRoute uses its browser transport to obtain the per-request CAPTCHA proof.', + guideSteps: [ + "Open chat.z.ai and sign in.", + "Open DevTools → Application → Local Storage → https://chat.z.ai.", + 'Find the row named "token" and copy only its value. Do not copy any Cookie header.', + "Paste the token below and check the connection. OmniRoute handles the per-request CAPTCHA through its browser transport.", + ], + guideNote: + "Treat the token like a password. Browser transport is enabled by default; do not set OMNIROUTE_BROWSER_POOL=off for this connection. If Z.ai signs you out or the token expires, repeat these steps with the new value.", }, lmarena: { kind: "cookie", diff --git a/tests/scratch_test.mjs b/tests/scratch_test.mjs deleted file mode 100644 index a2cccf40c4..0000000000 --- a/tests/scratch_test.mjs +++ /dev/null @@ -1,4 +0,0 @@ -import { getDbInstance } from "../src/lib/db/core.ts"; -import { runMigrations, getMigrationStatus } from "../src/lib/db/migrationRunner.ts"; -const db = getDbInstance(); -console.log(getMigrationStatus(db).pending); diff --git a/tests/snapshots/provider/translate-path.json b/tests/snapshots/provider/translate-path.json index 479570f1d4..d1920fcce9 100644 --- a/tests/snapshots/provider/translate-path.json +++ b/tests/snapshots/provider/translate-path.json @@ -1515,6 +1515,29 @@ "stream": "devin://acp/stdio" } }, + "devin-desktop": { + "format": "openai", + "headers": { + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json" + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json" + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json" + } + }, + "url": { + "nonStream": "https://server.codeium.com", + "stream": "https://server.codeium.com" + } + }, "dgrid": { "format": "openai", "headers": { @@ -5197,29 +5220,6 @@ "stream": "https://api.inference.wandb.ai/v1/chat/completions" } }, - "windsurf": { - "format": "windsurf", - "headers": { - "apiKey": { - "Accept": "text/event-stream", - "Authorization": "Bearer ", - "Content-Type": "application/json" - }, - "nonStream": { - "Authorization": "Bearer ", - "Content-Type": "application/json" - }, - "oauth": { - "Accept": "text/event-stream", - "Authorization": "Bearer ", - "Content-Type": "application/json" - } - }, - "url": { - "nonStream": "https://server.self-serve.windsurf.com", - "stream": "https://server.self-serve.windsurf.com" - } - }, "writer": { "format": "openai", "headers": { diff --git a/tests/unit/build/check-tracked-artifacts.test.ts b/tests/unit/build/check-tracked-artifacts.test.ts index 99d8c05960..aaeb8f4162 100644 --- a/tests/unit/build/check-tracked-artifacts.test.ts +++ b/tests/unit/build/check-tracked-artifacts.test.ts @@ -60,3 +60,87 @@ test("checkTrackedArtifacts: multiple violations reported", () => { ]); assert.equal(result.length, 3); }); + +// --- never-allowed classes added after the _tasks tracked-symlink wipes (2026-08-08/10) --- + +test("checkTrackedArtifacts: _tasks tracked as exact entry (blob/symlink) is flagged", () => { + const result = checkTrackedArtifacts(["_tasks"]); + assert.equal(result.length, 1); + assert.ok(result[0].includes("_tasks")); +}); + +test("checkTrackedArtifacts: _tasks/ prefix is flagged", () => { + const result = checkTrackedArtifacts(["_tasks/pipeline/prs/1-analyzed/plan.md"]); + assert.equal(result.length, 1); +}); + +test("checkTrackedArtifacts: private root underscore dirs are flagged", () => { + const result = checkTrackedArtifacts([ + "_references/_sistemas_cli/relatorio.md", + "_mono_repo/_worktrees/x/file.ts", + "_ideia/draft.md", + "_cache/entry.json", + ]); + assert.equal(result.length, 4); +}); + +test("checkTrackedArtifacts: ANY future root underscore dir is flagged (generic rule)", () => { + const result = checkTrackedArtifacts([ + "_nova-pasta-futura/qualquer/arquivo.md", + "_scratch/notes.txt", + ]); + assert.equal(result.length, 2); + assert.ok(result[0].includes("root underscore path")); +}); + +test("checkTrackedArtifacts: root underscore FILE is flagged; nested underscore paths pass", () => { + const flagged = checkTrackedArtifacts(["_notas-soltas.md"]); + assert.equal(flagged.length, 1); + const nested = checkTrackedArtifacts([ + "src/lib/_internal/helper.ts", + "open-sse/services/_shared/util.ts", + ]); + assert.deepEqual(nested, []); +}); + +test("checkTrackedArtifacts: .claude/worktrees/ prefix is flagged", () => { + const result = checkTrackedArtifacts([".claude/worktrees/fix-123/src/app.ts"]); + assert.equal(result.length, 1); +}); + +test("checkTrackedArtifacts: docs/superpowers/ prefix is flagged", () => { + const result = checkTrackedArtifacts(["docs/superpowers/plans/2026-01-01-x.md"]); + assert.equal(result.length, 1); +}); + +test("checkTrackedArtifacts: .eslintcache family is flagged", () => { + const result = checkTrackedArtifacts([".eslintcache", ".eslintcache-complexity", ".eslintcache-probe"]); + assert.equal(result.length, 3); +}); + +test("checkTrackedArtifacts: .fakebin-* shim dirs are flagged", () => { + const result = checkTrackedArtifacts([".fakebin-9475/npm"]); + assert.equal(result.length, 1); +}); + +test("checkTrackedArtifacts: build/log output dirs are flagged", () => { + const result = checkTrackedArtifacts([ + "dist/server.js", + ".build/next/chunk.js", + ".artifacts/eslint-results.json", + "logs/app.log", + ]); + assert.equal(result.length, 4); +}); + +test("checkTrackedArtifacts: new prefixes are root-anchored — nested legit paths pass", () => { + const result = checkTrackedArtifacts([ + "src/lib/logs/logger.ts", + "electron/dist-electron.config.ts", + "docs/architecture/ARCHITECTURE.md", + "scripts/check/check-tracked-artifacts.mjs", + "tests/unit/build/check-tracked-artifacts.test.ts", + "bin/cli/locales/en.json", + ]); + assert.deepEqual(result, []); +}); diff --git a/tests/unit/build/check-ts7-diagnostics-ratchet.test.ts b/tests/unit/build/check-ts7-diagnostics-ratchet.test.ts new file mode 100644 index 0000000000..f4ddb00910 --- /dev/null +++ b/tests/unit/build/check-ts7-diagnostics-ratchet.test.ts @@ -0,0 +1,93 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import { + diffDiagnosticMultisets, + hasParserPrerequisite, + parseTscDiagnostics, +} from "../../../scripts/check/check-ts7-diagnostics-ratchet.mjs"; + +test("line and column movement does not create a new diagnostic", () => { + const base = parseTscDiagnostics( + "src/example.ts(10,2): error TS2322: Type 'string' is not assignable to type 'number'.\n" + ); + const head = parseTscDiagnostics( + "src/example.ts(80,19): error TS2322: Type 'string' is not assignable to type 'number'.\n" + ); + + assert.deepEqual(diffDiagnosticMultisets(base, head), { added: [], removed: [] }); +}); + +test("the full normalized message distinguishes different diagnostics at one file and code", () => { + const base = parseTscDiagnostics( + "src/example.ts(1,1): error TS2339: Property 'old' does not exist on type 'Value'.\n" + ); + const head = parseTscDiagnostics( + "src/example.ts(1,1): error TS2339: Property 'new' does not exist on type 'Value'.\n" + ); + const diff = diffDiagnosticMultisets(base, head); + + assert.equal(diff.added.length, 1); + assert.equal(diff.removed.length, 1); + assert.match(diff.added[0].message, /Property 'new'/); +}); + +test("duplicate diagnostics are compared as a multiset, not a set", () => { + const line = "src/example.ts(1,1): error TS2304: Cannot find name 'missing'.\n"; + const base = parseTscDiagnostics(line); + const head = parseTscDiagnostics(line + line.replace("(1,1)", "(2,1)")); + const { added, removed } = diffDiagnosticMultisets(base, head); + + assert.equal(added.length, 1); + assert.equal(added[0].delta, 1); + assert.equal(added[0].baseCount, 1); + assert.equal(added[0].headCount, 2); + assert.equal(removed.length, 0); +}); + +test("multiline diagnostics normalize whitespace and nested coordinates", () => { + const base = parseTscDiagnostics( + "src/example.ts(1,1): error TS2345: Argument is invalid.\n" + + " The expected type comes from property 'value' declared at src/types.ts(12,4).\n" + ); + const head = parseTscDiagnostics( + "src/example.ts(99,8): error TS2345: Argument is invalid.\n" + + " The expected type comes from property 'value' declared at src/types.ts(20,9).\n" + ); + + assert.deepEqual(diffDiagnosticMultisets(base, head), { added: [], removed: [] }); +}); + +test("an absolute worktree root is normalized out of file paths and messages", () => { + const base = parseTscDiagnostics( + "/tmp/base/src/example.ts(1,1): error TS2307: Cannot find module '/tmp/base/src/missing'.\n", + { root: "/tmp/base" } + ); + const head = parseTscDiagnostics( + "/tmp/head/src/example.ts(2,3): error TS2307: Cannot find module '/tmp/head/src/missing'.\n", + { root: "/tmp/head" } + ); + + assert.deepEqual(diffDiagnosticMultisets(base, head), { added: [], removed: [] }); + assert.equal(base[0].file, "src/example.ts"); +}); + +test("reductions pass and report the removed multiplicity", () => { + const line = "src/example.ts(1,1): error TS2304: Cannot find name 'missing'.\n"; + const base = parseTscDiagnostics(line + line.replace("(1,1)", "(2,1)")); + const head = parseTscDiagnostics(line); + const { added, removed } = diffDiagnosticMultisets(base, head); + + assert.equal(added.length, 0); + assert.equal(removed.length, 1); + assert.equal(removed[0].delta, 1); +}); + +test("TS1005 makes the unresolved parser prerequisite explicit", () => { + const diagnostics = parseTscDiagnostics( + "open-sse/config/providers/gateways.ts(10,2): error TS1005: ',' expected.\n" + ); + + assert.equal(hasParserPrerequisite(diagnostics), true); + assert.equal(hasParserPrerequisite([]), false); +}); diff --git a/tests/unit/chatcore-plugin-onresponse.test.ts b/tests/unit/chatcore-plugin-onresponse.test.ts index ffd8161fd9..5125a07647 100644 --- a/tests/unit/chatcore-plugin-onresponse.test.ts +++ b/tests/unit/chatcore-plugin-onresponse.test.ts @@ -6,9 +6,7 @@ import { test, after } from "node:test"; import assert from "node:assert/strict"; -const { registerHook, unregisterHook } = await import("../../src/lib/plugins/hooks.ts"); -const { runPluginOnResponseHook } = - await import("../../open-sse/handlers/chatCore/pluginOnResponse.ts"); +const { registerHook, unregisterHook } = await import("../../src/lib/plugins/hooks.ts");const { runPluginOnResponseHook, runPluginOnStreamCompleteHook } = await import("../../open-sse/handlers/chatCore/pluginOnResponse.ts"); async function waitFor(pred: () => boolean, timeoutMs = 2000): Promise { const deadline = Date.now() + timeoutMs; @@ -19,6 +17,7 @@ async function waitFor(pred: () => boolean, timeoutMs = 2000): Promise { after(() => { unregisterHook("onResponse", "test-onresponse-plugin"); + unregisterHook("onStreamComplete", "test-onstreamcomplete-plugin"); }); test("no registered hooks → resolves without throwing (no-op)", async () => { @@ -143,3 +142,140 @@ test("a throwing hook never rejects the caller (fail-open)", async () => { ); await new Promise((r) => setTimeout(r, 30)); }); + +// ── onStreamComplete hook tests (#9571) ── + +test("onStreamComplete: no registered hooks resolves without throwing (no-op)", async () => { + const start = Date.now(); + await assert.doesNotReject( + runPluginOnStreamCompleteHook({ + status: 200, + usage: { prompt_tokens: 10, completion_tokens: 20 }, + ttft: 150, + model: "gpt-4", + provider: "openai", + errorCode: undefined, + startTime: start - 500, + }) + ); +}); + +test("onStreamComplete: registered hook receives usage + timing payload", async () => { + let captured: Record | undefined; + registerHook( + "onStreamComplete", + "test-onstreamcomplete-plugin", + async (payload: Record) => { + captured = payload; + } + ); + + const startTime = Date.now() - 500; + await runPluginOnStreamCompleteHook({ + status: 200, + usage: { prompt_tokens: 42, completion_tokens: 100, reasoning_tokens: 5 }, + ttft: 200, + model: "claude-3-opus", + provider: "anthropic", + errorCode: undefined, + startTime, + }); + + await waitFor(() => captured !== undefined); + assert.ok(captured, "expected onStreamComplete hook to be invoked"); + + // payload shape: status, usage, timing, model, provider + assert.equal(captured!.status, 200); + assert.ok(captured!.usage, "usage should be present"); + assert.equal((captured!.usage as Record).prompt_tokens, 42); + assert.equal((captured!.usage as Record).completion_tokens, 100); + assert.equal((captured!.usage as Record).reasoning_tokens, 5); + + assert.ok(captured!.timing, "timing should be present"); + const timing = captured!.timing as Record; + assert.equal(timing.ttft, 200); + assert.ok(timing.latencyMs > 450, "latencyMs should be near 500"); + + assert.equal(captured!.model, "claude-3-opus"); + assert.equal(captured!.provider, "anthropic"); + assert.equal(captured!.errorCode, undefined); +}); + +test("onStreamComplete: payload includes cache token fields when present", async () => { + let captured: Record | undefined; + registerHook( + "onStreamComplete", + "test-onstreamcomplete-plugin", + async (payload: Record) => { + captured = payload; + } + ); + + await runPluginOnStreamCompleteHook({ + status: 200, + usage: { + prompt_tokens: 50, + completion_tokens: 30, + cache_read_input_tokens: 20, + cache_creation_input_tokens: 10, + }, + ttft: 100, + model: "gpt-4", + provider: "openai", + errorCode: undefined, + startTime: Date.now(), + }); + + await waitFor(() => captured !== undefined); + assert.ok(captured); + const usage = captured!.usage as Record; + assert.equal(usage.cache_read_input_tokens, 20); + assert.equal(usage.cache_creation_input_tokens, 10); +}); + +test("onStreamComplete: throwing hook never rejects the caller (fail-open)", async () => { + registerHook("onStreamComplete", "test-onstreamcomplete-plugin", async () => { + throw new Error("stream-complete-boom"); + }); + + await assert.doesNotReject( + runPluginOnStreamCompleteHook({ + status: 500, + usage: undefined, + ttft: undefined, + model: "gpt-4", + provider: "openai", + errorCode: "upstream_error", + startTime: Date.now(), + }) + ); + await new Promise((r) => setTimeout(r, 30)); +}); + +test("onStreamComplete: errorCode is passed through when provided", async () => { + let captured: Record | undefined; + registerHook( + "onStreamComplete", + "test-onstreamcomplete-plugin", + async (payload: Record) => { + captured = payload; + } + ); + + await runPluginOnStreamCompleteHook({ + status: 502, + usage: undefined, + ttft: undefined, + model: "grok-3", + provider: "xai", + errorCode: "upstream_timeout", + startTime: Date.now(), + }); + + await waitFor(() => captured !== undefined); + assert.ok(captured); + assert.equal(captured!.status, 502); + assert.equal(captured!.errorCode, "upstream_timeout"); + assert.equal(captured!.model, "grok-3"); + assert.equal(captured!.provider, "xai"); +}); diff --git a/tests/unit/chatcore-translation-paths.test.ts b/tests/unit/chatcore-translation-paths.test.ts index b45ff0de6b..8c60e1a789 100644 --- a/tests/unit/chatcore-translation-paths.test.ts +++ b/tests/unit/chatcore-translation-paths.test.ts @@ -2031,7 +2031,7 @@ test("chatCore 429 lets account fallback apply the configured resilience cooldow assert.equal((afterFallback as any).testStatus, "unavailable"); assert.ok(cooldownRemaining > 0 && cooldownRemaining <= 2_000); }); -test("chatCore falls back to the next family model when the requested model is unavailable", async () => { +test("chatCore does not substitute an OpenAI model after model-unavailable", async () => { const { calls, result } = await invokeChatCore({ provider: "openai", model: "gpt-5.1", @@ -2047,17 +2047,15 @@ test("chatCore falls back to the next family model when the requested model is u headers: { "Content-Type": "application/json" }, }); } - return buildOpenAIResponse(false, "family fallback ok"); + return buildOpenAIResponse(false, "unexpected fallback"); }, }); - const payload = (await result.response.json()) as any; - assert.equal(result.success, true); - assert.equal(calls.length, 2); - assert.equal(calls[1].body.model, "gpt-5.1-mini"); - assert.equal(payload.choices[0].message.content, "family fallback ok"); + assert.equal(result.success, false); + assert.equal(result.status, 404); + assert.equal(calls.length, 1); }); -test("chatCore falls back to a larger-context sibling when the request overflows context", async () => { +test("chatCore does not substitute an OpenAI model after context overflow", async () => { saveModelsDevCapabilities({ unknown: { "gpt-5": capabilityEntry(128_000), @@ -2081,15 +2079,13 @@ test("chatCore falls back to a larger-context sibling when the request overflows headers: { "Content-Type": "application/json" }, }); } - return buildOpenAIResponse(false, "larger context fallback"); + return buildOpenAIResponse(false, "unexpected fallback"); }, }); - const payload = (await result.response.json()) as any; - assert.equal(result.success, true); - assert.equal(calls.length, 2); - assert.equal(calls[1].body.model, "gpt-4o"); - assert.equal(payload.choices[0].message.content, "larger context fallback"); + assert.equal(result.success, false); + assert.equal(result.status, 400); + assert.equal(calls.length, 1); }); test("chatCore parses upstream SSE payloads for non-streaming requests", async () => { const { result } = await invokeChatCore({ @@ -2151,7 +2147,7 @@ test("chatCore rejects malformed non-streaming JSON payloads", async () => { assert.equal(result.status, 502); assert.equal(result.error, "Invalid JSON response from provider"); }); -test("chatCore falls back after an empty-content success response", async () => { +test("chatCore does not substitute an OpenAI model after empty content", async () => { const { calls, result } = await invokeChatCore({ provider: "openai", model: "gpt-5.1", @@ -2181,17 +2177,15 @@ test("chatCore falls back after an empty-content success response", async () => } ); } - return buildOpenAIResponse(false, "empty-content fallback ok"); + return buildOpenAIResponse(false, "unexpected fallback"); }, }); - const payload = (await result.response.json()) as any; - assert.equal(result.success, true); - assert.equal(calls.length, 2); - assert.equal(calls[1].body.model, "gpt-5.1-mini"); - assert.equal(payload.choices[0].message.content, "empty-content fallback ok"); + assert.equal(result.success, false); + assert.equal(result.status, 502); + assert.equal(calls.length, 1); }); -test("chatCore returns a gateway error when the empty-content fallback responds with invalid JSON", async () => { +test("chatCore returns a gateway error without probing another OpenAI model", async () => { const { result, calls } = await invokeChatCore({ provider: "openai", model: "gpt-5.1", @@ -2232,8 +2226,7 @@ test("chatCore returns a gateway error when the empty-content fallback responds assert.equal(result.success, false); assert.equal(result.status, 502); assert.equal(result.error, "Provider returned empty content"); - assert.equal(calls.length, 2); - assert.equal(calls[1].body.model, "gpt-5.1-mini"); + assert.equal(calls.length, 1); }); test("chatCore records Claude prompt cache and cache usage metadata in call logs", async () => { await settingsDb.updateSettings({ alwaysPreserveClientCache: "always" }); diff --git a/tests/unit/chatgpt-web-environment-double-unescape.test.ts b/tests/unit/chatgpt-web-environment-double-unescape.test.ts new file mode 100644 index 0000000000..d6efcf75a3 --- /dev/null +++ b/tests/unit/chatgpt-web-environment-double-unescape.test.ts @@ -0,0 +1,83 @@ +/** + * CodeQL alert 811 — js/double-escaping (HIGH) on + * `open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/environment.ts`. + * + * `decodeXmlText()` unescapes the XML entities of the trusted Codex + * `` block. It decoded `&` BEFORE `"` / `'`, + * so the `&` it produced was re-consumed by a later `replaceAll` and the text + * was unescaped twice: `&quot;` collapsed to `"` instead of `"`. + * + * These values become sandbox `cwd` / `workspace_roots` paths, so a + * double-unescape silently rewrites the trusted workspace boundary. + * `&` must be decoded LAST. + */ +import test from "node:test"; +import assert from "node:assert/strict"; + +import { extractChatGptTurnEnvironment } from "../../open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/environment.ts"; + +function parsedRequestWithCwd(cwdLiteral: string) { + const environmentText = [ + "", + ` ${cwdLiteral}`, + " read-only", + "", + ].join("\n"); + + const turnMetadata = { internal_chat_message_metadata_passthrough: { turn_id: "turn-1" } }; + + return { + context: { tools: [] }, + _rawBody: { + client_metadata: { + "x-codex-turn-metadata": JSON.stringify({ thread_id: "thread-1", turn_id: "turn-1" }), + }, + input: [ + { type: "message", role: "system", content: [{ type: "input_text", text: "sys" }] }, + { + type: "message", + role: "user", + content: [{ type: "input_text", text: environmentText }], + ...turnMetadata, + }, + { + type: "message", + role: "user", + content: [{ type: "input_text", text: "hello" }], + ...turnMetadata, + }, + ], + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } as any; +} + +test("decoding the trusted Codex environment does not double-unescape &quot;", () => { + const env = extractChatGptTurnEnvironment(parsedRequestWithCwd("/tmp/ws&quot;dir")); + assert.equal( + env.cwd, + "/tmp/ws"dir", + '`&quot;` must decode to the literal text `"`, not to a double-unescaped `"`' + ); +}); + +test("decoding the trusted Codex environment does not double-unescape &lt; / &#39;", () => { + assert.equal( + extractChatGptTurnEnvironment(parsedRequestWithCwd("/tmp/ws&lt;dir")).cwd, + "/tmp/ws<dir" + ); + assert.equal( + extractChatGptTurnEnvironment(parsedRequestWithCwd("/tmp/ws&#39;dir")).cwd, + "/tmp/ws'dir" + ); +}); + +test("single-level XML entities still decode normally", () => { + assert.equal(extractChatGptTurnEnvironment(parsedRequestWithCwd("/tmp/a&b")).cwd, "/tmp/a&b"); + assert.equal( + extractChatGptTurnEnvironment(parsedRequestWithCwd("/tmp/a"b")).cwd, + '/tmp/a"b' + ); + assert.equal(extractChatGptTurnEnvironment(parsedRequestWithCwd("/tmp/a'b")).cwd, "/tmp/a'b"); + assert.equal(extractChatGptTurnEnvironment(parsedRequestWithCwd("/tmp/a>b")).cwd, "/tmp/a>b"); +}); diff --git a/tests/unit/check-docs-counts-sync.test.ts b/tests/unit/check-docs-counts-sync.test.ts index 27deae3057..9e2afca449 100644 --- a/tests/unit/check-docs-counts-sync.test.ts +++ b/tests/unit/check-docs-counts-sync.test.ts @@ -196,3 +196,87 @@ test("compression-engines and CLI-tools gates catch their v3.8.49 drift", () => assert.equal(cli("all 33 tools (25 CLI Code's)").ok, true); assert.equal(cli("all 26 tools (25 CLI Code's)").ok, false); }); + +// --- v3.8.50 hardening: live provider source, llm.txt/package.json, migrations, SVGs -- +// Regression guards for the 2026-08-12 audit: PROVIDER_REFERENCE.md was hand-stale at +// 291 while the live provider modules defined 338, and the gate trusted the doc — so +// README/AGENTS validated against a stale total and the gate stayed falsely green. +import { + countMigrations, + makeProviderReferenceValidator, + makePackageDescriptionValidator, + checkSvgCanonicalNumbers, +} from "../../scripts/check/check-docs-counts-sync.mjs"; + +const countMigs = countMigrations as () => number; +const makeRefValidator = makeProviderReferenceValidator as ( + expected: number +) => (content: string) => { ok: boolean; detail: string }; +const makePkgValidator = makePackageDescriptionValidator as ( + expected: number +) => (content: string) => { ok: boolean; detail: string }; +const checkSvg = checkSvgCanonicalNumbers as ( + content: string, + expected: { providers?: number; mcpTools?: number; strategies?: number; pools?: number } +) => { ok: boolean; detail: string }; + +test("countMigrations reads a real, positive migration count", () => { + assert.ok(countMigs() > 100, "migrations dir should hold > 100 .sql files"); +}); + +test("provider-reference validator accepts the live total and rejects a stale doc", () => { + const v = makeRefValidator(338); + assert.equal(v("Total providers: **338**. See category breakdown below.").ok, true); + const stale = v("Total providers: **291**. See category breakdown below."); + assert.equal(stale.ok, false, "a hand-stale doc total must be a red, not a silent pass"); + assert.match(stale.detail, /gen:provider-reference/); + assert.equal(v("# Provider Reference\n\nNo total marker.").ok, false); +}); + +test("package.json description validator catches a stale provider count", () => { + const v = makePkgValidator(338); + assert.equal(v(JSON.stringify({ description: "Unified AI router with 338 providers" })).ok, true); + assert.equal( + v(JSON.stringify({ description: "Unified AI router with 291 providers" })).ok, + false + ); + assert.equal(v("not json at all {").ok, false); +}); + +test("migrations claim validator accepts the real count and rejects stale styles", () => { + const v = makeValidator(144, { what: "migrations", pattern: /(\d+)\+? migrations?\b/gi }); + assert.equal(v("SQLite domain modules (144 migrations)").ok, true); + assert.equal(v("local, zero-config, 110+ migrations").ok, false); + assert.equal(v("(130 migrations)").ok, false); +}); + +const SVG_EXPECTED = { providers: 338, mcpTools: 105, strategies: 19, pools: 42 }; + +test("SVG gate accepts canonical numbers in text and aria-label claims", () => { + const good = + 'aria-label="338 AI providers, 19 routing strategies, MCP with 105 tools, ' + + '42 provider pools" 338 providersMCP (105'; + assert.equal(checkSvg(good, SVG_EXPECTED).ok, true); +}); + +test("SVG gate flags each stale canonical number the audit found", () => { + for (const stale of [ + "290 providers", + 'aria-label="MCP server with 104 tools"', + "MCP (104", + "18 routing strategies", + 'aria-label="43 provider pools and 460+ models"', + ]) { + const r = checkSvg(stale, SVG_EXPECTED); + assert.equal(r.ok, false, `expected stale claim to be flagged: ${stale}`); + } +}); + +test("SVG gate ignores coordinates, sizes and unrelated small counts", () => { + const noise = + '' + + '15 providers ToS-flagged' + + "100+ providers90+ free"; + const r = checkSvg(noise, SVG_EXPECTED); + assert.equal(r.ok, true, `coordinates/attrs must never register claims: ${r.detail}`); +}); diff --git a/tests/unit/circuit-breaker-abort-provider-trip-7907.test.ts b/tests/unit/circuit-breaker-abort-provider-trip-7907.test.ts index d466d0ec57..c0589a023c 100644 --- a/tests/unit/circuit-breaker-abort-provider-trip-7907.test.ts +++ b/tests/unit/circuit-breaker-abort-provider-trip-7907.test.ts @@ -16,6 +16,7 @@ import { test } from "node:test"; import assert from "node:assert/strict"; import { shouldTripProviderBreakerForResult } from "../../src/sse/handlers/chat.ts"; +import { isProviderBreakerFailureStatus } from "../../src/sse/handlers/chatPredicates.ts"; import { shouldRecordProviderBreakerFailure } from "../../open-sse/services/combo/comboPredicates.ts"; // The exact abort shape described in the PR body / issue #7907: no upstream @@ -26,6 +27,11 @@ const ABORT_RESULT = { error: "request_signal_aborted", } as const; +test("single-model breaker status guard accepts only provider-level failures", () => { + assert.equal(isProviderBreakerFailureStatus(502), true); + assert.equal(isProviderBreakerFailureStatus(429), false); +}); + test("chat.ts single-model path: breaker stays CLOSED on a client abort (502 default, no errorCode)", () => { assert.equal(shouldTripProviderBreakerForResult(ABORT_RESULT, false, false), false); }); diff --git a/tests/unit/cli-oauth-commands.test.ts b/tests/unit/cli-oauth-commands.test.ts index 092984bfc7..ffc17b68f3 100644 --- a/tests/unit/cli-oauth-commands.test.ts +++ b/tests/unit/cli-oauth-commands.test.ts @@ -179,6 +179,32 @@ test("runOAuthStart flow=import com --import-from-system usa auto-import", async assert.ok(out.includes("1")); }); +test("runOAuthStart rejects retired Windsurf instead of starting a public OAuth flow", async () => { + const origFetch = globalThis.fetch; + const origExit = process.exit; + let fetchCalled = false; + let exitCode: number | undefined; + globalThis.fetch = (() => { + fetchCalled = true; + return Promise.reject(new Error("Windsurf must not start a public OAuth request")); + }) as typeof fetch; + process.exit = ((code?: number | string | null): never => { + exitCode = typeof code === "number" ? code : undefined; + throw new Error(`exit ${code}`); + }) as typeof process.exit; + + try { + const { runOAuthStart } = await import("../../bin/cli/commands/oauth.mjs"); + await assert.rejects(runOAuthStart({ provider: "windsurf" }, makeCmd()), /exit 2/); + } finally { + globalThis.fetch = origFetch; + process.exit = origExit; + } + + assert.equal(exitCode, 2); + assert.equal(fetchCalled, false); +}); + test("providers lista provedores OAuth conhecidos", async () => { const { PROVIDERS_WITH_OAUTH_TEST } = await import("../../bin/cli/commands/oauth.mjs").catch( () => ({ PROVIDERS_WITH_OAUTH_TEST: null }) diff --git a/tests/unit/cli-update-shadow-install-9475.test.ts b/tests/unit/cli-update-shadow-install-9475.test.ts index defdf173df..f05794f211 100644 --- a/tests/unit/cli-update-shadow-install-9475.test.ts +++ b/tests/unit/cli-update-shadow-install-9475.test.ts @@ -1,19 +1,25 @@ import test from "node:test"; import assert from "node:assert/strict"; -import { readFileSync } from "node:fs"; +import { mkdtempSync, rmSync, writeFileSync } from "node:fs"; +import { tmpdir } from "node:os"; import path from "node:path"; -import { fileURLToPath } from "node:url"; const update = await import("../../bin/cli/commands/update.mjs"); -const REPO_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", ".."); -const REAL_VERSION = JSON.parse( - readFileSync(path.join(REPO_ROOT, "package.json"), "utf-8") -).version; -const FAKE_BIN = path.join(REPO_ROOT, ".fakebin-9475"); test("runUpdateCommand claims success without verifying the running binary version changed (#9475)", async () => { + const fakeBin = mkdtempSync(path.join(tmpdir(), "omniroute-cli-update-9475-")); + writeFileSync( + path.join(fakeBin, "npm"), + `#!/usr/bin/env bash +if [ "$1" = "view" ]; then echo "3.8.99"; exit 0; fi +if [ "$1" = "install" ]; then echo "added 1 package"; exit 0; fi +exit 0 +`, + { mode: 0o755 } + ); + const origPath = process.env.PATH; - process.env.PATH = FAKE_BIN + path.delimiter + origPath; + process.env.PATH = fakeBin + path.delimiter + (origPath ?? ""); const stdoutLogs: string[] = []; const origLog = console.log; console.log = function (...args: unknown[]) { @@ -33,6 +39,8 @@ test("runUpdateCommand claims success without verifying the running binary versi assert.ok(true); } finally { console.log = origLog; - process.env.PATH = origPath; + if (origPath === undefined) delete process.env.PATH; + else process.env.PATH = origPath; + rmSync(fakeBin, { recursive: true, force: true }); } }); diff --git a/tests/unit/combo/image-combo.test.ts b/tests/unit/combo/image-combo.test.ts index 03f22b739e..d122dace10 100644 --- a/tests/unit/combo/image-combo.test.ts +++ b/tests/unit/combo/image-combo.test.ts @@ -25,13 +25,19 @@ const core = await import("@/lib/db/core.ts"); const { createCombo } = await import("@/lib/db/combos"); const { executeImageCombo } = await import("@omniroute/open-sse/services/imageCombo"); +type LogEntry = { level: string; tag: unknown; msg: unknown }; + function createLog() { - const entries: unknown[] = []; + const entries: LogEntry[] = []; + const record = + (level: string) => + (tag: unknown, msg: unknown): number => + entries.push({ level, tag, msg }); return { - info: (tag: string, msg: unknown) => entries.push({ level: "info", tag, msg }), - warn: (tag: string, msg: unknown) => entries.push({ level: "warn", tag, msg }), - error: (tag: string, msg: unknown) => entries.push({ level: "error", tag, msg }), - debug: (tag: string, msg: unknown) => entries.push({ level: "debug", tag, msg }), + info: record("info"), + warn: record("warn"), + error: record("error"), + debug: record("debug"), entries, }; } diff --git a/tests/unit/conductor-a2a-post.test.ts b/tests/unit/conductor-a2a-post.test.ts new file mode 100644 index 0000000000..7cbae0e4d6 --- /dev/null +++ b/tests/unit/conductor-a2a-post.test.ts @@ -0,0 +1,112 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { createServer, type Server } from "node:http"; + +const TEST_DATA_DIR = fs.mkdtempSync(path.join(os.tmpdir(), "omniroute-conductor-a2a-")); +process.env.DATA_DIR = TEST_DATA_DIR; + +const core = await import("../../src/lib/db/core.ts"); +const settings = await import("../../src/lib/db/settings.ts"); +const tasksRoute = await import("../../src/app/api/a2a/tasks/route.ts"); + +const servers: Server[] = []; + +async function enableA2A() { + await settings.updateSettings({ a2aEnabled: true }); +} + +function delegationRequest(body: unknown, bearer?: string) { + return new Request("http://localhost/api/a2a/tasks", { + method: "POST", + headers: { + "content-type": "application/json", + ...(bearer ? { authorization: `Bearer ${bearer}` } : {}), + }, + body: JSON.stringify(body), + }); +} + +const VALID_BODY = { + skill: "conductor-cli-claude", + messages: [{ role: "user", content: "adicione um README com a seção Sobre" }], + metadata: { conductor: { repo: { url: "https://git.x/repo", base_ref: "dev" }, mode: "solo", model: "cc/claude-sonnet-5" } }, +}; + +test.beforeEach(() => { + core.resetDbInstance(); + fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); + fs.mkdirSync(TEST_DATA_DIR, { recursive: true }); + delete process.env.CONDUCTOR_HUB_URL; + delete process.env.OMNIROUTE_API_KEY; +}); + +test.after(async () => { + core.resetDbInstance(); + fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); + delete process.env.CONDUCTOR_HUB_URL; + delete process.env.OMNIROUTE_API_KEY; + while (servers.length > 0) { + const s = servers.pop(); + await new Promise((resolve) => s?.close(resolve)); + } +}); + +test("A2A desabilitado → 503 (mesmo gate do JSON-RPC)", async () => { + const res = await tasksRoute.POST(delegationRequest(VALID_BODY)); + assert.equal(res.status, 503); +}); + +test("com OMNIROUTE_API_KEY configurada, bearer errado → 401 e bearer certo passa", async () => { + await enableA2A(); + process.env.OMNIROUTE_API_KEY = "chave-certa"; + const denied = await tasksRoute.POST(delegationRequest(VALID_BODY, "chave-errada")); + assert.equal(denied.status, 401); +}); + +test("delegação válida → 201 com o task_id do hub; requirements derivados da skill do card", async () => { + await enableA2A(); + const bodies: unknown[] = []; + await new Promise((resolve) => { + const server = createServer((req, res) => { + let raw = ""; + req.on("data", (c) => (raw += c)); + req.on("end", () => { + bodies.push(JSON.parse(raw)); + res.writeHead(201, { "content-type": "application/json" }); + res.end(JSON.stringify({ id: "t_delegada", status: "submitted" })); + }); + }); + servers.push(server); + server.listen(0, "127.0.0.1", () => { + const addr = server.address(); + process.env.CONDUCTOR_HUB_URL = `http://127.0.0.1:${typeof addr === "object" && addr ? addr.port : 0}`; + resolve(); + }); + }); + const res = await tasksRoute.POST(delegationRequest(VALID_BODY)); + assert.equal(res.status, 201); + const out = await res.json(); + assert.equal(out.conductor_task_id, "t_delegada"); + assert.equal(out.state, "submitted"); + const sent = bodies[0] as { repo: { url: string; base_ref: string }; spec: { prompt: string }; requirements: { cli: string; model: string } }; + assert.equal(sent.repo.url, "https://git.x/repo"); + assert.equal(sent.repo.base_ref, "dev"); + assert.equal(sent.spec.prompt, "adicione um README com a seção Sobre"); + assert.equal(sent.requirements.cli, "claude", "skill conductor-cli-claude vira requirements.cli"); + assert.equal(sent.requirements.model, "cc/claude-sonnet-5"); +}); + +test("sem repo na metadata → 400 (delegação exige repo); skill não-conductor → 400", async () => { + await enableA2A(); + const noRepo = await tasksRoute.POST( + delegationRequest({ skill: "conductor", messages: [{ role: "user", content: "p" }] }) + ); + assert.equal(noRepo.status, 400); + const wrongSkill = await tasksRoute.POST( + delegationRequest({ ...VALID_BODY, skill: "smart-routing" }) + ); + assert.equal(wrongSkill.status, 400); +}); diff --git a/tests/unit/conductor-agent-card.test.ts b/tests/unit/conductor-agent-card.test.ts new file mode 100644 index 0000000000..079efff9e8 --- /dev/null +++ b/tests/unit/conductor-agent-card.test.ts @@ -0,0 +1,52 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { createServer, type Server } from "node:http"; + +import { GET } from "../../src/app/.well-known/agent.json/route.ts"; +import { clearFleetSkillsCache } from "../../src/lib/conductor/fleetSkills.ts"; + +const servers: Server[] = []; + +test.beforeEach(() => { + clearFleetSkillsCache(); + delete process.env.CONDUCTOR_HUB_URL; + delete process.env.CONDUCTOR_HUB_TOKEN; +}); + +test.after(async () => { + delete process.env.CONDUCTOR_HUB_URL; + while (servers.length > 0) { + const s = servers.pop(); + await new Promise((resolve) => s?.close(resolve)); + } +}); + +test("sem CONDUCTOR_HUB_URL o card continua válido, com as skills estáticas e zero conductor-*", async () => { + const res = await GET(); + const card = await res.json(); + assert.equal(typeof card.name, "string"); + assert.ok(Array.isArray(card.skills) && card.skills.length >= 6, "skills estáticas presentes"); + assert.ok(card.skills.every((s: { id: string }) => !s.id.startsWith("conductor-"))); +}); + +test("com hub de pé o card anuncia as skills da frota SEM perder as estáticas", async () => { + const server = createServer((req, res) => { + res.writeHead(200, { "content-type": "application/json" }); + res.end( + JSON.stringify([ + { id: "r_1", online: true, capabilities: { name: "devbox", clis: [{ profile: "claude" }], skills: [] } }, + ]) + ); + }); + servers.push(server); + await new Promise((resolve) => server.listen(0, "127.0.0.1", () => resolve())); + const addr = server.address(); + process.env.CONDUCTOR_HUB_URL = `http://127.0.0.1:${typeof addr === "object" && addr ? addr.port : 0}`; + process.env.CONDUCTOR_HUB_TOKEN = "tok"; + + const res = await GET(); + const card = await res.json(); + const ids = card.skills.map((s: { id: string }) => s.id); + assert.ok(ids.includes("conductor-cli-claude"), `frota anunciada (ids: ${ids.join(",")})`); + assert.ok(ids.includes("smart-routing"), "estáticas intactas"); +}); diff --git a/tests/unit/conductor-ask-route.test.ts b/tests/unit/conductor-ask-route.test.ts new file mode 100644 index 0000000000..9edfffbc8d --- /dev/null +++ b/tests/unit/conductor-ask-route.test.ts @@ -0,0 +1,85 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { createServer, type Server } from "node:http"; + +const TEST_DATA_DIR = fs.mkdtempSync(path.join(os.tmpdir(), "omniroute-conductor-ask-")); +process.env.DATA_DIR = TEST_DATA_DIR; + +const core = await import("../../src/lib/db/core.ts"); +const askRoute = await import("../../src/app/api/conductor/ask/route.ts"); + +const servers: Server[] = []; + +test.beforeEach(() => { + core.resetDbInstance(); + fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); + fs.mkdirSync(TEST_DATA_DIR, { recursive: true }); + delete process.env.CONDUCTOR_SPOKESPERSON_URL; +}); + +test.after(async () => { + core.resetDbInstance(); + fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); + delete process.env.CONDUCTOR_SPOKESPERSON_URL; + while (servers.length > 0) { + const s = servers.pop(); + await new Promise((resolve) => s?.close(resolve)); + } +}); + +test("fonte: auth antes do proxy; token nunca manuseado na rota", () => { + const src = fs.readFileSync(path.join(process.cwd(), "src/app/api/conductor/ask/route.ts"), "utf8"); + const authAt = src.indexOf("requireManagementAuth("); + assert.ok(authAt > 0); + assert.match(src, /if \(authError\) return authError;/); + assert.ok(src.indexOf("askFaro(") > authAt, "askFaro só depois do gate"); + assert.ok(!src.includes("CONDUCTOR_HUB_TOKEN"), "token vive no faroProxy, não na rota"); +}); + +test("POST valida o body (Zod) e repassa text+pending do Faro", async () => { + await new Promise((resolve) => { + const server = createServer((req, res) => { + res.writeHead(200, { "content-type": "application/json" }); + res.end(JSON.stringify({ text: "frota vazia", pending: null })); + }); + servers.push(server); + server.listen(0, "127.0.0.1", () => { + const addr = server.address(); + process.env.CONDUCTOR_SPOKESPERSON_URL = `http://127.0.0.1:${typeof addr === "object" && addr ? addr.port : 0}`; + resolve(); + }); + }); + const ok = await askRoute.POST( + new Request("http://localhost/api/conductor/ask", { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ message: "como está a frota?" }), + }) + ); + assert.equal(ok.status, 200); + assert.deepEqual(await ok.json(), { text: "frota vazia", pending: null }); + + const bad = await askRoute.POST( + new Request("http://localhost/api/conductor/ask", { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ message: "" }), + }) + ); + assert.equal(bad.status, 400, "mensagem vazia é rejeitada pelo Zod"); +}); + +test("Faro fora do ar → 503 sanitizado", async () => { + process.env.CONDUCTOR_SPOKESPERSON_URL = "http://127.0.0.1:1"; + const res = await askRoute.POST( + new Request("http://localhost/api/conductor/ask", { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ message: "oi" }), + }) + ); + assert.equal(res.status, 503); +}); diff --git a/tests/unit/conductor-bridge-boot.test.ts b/tests/unit/conductor-bridge-boot.test.ts new file mode 100644 index 0000000000..cbde7ccb75 --- /dev/null +++ b/tests/unit/conductor-bridge-boot.test.ts @@ -0,0 +1,35 @@ +import test from "node:test"; +import assert from "node:assert/strict"; + +import { initConductorBridge, stopConductorBridge } from "../../src/lib/conductor/boot.ts"; + +test.afterEach(() => { + stopConductorBridge(); + delete process.env.CONDUCTOR_HUB_URL; + delete process.env.CONDUCTOR_HUB_TOKEN; +}); + +test("no-op without CONDUCTOR_HUB_URL (bridge is opt-in)", () => { + delete process.env.CONDUCTOR_HUB_URL; + assert.equal(initConductorBridge(), null); +}); + +test("starts once with CONDUCTOR_HUB_URL set and is idempotent", () => { + process.env.CONDUCTOR_HUB_URL = "http://127.0.0.1:1"; // porta inválida: conexão falha, mas o handle existe + process.env.CONDUCTOR_HUB_TOKEN = "tok"; + // cursor injetado em memória: o teste não toca o SQLite real + const first = initConductorBridge({ cursor: { get: () => null, set: () => {} } }); + assert.ok(first, "bridge iniciada"); + const second = initConductorBridge({ cursor: { get: () => null, set: () => {} } }); + assert.equal(second, first, "segunda chamada devolve a mesma instância (idempotente)"); +}); + +test("stopConductorBridge() stops and allows a fresh start", () => { + process.env.CONDUCTOR_HUB_URL = "http://127.0.0.1:1"; + const first = initConductorBridge({ cursor: { get: () => null, set: () => {} } }); + assert.ok(first); + stopConductorBridge(); + assert.equal(first!.state(), "stopped"); + const second = initConductorBridge({ cursor: { get: () => null, set: () => {} } }); + assert.ok(second && second !== first, "após stop, novo init cria instância nova"); +}); diff --git a/tests/unit/conductor-bridge-loop.test.ts b/tests/unit/conductor-bridge-loop.test.ts new file mode 100644 index 0000000000..c03dafc493 --- /dev/null +++ b/tests/unit/conductor-bridge-loop.test.ts @@ -0,0 +1,142 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { createServer, type Server } from "node:http"; + +import { A2ATaskManager } from "../../src/lib/a2a/taskManager.ts"; +import { createConductorBridge } from "../../src/lib/conductor/bridge.ts"; + +const managers: A2ATaskManager[] = []; +const servers: Server[] = []; +const bridges: { stop(): void }[] = []; + +function createManager() { + const manager = new A2ATaskManager(5); + managers.push(manager); + return manager; +} + +test.afterEach(async () => { + while (bridges.length > 0) bridges.pop()?.stop(); + while (managers.length > 0) managers.pop()?.destroy(); + while (servers.length > 0) { + const s = servers.pop(); + await new Promise((resolve) => s?.close(resolve)); + } +}); + +// Formato REAL do SSE do hub (verificado ao vivo 2026-07-22): id/type nos campos do +// frame; o `data:` carrega só {ts, payload}. +const sse = (id: number, type: string, payload: Record) => + `id: ${id}\nevent: ${type}\ndata: ${JSON.stringify({ ts: "2026-07-22T00:00:00Z", payload })}\n\n`; + +interface FakeHub { + url: string; + requests: { lastEventId: string | null; auth: string | null }[]; +} + +/** Fake hub SSE: each handler invocation pops the next script entry {events, thenClose}. */ +function fakeHub(script: { events: string[]; thenClose: boolean }[]): Promise { + const requests: FakeHub["requests"] = []; + let call = 0; + const server = createServer((req, res) => { + const u = new URL(req.url ?? "/", "http://x"); + requests.push({ lastEventId: u.searchParams.get("last_event_id"), auth: req.headers.authorization ?? null }); + const step = script[Math.min(call, script.length - 1)]; + call++; + res.writeHead(200, { "content-type": "text/event-stream" }); + for (const e of step.events) res.write(e); + if (step.thenClose) res.end(); + // senão: conexão fica aberta (o teste encerra via bridge.stop() + server.close()) + }); + servers.push(server); + return new Promise((resolve) => { + server.listen(0, "127.0.0.1", () => { + const addr = server.address(); + resolve({ url: `http://127.0.0.1:${typeof addr === "object" && addr ? addr.port : 0}`, requests }); + }); + }); +} + +function waitFor(cond: () => boolean, ms = 3000): Promise { + const deadline = Date.now() + ms; + return new Promise((resolve, reject) => { + const tick = () => { + if (cond()) return resolve(); + if (Date.now() > deadline) return reject(new Error("waitFor timeout")); + setTimeout(tick, 10); + }; + tick(); + }); +} + +test("mirrors events from the hub SSE, advancing the injected cursor (incl. canceled→cancelled)", async () => { + const hub = await fakeHub([ + { + events: [ + sse(1, "task.created", { task_id: "t_x", mode: "solo", from: "orch" }), + sse(2, "task.scheduled", { task_id: "t_x", runner_id: "r_1" }), + sse(3, "task.canceled", { task_id: "t_x" }), + ], + thenClose: false, + }, + ]); + const tm = createManager(); + let cursor: string | null = null; + const bridge = createConductorBridge({ + hubUrl: hub.url, + token: "tok-spk", + tm, + cursor: { get: () => cursor, set: (v) => (cursor = v) }, + backoffBaseMs: 10, + }); + bridges.push(bridge); + bridge.start(); + await waitFor(() => cursor === "3"); + assert.equal(hub.requests[0].lastEventId, "0", "sem cursor persistido, começa do 0 (replay total)"); + assert.equal(hub.requests[0].auth, "Bearer tok-spk"); + const tasks = tm.listTasks(); + assert.equal(tasks.length, 1); + assert.equal(tasks[0].state, "cancelled"); +}); + +test("reconnects with backoff and resumes from the persisted cursor", async () => { + const hub = await fakeHub([ + { events: [sse(1, "task.created", { task_id: "t_r", mode: "solo", from: "o" })], thenClose: true }, + { events: [sse(2, "task.completed", { task_id: "t_r", manifest: { summary: "ok" } })], thenClose: false }, + ]); + const tm = createManager(); + let cursor: string | null = null; + const bridge = createConductorBridge({ + hubUrl: hub.url, + token: "tok", + tm, + cursor: { get: () => cursor, set: (v) => (cursor = v) }, + backoffBaseMs: 10, + }); + bridges.push(bridge); + bridge.start(); + await waitFor(() => hub.requests.length >= 2 && cursor === "2"); + assert.equal(hub.requests[1].lastEventId, "1", "reconexão retoma do cursor persistido"); + assert.equal(tm.listTasks()[0].state, "completed"); +}); + +test("stop() aborts and never reconnects", async () => { + const hub = await fakeHub([{ events: [sse(1, "task.created", { task_id: "t_s", mode: "solo", from: "o" })], thenClose: true }]); + const tm = createManager(); + let cursor: string | null = null; + const bridge = createConductorBridge({ + hubUrl: hub.url, + token: "tok", + tm, + cursor: { get: () => cursor, set: (v) => (cursor = v) }, + backoffBaseMs: 10, + }); + bridges.push(bridge); + bridge.start(); + await waitFor(() => cursor === "1"); + bridge.stop(); + const before = hub.requests.length; + await new Promise((resolve) => setTimeout(resolve, 100)); + assert.equal(hub.requests.length, before, "nenhuma reconexão após stop()"); + assert.equal(bridge.state(), "stopped"); +}); diff --git a/tests/unit/conductor-bridge-mapping.test.ts b/tests/unit/conductor-bridge-mapping.test.ts new file mode 100644 index 0000000000..ed4c69e518 --- /dev/null +++ b/tests/unit/conductor-bridge-mapping.test.ts @@ -0,0 +1,106 @@ +import test from "node:test"; +import assert from "node:assert/strict"; + +import { A2ATaskManager } from "../../src/lib/a2a/taskManager.ts"; +import { applyConductorEvent, conductorStateFor } from "../../src/lib/conductor/bridge.ts"; + +const managers: A2ATaskManager[] = []; + +function createManager(ttlMinutes = 5) { + const manager = new A2ATaskManager(ttlMinutes); + managers.push(manager); + return manager; +} + +test.afterEach(() => { + while (managers.length > 0) { + managers.pop()?.destroy(); + } +}); + +const ev = (id: number, type: string, payload: Record) => ({ + id: String(id), + type, + payload, +}); + +function mirrored(tm: A2ATaskManager, index: Map, conductorId: string) { + const a2aId = index.get(conductorId); + assert.ok(a2aId, `task ${conductorId} indexada`); + const task = tm.getTask(a2aId!); + assert.ok(task, `task A2A ${a2aId} existe`); + return task!; +} + +test("task.created mirrors as submitted with conductor metadata", () => { + const tm = createManager(); + const index = new Map(); + applyConductorEvent(tm, index, ev(1, "task.created", { task_id: "t_abc", mode: "solo", from: "orchestrator" })); + const task = mirrored(tm, index, "t_abc"); + assert.equal(task.state, "submitted"); + assert.equal(task.skill, "conductor"); + const meta = task.metadata.conductor as Record; + assert.equal(meta.task_id, "t_abc"); + assert.equal(meta.mode, "solo"); +}); + +test("created → scheduled → completed climbs the transition ladder without throwing", () => { + const tm = createManager(); + const index = new Map(); + applyConductorEvent(tm, index, ev(1, "task.created", { task_id: "t_ok", mode: "solo", from: "x" })); + applyConductorEvent(tm, index, ev(2, "task.scheduled", { task_id: "t_ok", runner_id: "r_1" })); + applyConductorEvent(tm, index, ev(3, "task.completed", { task_id: "t_ok", manifest: { summary: "feito", branch: "task/t_ok" } })); + const task = mirrored(tm, index, "t_ok"); + assert.equal(task.state, "completed"); + const meta = task.metadata.conductor as Record; + assert.equal(meta.runner, "r_1"); + assert.equal(meta.summary, "feito"); + assert.equal(meta.branch, "task/t_ok"); +}); + +test("task.canceled (Conductor, 1 L) maps to cancelled (A2A local, 2 L)", () => { + const tm = createManager(); + const index = new Map(); + assert.equal(conductorStateFor("task.canceled"), "cancelled"); + applyConductorEvent(tm, index, ev(1, "task.created", { task_id: "t_cx", mode: "solo", from: "x" })); + applyConductorEvent(tm, index, ev(2, "task.canceled", { task_id: "t_cx", by: "operator" })); + const task = mirrored(tm, index, "t_cx"); + assert.equal(task.state, "cancelled"); +}); + +test("unknown event types are tolerated and mirror nothing (forward-compat)", () => { + const tm = createManager(); + const index = new Map(); + applyConductorEvent(tm, index, ev(1, "runner.registered", { runner_id: "r_1", capabilities: {} })); + applyConductorEvent(tm, index, ev(2, "council.fanout", { task_id: "t_c", candidate_task_ids: [] })); + applyConductorEvent(tm, index, ev(3, "some.future.event", {})); + assert.equal(index.size, 0); + assert.equal(tm.listTasks().length, 0); +}); + +test("late-join: terminal event for a never-seen task creates it and lands terminal", () => { + const tm = createManager(); + const index = new Map(); + applyConductorEvent(tm, index, ev(9, "task.completed", { task_id: "t_late", manifest: { summary: "s", branch: null } })); + const task = mirrored(tm, index, "t_late"); + assert.equal(task.state, "completed"); +}); + +test("events after a terminal state are ignored without throwing", () => { + const tm = createManager(); + const index = new Map(); + applyConductorEvent(tm, index, ev(1, "task.created", { task_id: "t_t", mode: "solo", from: "x" })); + applyConductorEvent(tm, index, ev(2, "task.canceled", { task_id: "t_t" })); + assert.doesNotThrow(() => applyConductorEvent(tm, index, ev(3, "task.completed", { task_id: "t_t", manifest: {} }))); + assert.equal(mirrored(tm, index, "t_t").state, "cancelled"); +}); + +test("task.input_required stays working with input_required flag (A2A has no such state)", () => { + const tm = createManager(); + const index = new Map(); + applyConductorEvent(tm, index, ev(1, "task.created", { task_id: "t_i", mode: "solo", from: "x" })); + applyConductorEvent(tm, index, ev(2, "task.input_required", { task_id: "t_i", question: "qual branch?" })); + const task = mirrored(tm, index, "t_i"); + assert.equal(task.state, "working"); + assert.equal((task.metadata.conductor as Record).input_required, true); +}); diff --git a/tests/unit/conductor-bridge-sse.test.ts b/tests/unit/conductor-bridge-sse.test.ts new file mode 100644 index 0000000000..754d936c13 --- /dev/null +++ b/tests/unit/conductor-bridge-sse.test.ts @@ -0,0 +1,43 @@ +import test from "node:test"; +import assert from "node:assert/strict"; + +import { SseParser } from "../../src/lib/conductor/bridge.ts"; + +test("whole event in a single chunk", () => { + const p = new SseParser(); + const out = p.push('id: 7\nevent: task.created\ndata: {"task_id":"t_1"}\n\n'); + assert.equal(out.length, 1); + assert.deepEqual(out[0], { id: "7", event: "task.created", data: '{"task_id":"t_1"}' }); +}); + +test("event fragmented across three chunks (cut mid-data)", () => { + const p = new SseParser(); + assert.equal(p.push("id: 8\nevent: task.sch").length, 0); + assert.equal(p.push('eduled\ndata: {"task_id"').length, 0); + const out = p.push(':"t_2"}\n\n'); + assert.equal(out.length, 1); + assert.deepEqual(out[0], { id: "8", event: "task.scheduled", data: '{"task_id":"t_2"}' }); +}); + +test("two events in one chunk", () => { + const p = new SseParser(); + const out = p.push("id: 1\nevent: a\ndata: x\n\nid: 2\nevent: b\ndata: y\n\n"); + assert.equal(out.length, 2); + assert.equal(out[0].id, "1"); + assert.equal(out[1].data, "y"); +}); + +test("comment pings are ignored", () => { + const p = new SseParser(); + assert.equal(p.push(": ping\n\n").length, 0); + const out = p.push(": ping\n\nid: 3\nevent: c\ndata: z\n\n"); + assert.equal(out.length, 1); + assert.equal(out[0].id, "3"); +}); + +test("multi-line data joins with newline (SSE spec)", () => { + const p = new SseParser(); + const out = p.push("event: m\ndata: line1\ndata: line2\n\n"); + assert.equal(out.length, 1); + assert.equal(out[0].data, "line1\nline2"); +}); diff --git a/tests/unit/conductor-delegate.test.ts b/tests/unit/conductor-delegate.test.ts new file mode 100644 index 0000000000..d356f5110d --- /dev/null +++ b/tests/unit/conductor-delegate.test.ts @@ -0,0 +1,71 @@ +import test from "node:test"; +import assert from "node:assert/strict"; + +import { createConductorTask } from "../../src/lib/conductor/hubProxy.ts"; + +function fakeHub(body: unknown, status = 201) { + const calls: { url: string; method: string; auth: string | null; body: unknown }[] = []; + const impl = (async (url: string | URL | Request, init?: RequestInit) => { + calls.push({ + url: String(url), + method: init?.method ?? "GET", + auth: (init?.headers as Record | undefined)?.authorization ?? null, + body: JSON.parse(String(init?.body ?? "{}")), + }); + return new Response(JSON.stringify(body), { status }); + }) as typeof fetch; + return { impl, calls }; +} + +test.beforeEach(() => { + process.env.CONDUCTOR_HUB_URL = "http://hub.test:7910"; + process.env.CONDUCTOR_HUB_TOKEN = "tok-hub"; + delete process.env.CONDUCTOR_ORCHESTRATOR_TOKEN; +}); + +test.after(() => { + delete process.env.CONDUCTOR_HUB_URL; + delete process.env.CONDUCTOR_HUB_TOKEN; + delete process.env.CONDUCTOR_ORCHESTRATOR_TOKEN; +}); + +test("traduz a delegação A2A no POST /v1/tasks do hub (shape exato do contrato)", async () => { + const { impl, calls } = fakeHub({ id: "t_novo", status: "submitted" }); + const r = await createConductorTask( + { repoUrl: "https://git.x/repo", baseRef: "dev", prompt: "adicione um README", mode: "council-3", cli: "claude", model: "cc/claude-sonnet-5" }, + { fetchImpl: impl } + ); + assert.deepEqual(r, { ok: true, status: 201, task_id: "t_novo" }); + assert.equal(calls[0].url, "http://hub.test:7910/v1/tasks"); + assert.equal(calls[0].method, "POST"); + assert.deepEqual(calls[0].body, { + repo: { url: "https://git.x/repo", base_ref: "dev" }, + spec: { prompt: "adicione um README" }, + mode: "council-3", + requirements: { cli: "claude", model: "cc/claude-sonnet-5" }, + }); +}); + +test("defaults: base_ref main, mode solo, sem requirements quando cli/model ausentes", async () => { + const { impl, calls } = fakeHub({ id: "t_d", status: "submitted" }); + await createConductorTask({ repoUrl: "https://git.x/r", prompt: "p" }, { fetchImpl: impl }); + assert.deepEqual(calls[0].body, { repo: { url: "https://git.x/r", base_ref: "main" }, spec: { prompt: "p" }, mode: "solo" }); +}); + +test("credencial: prefere CONDUCTOR_ORCHESTRATOR_TOKEN; fallback é o token do hub", async () => { + const a = fakeHub({ id: "t_1" }); + await createConductorTask({ repoUrl: "https://x/r", prompt: "p" }, { fetchImpl: a.impl }); + assert.equal(a.calls[0].auth, "Bearer tok-hub"); + process.env.CONDUCTOR_ORCHESTRATOR_TOKEN = "tok-orch"; + const b = fakeHub({ id: "t_2" }); + await createConductorTask({ repoUrl: "https://x/r", prompt: "p" }, { fetchImpl: b.impl }); + assert.equal(b.calls[0].auth, "Bearer tok-orch"); +}); + +test("recusa do hub → {ok:false, status} sem lançar nem vazar corpo; env ausente → 503", async () => { + const { impl } = fakeHub({ error: "segredo do hub" }, 422); + const r = await createConductorTask({ repoUrl: "https://x/r", prompt: "p" }, { fetchImpl: impl }); + assert.deepEqual(r, { ok: false, status: 422 }); + delete process.env.CONDUCTOR_HUB_URL; + assert.deepEqual(await createConductorTask({ repoUrl: "https://x/r", prompt: "p" }, {}), { ok: false, status: 503 }); +}); diff --git a/tests/unit/conductor-faro-chat.test.ts b/tests/unit/conductor-faro-chat.test.ts new file mode 100644 index 0000000000..91fe7bd4d5 --- /dev/null +++ b/tests/unit/conductor-faro-chat.test.ts @@ -0,0 +1,39 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import fs from "node:fs"; +import path from "node:path"; + +// Invariantes de segurança/UX do chat com voz (componentes React: vitest-ui advisory + dashboard-typecheck). +const CHAT = "src/app/(dashboard)/dashboard/conductor/FaroChat.tsx"; + +function src(): string { + return fs.readFileSync(path.join(process.cwd(), CHAT), "utf8"); +} + +test("client fala SÓ com o OmniRoute: /api/conductor/ask + /api/v1/audio/* (nunca Faro/hub direto)", () => { + const s = src(); + assert.match(s, /"use client"/); + assert.match(s, /\/api\/conductor\/ask/); + assert.match(s, /\/api\/v1\/audio\/transcriptions/); + assert.match(s, /\/api\/v1\/audio\/speech/); + assert.ok(!s.includes(":7920"), "endereço do Faro nunca no client"); + assert.ok(!s.includes("CONDUCTOR_"), "nenhuma env do Conductor no client"); +}); + +test("pending do Faro → botões Sim/Não que enviam 'sim'/'não' (trava de confirmação é do motor do Faro)", () => { + const s = src(); + assert.match(s, /pending/); + assert.match(s, /"sim"/); + assert.match(s, /"não"/); +}); + +test("voz: push-to-talk com MediaRecorder/getUserMedia; STT multipart sem Content-Type manual; TTS via Blob com revoke", () => { + const s = src(); + assert.match(s, /navigator\.mediaDevices\.getUserMedia/); + assert.match(s, /MediaRecorder/); + assert.match(s, /FormData\(\)/); + assert.ok(!/audio\/transcriptions[\s\S]{0,300}content-type/i.test(s), "multipart deixa o browser definir o boundary"); + assert.match(s, /URL\.createObjectURL/); + assert.match(s, /URL\.revokeObjectURL/); + assert.match(s, /useTranslations\("conductor"\)/); +}); diff --git a/tests/unit/conductor-faro-proxy.test.ts b/tests/unit/conductor-faro-proxy.test.ts new file mode 100644 index 0000000000..1309316a44 --- /dev/null +++ b/tests/unit/conductor-faro-proxy.test.ts @@ -0,0 +1,61 @@ +import test from "node:test"; +import assert from "node:assert/strict"; + +import { askFaro } from "../../src/lib/conductor/faroProxy.ts"; + +function fakeFaro(body: unknown, status = 200) { + const calls: { url: string; auth: string | null; body: unknown }[] = []; + const impl = (async (url: string | URL | Request, init?: RequestInit) => { + calls.push({ + url: String(url), + auth: (init?.headers as Record | undefined)?.authorization ?? null, + body: JSON.parse(String(init?.body ?? "{}")), + }); + return new Response(JSON.stringify(body), { status }); + }) as typeof fetch; + return { impl, calls }; +} + +test.beforeEach(() => { + process.env.CONDUCTOR_SPOKESPERSON_URL = "http://faro.test:7920"; + process.env.CONDUCTOR_HUB_TOKEN = "tok-hub"; +}); + +test.after(() => { + delete process.env.CONDUCTOR_SPOKESPERSON_URL; + delete process.env.CONDUCTOR_HUB_TOKEN; +}); + +test("repassa a mensagem ao /ask com o token server-side e devolve text+pending", async () => { + const { impl, calls } = fakeFaro({ text: "frota ok", pending: { kind: "cancel_task" }, extra: "NÃO passa" }); + const r = await askFaro("como está a frota?", { fetchImpl: impl }); + assert.deepEqual(r, { ok: true, text: "frota ok", pending: { kind: "cancel_task" } }); + assert.equal(calls[0].url, "http://faro.test:7920/ask"); + assert.equal(calls[0].auth, "Bearer tok-hub"); + assert.deepEqual(calls[0].body, { message: "como está a frota?" }); +}); + +test("pending null passa como null (sem confirmação pendente)", async () => { + const { impl } = fakeFaro({ text: "oi", pending: null }); + const r = await askFaro("oi", { fetchImpl: impl }); + assert.deepEqual(r, { ok: true, text: "oi", pending: null }); +}); + +test("Faro fora do ar / erro HTTP → degradado {ok:false} sem lançar nem vazar corpo", async () => { + const failing = (async () => { + throw new Error("ECONNREFUSED"); + }) as unknown as typeof fetch; + const down = await askFaro("oi", { fetchImpl: failing }); + assert.equal(down.ok, false); + const { impl } = fakeFaro({ error: "segredo interno" }, 401); + const denied = await askFaro("oi", { fetchImpl: impl }); + assert.equal(denied.ok, false); + assert.ok(!JSON.stringify(denied).includes("segredo interno")); +}); + +test("URL default do Faro é loopback :7920 quando a env não está setada", async () => { + delete process.env.CONDUCTOR_SPOKESPERSON_URL; + const { impl, calls } = fakeFaro({ text: "x", pending: null }); + await askFaro("oi", { fetchImpl: impl }); + assert.equal(calls[0].url, "http://127.0.0.1:7920/ask"); +}); diff --git a/tests/unit/conductor-fleet-route.test.ts b/tests/unit/conductor-fleet-route.test.ts new file mode 100644 index 0000000000..4fb4b88a2b --- /dev/null +++ b/tests/unit/conductor-fleet-route.test.ts @@ -0,0 +1,103 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { createServer, type Server } from "node:http"; + +const TEST_DATA_DIR = fs.mkdtempSync(path.join(os.tmpdir(), "omniroute-conductor-route-")); +process.env.DATA_DIR = TEST_DATA_DIR; + +const core = await import("../../src/lib/db/core.ts"); +const fleetRoute = await import("../../src/app/api/conductor/fleet/route.ts"); +const detailRoute = await import("../../src/app/api/conductor/tasks/[id]/route.ts"); +const cancelRoute = await import("../../src/app/api/conductor/tasks/[id]/cancel/route.ts"); + +const servers: Server[] = []; + +function fakeHub(routes: Record): Promise { + const server = createServer((req, res) => { + const hit = Object.entries(routes).find(([p]) => (req.url ?? "").startsWith(p)); + res.writeHead(hit ? hit[1].status : 404, { "content-type": "application/json" }); + res.end(JSON.stringify(hit ? hit[1].body : { error: "hub: segredo interno que NÃO pode vazar" })); + }); + servers.push(server); + return new Promise((resolve) => { + server.listen(0, "127.0.0.1", () => { + const addr = server.address(); + resolve(`http://127.0.0.1:${typeof addr === "object" && addr ? addr.port : 0}`); + }); + }); +} + +test.beforeEach(() => { + core.resetDbInstance(); + fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); + fs.mkdirSync(TEST_DATA_DIR, { recursive: true }); + delete process.env.CONDUCTOR_HUB_URL; + delete process.env.CONDUCTOR_HUB_TOKEN; +}); + +test.after(async () => { + core.resetDbInstance(); + fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); + delete process.env.CONDUCTOR_HUB_URL; + while (servers.length > 0) { + const s = servers.pop(); + await new Promise((resolve) => s?.close(resolve)); + } +}); + +test("GET /api/conductor/fleet devolve snapshot whitelisted; sem hub → degradado 200", async () => { + process.env.CONDUCTOR_HUB_URL = await fakeHub({ + "/v1/runners": { + status: 200, + body: [{ id: "r_1", token: "VAZOU?", online: true, capabilities: { name: "devbox", clis: [{ profile: "claude" }] } }], + }, + "/v1/tasks": { + status: 200, + body: [{ id: "t_1", status: "working", mode: "solo", repo: { url: "https://x/r" }, assigned_runner: "r_1" }], + }, + }); + process.env.CONDUCTOR_HUB_TOKEN = "tok"; + const res = await fleetRoute.GET(new Request("http://localhost/api/conductor/fleet")); + assert.equal(res.status, 200); + const body = await res.json(); + assert.equal(body.offline, false); + assert.equal(body.runners[0].name, "devbox"); + assert.equal(body.tasks[0].status, "working"); + assert.ok(!JSON.stringify(body).includes("VAZOU?"), "token de runner não vaza pela rota"); + + delete process.env.CONDUCTOR_HUB_URL; // sem hub: degradado, nunca 500 + const down = await fleetRoute.GET(new Request("http://localhost/api/conductor/fleet")); + assert.equal(down.status, 200); + assert.equal((await down.json()).offline, true); +}); + +test("GET /api/conductor/tasks/[id] → 404 sanitizado quando o hub não conhece a task", async () => { + process.env.CONDUCTOR_HUB_URL = await fakeHub({}); + const res = await detailRoute.GET(new Request("http://localhost/api/conductor/tasks/t_x"), { + params: Promise.resolve({ id: "t_x" }), + }); + assert.equal(res.status, 404); + const text = await res.text(); + assert.ok(!text.includes("segredo interno"), "corpo do hub NUNCA repassado"); +}); + +test("POST cancel repassa recusa do hub com status, sem corpo upstream", async () => { + process.env.CONDUCTOR_HUB_URL = await fakeHub({ + "/v1/tasks/t_done/cancel": { status: 409, body: { error: "segredo interno que NÃO pode vazar" } }, + "/v1/tasks/t_ok/cancel": { status: 200, body: { ok: true } }, + }); + const denied = await cancelRoute.POST(new Request("http://localhost/x", { method: "POST" }), { + params: Promise.resolve({ id: "t_done" }), + }); + assert.equal(denied.status, 409); + assert.ok(!(await denied.text()).includes("segredo interno")); + + const ok = await cancelRoute.POST(new Request("http://localhost/x", { method: "POST" }), { + params: Promise.resolve({ id: "t_ok" }), + }); + assert.equal(ok.status, 200); + assert.deepEqual(await ok.json(), { ok: true }); +}); diff --git a/tests/unit/conductor-fleet-skills.test.ts b/tests/unit/conductor-fleet-skills.test.ts new file mode 100644 index 0000000000..eb16a76d2f --- /dev/null +++ b/tests/unit/conductor-fleet-skills.test.ts @@ -0,0 +1,95 @@ +import test from "node:test"; +import assert from "node:assert/strict"; + +import { getFleetSkills, clearFleetSkillsCache } from "../../src/lib/conductor/fleetSkills.ts"; + +const RUNNERS = [ + { + id: "r_1", + online: true, + capabilities: { + name: "devbox", + clis: [ + { profile: "claude", models: [{ id: "claude-sonnet-5", cost: 3, capability: 4 }] }, + { profile: "codex" }, + ], + skills: ["deploy"], + }, + }, + { + id: "r_2", + online: true, + capabilities: { name: "vm02", clis: [{ profile: "claude" }], skills: [] }, + }, + { + id: "r_3", + online: false, // offline: fora do anúncio + capabilities: { name: "morta", clis: [{ profile: "gemini" }], skills: ["secret"] }, + }, +]; + +function fakeFetch(body: unknown, status = 200) { + const calls: string[] = []; + const impl = (async (url: string | URL | Request) => { + calls.push(String(url)); + return new Response(JSON.stringify(body), { status }); + }) as typeof fetch; + return { impl, calls }; +} + +test.beforeEach(() => { + clearFleetSkillsCache(); + process.env.CONDUCTOR_HUB_URL = "http://hub.test:7910"; + process.env.CONDUCTOR_HUB_TOKEN = "tok"; +}); + +test.after(() => { + delete process.env.CONDUCTOR_HUB_URL; + delete process.env.CONDUCTOR_HUB_TOKEN; +}); + +test("derives one skill per unique online CLI profile + one per declared OASF skill", async () => { + const { impl, calls } = fakeFetch(RUNNERS); + const skills = await getFleetSkills({ fetchImpl: impl }); + const ids = skills.map((s) => s.id).sort(); + assert.deepEqual(ids, ["conductor-cli-claude", "conductor-cli-codex", "conductor-skill-deploy"]); + assert.ok(calls[0].includes("/v1/runners")); + const claude = skills.find((s) => s.id === "conductor-cli-claude")!; + assert.match(claude.description, /2 runner/); + assert.match(claude.description, /claude-sonnet-5/); + assert.ok(claude.tags.includes("conductor")); + // runner offline não anuncia nada (gemini/secret ausentes) + assert.ok(!ids.some((i) => i.includes("gemini") || i.includes("secret"))); +}); + +test("caches for the TTL and refetches after it expires (injectable clock)", async () => { + const { impl, calls } = fakeFetch(RUNNERS); + let now = 1_000_000; + await getFleetSkills({ fetchImpl: impl, nowMs: () => now }); + await getFleetSkills({ fetchImpl: impl, nowMs: () => now + 30_000 }); + assert.equal(calls.length, 1, "dentro do TTL: sem refetch"); + now += 61_000; + await getFleetSkills({ fetchImpl: impl, nowMs: () => now }); + assert.equal(calls.length, 2, "TTL vencido: refetch"); +}); + +test("hub offline/erro → [] (o card omite a seção, nunca quebra)", async () => { + const failing = (async () => { + throw new Error("ECONNREFUSED"); + }) as unknown as typeof fetch; + assert.deepEqual(await getFleetSkills({ fetchImpl: failing }), []); + const { impl } = fakeFetch({ error: "x" }, 503); + assert.deepEqual(await getFleetSkills({ fetchImpl: impl }), []); +}); + +test("sem CONDUCTOR_HUB_URL → [] sem nem tentar fetch", async () => { + delete process.env.CONDUCTOR_HUB_URL; + const { impl, calls } = fakeFetch(RUNNERS); + assert.deepEqual(await getFleetSkills({ fetchImpl: impl }), []); + assert.equal(calls.length, 0); +}); + +test("shape inválido do hub → [] (input não confiável)", async () => { + const { impl } = fakeFetch({ nao: "é array" }); + assert.deepEqual(await getFleetSkills({ fetchImpl: impl }), []); +}); diff --git a/tests/unit/conductor-hub-proxy.test.ts b/tests/unit/conductor-hub-proxy.test.ts new file mode 100644 index 0000000000..3822ebfedb --- /dev/null +++ b/tests/unit/conductor-hub-proxy.test.ts @@ -0,0 +1,140 @@ +import test from "node:test"; +import assert from "node:assert/strict"; + +import { + getFleetSnapshot, + getConductorTaskDetail, + cancelConductorTask, +} from "../../src/lib/conductor/hubProxy.ts"; + +const RUNNERS = [ + { + id: "r_1", + token: "NUNCA-VAZAR", + online: true, + draining: false, + capabilities: { name: "devbox", clis: [{ profile: "claude" }, { profile: "codex" }], skills: [] }, + }, +]; + +const TASKS = [ + { + id: "t_1", + status: "completed", + mode: "solo", + from: "orchestrator", + repo: { url: "https://git.x/repo", base_ref: "main" }, + spec: { prompt: "faz algo" }, + assigned_runner: "r_1", + manifest: { summary: "feito", branch: "task/t_1", error: null }, + council: null, + created_at: "2026-07-22T00:00:00Z", + updated_at: "2026-07-22T00:01:00Z", + }, + { + id: "t_2", + status: "working", + mode: "council-3", + from: "orchestrator", + repo: { url: "https://git.x/repo", base_ref: "main" }, + spec: { prompt: "outra" }, + assigned_runner: null, + manifest: null, + council: { candidate_task_ids: ["t_2a", "t_2b"] }, + created_at: "2026-07-22T00:02:00Z", + updated_at: "2026-07-22T00:02:30Z", + }, +]; + +function fakeHub(routes: Record) { + const calls: { url: string; method: string; auth: string | null }[] = []; + const impl = (async (url: string | URL | Request, init?: RequestInit) => { + const u = String(url); + calls.push({ + url: u, + method: init?.method ?? "GET", + auth: (init?.headers as Record | undefined)?.authorization ?? null, + }); + const hit = Object.entries(routes).find(([path]) => u.includes(path)); + if (!hit) return new Response("{}", { status: 404 }); + return new Response(JSON.stringify(hit[1].body), { status: hit[1].status }); + }) as typeof fetch; + return { impl, calls }; +} + +test.beforeEach(() => { + process.env.CONDUCTOR_HUB_URL = "http://hub.test:7910"; + process.env.CONDUCTOR_HUB_TOKEN = "tok-secreto"; +}); + +test.after(() => { + delete process.env.CONDUCTOR_HUB_URL; + delete process.env.CONDUCTOR_HUB_TOKEN; +}); + +test("snapshot: runners e tasks sanitizados (whitelist — token do runner NUNCA passa)", async () => { + const { impl, calls } = fakeHub({ + "/v1/runners": { status: 200, body: RUNNERS }, + "/v1/tasks": { status: 200, body: TASKS }, + }); + const snap = await getFleetSnapshot({ fetchImpl: impl }); + assert.equal(snap.offline, false); + assert.deepEqual(snap.runners, [ + { id: "r_1", name: "devbox", clis: ["claude", "codex"], online: true, draining: false }, + ]); + assert.equal(snap.tasks.length, 2); + assert.deepEqual(snap.tasks[0], { + id: "t_1", + status: "completed", + mode: "solo", + repo: "https://git.x/repo", + runner: "r_1", + summary: "feito", + branch: "task/t_1", + error: null, + updated_at: "2026-07-22T00:01:00Z", + }); + assert.ok(!JSON.stringify(snap).includes("NUNCA-VAZAR"), "token de runner não vaza"); + assert.ok(!JSON.stringify(snap).includes("tok-secreto"), "token do hub não vaza"); + assert.equal(calls.every((c) => c.auth === "Bearer tok-secreto"), true, "proxy autentica no hub"); +}); + +test("snapshot: hub fora do ar → degradado {offline:true} sem lançar", async () => { + const failing = (async () => { + throw new Error("ECONNREFUSED"); + }) as unknown as typeof fetch; + const snap = await getFleetSnapshot({ fetchImpl: failing }); + assert.deepEqual(snap, { offline: true, runners: [], tasks: [] }); +}); + +test("snapshot: env ausente → degradado sem fetch", async () => { + delete process.env.CONDUCTOR_HUB_URL; + const { impl, calls } = fakeHub({}); + const snap = await getFleetSnapshot({ fetchImpl: impl }); + assert.equal(snap.offline, true); + assert.equal(calls.length, 0); +}); + +test("detalhe: manifest e council passam; spec.prompt vem; campos fora da whitelist não", async () => { + const { impl } = fakeHub({ "/v1/tasks/t_2": { status: 200, body: TASKS[1] } }); + const detail = await getConductorTaskDetail("t_2", { fetchImpl: impl }); + assert.ok(detail); + assert.equal(detail!.id, "t_2"); + assert.equal(detail!.prompt, "outra"); + assert.deepEqual(detail!.council, { candidate_task_ids: ["t_2a", "t_2b"] }); + assert.equal(detail!.base_ref, "main"); +}); + +test("detalhe: 404 do hub → null", async () => { + const { impl } = fakeHub({}); + assert.equal(await getConductorTaskDetail("t_x", { fetchImpl: impl }), null); +}); + +test("cancelar: POST no hub e repassa o status", async () => { + const { impl, calls } = fakeHub({ "/v1/tasks/t_1/cancel": { status: 200, body: { ok: true } } }); + const r = await cancelConductorTask("t_1", { fetchImpl: impl }); + assert.deepEqual(r, { ok: true, status: 200 }); + assert.equal(calls[0].method, "POST"); + const miss = await cancelConductorTask("t_zzz", { fetchImpl: fakeHub({}).impl }); + assert.deepEqual(miss, { ok: false, status: 404 }); +}); diff --git a/tests/unit/conductor-panel-client.test.ts b/tests/unit/conductor-panel-client.test.ts new file mode 100644 index 0000000000..ddc382cf2a --- /dev/null +++ b/tests/unit/conductor-panel-client.test.ts @@ -0,0 +1,35 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import fs from "node:fs"; +import path from "node:path"; + +// Componentes React são cobertos pelo vitest-ui (advisory) + dashboard-typecheck; +// este source-scan trava os invariantes de segurança/UX que revisão nenhuma pode perder. +const CLIENT = "src/app/(dashboard)/dashboard/conductor/ConductorPageClient.tsx"; +const PAGE = "src/app/(dashboard)/dashboard/conductor/page.tsx"; + +test("client: poll com setInterval + clearInterval; fala SÓ com /api/conductor (nunca com o hub)", () => { + const src = fs.readFileSync(path.join(process.cwd(), CLIENT), "utf8"); + assert.match(src, /"use client"/); + assert.match(src, /setInterval\(/); + assert.match(src, /clearInterval\(/); + assert.match(src, /\/api\/conductor\/fleet/); + assert.ok(!src.includes("CONDUCTOR_HUB"), "nenhuma env do hub no client"); + assert.ok(!src.includes(":7910"), "nenhum endereço de hub hardcoded no client"); +}); + +test("client: cancelar é destrutivo → ConfirmModal antes do POST", () => { + const src = fs.readFileSync(path.join(process.cwd(), CLIENT), "utf8"); + assert.match(src, /ConfirmModal/); + const confirmAt = src.indexOf(" 0 && cancelPost > 0, "ConfirmModal e POST cancel presentes"); + assert.match(src, /useTranslations\("conductor"\)/, "strings via i18n, namespace conductor"); +}); + +test("page: wrapper fino de servidor com metadata (padrão relay)", () => { + const src = fs.readFileSync(path.join(process.cwd(), PAGE), "utf8"); + assert.match(src, /export const metadata/); + assert.match(src, /ConductorPageClient/); + assert.ok(!src.includes('"use client"'), "page.tsx é server component fino"); +}); diff --git a/tests/unit/conductor-routes-auth.test.ts b/tests/unit/conductor-routes-auth.test.ts new file mode 100644 index 0000000000..8c35f1f5a6 --- /dev/null +++ b/tests/unit/conductor-routes-auth.test.ts @@ -0,0 +1,23 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import fs from "node:fs"; +import path from "node:path"; + +// Padrão budget-route-auth: prova pelo fonte que o gate de auth vem ANTES de qualquer uso do proxy. +const ROUTES = [ + "src/app/api/conductor/fleet/route.ts", + "src/app/api/conductor/tasks/[id]/route.ts", + "src/app/api/conductor/tasks/[id]/cancel/route.ts", +]; + +for (const route of ROUTES) { + test(`${route}: requireManagementAuth antes do proxy ao hub`, () => { + const src = fs.readFileSync(path.join(process.cwd(), route), "utf8"); + const authAt = src.indexOf("requireManagementAuth("); + assert.ok(authAt > 0, "handler chama requireManagementAuth"); + assert.match(src, /if \(authError\) return authError;/, "curto-circuito no erro de auth"); + const proxyAt = src.search(/getFleetSnapshot\(|getConductorTaskDetail\(|cancelConductorTask\(/); + assert.ok(proxyAt > authAt, "proxy ao hub só depois do gate de auth"); + assert.ok(!src.includes("CONDUCTOR_HUB_TOKEN"), "token nunca manuseado na rota (vive no hubProxy)"); + }); +} diff --git a/tests/unit/db-adapters/driverFactory.test.ts b/tests/unit/db-adapters/driverFactory.test.ts index fea95d339c..a191bd8970 100644 --- a/tests/unit/db-adapters/driverFactory.test.ts +++ b/tests/unit/db-adapters/driverFactory.test.ts @@ -265,6 +265,7 @@ describe("driverFactory", () => { first.close(); } }); + // Cursor renewal plan, Task 2 Step 5: tryIdeAuth() now passes a // busy-timeout to tryOpenSync() on every driver path, since it's invoked // from an unattended sweep tick (not just the human-attended auto-import diff --git a/tests/unit/db-migration-renumbering-devin.test.ts b/tests/unit/db-migration-renumbering-devin.test.ts new file mode 100644 index 0000000000..1993fcfd63 --- /dev/null +++ b/tests/unit/db-migration-renumbering-devin.test.ts @@ -0,0 +1,384 @@ +import assert from "node:assert/strict"; +import fs, { type PathLike } from "node:fs"; +import path from "node:path"; +import test from "node:test"; +import { pathToFileURL } from "node:url"; + +import Database from "better-sqlite3"; + +const serial = { concurrency: false }; + +async function importFresh(modulePath: string) { + const url = pathToFileURL(path.resolve(modulePath)).href; + return import(`${url}?test=${Date.now()}-${Math.random().toString(16).slice(2)}`); +} + +function withMockedMigrationFs(files: Record, fn: () => void) { + const originalExistsSync = fs.existsSync; + const originalReaddirSync = fs.readdirSync; + const originalReadFileSync = fs.readFileSync; + const isMigrationDir = (target: PathLike) => + String(target).replaceAll("\\", "/").endsWith("/src/lib/db/migrations") || + String(target).replaceAll("\\", "/").endsWith("/migrations"); + + fs.existsSync = (target) => { + const fileName = path.basename(String(target)); + if (isMigrationDir(target) || Object.hasOwn(files, fileName)) return true; + return originalExistsSync(target); + }; + fs.readdirSync = ((target: PathLike) => { + if (isMigrationDir(target)) return Object.keys(files); + return originalReaddirSync(target); + }) as typeof fs.readdirSync; + fs.readFileSync = ((target: PathLike, options?: { encoding?: BufferEncoding | null }) => { + const fileName = path.basename(String(target)); + if (Object.hasOwn(files, fileName)) return files[fileName]; + return originalReadFileSync(target, options); + }) as typeof fs.readFileSync; + + try { + fn(); + } finally { + fs.existsSync = originalExistsSync; + fs.readdirSync = originalReaddirSync; + fs.readFileSync = originalReadFileSync; + } +} + +test( + "reconcileRenumberedMigrations moves legacy Devin Desktop marker 131→151", + serial, + async () => { + const runner = await importFresh("src/lib/db/migrationRunner.ts"); + const db = new Database(":memory:"); + + try { + db.exec(` + CREATE TABLE _omniroute_migrations ( + version TEXT PRIMARY KEY, + name TEXT NOT NULL, + applied_at TEXT NOT NULL DEFAULT (datetime('now')) + ); + `); + db.prepare("INSERT INTO _omniroute_migrations (version, name) VALUES (?, ?)").run( + "131", + "windsurf_to_devin_desktop" + ); + + withMockedMigrationFs( + { + "131_proxy_subscriptions.sql": "CREATE TABLE proxy_subscriptions (id TEXT PRIMARY KEY);", + "132_proxy_subscriptions_meta.sql": + "CREATE TABLE proxy_subscriptions_meta (id TEXT PRIMARY KEY);", + "135_migrate_model_capability_max_token.sql": + "CREATE TABLE max_token_migration_ran (id TEXT PRIMARY KEY);", + "151_windsurf_to_devin_desktop.sql": + "CREATE TABLE devin_migration_must_not_rerun (id TEXT PRIMARY KEY);", + }, + () => runner.runMigrations(db) + ); + + const applied = db + .prepare("SELECT version, name FROM _omniroute_migrations ORDER BY version") + .all(); + assert.deepEqual(applied, [ + { version: "131", name: "proxy_subscriptions" }, + { version: "132", name: "proxy_subscriptions_meta" }, + { version: "135", name: "migrate_model_capability_max_token" }, + { version: "151", name: "windsurf_to_devin_desktop" }, + ]); + assert.ok( + db + .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?") + .get("proxy_subscriptions") + ); + assert.ok( + db + .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?") + .get("proxy_subscriptions_meta") + ); + assert.ok( + db + .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?") + .get("max_token_migration_ran") + ); + assert.equal( + db + .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?") + .get("devin_migration_must_not_rerun"), + undefined + ); + } finally { + db.close(); + } + } +); + +test( + "reconcileRenumberedMigrations frees legacy Devin Desktop slot 135 for its canonical migration", + serial, + async () => { + const runner = await importFresh("src/lib/db/migrationRunner.ts"); + const db = new Database(":memory:"); + + try { + db.exec(` + CREATE TABLE _omniroute_migrations ( + version TEXT PRIMARY KEY, + name TEXT NOT NULL, + applied_at TEXT NOT NULL DEFAULT (datetime('now')) + ); + `); + db.prepare("INSERT INTO _omniroute_migrations (version, name) VALUES (?, ?)").run( + "135", + "windsurf_to_devin_desktop" + ); + + withMockedMigrationFs( + { + "135_migrate_model_capability_max_token.sql": + "CREATE TABLE max_token_migration_ran (id TEXT PRIMARY KEY);", + "151_windsurf_to_devin_desktop.sql": + "CREATE TABLE devin_migration_must_not_rerun (id TEXT PRIMARY KEY);", + }, + () => runner.runMigrations(db) + ); + + assert.deepEqual( + db.prepare("SELECT version, name FROM _omniroute_migrations ORDER BY version").all(), + [ + { version: "135", name: "migrate_model_capability_max_token" }, + { version: "151", name: "windsurf_to_devin_desktop" }, + ] + ); + assert.ok( + db + .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?") + .get("max_token_migration_ran") + ); + assert.equal( + db + .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?") + .get("devin_migration_must_not_rerun"), + undefined + ); + } finally { + db.close(); + } + } +); + +test( + "reconcileRenumberedMigrations frees legacy Devin Desktop slot 136 for Radar", + serial, + async () => { + const runner = await importFresh("src/lib/db/migrationRunner.ts"); + const db = new Database(":memory:"); + + try { + db.exec(` + CREATE TABLE _omniroute_migrations ( + version TEXT PRIMARY KEY, + name TEXT NOT NULL, + applied_at TEXT NOT NULL DEFAULT (datetime('now')) + ); + `); + db.prepare("INSERT INTO _omniroute_migrations (version, name) VALUES (?, ?)").run( + "136", + "windsurf_to_devin_desktop" + ); + + withMockedMigrationFs( + { + "136_radar_cache_settings.sql": + "CREATE TABLE radar_cache_settings_ran (id TEXT PRIMARY KEY);", + "151_windsurf_to_devin_desktop.sql": + "CREATE TABLE devin_migration_must_not_rerun (id TEXT PRIMARY KEY);", + }, + () => runner.runMigrations(db) + ); + + assert.deepEqual( + db.prepare("SELECT version, name FROM _omniroute_migrations ORDER BY version").all(), + [ + { version: "136", name: "radar_cache_settings" }, + { version: "151", name: "windsurf_to_devin_desktop" }, + ] + ); + assert.ok( + db + .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?") + .get("radar_cache_settings_ran") + ); + assert.equal( + db + .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?") + .get("devin_migration_must_not_rerun"), + undefined + ); + } finally { + db.close(); + } + } +); + +test( + "reconcileRenumberedMigrations frees legacy Devin Desktop slot 139 for CCR", + serial, + async () => { + const runner = await importFresh("src/lib/db/migrationRunner.ts"); + const db = new Database(":memory:"); + + try { + db.exec(` + CREATE TABLE _omniroute_migrations ( + version TEXT PRIMARY KEY, + name TEXT NOT NULL, + applied_at TEXT NOT NULL DEFAULT (datetime('now')) + ); + `); + db.prepare("INSERT INTO _omniroute_migrations (version, name) VALUES (?, ?)").run( + "139", + "windsurf_to_devin_desktop" + ); + + withMockedMigrationFs( + { + "139_ccr_blocks.sql": "CREATE TABLE ccr_blocks_migration_ran (id TEXT PRIMARY KEY);", + "151_windsurf_to_devin_desktop.sql": + "CREATE TABLE devin_migration_must_not_rerun (id TEXT PRIMARY KEY);", + }, + () => runner.runMigrations(db) + ); + + assert.deepEqual( + db.prepare("SELECT version, name FROM _omniroute_migrations ORDER BY version").all(), + [ + { version: "139", name: "ccr_blocks" }, + { version: "151", name: "windsurf_to_devin_desktop" }, + ] + ); + assert.ok( + db + .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?") + .get("ccr_blocks_migration_ran") + ); + assert.equal( + db + .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?") + .get("devin_migration_must_not_rerun"), + undefined + ); + } finally { + db.close(); + } + } +); + +test( + "reconcileRenumberedMigrations frees published Devin Desktop slot 140 for release", + serial, + async () => { + const runner = await importFresh("src/lib/db/migrationRunner.ts"); + const db = new Database(":memory:"); + + try { + db.exec(` + CREATE TABLE _omniroute_migrations ( + version TEXT PRIMARY KEY, + name TEXT NOT NULL, + applied_at TEXT NOT NULL DEFAULT (datetime('now')) + ); + `); + db.prepare("INSERT INTO _omniroute_migrations (version, name) VALUES (?, ?)").run( + "140", + "windsurf_to_devin_desktop" + ); + + withMockedMigrationFs( + { + "140_connection_runtime_state.sql": + "CREATE TABLE connection_runtime_state_ran (id TEXT PRIMARY KEY);", + "151_windsurf_to_devin_desktop.sql": + "CREATE TABLE devin_migration_must_not_rerun (id TEXT PRIMARY KEY);", + }, + () => runner.runMigrations(db) + ); + + assert.deepEqual( + db.prepare("SELECT version, name FROM _omniroute_migrations ORDER BY version").all(), + [ + { version: "140", name: "connection_runtime_state" }, + { version: "151", name: "windsurf_to_devin_desktop" }, + ] + ); + assert.ok( + db + .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?") + .get("connection_runtime_state_ran") + ); + assert.equal( + db + .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?") + .get("devin_migration_must_not_rerun"), + undefined + ); + } finally { + db.close(); + } + } +); + +test( + "reconcileRenumberedMigrations frees published Devin Desktop slot 143 for retired purge", + serial, + async () => { + const runner = await importFresh("src/lib/db/migrationRunner.ts"); + const db = new Database(":memory:"); + + try { + db.exec(` + CREATE TABLE _omniroute_migrations ( + version TEXT PRIMARY KEY, + name TEXT NOT NULL, + applied_at TEXT NOT NULL DEFAULT (datetime('now')) + ); + `); + db.prepare("INSERT INTO _omniroute_migrations (version, name) VALUES (?, ?)").run( + "143", + "windsurf_to_devin_desktop" + ); + + withMockedMigrationFs( + { + "143_retired_provider_purge.sql": + "CREATE TABLE retired_provider_purge_ran (id TEXT PRIMARY KEY);", + "151_windsurf_to_devin_desktop.sql": + "CREATE TABLE devin_migration_must_not_rerun (id TEXT PRIMARY KEY);", + }, + () => runner.runMigrations(db) + ); + + assert.deepEqual( + db.prepare("SELECT version, name FROM _omniroute_migrations ORDER BY version").all(), + [ + { version: "143", name: "retired_provider_purge" }, + { version: "151", name: "windsurf_to_devin_desktop" }, + ] + ); + assert.ok( + db + .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?") + .get("retired_provider_purge_ran") + ); + assert.equal( + db + .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?") + .get("devin_migration_must_not_rerun"), + undefined + ); + } finally { + db.close(); + } + } +); diff --git a/tests/unit/db-migrationrunner-constants-split.test.ts b/tests/unit/db-migrationrunner-constants-split.test.ts index 40c27a91bc..a95cc1f52c 100644 --- a/tests/unit/db-migrationrunner-constants-split.test.ts +++ b/tests/unit/db-migrationrunner-constants-split.test.ts @@ -70,8 +70,8 @@ describe("migrationRunner/constants — exact small-table snapshots", () => { // ── large tables — count + shape + spot-checks (corruption guard) ───────────── describe("migrationRunner/constants — large-table integrity", () => { - it("RENAMED_MIGRATION_COMPATIBILITY has 12 well-formed entries", () => { - assert.equal(RENAMED_MIGRATION_COMPATIBILITY.length, 12); + it("RENAMED_MIGRATION_COMPATIBILITY has 26 well-formed entries", () => { + assert.equal(RENAMED_MIGRATION_COMPATIBILITY.length, 26); for (const e of RENAMED_MIGRATION_COMPATIBILITY) { assert.equal(typeof e.fromVersion, "string"); assert.equal(typeof e.fromName, "string"); @@ -91,6 +91,29 @@ describe("migrationRunner/constants — large-table integrity", () => { // both manifest_routing collisions (052→059 and 056→059) must survive const manifest = RENAMED_MIGRATION_COMPATIBILITY.filter((e) => e.toName === "manifest_routing"); assert.deepEqual(manifest.map((e) => e.fromVersion).sort(), ["052", "056"]); + const devin = RENAMED_MIGRATION_COMPATIBILITY.filter( + (e) => e.toName === "windsurf_to_devin_desktop" + ); + assert.deepEqual( + devin.map((e) => e.fromVersion), + [ + "123", + "124", + "125", + "126", + "127", + "128", + "131", + "133", + "135", + "136", + "139", + "140", + "143", + "144", + ] + ); + assert.ok(devin.every((e) => e.toVersion === "147")); assert.deepEqual(RENAMED_MIGRATION_COMPATIBILITY.at(-2), { fromVersion: "134", fromName: "ccr_blocks", diff --git a/tests/unit/db-schema-columns-split.test.ts b/tests/unit/db-schema-columns-split.test.ts index 52456ea364..9adebe3b93 100644 --- a/tests/unit/db-schema-columns-split.test.ts +++ b/tests/unit/db-schema-columns-split.test.ts @@ -117,3 +117,49 @@ test("migration 134 SQL applies egress_ip to a bare proxy_logs", () => { db.close?.(); } }); + +test("ensureProviderConnectionsColumns restores base columns required by later migrations", () => { + const db = openMemoryDb(); + try { + db.exec(` + CREATE TABLE provider_connections ( + id TEXT PRIMARY KEY, + provider TEXT NOT NULL, + auth_type TEXT, + is_active INTEGER NOT NULL DEFAULT 1 + ) + `); + assert.equal(hasColumn(db, "provider_connections", "provider_specific_data"), false); + assert.equal(hasColumn(db, "provider_connections", "default_model"), false); + + ensureProviderConnectionsColumns(db); + + assert.equal(hasColumn(db, "provider_connections", "provider_specific_data"), true); + assert.equal(hasColumn(db, "provider_connections", "default_model"), true); + const columnsAfterFirstRun = getTableColumns(db, "provider_connections").sort(); + const indexesAfterFirstRun = ( + db.prepare("PRAGMA index_list(provider_connections)").all() as Array<{ name: string }> + ) + .map((index) => index.name) + .sort(); + const warnings: unknown[][] = []; + const originalWarn = console.warn; + try { + console.warn = (...args: unknown[]) => warnings.push(args); + ensureProviderConnectionsColumns(db); + } finally { + console.warn = originalWarn; + } + + assert.deepEqual(getTableColumns(db, "provider_connections").sort(), columnsAfterFirstRun); + assert.deepEqual( + (db.prepare("PRAGMA index_list(provider_connections)").all() as Array<{ name: string }>) + .map((index) => index.name) + .sort(), + indexesAfterFirstRun + ); + assert.deepEqual(warnings, []); + } finally { + db.close?.(); + } +}); diff --git a/tests/unit/devin-cli-catalog.test.ts b/tests/unit/devin-cli-catalog.test.ts index cfcf19fa5d..6fc24066f7 100644 --- a/tests/unit/devin-cli-catalog.test.ts +++ b/tests/unit/devin-cli-catalog.test.ts @@ -2,12 +2,14 @@ import assert from "node:assert/strict"; import test from "node:test"; import { devin_cliProvider } from "../../open-sse/config/providers/registry/devin-cli/index.ts"; +import { devin_desktopProvider } from "../../open-sse/config/providers/registry/devin-desktop/index.ts"; import { DEVIN_MODEL_CATALOG } from "../../open-sse/config/providers/registry/devin/catalog.ts"; -test("Devin CLI uses the shared catalog without duplicate model ids", () => { +test("Devin CLI and Desktop use the shared catalog without duplicate model ids", () => { const ids = DEVIN_MODEL_CATALOG.map((model) => model.id); assert.equal(devin_cliProvider.models, DEVIN_MODEL_CATALOG); + assert.equal(devin_desktopProvider.models, DEVIN_MODEL_CATALOG); assert.equal(new Set(ids).size, ids.length); assert.ok(ids.every((id) => !id.toLowerCase().includes("byok"))); }); @@ -21,6 +23,24 @@ test("Devin CLI catalog includes the refreshed native model ids", () => { "gpt-5-6-sol-max", "gpt-5-5-high", "glm-5-2-max-1m", + "claude-opus-5-low", + "claude-opus-5-medium", + "claude-opus-5-high", + "claude-opus-5-xhigh", + "claude-opus-5-max", + "gemini-3-6-flash-minimal", + "gemini-3-6-flash-low", + "gemini-3-6-flash-medium", + "gemini-3-6-flash-high", + "kimi-k3-low", + "kimi-k3-high", + "kimi-k3-max", + "inkling-none", + "inkling-low", + "inkling-medium", + "inkling-high", + "inkling-xhigh", + "inkling-max", ]) { assert.ok(ids.has(id), `expected refreshed Devin model id: ${id}`); } diff --git a/tests/unit/devin-desktop-executor-remediation.test.ts b/tests/unit/devin-desktop-executor-remediation.test.ts new file mode 100644 index 0000000000..30b71879a3 --- /dev/null +++ b/tests/unit/devin-desktop-executor-remediation.test.ts @@ -0,0 +1,530 @@ +import { createServer, type IncomingMessage, type ServerResponse } from "node:http"; +import { test } from "node:test"; +import { setTimeout as delay } from "node:timers/promises"; +import { gzipSync } from "node:zlib"; +import assert from "node:assert/strict"; + +import { + DevinDesktopExecutor, + encodeDevinDesktopRequest, + resolveDevinDesktopExtensionVersion, + resolveDevinDesktopVersion, +} from "../../open-sse/executors/devin-desktop.ts"; + +function varint(value: number): Uint8Array { + const bytes: number[] = []; + let remaining = value; + while (remaining >= 0x80) { + bytes.push((remaining % 0x80) | 0x80); + remaining = Math.floor(remaining / 0x80); + } + bytes.push(remaining); + return Uint8Array.from(bytes); +} + +function concat(...arrays: Uint8Array[]): Uint8Array { + const result = new Uint8Array(arrays.reduce((total, bytes) => total + bytes.length, 0)); + let offset = 0; + for (const bytes of arrays) { + result.set(bytes, offset); + offset += bytes.length; + } + return result; +} + +function connectEnvelope(payload: Uint8Array, flags = 0): Uint8Array { + const header = Buffer.alloc(5); + header[0] = flags; + header.writeUInt32BE(payload.length, 1); + return concat(header, payload); +} + +function bytesField(fieldNumber: number, payload: Uint8Array): Uint8Array { + return concat(varint((fieldNumber << 3) | 2), varint(payload.length), payload); +} + +function stringField(fieldNumber: number, value: string): Uint8Array { + return bytesField(fieldNumber, new TextEncoder().encode(value)); +} + +function varintField(fieldNumber: number, value: number): Uint8Array { + return concat(varint(fieldNumber << 3), varint(value)); +} + +function readVarint(bytes: Uint8Array, start: number): [number, number] { + let value = 0; + let multiplier = 1; + let offset = start; + while (offset < bytes.length) { + const byte = bytes[offset++]; + value += (byte & 0x7f) * multiplier; + if ((byte & 0x80) === 0) return [value, offset]; + multiplier *= 0x80; + } + throw new Error("truncated test protobuf"); +} + +function protobufFields(bytes: Uint8Array): Map> { + const fields = new Map>(); + let offset = 0; + while (offset < bytes.length) { + let tag: number; + [tag, offset] = readVarint(bytes, offset); + const fieldNumber = Math.floor(tag / 8); + const wireType = tag & 7; + let value: number | Uint8Array; + if (wireType === 0) { + [value, offset] = readVarint(bytes, offset); + } else if (wireType === 2) { + let length: number; + [length, offset] = readVarint(bytes, offset); + value = bytes.slice(offset, offset + length); + offset += length; + } else { + throw new Error(`unsupported test protobuf wire type ${wireType}`); + } + const entries = fields.get(fieldNumber) ?? []; + entries.push(value); + fields.set(fieldNumber, entries); + } + return fields; +} + +function bytesValue(fields: Map>, field: number): Uint8Array { + const value = fields.get(field)?.[0]; + assert.ok(value instanceof Uint8Array); + return value; +} + +async function listen( + handler: (request: IncomingMessage, response: ServerResponse) => void +): Promise<{ origin: string; close: () => Promise }> { + const server = createServer(handler); + await new Promise((resolve, reject) => { + server.once("error", reject); + server.listen(0, "127.0.0.1", () => { + server.off("error", reject); + resolve(); + }); + }); + const address = server.address(); + assert.ok(address && typeof address === "object"); + return { + origin: `http://127.0.0.1:${address.port}`, + close: () => + new Promise((resolve, reject) => { + server.close((error) => (error ? reject(error) : resolve())); + }), + }; +} + +// The fixed bytes below were transcribed from the relevant protobuf field numbers in the +// read-only descriptors bundled with Devin Desktop 3.6.27 (app commit 0becb483). They are not +// generated from the executor's encoder at test runtime. +test("Devin Desktop request encoder has a deterministic installed-schema golden", () => { + const payload = encodeDevinDesktopRequest({ + apiKey: "key", + model: "model-x", + systemPrompt: "system", + prompts: [ + { messageId: "u1", source: 1, prompt: "hello" }, + { messageId: "a1", source: 2, prompt: "answer" }, + { messageId: "t1", source: 4, prompt: "result", toolCallId: "call-1" }, + ], + sessionId: "session", + cascadeId: "cascade", + userJwt: "jwt", + ideVersion: "3.6.27", + extensionVersion: "1.48.2", + }); + + assert.equal( + Buffer.from(payload).toString("hex"), + "0a3f0a0877696e64737572661206312e34382e321a036b65792205656e2d55533a06332e362e3237520773657373696f6e620877696e6473757266aa01036a7774120673797374656d1a0d0a02753110011a0568656c6c6f1a0e0a02613110021a06616e737765721a160a02743110041a06726573756c743a0663616c6c2d31380572076d6f64656c2d7882010763617363616465aa01076d6f64656c2d78" + ); + const request = protobufFields(payload); + assert.equal(new TextDecoder().decode(bytesValue(request, 2)), "system"); + assert.deepEqual( + (request.get(3) ?? []).map((value) => { + assert.ok(value instanceof Uint8Array); + return protobufFields(value).get(2)?.[0]; + }), + [1, 2, 4] + ); + assert.equal(request.get(7)?.[0], 5); +}); + +test("Devin Desktop tool fixture uses only the proven request fields", () => { + const payload = encodeDevinDesktopRequest({ + apiKey: "key", + userJwt: "jwt", + model: "model-x", + systemPrompt: "", + prompts: [ + { messageId: "u1", source: 1, prompt: "use tool" }, + { + messageId: "a1", + source: 2, + prompt: "", + toolCalls: [{ id: "history-call", name: "lookup", argumentsJson: '{"value":"old"}' }], + }, + ], + sessionId: "session", + cascadeId: "cascade", + tools: [ + { + name: "lookup", + description: "Look up a value", + jsonSchemaString: '{"type":"object"}', + strict: true, + }, + ], + disableParallelToolCalls: true, + toolChoice: { toolName: "lookup" }, + }); + const request = protobufFields(payload); + assert.equal(request.get(7)?.[0], 5); + const tool = protobufFields(bytesValue(request, 10)); + assert.equal(new TextDecoder().decode(bytesValue(tool, 1)), "lookup"); + assert.equal(new TextDecoder().decode(bytesValue(tool, 2)), "Look up a value"); + assert.equal(new TextDecoder().decode(bytesValue(tool, 3)), '{"type":"object"}'); + assert.equal(tool.get(12)?.[0], 1); + assert.equal(request.get(11)?.[0], 1); + const choice = protobufFields(bytesValue(request, 12)); + assert.equal(new TextDecoder().decode(bytesValue(choice, 2)), "lookup"); + const assistantPromptValue = request.get(3)?.[1]; + assert.ok(assistantPromptValue instanceof Uint8Array); + const assistantPrompt = protobufFields(assistantPromptValue); + assert.equal(assistantPrompt.get(2)?.[0], 2); + const historyCall = protobufFields(bytesValue(assistantPrompt, 6)); + assert.equal(new TextDecoder().decode(bytesValue(historyCall, 1)), "history-call"); + assert.equal(new TextDecoder().decode(bytesValue(historyCall, 2)), "lookup"); + assert.equal(new TextDecoder().decode(bytesValue(historyCall, 3)), '{"value":"old"}'); +}); + +test("Devin Desktop and bundled extension versions remain distinct validated values", () => { + const oldDesktop = process.env.DEVIN_DESKTOP_VERSION; + const oldExtension = process.env.DEVIN_DESKTOP_EXTENSION_VERSION; + try { + process.env.DEVIN_DESKTOP_VERSION = "9.8.7"; + process.env.DEVIN_DESKTOP_EXTENSION_VERSION = "2.3.4"; + assert.equal(resolveDevinDesktopVersion(), "9.8.7"); + assert.equal(resolveDevinDesktopExtensionVersion(), "2.3.4"); + + process.env.DEVIN_DESKTOP_VERSION = "not-a-version"; + process.env.DEVIN_DESKTOP_EXTENSION_VERSION = "3.6.27-beta"; + assert.equal(resolveDevinDesktopVersion(), "3.6.27"); + assert.equal(resolveDevinDesktopExtensionVersion(), "1.48.2"); + } finally { + if (oldDesktop === undefined) delete process.env.DEVIN_DESKTOP_VERSION; + else process.env.DEVIN_DESKTOP_VERSION = oldDesktop; + if (oldExtension === undefined) delete process.env.DEVIN_DESKTOP_EXTENSION_VERSION; + else process.env.DEVIN_DESKTOP_EXTENSION_VERSION = oldExtension; + } +}); + +test("Devin Desktop performs raw-key auth then preserves Connect stream output", async () => { + const requestPaths: string[] = []; + let authHeaders: IncomingMessage["headers"] = {}; + let chatHeaders: IncomingMessage["headers"] = {}; + let authBody = Buffer.alloc(0); + let chatBody = Buffer.alloc(0); + const mock = await listen((request, response) => { + const chunks: Buffer[] = []; + request.on("data", (chunk) => chunks.push(Buffer.from(chunk))); + request.on("end", () => { + const body = Buffer.concat(chunks); + const path = request.url ?? ""; + requestPaths.push(path); + if (path === "/exa.auth_pb.AuthService/GetUserJwt") { + authHeaders = request.headers; + authBody = body; + response.writeHead(200, { "Content-Type": "application/proto" }); + response.end( + concat(stringField(1, "jwt-value"), stringField(2, "https://enterprise.example.invalid")) + ); + return; + } + + chatHeaders = request.headers; + chatBody = body; + const usage = concat( + varintField(2, 11), + varintField(3, 4), + varintField(4, 2), + varintField(5, 3) + ); + const toolCall = concat( + stringField(1, "call-1"), + stringField(2, "lookup"), + stringField(3, '{"value":"x"}') + ); + const responseMessage = concat( + stringField(3, "hello"), + varintField(5, 10), + bytesField(6, toolCall), + bytesField(7, usage), + stringField(9, "thinking") + ); + const dataFrame = connectEnvelope(responseMessage); + const endFrame = connectEnvelope(new TextEncoder().encode("{}"), 0x02); + response.writeHead(200, { "Content-Type": "application/connect+proto" }); + response.write(dataFrame.slice(0, 3)); + response.write(dataFrame.slice(3)); + response.end(endFrame); + }); + }); + + try { + const result = await new DevinDesktopExecutor().execute({ + model: "model-x", + body: { + messages: [ + { role: "system", content: "system" }, + { role: "user", content: "hello" }, + { + role: "assistant", + content: "", + tool_calls: [ + { + id: "history-call", + type: "function", + function: { name: "lookup", arguments: '{"value":"old"}' }, + }, + ], + }, + { role: "tool", content: "old result", tool_call_id: "history-call" }, + { role: "user", content: "continue" }, + ], + conversation_id: "cascade-fixed", + tools: [ + { + type: "function", + function: { + name: "lookup", + description: "Look up a value", + parameters: { type: "object" }, + strict: true, + }, + }, + ], + parallel_tool_calls: false, + tool_choice: { type: "function", function: { name: "lookup" } }, + }, + stream: true, + credentials: { + accessToken: "raw-imported-key", + providerSpecificData: { baseUrl: mock.origin }, + }, + }); + const sse = await result.response.text(); + + assert.deepEqual(requestPaths, [ + "/exa.auth_pb.AuthService/GetUserJwt", + "/exa.api_server_pb.ApiServerService/GetChatMessage", + ]); + assert.equal(authHeaders["content-type"], "application/proto"); + assert.equal(authHeaders["connect-protocol-version"], "1"); + assert.equal(authHeaders.accept, "*/*"); + assert.equal(authHeaders.authorization, undefined); + const authRequest = protobufFields(authBody); + const authMetadata = protobufFields(bytesValue(authRequest, 1)); + assert.equal(new TextDecoder().decode(bytesValue(authMetadata, 3)), "raw-imported-key"); + + assert.equal(chatHeaders["content-type"], "application/connect+proto"); + assert.equal(chatHeaders["connect-protocol-version"], "1"); + assert.equal(chatHeaders.authorization, undefined); + assert.equal(chatBody[0], 0); + assert.equal(chatBody.readUInt32BE(1), chatBody.length - 5); + const chatRequest = protobufFields(chatBody.subarray(5)); + const chatMetadata = protobufFields(bytesValue(chatRequest, 1)); + assert.equal(new TextDecoder().decode(bytesValue(chatMetadata, 3)), "raw-imported-key"); + assert.equal(new TextDecoder().decode(bytesValue(chatMetadata, 21)), "jwt-value"); + assert.equal(new TextDecoder().decode(bytesValue(chatRequest, 14)), "model-x"); + assert.equal(new TextDecoder().decode(bytesValue(chatRequest, 21)), "model-x"); + assert.equal(chatRequest.get(7)?.[0], 5); + const historyPrompts = (chatRequest.get(3) ?? []).map((value) => { + assert.ok(value instanceof Uint8Array); + return protobufFields(value); + }); + const sentAssistant = historyPrompts.find((prompt) => prompt.get(2)?.[0] === 2); + assert.ok(sentAssistant); + const sentHistoryCall = protobufFields(bytesValue(sentAssistant, 6)); + assert.equal(new TextDecoder().decode(bytesValue(sentHistoryCall, 1)), "history-call"); + assert.equal(new TextDecoder().decode(bytesValue(sentHistoryCall, 2)), "lookup"); + assert.equal(new TextDecoder().decode(bytesValue(sentHistoryCall, 3)), '{"value":"old"}'); + const sentToolResult = historyPrompts.find((prompt) => prompt.get(2)?.[0] === 4); + assert.ok(sentToolResult); + assert.equal(new TextDecoder().decode(bytesValue(sentToolResult, 7)), "history-call"); + assert.equal(chatRequest.get(11)?.[0], 1); + const sentTool = protobufFields(bytesValue(chatRequest, 10)); + assert.equal(new TextDecoder().decode(bytesValue(sentTool, 1)), "lookup"); + assert.equal(sentTool.get(12)?.[0], 1); + const sentChoice = protobufFields(bytesValue(chatRequest, 12)); + assert.equal(new TextDecoder().decode(bytesValue(sentChoice, 2)), "lookup"); + assert.ok(Buffer.from(result.transformedBody as Uint8Array).includes(Buffer.from("model-x"))); + assert.match(sse, /"reasoning_content":"thinking"/); + assert.match(sse, /"content":"hello"/); + assert.match(sse, /"prompt_tokens":11/); + assert.match(sse, /"completion_tokens":4/); + assert.match(sse, /"cached_tokens":3/); + assert.match(sse, /"cache_write_tokens":2/); + assert.match(sse, /"tool_calls":\[\{"index":0,"id":"call-1","type":"function"/); + assert.match(sse, /"name":"lookup","arguments":"\{\\"value\\":\\"x\\"\}"/); + assert.match(sse, /"finish_reason":"tool_calls"/); + assert.match(sse, /data: \[DONE\]/); + } finally { + await mock.close(); + } +}); + +test("Devin Desktop stops reading when the terminal Connect envelope arrives", async () => { + let resolveChatClosed: (() => void) | undefined; + const chatClosed = new Promise((resolve) => { + resolveChatClosed = resolve; + }); + const mock = await listen((request, response) => { + request.resume(); + request.on("end", () => { + if (request.url === "/exa.auth_pb.AuthService/GetUserJwt") { + response.writeHead(200, { "Content-Type": "application/proto" }); + response.end(stringField(1, "jwt-value")); + return; + } + response.on("close", () => resolveChatClosed?.()); + response.writeHead(200, { "Content-Type": "application/connect+proto" }); + response.write(connectEnvelope(stringField(3, "hello"))); + response.write(connectEnvelope(new TextEncoder().encode("{}"), 0x02)); + // Intentionally keep the HTTP response open. END_STREAM is the protocol terminal. + }); + }); + + try { + const result = await new DevinDesktopExecutor().execute({ + model: "model-x", + body: { messages: [{ role: "user", content: "hello" }] }, + stream: true, + credentials: { + accessToken: "test-imported-key", + providerSpecificData: { baseUrl: mock.origin }, + }, + }); + const timeout = delay(500).then(() => { + throw new Error("terminal Connect envelope did not finish promptly"); + }); + const sse = await Promise.race([result.response.text(), timeout]); + await Promise.race([chatClosed, timeout]); + assert.match(sse, /"content":"hello"/); + assert.match(sse, /data: \[DONE\]/); + } finally { + await mock.close(); + } +}); + +test("Devin Desktop bounds decompressed Connect frames", async () => { + const oversized = gzipSync(Buffer.alloc(16 * 1024 * 1024 + 1, 0x61)); + const mock = await listen((request, response) => { + request.resume(); + request.on("end", () => { + if (request.url === "/exa.auth_pb.AuthService/GetUserJwt") { + response.writeHead(200, { "Content-Type": "application/proto" }); + response.end(stringField(1, "jwt-value")); + return; + } + response.writeHead(200, { "Content-Type": "application/connect+proto" }); + response.write(connectEnvelope(new Uint8Array(oversized), 0x01)); + // Keep the upstream open so the decoder error must cancel its reader/socket. + }); + }); + + try { + const result = await new DevinDesktopExecutor().execute({ + model: "model-x", + body: { messages: [{ role: "user", content: "hello" }] }, + stream: true, + credentials: { + accessToken: "test-imported-key", + providerSpecificData: { baseUrl: mock.origin }, + }, + }); + const sse = await result.response.text(); + assert.match(sse, /devin_desktop_error/); + assert.match(sse, /data: \[DONE\]/); + assert.ok(sse.length < 4096, "oversized decompressed content must not reach the SSE output"); + } finally { + await mock.close(); + } +}); + +test("Devin Desktop sanitizes Connect end-stream errors before emitting SSE", async () => { + const mock = await listen((request, response) => { + request.resume(); + request.on("end", () => { + if (request.url === "/exa.auth_pb.AuthService/GetUserJwt") { + response.writeHead(200, { "Content-Type": "application/proto" }); + response.end(stringField(1, "jwt-value")); + return; + } + const trailer = JSON.stringify({ + error: { + code: "internal", + message: "failure at /Users/private/project/file.ts\n at secret stack", + }, + }); + response.writeHead(200, { "Content-Type": "application/connect+proto" }); + response.end(connectEnvelope(new TextEncoder().encode(trailer), 0x02)); + }); + }); + + try { + const result = await new DevinDesktopExecutor().execute({ + model: "model-x", + body: { messages: [{ role: "user", content: "hello" }] }, + stream: true, + credentials: { + accessToken: "test-imported-key", + providerSpecificData: { baseUrl: mock.origin }, + }, + }); + const sse = await result.response.text(); + assert.match(sse, /devin_desktop_error/); + assert.match(sse, //); + assert.doesNotMatch(sse, /\/Users\/private/); + assert.doesNotMatch(sse, /secret stack/); + assert.match(sse, /data: \[DONE\]/); + } finally { + await mock.close(); + } +}); + +test("Devin Desktop sanitizes auth failures and never issues chat", async () => { + const paths: string[] = []; + const mock = await listen((request, response) => { + paths.push(request.url ?? ""); + request.resume(); + request.on("end", () => { + response.writeHead(401, { "Content-Type": "text/plain" }); + response.end("auth failure at /Users/private/token.txt\n at leaked stack"); + }); + }); + + try { + const result = await new DevinDesktopExecutor().execute({ + model: "model-x", + body: { messages: [{ role: "user", content: "hello" }] }, + stream: true, + credentials: { + accessToken: "raw-imported-key", + providerSpecificData: { baseUrl: mock.origin }, + }, + }); + const body = await result.response.text(); + assert.equal(result.response.status, 401); + assert.deepEqual(paths, ["/exa.auth_pb.AuthService/GetUserJwt"]); + assert.match(body, /Devin Desktop authentication returned HTTP 401/); + assert.doesNotMatch(body, /\/Users\/private/); + assert.doesNotMatch(body, /leaked stack/); + } finally { + await mock.close(); + } +}); diff --git a/tests/unit/devin-providers.test.ts b/tests/unit/devin-providers.test.ts new file mode 100644 index 0000000000..54424f773c --- /dev/null +++ b/tests/unit/devin-providers.test.ts @@ -0,0 +1,148 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import { readFile } from "node:fs/promises"; + +import { REGISTRY } from "../../open-sse/config/providers/index.ts"; +import { getExecutor, hasSpecializedExecutor } from "../../open-sse/executors/index.ts"; +import { OAUTH_PROVIDERS } from "../../src/shared/constants/providers/oauth.ts"; + +test("Devin Desktop exposes the supported BYOK-free catalog", () => { + const desktop = REGISTRY["devin-desktop"]; + + assert.ok(desktop, "devin-desktop provider must exist"); + assert.equal(desktop.format, "openai"); + assert.ok(desktop.models.length > 0); + assert.ok(desktop.models.every((model) => !model.id.toLowerCase().includes("byok"))); +}); + +test("public registries do not expose windsurf or ws aliases", () => { + assert.equal(REGISTRY.windsurf, undefined); + assert.ok(Object.values(REGISTRY).every((entry) => entry.alias !== "ws")); +}); + +test("executor factory exposes only the dedicated Devin Desktop executor", () => { + assert.equal(hasSpecializedExecutor("devin-desktop"), true); + assert.equal(hasSpecializedExecutor("windsurf"), false); + assert.equal(hasSpecializedExecutor("ws"), false); + assert.equal(getExecutor("devin-desktop").constructor.name, "DevinDesktopExecutor"); +}); + +test("Devin Desktop executor uses the live endpoint and verified default identity", () => { + const executor = getExecutor("devin-desktop"); + delete process.env.DEVIN_DESKTOP_VERSION; + + assert.equal( + executor.buildUrl(), + "https://server.codeium.com/exa.api_server_pb.ApiServerService/GetChatMessage" + ); + assert.equal(executor.buildHeaders({ accessToken: "token" })["User-Agent"], "windsurf/3.6.27"); +}); + +test("Devin Desktop executor applies only valid version overrides to its user agent", () => { + const executor = getExecutor("devin-desktop"); + process.env.DEVIN_DESKTOP_VERSION = "3.5.1"; + try { + assert.equal(executor.buildHeaders({ accessToken: "token" })["User-Agent"], "windsurf/3.5.1"); + process.env.DEVIN_DESKTOP_VERSION = "not-a-version"; + assert.equal(executor.buildHeaders({ accessToken: "token" })["User-Agent"], "windsurf/3.6.27"); + } finally { + delete process.env.DEVIN_DESKTOP_VERSION; + } +}); + +test("Devin Desktop executor returns 401 before the upstream call without a token", async () => { + const executor = getExecutor("devin-desktop"); + const originalFetch = globalThis.fetch; + let fetchCalled = false; + globalThis.fetch = async () => { + fetchCalled = true; + return new Response("unexpected upstream call", { status: 500 }); + }; + + try { + const result = await executor.execute({ + model: "swe-1-7", + body: { messages: [{ role: "user", content: "hello" }] }, + stream: true, + credentials: {}, + }); + + assert.equal(fetchCalled, false); + assert.equal(result.response.status, 401); + assert.match(await result.response.text(), /Devin Desktop API key is required/); + } finally { + globalThis.fetch = originalFetch; + } +}); + +test("Devin Desktop stream errors do not expose local paths or stack traces", async () => { + const executor = getExecutor("devin-desktop"); + const originalFetch = globalThis.fetch; + globalThis.fetch = async () => + new Response( + new ReadableStream({ + start(controller) { + controller.error(new Error("stream failed\n at /Users/example/private.ts:10:2")); + }, + }), + { status: 200 } + ); + + try { + const result = await executor.execute({ + model: "swe-1-7", + body: { messages: [{ role: "user", content: "hello" }] }, + stream: true, + credentials: { accessToken: "test-token" }, + }); + const text = await result.response.text(); + + assert.match(text, /stream failed/); + assert.doesNotMatch(text, /private\.ts|\/Users\/example|\bat\s+\//); + } finally { + globalThis.fetch = originalFetch; + } +}); + +test("provider card exposes version-honest Devin Desktop key import guidance", () => { + const desktop = OAUTH_PROVIDERS["devin-desktop"]; + const cli = OAUTH_PROVIDERS["devin-cli"]; + + assert.ok(desktop); + assert.equal(desktop.name, "Devin Desktop"); + assert.match(desktop.authHint, /Paste an existing Devin API key/); + assert.match(desktop.authHint, /vary by Devin version and account/); + assert.doesNotMatch(desktop.authHint, /Devin: Copy API Key to Clipboard/); + assert.equal(cli.name, "Devin CLI"); + assert.equal(OAUTH_PROVIDERS.windsurf, undefined); +}); + +test("OAuth modal Desktop branch gives honest import guidance without public Windsurf", async () => { + const source = await readFile( + new URL("../../src/shared/components/OAuthModal.tsx", import.meta.url), + "utf8" + ); + + assert.match(source, /Paste an existing Devin API key/); + assert.match(source, /vary by Devin version and account/); + assert.doesNotMatch(source, /Devin: Copy API Key to Clipboard/); + assert.doesNotMatch(source, /provider === ["']windsurf["']/); +}); + +test("Devin public errors and token refresh logs do not expose the retired provider", async () => { + const [executorSource, tokenRefreshSource, copilotSource] = await Promise.all([ + readFile(new URL("../../open-sse/executors/devin-desktop.ts", import.meta.url), "utf8"), + readFile(new URL("../../open-sse/services/tokenRefresh.ts", import.meta.url), "utf8"), + readFile(new URL("../../src/lib/copilot/engine.ts", import.meta.url), "utf8"), + ]); + + assert.doesNotMatch( + executorSource, + /windsurf_error|unknown windsurf error|Windsurf stream error/ + ); + assert.doesNotMatch( + tokenRefreshSource, + /No refresh token stored for Windsurf|refresh(?:ed|ing)? Windsurf Firebase token|Windsurf Firebase token is permanently invalid|refreshing Windsurf token/ + ); + assert.doesNotMatch(copilotSource, /Kimi Coding, Windsurf/); +}); diff --git a/tests/unit/dockerfile-npm-bundled-cve-patch.test.ts b/tests/unit/dockerfile-npm-bundled-cve-patch.test.ts new file mode 100644 index 0000000000..4c78b52c59 --- /dev/null +++ b/tests/unit/dockerfile-npm-bundled-cve-patch.test.ts @@ -0,0 +1,133 @@ +/** + * Trivy image scan reported 9 HIGH/MEDIUM CVEs against the npm CLI's own + * *bundled* node_modules inside the published image: + * + * usr/local/lib/node_modules/npm/node_modules/brace-expansion CVE-2026-69152, CVE-2026-14257 + * usr/local/lib/node_modules/npm/node_modules/ip-address CVE-2026-69192, CVE-2026-69198, CVE-2026-54272 + * usr/local/lib/node_modules/npm/node_modules/tar GHSA-r292-9mhp-454m + * usr/local/lib/node_modules/npm/node_modules/undici CVE-2026-16729, CVE-2026-16728, CVE-2026-15157 + * + * The `base` stage used to claim `npm install -g npm@latest` shipped patched + * copies. That was false: npm@12.0.2 (the latest release at the time) bundles + * brace-expansion 5.0.7, ip-address 10.2.0, tar 7.5.19 and undici 6.27.0 — every + * one still vulnerable. No npm release fixes these, so the Dockerfile now + * overlays the patched versions onto npm's bundled tree. + * + * Removing npm from the runner stages was NOT viable: npm is invoked at runtime + * by src/lib/services/installers/utils.ts::runNpm (embedded services), + * src/lib/system/autoUpdate.ts, src/lib/system/globalPackagePath.ts and + * src/app/api/system/version/route.ts. + * + * This guards the mechanism (the overlay exists, targets all four packages, and + * pins versions at or above the fixed ones). The end-to-end proof is a clean + * Trivy scan on the next published image — this sandbox has no Docker daemon. + */ +import test from "node:test"; +import assert from "node:assert/strict"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +const dockerfile = fs.readFileSync(path.join(repoRoot, "Dockerfile"), "utf-8"); + +/** Dockerfile source with line continuations joined, the way the shell sees it. */ +const joined = dockerfile.replace(/\\\n\s*/g, " "); +/** Instruction lines only — comments must never satisfy these assertions. */ +const instructions = joined + .split("\n") + .filter((l) => !l.trim().startsWith("#")) + .join("\n"); + +/** package -> lowest version that is not affected by the reported CVEs. */ +const FIXED_MINIMUMS: Record = { + "brace-expansion": [5, 0, 9], + "ip-address": [10, 3, 1], + tar: [7, 5, 21], + undici: [6, 28, 0], +}; + +function parseVersion(raw: string): [number, number, number] { + const parts = raw.split(".").map((n) => Number.parseInt(n, 10)); + assert.equal(parts.length, 3, `expected an exact x.y.z pin, got "${raw}"`); + assert.ok( + parts.every((n) => Number.isInteger(n)), + `expected an exact x.y.z pin, got "${raw}"` + ); + return [parts[0], parts[1], parts[2]]; +} + +function isAtLeast(actual: [number, number, number], min: [number, number, number]): boolean { + for (let i = 0; i < 3; i++) { + if (actual[i] > min[i]) return true; + if (actual[i] < min[i]) return false; + } + return true; +} + +test("base stage pins patched versions of every CVE-flagged npm-bundled package", () => { + for (const [pkg, min] of Object.entries(FIXED_MINIMUMS)) { + const match = new RegExp(`\\b${pkg}@(\\d+\\.\\d+\\.\\d+)\\b`).exec(instructions); + assert.ok( + match, + `Dockerfile must install an explicit patched ${pkg}@x.y.z for npm's bundled tree` + ); + const actual = parseVersion(match[1]); + assert.ok( + isAtLeast(actual, min), + `${pkg}@${match[1]} is below the fixed version ${min.join(".")} — the Trivy alert would return` + ); + } +}); + +test("undici stays on the 6.x line node-gyp declares (^6.25.0), never 8.x", () => { + const match = /\bundici@(\d+)\.\d+\.\d+\b/.exec(instructions); + assert.ok(match, "Dockerfile must pin an undici version"); + assert.equal( + match[1], + "6", + "npm's bundled node-gyp declares undici ^6.25.0 — an 8.x overlay would break its resolution" + ); +}); + +test("the patched copies actually replace npm's bundled ones", () => { + for (const pkg of Object.keys(FIXED_MINIMUMS)) { + assert.match( + instructions, + new RegExp(`for pkg in [^;]*\\b${pkg}\\b`), + `${pkg} must be part of the overlay loop that rewrites npm's bundled node_modules` + ); + } + assert.match( + instructions, + /rm -rf "\/usr\/local\/lib\/node_modules\/npm\/node_modules\/\$pkg"/, + "the overlay must remove the vulnerable bundled copy before replacing it" + ); + assert.match( + instructions, + /cp -R "\/tmp\/npm-cve-patch\/node_modules\/\$pkg"\s+"\/usr\/local\/lib\/node_modules\/npm\/node_modules\/\$pkg"/, + "the overlay must copy the patched package into npm's bundled node_modules" + ); + assert.match( + instructions, + /test -d "\/usr\/local\/lib\/node_modules\/npm\/node_modules\/\$pkg"/, + "the overlay must fail the build loudly if npm's layout changes and a target path disappears" + ); +}); + +test("the overlay smoke-tests npm after patching it", () => { + assert.match( + instructions, + /npm --version/, + "the patched npm must be exercised in the same layer so a broken overlay fails the build" + ); +}); + +test("the stale 'npm is not invoked at runtime' claim is gone", () => { + assert.doesNotMatch( + dockerfile, + /npm is not invoked at runtime/, + "npm IS invoked at runtime (installers/utils.ts::runNpm, system/autoUpdate.ts, " + + "system/globalPackagePath.ts, api/system/version) — the comment must not claim otherwise" + ); +}); diff --git a/tests/unit/executor-zai-web.test.ts b/tests/unit/executor-zai-web.test.ts index ceb7e4a7b5..aa26418f9c 100644 --- a/tests/unit/executor-zai-web.test.ts +++ b/tests/unit/executor-zai-web.test.ts @@ -1,7 +1,74 @@ import { describe, it } from "node:test"; import assert from "node:assert/strict"; +import { Buffer } from "node:buffer"; +import type { BrowserBackedChatRequest } from "../../open-sse/services/browserBackedChat.ts"; const mod = await import("../../open-sse/executors/zai-web.ts"); +const browserChat = await import("../../open-sse/services/browserBackedChat.ts"); + +const ZAI_HOME_URL = "https://chat.z.ai/"; +const ZAI_NEW_CHAT_URL = "https://chat.z.ai/api/v1/chats/new"; +const ZAI_COMPLETION_PATH = "/api/v2/chat/completions"; +const TEST_TOKEN = `e30.${Buffer.from(JSON.stringify({ id: "user-123" })).toString("base64url")}.sig`; +const TEST_CREDENTIAL = JSON.stringify({ + token: TEST_TOKEN, + captcha_verify_param: "captcha-proof", +}); + +interface ZaiFetchCapture { + completionInit?: RequestInit; + completionUrl?: string; + newChatInit?: RequestInit; +} + +function installZaiFetch( + completionResponse: () => Response, + capture: ZaiFetchCapture = {} +): typeof globalThis.fetch { + const originalFetch = globalThis.fetch; + globalThis.fetch = (async (url: string | URL | Request, init?: RequestInit) => { + const value = String(url); + if (value === ZAI_HOME_URL) { + return new Response( + '' + ); + } + if (value === ZAI_NEW_CHAT_URL) { + capture.newChatInit = init; + return Response.json({ id: "chat-123" }); + } + if (new URL(value).pathname === ZAI_COMPLETION_PATH) { + capture.completionUrl = value; + capture.completionInit = init; + return completionResponse(); + } + return new Response("not found", { status: 404 }); + }) as typeof globalThis.fetch; + return originalFetch; +} + +function makeBrowserResult(content: string) { + return { + status: 200, + contentType: "text/event-stream", + body: Buffer.from( + [ + `data: ${JSON.stringify({ type: "chat:completion", data: { delta_content: content, phase: "answer", done: false } })}`, + `data: ${JSON.stringify({ type: "chat:completion", data: { phase: "done", done: true } })}`, + "", + "", + ].join("\n") + ), + isStealth: true, + timing: { + acquireContextMs: 1, + navigateMs: 1, + submitMs: 1, + captureResponseMs: 1, + totalMs: 4, + }, + }; +} describe("ZaiWebExecutor", () => { it("can be instantiated", () => { @@ -9,11 +76,65 @@ describe("ZaiWebExecutor", () => { assert.ok(executor); }); + it("preserves browser transport failure details and timing", () => { + assert.equal( + mod.describeZaiBrowserFailure({ + status: 502, + body: Buffer.from( + JSON.stringify({ + error: { message: "browserBackedChat failed: response.body unavailable" }, + }) + ), + timing: { captureResponseMs: 30_001, totalMs: 33_412 }, + }), + "Z.ai browser transport failed (502; capture 30001ms, total 33412ms): " + + "browserBackedChat failed: response.body unavailable" + ); + assert.match( + mod.describeZaiBrowserFailure({ + status: 0, + body: Buffer.alloc(0), + timing: { captureResponseMs: 30_000, totalMs: 33_000 }, + }), + /no matching response.*did not issue the expected authenticated chat completion request/ + ); + }); + it("extracts the token cookie value from a full Cookie header", () => { assert.equal(mod.extractZaiToken("token=abc123; other=xyz"), "abc123"); assert.equal(mod.extractZaiToken("Cookie: other=xyz; token=abc123"), "abc123"); }); + it("extracts the current localStorage Bearer token and JSON credential", () => { + assert.equal(mod.extractZaiToken("Bearer abc123"), "abc123"); + assert.equal(mod.extractZaiToken("Authorization: Bearer abc123"), "abc123"); + assert.equal(mod.extractZaiToken(TEST_CREDENTIAL), TEST_TOKEN); + assert.equal(mod.extractZaiCaptchaVerifyParam(TEST_CREDENTIAL), "captcha-proof"); + assert.equal(mod.extractZaiUserId(TEST_TOKEN), "user-123"); + }); + + it("reproduces the live frontend HMAC signature algorithm", () => { + assert.equal( + mod.buildZaiSignature({ + prompt: "Reply with exactly: OMNIROUTE_ZAI_WEB_TEST", + requestId: "3b907de9-793c-41d1-8b8e-6ed6a714ee08", + timestamp: 1784855934807, + userId: "user-123", + }), + "14f17673ccd4ec86476549ebe60f181529572f7a0cfe8ba179206cf2d37cf442" + ); + }); + + it("parses the deployed frontend version from the homepage asset path", () => { + assert.equal( + mod.parseZaiFrontendVersion( + "https://z-cdn.chatglm.cn/z-ai/frontend/prod-fe-1.1.79/assets/index.js" + ), + "prod-fe-1.1.79" + ); + assert.equal(mod.parseZaiFrontendVersion(""), null); + }); + it("accepts a bare JWT/token with no cookie name prefix", () => { // a bare token with no '=' and no ';' falls through to the raw string assert.equal( @@ -71,21 +192,105 @@ describe("ZaiWebExecutor", () => { assert.equal(mod.parseZaiFrame({ data: { phase: "answer" } }), null); }); - it("folds non-string message content into JSON strings", () => { + it("folds multimodal message content into text without leaking image payloads", () => { const folded = mod.foldMessages([ { role: "user", content: "hi" }, { role: "user", content: { foo: "bar" } }, + { + role: "user", + content: [ + { type: "text", text: "inspect this" }, + { type: "image_url", image_url: { url: "data:image/png;base64,aW1hZ2U=" } }, + ], + }, ]); assert.deepEqual(folded, [ { role: "user", content: "hi" }, - { role: "user", content: '{"foo":"bar"}' }, + { role: "user", content: "" }, + { role: "user", content: "inspect this" }, ]); }); - it("returns a credential error when no cookie is provided", async () => { + it("enables Deep Think for every public model and limits effort to GLM-5.2", () => { + assert.deepEqual(mod.resolveZaiThinkingConfig("glm-5.2", {}), { + supported: true, + enabled: true, + effort: "max", + effortSupported: true, + }); + assert.deepEqual(mod.resolveZaiThinkingConfig("zw/glm-5.2", { reasoning_effort: "medium" }), { + supported: true, + enabled: true, + effort: "high", + effortSupported: true, + }); + assert.deepEqual(mod.resolveZaiThinkingConfig("glm-5.2", { reasoning: { effort: "high" } }), { + supported: true, + enabled: true, + effort: "high", + effortSupported: true, + }); + assert.deepEqual(mod.resolveZaiThinkingConfig("glm-5.2", { reasoning_effort: "off" }), { + supported: true, + enabled: false, + effort: "max", + effortSupported: true, + }); + assert.deepEqual(mod.resolveZaiThinkingConfig("GLM-5.1", { reasoning_effort: "max" }), { + supported: true, + enabled: true, + effort: "max", + effortSupported: false, + }); + }); + + it("maps GLM-5V-Turbo vision and internal VLM controls from live capabilities", () => { + assert.deepEqual(mod.getZaiModelCapabilities("zw/GLM-5v-Turbo"), { + mcp: false, + reasoningEffort: false, + returnFc: true, + thinking: true, + vision: true, + vlmTools: true, + vlmWebSearch: true, + vlmWebsiteMode: true, + webSearch: true, + }); + assert.deepEqual(mod.resolveZaiVlmConfig("GLM-5v-Turbo", {}), { + toolsEnabled: true, + webSearchEnabled: true, + websiteModeEnabled: true, + }); + assert.deepEqual( + mod.resolveZaiVlmConfig("GLM-5v-Turbo", { + features: { + vlm_tools_enable: false, + vlm_web_search_enable: false, + vlm_website_mode: false, + }, + }), + { + toolsEnabled: false, + webSearchEnabled: false, + websiteModeEnabled: true, + } + ); + assert.deepEqual(mod.resolveZaiVlmConfig("GLM-5.1", {}), { + toolsEnabled: false, + webSearchEnabled: false, + websiteModeEnabled: false, + }); + assert.deepEqual(mod.resolveZaiVlmConfig("GLM-5.1", { web_search: true }), { + toolsEnabled: false, + webSearchEnabled: true, + websiteModeEnabled: false, + }); + }); + + it("returns a credential error when no session credential is provided", async () => { const executor = new mod.ZaiWebExecutor(); const result = await executor.execute({ - model: "glm-4.6", + model: "GLM-5.1", body: { messages: [{ role: "user", content: "hi" }] }, stream: false, credentials: { apiKey: "" }, @@ -95,68 +300,329 @@ describe("ZaiWebExecutor", () => { assert.equal(result.response.status, 400); assert.equal(new URL(result.url).hostname, "chat.z.ai"); const parsed = await result.response.json(); - assert.match(parsed.error.message, /Z\.ai session/); + assert.match(parsed.error.message, /web-session credential/); }); - it("sends the cookie + bearer token and builds the request body", async () => { - const originalFetch = globalThis.fetch; - let capturedUrl = ""; - let capturedInit: RequestInit | undefined; - globalThis.fetch = (async (url: string, init?: RequestInit) => { - capturedUrl = String(url); - capturedInit = init; - return new Response("data: [DONE]\n\n", { - headers: { "Content-Type": "text/event-stream" }, + it("uses the browser transport with only the Local Storage token", async () => { + let capturedRequest: BrowserBackedChatRequest | null = null; + browserChat.__setBrowserBackedChatOverrideForTesting(async (request) => { + capturedRequest = request; + return makeBrowserResult("Browser"); + }); + + try { + const executor = new mod.ZaiWebExecutor(); + const result = await executor.execute({ + model: "glm-5.2", + body: { messages: [{ role: "user", content: "hi" }] }, + stream: false, + credentials: { apiKey: TEST_TOKEN }, + signal: null, }); - }) as typeof fetch; + + const completion = await result.response.json(); + assert.equal(completion.choices[0].message.content, "Browser"); + assert.equal(capturedRequest?.localStorage?.token, TEST_TOKEN); + assert.equal(capturedRequest?.localStorageOrigin, "https://chat.z.ai"); + assert.equal(capturedRequest?.inputSelector, "#chat-input"); + assert.equal( + capturedRequest?.submitButtonSelector, + '[aria-label="Send Message"] button:not([disabled])' + ); + assert.equal(capturedRequest?.submitButtonMode, "dom"); + assert.equal(capturedRequest?.userMessage, "hi"); + assert.match(capturedRequest?.chatPageUrl ?? "", /model=GLM-5\.2/); + assert.equal(typeof capturedRequest?.beforeSubmit, "function"); + assert.equal(result.headers["X-OmniRoute-Transport"], "browser"); + assert.equal(result.transformedBody.browser_backed, true); + assert.equal(result.transformedBody.enable_thinking, true); + assert.equal(result.transformedBody.reasoning_effort, "max"); + } finally { + browserChat.__resetBrowserBackedChatOverrideForTesting(); + } + }); + + it("configures GLM-5V-Turbo controls on the browser transport", async () => { + let capturedRequest: BrowserBackedChatRequest | null = null; + browserChat.__setBrowserBackedChatOverrideForTesting(async (request) => { + capturedRequest = request; + return makeBrowserResult("VLM"); + }); + + try { + const executor = new mod.ZaiWebExecutor(); + const result = await executor.execute({ + model: "GLM-5v-Turbo", + body: { messages: [{ role: "user", content: "use the model tools" }] }, + stream: false, + credentials: { apiKey: TEST_TOKEN }, + signal: null, + }); + + const completion = await result.response.json(); + assert.equal(completion.choices[0].message.content, "VLM"); + assert.match(capturedRequest?.chatPageUrl ?? "", /model=GLM-5V-Turbo/); + assert.equal(typeof capturedRequest?.beforeSubmit, "function"); + assert.equal(result.transformedBody.enable_thinking, true); + assert.equal(result.transformedBody.vlm_tools_enable, true); + assert.equal(result.transformedBody.vlm_web_search_enable, true); + assert.equal(result.transformedBody.vlm_website_mode, true); + assert.equal("reasoning_effort" in result.transformedBody, false); + } finally { + browserChat.__resetBrowserBackedChatOverrideForTesting(); + } + }); + + it("uploads GLM-5V-Turbo image input through the authenticated browser page", async () => { + let capturedRequest: BrowserBackedChatRequest | null = null; + browserChat.__setBrowserBackedChatOverrideForTesting(async (request) => { + capturedRequest = request; + return makeBrowserResult("The image says OMNIROUTE."); + }); + + try { + const executor = new mod.ZaiWebExecutor(); + const result = await executor.execute({ + model: "GLM-5v-Turbo", + body: { + messages: [ + { + role: "user", + content: [ + { type: "text", text: "What word is in this image?" }, + { + type: "image_url", + image_url: { url: "data:image/png;base64,aW1hZ2UtYnl0ZXM=" }, + }, + ], + }, + ], + }, + stream: false, + // Supplying a CAPTCHA proof must not select the direct path for image + // requests because the browser page owns Z.ai's authenticated upload. + credentials: { apiKey: TEST_CREDENTIAL }, + signal: null, + }); + + assert.equal(result.response.status, 200); + assert.equal(capturedRequest?.userMessage, "What word is in this image?"); + assert.equal(capturedRequest?.attachments?.length, 1); + assert.equal(capturedRequest?.attachments?.[0]?.name, "omniroute-image-1.png"); + assert.equal(capturedRequest?.attachments?.[0]?.mimeType, "image/png"); + assert.equal(capturedRequest?.attachments?.[0]?.buffer.toString("utf8"), "image-bytes"); + assert.equal(result.transformedBody.image_count, 1); + assert.deepEqual(result.transformedBody.messages, [ + { role: "user", content: "What word is in this image?" }, + ]); + } finally { + browserChat.__resetBrowserBackedChatOverrideForTesting(); + } + }); + + it("rejects image input on Z.ai text-only models", async () => { + const executor = new mod.ZaiWebExecutor(); + const result = await executor.execute({ + model: "glm-5.2", + body: { + messages: [ + { + role: "user", + content: [ + { type: "text", text: "inspect" }, + { + type: "image_url", + image_url: { url: "data:image/png;base64,aW1hZ2U=" }, + }, + ], + }, + ], + }, + stream: false, + credentials: { apiKey: TEST_TOKEN }, + signal: null, + }); + + assert.equal(result.response.status, 400); + const parsed = await result.response.json(); + assert.match(parsed.error.message, /use GLM-5V-Turbo/); + }); + + it("creates a chat, signs the v2 request, and forwards the CAPTCHA proof", async () => { + const capture: ZaiFetchCapture = {}; + const originalFetch = installZaiFetch( + () => + new Response("data: [DONE]\n\n", { + headers: { "Content-Type": "text/event-stream" }, + }), + capture + ); + + try { + const executor = new mod.ZaiWebExecutor(); + const result = await executor.execute({ + model: "GLM-5.1", + body: { + model: "GLM-5.1", + messages: [{ role: "user", content: "hello" }], + temperature: 0.4, + web_search: true, + }, + stream: false, + credentials: { apiKey: TEST_CREDENTIAL }, + signal: null, + }); + + assert.ok(capture.newChatInit); + const newChatHeaders = capture.newChatInit?.headers as Record; + assert.equal(newChatHeaders.Authorization, `Bearer ${TEST_TOKEN}`); + const newChatBody = JSON.parse(String(capture.newChatInit?.body)); + assert.deepEqual(newChatBody.chat.models, ["GLM-5.1"]); + assert.equal(newChatBody.chat.history.currentId.length, 36); + assert.equal(newChatBody.chat.enable_thinking, true); + assert.equal(newChatBody.chat.auto_web_search, true); + + const completionUrl = new URL(String(capture.completionUrl)); + assert.equal(completionUrl.pathname, ZAI_COMPLETION_PATH); + assert.equal(completionUrl.searchParams.get("token"), TEST_TOKEN); + assert.equal(completionUrl.searchParams.get("user_id"), "user-123"); + assert.equal(completionUrl.searchParams.get("version"), "0.0.1"); + assert.equal( + completionUrl.searchParams.get("signature_timestamp"), + completionUrl.searchParams.get("timestamp") + ); + + const headers = capture.completionInit?.headers as Record; + assert.equal(headers.Authorization, `Bearer ${TEST_TOKEN}`); + assert.equal(headers["X-FE-Version"], "prod-fe-1.1.79"); + assert.match(headers["X-Signature"], /^[a-f0-9]{64}$/); + + const parsedBody = JSON.parse(String(capture.completionInit?.body)); + assert.equal(parsedBody.model, "GLM-5.1"); + assert.equal(parsedBody.stream, true); + assert.deepEqual(parsedBody.messages, [{ role: "user", content: "hello" }]); + assert.equal(parsedBody.signature_prompt, "hello"); + assert.equal(parsedBody.captcha_verify_param, "captcha-proof"); + assert.equal(parsedBody.chat_id, "chat-123"); + assert.equal(parsedBody.params.temperature, 0.4); + assert.equal(parsedBody.features.web_search, false); + assert.equal(parsedBody.features.auto_web_search, true); + assert.equal(parsedBody.features.enable_thinking, true); + assert.equal("reasoning_effort" in parsedBody.features, false); + assert.equal(result.headers.Authorization, "Bearer [REDACTED]"); + assert.equal(result.transformedBody.captcha_verify_param, "[REDACTED]"); + } finally { + globalThis.fetch = originalFetch; + } + }); + + it("sends GLM-5.2 Deep Think High through the direct request path", async () => { + const capture: ZaiFetchCapture = {}; + const originalFetch = installZaiFetch( + () => + new Response("data: [DONE]\n\n", { + headers: { "Content-Type": "text/event-stream" }, + }), + capture + ); try { const executor = new mod.ZaiWebExecutor(); await executor.execute({ - model: "glm-4.6", - body: { messages: [{ role: "user", content: "hello" }] }, + model: "glm-5.2", + body: { + model: "glm-5.2", + messages: [{ role: "user", content: "think carefully" }], + reasoning_effort: "high", + }, stream: false, - credentials: { apiKey: "token=abc123; foo=bar" }, + credentials: { apiKey: TEST_CREDENTIAL }, signal: null, }); - assert.equal(capturedUrl, "https://chat.z.ai/api/v2/chat/completions"); - const headers = capturedInit?.headers as Record; - assert.equal(headers.Cookie, "token=abc123; foo=bar"); - assert.equal(headers.Authorization, "Bearer abc123"); + // #8014: completions must target the versioned v2 path. The query string + // carries the per-request signature payload, so match the endpoint prefix. + assert.ok( + String(capture.completionUrl).startsWith("https://chat.z.ai/api/v2/chat/completions?"), + `expected the v2 completions endpoint, got ${capture.completionUrl}` + ); + const newChatBody = JSON.parse(String(capture.newChatInit?.body)); + assert.equal(newChatBody.chat.enable_thinking, true); + assert.equal(newChatBody.chat.reasoning_effort, "high"); - const parsedBody = JSON.parse(String(capturedInit?.body)); - assert.equal(parsedBody.model, "glm-4.6"); - assert.equal(parsedBody.stream, true); - assert.deepEqual(parsedBody.messages, [{ role: "user", content: "hello" }]); - assert.equal(parsedBody.features.web_search, false); + const completionBody = JSON.parse(String(capture.completionInit?.body)); + assert.equal(completionBody.features.enable_thinking, true); + assert.equal(completionBody.features.reasoning_effort, "high"); + } finally { + globalThis.fetch = originalFetch; + } + }); + + it("sends GLM-5V-Turbo VLM tools and web-search flags through the direct path", async () => { + const capture: ZaiFetchCapture = {}; + const originalFetch = installZaiFetch( + () => + new Response("data: [DONE]\n\n", { + headers: { "Content-Type": "text/event-stream" }, + }), + capture + ); + + try { + const executor = new mod.ZaiWebExecutor(); + await executor.execute({ + model: "GLM-5v-Turbo", + body: { + model: "GLM-5v-Turbo", + messages: [{ role: "user", content: "inspect this image" }], + }, + stream: false, + credentials: { apiKey: TEST_CREDENTIAL }, + signal: null, + }); + + const newChatBody = JSON.parse(String(capture.newChatInit?.body)); + assert.equal(newChatBody.chat.enable_thinking, true); + assert.equal(newChatBody.chat.auto_web_search, true); + assert.equal(newChatBody.chat.extra.vlm_tools_enable, true); + assert.equal(newChatBody.chat.extra.vlm_web_search_enable, true); + assert.equal(newChatBody.chat.extra.vlm_website_mode, true); + + const completionBody = JSON.parse(String(capture.completionInit?.body)); + assert.equal(completionBody.features.enable_thinking, true); + assert.equal(completionBody.features.auto_web_search, false); + assert.equal(completionBody.features.vlm_tools_enable, true); + assert.equal(completionBody.features.vlm_web_search_enable, true); + assert.equal(completionBody.features.vlm_website_mode, true); + assert.equal("reasoning_effort" in completionBody.features, false); } finally { globalThis.fetch = originalFetch; } }); it("aggregates streamed internal-envelope deltas into a non-streaming completion", async () => { - const originalFetch = globalThis.fetch; - globalThis.fetch = (async () => - new Response( - [ - `data: ${JSON.stringify({ type: "chat:completion", data: { delta_content: "Hel", phase: "answer", done: false } })}`, - `data: ${JSON.stringify({ type: "chat:completion", data: { delta_content: "lo", phase: "answer", done: false } })}`, - `data: ${JSON.stringify({ type: "chat:completion", data: { phase: "done", done: true } })}`, - "data: [DONE]", - "", - "", - ].join("\n"), - { headers: { "Content-Type": "text/event-stream" } } - )) as typeof fetch; + const originalFetch = installZaiFetch( + () => + new Response( + [ + `data: ${JSON.stringify({ type: "chat:completion", data: { delta_content: "Hel", phase: "answer", done: false } })}`, + `data: ${JSON.stringify({ type: "chat:completion", data: { delta_content: "lo", phase: "answer", done: false } })}`, + `data: ${JSON.stringify({ type: "chat:completion", data: { phase: "done", done: true } })}`, + "data: [DONE]", + "", + "", + ].join("\n"), + { headers: { "Content-Type": "text/event-stream" } } + ) + ); try { const executor = new mod.ZaiWebExecutor(); const result = await executor.execute({ - model: "glm-4.6", + model: "GLM-5.1", body: { messages: [{ role: "user", content: "hi" }] }, stream: false, - credentials: { apiKey: "token=abc123" }, + credentials: { apiKey: TEST_CREDENTIAL }, signal: null, }); @@ -169,25 +635,26 @@ describe("ZaiWebExecutor", () => { }); it("streams internal-envelope deltas as OpenAI-shaped SSE chunks", async () => { - const originalFetch = globalThis.fetch; - globalThis.fetch = (async () => - new Response( - [ - `data: ${JSON.stringify({ type: "chat:completion", data: { delta_content: "Hi", phase: "answer", done: false } })}`, - `data: ${JSON.stringify({ type: "chat:completion", data: { phase: "done", done: true } })}`, - "", - "", - ].join("\n"), - { headers: { "Content-Type": "text/event-stream" } } - )) as typeof fetch; + const originalFetch = installZaiFetch( + () => + new Response( + [ + `data: ${JSON.stringify({ type: "chat:completion", data: { delta_content: "Hi", phase: "answer", done: false } })}`, + `data: ${JSON.stringify({ type: "chat:completion", data: { phase: "done", done: true } })}`, + "", + "", + ].join("\n"), + { headers: { "Content-Type": "text/event-stream" } } + ) + ); try { const executor = new mod.ZaiWebExecutor(); const result = await executor.execute({ - model: "glm-4.6", + model: "GLM-5.1", body: { messages: [{ role: "user", content: "hi" }] }, stream: true, - credentials: { apiKey: "token=abc123" }, + credentials: { apiKey: TEST_CREDENTIAL }, signal: null, }); @@ -201,17 +668,15 @@ describe("ZaiWebExecutor", () => { }); it("propagates upstream HTTP errors", async () => { - const originalFetch = globalThis.fetch; - globalThis.fetch = (async () => - new Response("session expired", { status: 401 })) as typeof fetch; + const originalFetch = installZaiFetch(() => new Response("session expired", { status: 401 })); try { const executor = new mod.ZaiWebExecutor(); const result = await executor.execute({ - model: "glm-4.6", + model: "GLM-5.1", body: { messages: [{ role: "user", content: "hi" }] }, stream: false, - credentials: { apiKey: "token=abc123" }, + credentials: { apiKey: TEST_CREDENTIAL }, signal: null, }); diff --git a/tests/unit/free-tier-providers-phase3-integration.test.ts b/tests/unit/free-tier-providers-phase3-integration.test.ts new file mode 100644 index 0000000000..89c3141d8b --- /dev/null +++ b/tests/unit/free-tier-providers-phase3-integration.test.ts @@ -0,0 +1,55 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +const { REGISTRY } = await import("../../open-sse/config/providerRegistry.ts"); +const { DefaultExecutor, getExecutor } = await import("../../open-sse/executors/index.ts"); +const { PROVIDER_ENDPOINTS } = await import("../../src/shared/constants/config.ts"); +const { isValidModel } = await import("../../src/shared/constants/models.ts"); +const { AGGREGATOR_PROVIDER_IDS } = await import("../../src/shared/constants/providers.ts"); +const { APIKEY_PROVIDERS } = await import("../../src/shared/constants/providers/apikey/index.ts"); + +const providers = [ + ["zylo-api", "zylo", "https://api.zyloai.net/v1/chat/completions"], + ["unorouter", "unorouter", "https://api.unorouter.com/v1/chat/completions"], + ["poolside", "poolside", "https://inference.poolside.ai/v1/chat/completions"], + ["fastrouter", "fastrouter", "https://api.fastrouter.ai/api/v1/chat/completions"], + ["anyapi", "anyapi", "https://api.anyapi.ai/v1/chat/completions"], + ["electronhub", "electronhub", "https://api.electronhub.ai/v1/chat/completions"], + ["llmgateway", "llmgateway", "https://api.llmgateway.io/v1/chat/completions"], + ["llm-kiwi", "llmkiwi", "https://api.llm.kiwi/v1/chat/completions"], +] as const; + +for (const [id, alias, endpoint] of providers) { + test(`${id} is wired through registry, metadata, endpoint and default executor`, () => { + const registry = REGISTRY[id]; + const metadata = APIKEY_PROVIDERS[id]; + + assert.ok(registry); + assert.ok(metadata); + assert.equal(registry.id, id); + assert.equal(registry.alias, alias); + assert.equal(registry.baseUrl, endpoint); + assert.equal(PROVIDER_ENDPOINTS[id], endpoint); + assert.equal(metadata.id, id); + assert.equal(metadata.alias, alias); + assert.equal(metadata.hasFree, true); + assert.equal(metadata.passthroughModels, true); + assert.ok(typeof metadata.freeNote === "string" && metadata.freeNote.length > 0); + assert.ok(getExecutor(id) instanceof DefaultExecutor); + assert.equal(isValidModel(id, "future/live-catalog-model"), true); + assert.equal(isValidModel(alias, "future/live-catalog-model"), true); + }); +} + +test("gateway providers are classified as aggregators while direct Poolside is not", () => { + const gatewayIds = providers.map(([id]) => id).filter((id) => id !== "poolside"); + for (const id of gatewayIds) assert.equal(AGGREGATOR_PROVIDER_IDS.has(id), true); + assert.equal(AGGREGATOR_PROVIDER_IDS.has("poolside"), false); +}); + +test("LLM.Kiwi statically exposes only the confirmed Free plan models", () => { + assert.deepEqual(REGISTRY["llm-kiwi"].models, [ + { id: "auto", name: "Auto" }, + { id: "hrLLM", name: "hrLLM" }, + ]); +}); diff --git a/tests/unit/free-tier-providers-wave2-a.test.ts b/tests/unit/free-tier-providers-wave2-a.test.ts new file mode 100644 index 0000000000..b646b51bdf --- /dev/null +++ b/tests/unit/free-tier-providers-wave2-a.test.ts @@ -0,0 +1,51 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import { literouterProvider } from "../../open-sse/config/providers/registry/literouter/index.ts"; +import { meganovaAiProvider } from "../../open-sse/config/providers/registry/meganova-ai/index.ts"; +import { mnnAiProvider } from "../../open-sse/config/providers/registry/mnn-ai/index.ts"; +import type { RegistryEntry } from "../../open-sse/config/providers/shared.ts"; + +const providers: Array<{ + entry: RegistryEntry; + id: string; + chatUrl: string; + modelsUrl: string; +}> = [ + { + entry: literouterProvider, + id: "literouter", + chatUrl: "https://api.literouter.com/v1/chat/completions", + modelsUrl: "https://api.literouter.com/v1/models", + }, + { + entry: mnnAiProvider, + id: "mnn-ai", + chatUrl: "https://api.mnnai.ru/v1/chat/completions", + modelsUrl: "https://api.mnnai.ru/v1/models", + }, + { + entry: meganovaAiProvider, + id: "meganova-ai", + chatUrl: "https://api.meganova.ai/v1/chat/completions", + modelsUrl: "https://api.meganova.ai/v1/models", + }, +]; + +for (const { entry, id, chatUrl, modelsUrl } of providers) { + test(`${id} uses an OpenAI-compatible Bearer registry entry`, () => { + assert.equal(entry.id, id); + assert.equal(entry.alias, id); + assert.equal(entry.format, "openai"); + assert.equal(entry.executor, "default"); + assert.equal(entry.authType, "apikey"); + assert.equal(entry.authHeader, "bearer"); + assert.equal(entry.baseUrl, chatUrl); + assert.equal(entry.modelsUrl, modelsUrl); + assert.equal(entry.passthroughModels, true); + }); + + test(`${id} leaves model discovery to the live upstream catalog`, () => { + assert.deepEqual(entry.models, []); + }); +} diff --git a/tests/unit/free-tier-providers-wave2-b.test.ts b/tests/unit/free-tier-providers-wave2-b.test.ts new file mode 100644 index 0000000000..3fec49f943 --- /dev/null +++ b/tests/unit/free-tier-providers-wave2-b.test.ts @@ -0,0 +1,60 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import { mixlayerProvider } from "../../open-sse/config/providers/registry/mixlayer/index.ts"; +import { spekaProvider } from "../../open-sse/config/providers/registry/speka/index.ts"; +import { tokenreplyProvider } from "../../open-sse/config/providers/registry/tokenreply/index.ts"; +import type { RegistryEntry } from "../../open-sse/config/providers/shared.ts"; + +const providers: Array<{ + entry: RegistryEntry; + id: string; + chatUrl: string; + modelsUrl: string; +}> = [ + { + entry: mixlayerProvider, + id: "mixlayer", + chatUrl: "https://models.mixlayer.ai/v1/chat/completions", + modelsUrl: "https://models.mixlayer.ai/v1/models", + }, + { + entry: spekaProvider, + id: "speka", + chatUrl: "https://speka.me/v1/chat/completions", + modelsUrl: "https://speka.me/v1/models", + }, + { + entry: tokenreplyProvider, + id: "tokenreply", + chatUrl: "https://api.tokenreply.com/v1/chat/completions", + modelsUrl: "https://api.tokenreply.com/v1/models", + }, +]; + +test("Wave 2-B providers expose OpenAI-compatible Bearer registries", () => { + for (const { entry, id, chatUrl, modelsUrl } of providers) { + assert.equal(entry.id, id); + assert.equal(entry.alias, id); + assert.equal(entry.format, "openai"); + assert.equal(entry.executor, "default"); + assert.equal(entry.authType, "apikey"); + assert.equal(entry.authHeader, "bearer"); + assert.equal(entry.baseUrl, chatUrl); + assert.equal(entry.modelsUrl, modelsUrl); + assert.equal(entry.passthroughModels, true); + assert.ok(Array.isArray(entry.models)); + } +}); + +test("Mixlayer seeds only its documented free model", () => { + assert.deepEqual( + mixlayerProvider.models.map((model) => model.id), + ["qwen/qwen3.5-4b-free"] + ); +}); + +test("Speka and TokenReply rely on live model catalogs without invented models", () => { + assert.deepEqual(spekaProvider.models, []); + assert.deepEqual(tokenreplyProvider.models, []); +}); diff --git a/tests/unit/free-tier-providers-wave2-c.test.ts b/tests/unit/free-tier-providers-wave2-c.test.ts new file mode 100644 index 0000000000..75b42242ea --- /dev/null +++ b/tests/unit/free-tier-providers-wave2-c.test.ts @@ -0,0 +1,58 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import { cloudcodeOneProvider } from "../../open-sse/config/providers/registry/cloudcode-one/index.ts"; +import { dxntProvider } from "../../open-sse/config/providers/registry/dxnt/index.ts"; +import { yoloAutoProvider } from "../../open-sse/config/providers/registry/yolo-auto/index.ts"; +import type { RegistryEntry } from "../../open-sse/config/providers/shared.ts"; + +const providers: Array<{ + entry: RegistryEntry; + id: string; + chatUrl: string; + modelsUrl: string; + modelIds: string[]; +}> = [ + { + entry: yoloAutoProvider, + id: "yolo-auto", + chatUrl: "https://yolo-auto.com/v1/chat/completions", + modelsUrl: "https://yolo-auto.com/v1/models", + modelIds: ["qwen3.6-35b-a3b"], + }, + { + entry: dxntProvider, + id: "dxnt", + chatUrl: "https://www.dxnt.com/v1/chat/completions", + modelsUrl: "https://www.dxnt.com/v1/models", + modelIds: [], + }, + { + entry: cloudcodeOneProvider, + id: "cloudcode-one", + chatUrl: "https://api.cloudcode.one/v1/chat/completions", + modelsUrl: "https://api.cloudcode.one/v1/models", + modelIds: ["glm-4.7-flash", "glm-4.6v-flash"], + }, +]; + +for (const { entry, id, chatUrl, modelsUrl, modelIds } of providers) { + test(`${id} uses the standard OpenAI-compatible API-key registry shape`, () => { + assert.equal(entry.id, id); + assert.equal(entry.alias, id); + assert.equal(entry.format, "openai"); + assert.equal(entry.executor, "default"); + assert.equal(entry.authType, "apikey"); + assert.equal(entry.authHeader, "bearer"); + assert.equal(entry.baseUrl, chatUrl); + assert.equal(entry.modelsUrl, modelsUrl); + assert.equal(entry.passthroughModels, true); + }); + + test(`${id} seeds only the audited model identifiers`, () => { + assert.deepEqual( + (entry.models ?? []).map((model) => model.id), + modelIds + ); + }); +} diff --git a/tests/unit/free-tier-providers-wave2-integration.test.ts b/tests/unit/free-tier-providers-wave2-integration.test.ts new file mode 100644 index 0000000000..83128bd3c0 --- /dev/null +++ b/tests/unit/free-tier-providers-wave2-integration.test.ts @@ -0,0 +1,60 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +const { REGISTRY } = await import("../../open-sse/config/providerRegistry.ts"); +const { DefaultExecutor, getExecutor } = await import("../../open-sse/executors/index.ts"); +const { PROVIDER_ENDPOINTS } = await import("../../src/shared/constants/config.ts"); +const { isValidModel } = await import("../../src/shared/constants/models.ts"); +const { AGGREGATOR_PROVIDER_IDS } = await import("../../src/shared/constants/providers.ts"); +const { APIKEY_PROVIDERS } = await import("../../src/shared/constants/providers/apikey/index.ts"); + +const providers = [ + ["literouter", "https://api.literouter.com/v1/chat/completions", []], + ["mnn-ai", "https://api.mnnai.ru/v1/chat/completions", []], + ["meganova-ai", "https://api.meganova.ai/v1/chat/completions", []], + ["mixlayer", "https://models.mixlayer.ai/v1/chat/completions", ["qwen/qwen3.5-4b-free"]], + ["speka", "https://speka.me/v1/chat/completions", []], + ["tokenreply", "https://api.tokenreply.com/v1/chat/completions", []], + ["yolo-auto", "https://yolo-auto.com/v1/chat/completions", ["qwen3.6-35b-a3b"]], + ["dxnt", "https://www.dxnt.com/v1/chat/completions", []], + [ + "cloudcode-one", + "https://api.cloudcode.one/v1/chat/completions", + ["glm-4.7-flash", "glm-4.6v-flash"], + ], +] as const; + +for (const [id, endpoint, modelIds] of providers) { + test(`${id} is wired through registry, metadata, endpoint and default executor`, () => { + const registry = REGISTRY[id]; + const metadata = APIKEY_PROVIDERS[id]; + + assert.ok(registry); + assert.ok(metadata); + assert.equal(registry.id, id); + assert.equal(registry.alias, id); + assert.equal(registry.baseUrl, endpoint); + assert.equal(PROVIDER_ENDPOINTS[id], endpoint); + assert.equal(metadata.id, id); + assert.equal(metadata.alias, id); + assert.equal(metadata.hasFree, true); + assert.equal(metadata.passthroughModels, true); + assert.ok(typeof metadata.freeNote === "string" && metadata.freeNote.length > 0); + assert.equal(AGGREGATOR_PROVIDER_IDS.has(id), true); + assert.ok(getExecutor(id) instanceof DefaultExecutor); + assert.equal(isValidModel(id, "future/live-catalog-model"), true); + assert.deepEqual( + registry.models.map((model) => model.id), + modelIds + ); + }); +} + +test("risk-sensitive metadata preserves the audited quota qualifications", () => { + assert.match(APIKEY_PROVIDERS["mnn-ai"].apiHint ?? "", /jurisdiction.*privacy/i); + assert.match(APIKEY_PROVIDERS["meganova-ai"].freeNote ?? "", /per-model quotas/i); + assert.match(APIKEY_PROVIDERS["meganova-ai"].freeNote ?? "", /paid overage/i); + assert.match(APIKEY_PROVIDERS.tokenreply.freeNote ?? "", /no fixed global free quota/i); + assert.match(APIKEY_PROVIDERS["yolo-auto"].freeNote ?? "", /no numeric daily quota/i); + assert.match(APIKEY_PROVIDERS["cloudcode-one"].freeNote ?? "", /credit or a coupon/i); +}); diff --git a/tests/unit/free-tier-providers-wave3-a.test.ts b/tests/unit/free-tier-providers-wave3-a.test.ts new file mode 100644 index 0000000000..be610977fc --- /dev/null +++ b/tests/unit/free-tier-providers-wave3-a.test.ts @@ -0,0 +1,48 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import { chatanywhereProvider } from "../../open-sse/config/providers/registry/chatanywhere/index.ts"; +import { ofoxaiProvider } from "../../open-sse/config/providers/registry/ofoxai/index.ts"; +import { zerolimitaiProvider } from "../../open-sse/config/providers/registry/zerolimitai/index.ts"; +import type { RegistryEntry } from "../../open-sse/config/providers/shared.ts"; + +const providers: Array<{ + entry: RegistryEntry; + id: string; + chatUrl: string; + modelsUrl: string; +}> = [ + { + entry: ofoxaiProvider, + id: "ofoxai", + chatUrl: "https://api.ofox.ai/v1/chat/completions", + modelsUrl: "https://api.ofox.ai/v1/models", + }, + { + entry: zerolimitaiProvider, + id: "zerolimitai", + chatUrl: "https://www.zerolimitai.com/api/v1/chat/completions", + modelsUrl: "https://www.zerolimitai.com/api/v1/models", + }, + { + entry: chatanywhereProvider, + id: "chatanywhere", + chatUrl: "https://api.chatanywhere.org/v1/chat/completions", + modelsUrl: "https://api.chatanywhere.org/v1/models", + }, +]; + +test("Wave 3-A providers expose OpenAI-compatible Bearer registries", () => { + for (const { entry, id, chatUrl, modelsUrl } of providers) { + assert.equal(entry.id, id); + assert.equal(entry.alias, id); + assert.equal(entry.format, "openai"); + assert.equal(entry.executor, "default"); + assert.equal(entry.authType, "apikey"); + assert.equal(entry.authHeader, "bearer"); + assert.equal(entry.baseUrl, chatUrl); + assert.equal(entry.modelsUrl, modelsUrl); + assert.equal(entry.passthroughModels, true); + assert.deepEqual(entry.models, []); + } +}); diff --git a/tests/unit/free-tier-providers-wave3-b.test.ts b/tests/unit/free-tier-providers-wave3-b.test.ts new file mode 100644 index 0000000000..541c28472a --- /dev/null +++ b/tests/unit/free-tier-providers-wave3-b.test.ts @@ -0,0 +1,53 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import { aurikoProvider } from "../../open-sse/config/providers/registry/auriko/index.ts"; +import { helyxaiProvider } from "../../open-sse/config/providers/registry/helyxai/index.ts"; +import { poixeAiProvider } from "../../open-sse/config/providers/registry/poixe-ai/index.ts"; +import type { RegistryEntry } from "../../open-sse/config/providers/shared.ts"; + +const providers: Array<{ + entry: RegistryEntry; + id: string; + chatUrl: string; + modelsUrl: string; +}> = [ + { + entry: helyxaiProvider, + id: "helyxai", + chatUrl: "https://helyxai.space/v1/chat/completions", + modelsUrl: "https://helyxai.space/v1/models", + }, + { + entry: aurikoProvider, + id: "auriko", + chatUrl: "https://api.auriko.ai/v1/chat/completions", + modelsUrl: "https://api.auriko.ai/v1/models", + }, + { + entry: poixeAiProvider, + id: "poixe-ai", + chatUrl: "https://api.poixe.com/v1/chat/completions", + modelsUrl: "https://api.poixe.com/v1/models", + }, +]; + +test("Wave 3-B providers expose OpenAI-compatible Bearer registries", () => { + for (const { entry, id, chatUrl, modelsUrl } of providers) { + assert.equal(entry.id, id); + assert.equal(entry.alias, id); + assert.equal(entry.format, "openai"); + assert.equal(entry.executor, "default"); + assert.equal(entry.authType, "apikey"); + assert.equal(entry.authHeader, "bearer"); + assert.equal(entry.baseUrl, chatUrl); + assert.equal(entry.modelsUrl, modelsUrl); + assert.equal(entry.passthroughModels, true); + } +}); + +test("Wave 3-B providers rely on live catalogs without invented models", () => { + for (const { entry } of providers) { + assert.deepEqual(entry.models, []); + } +}); diff --git a/tests/unit/free-tier-providers-wave3-c.test.ts b/tests/unit/free-tier-providers-wave3-c.test.ts new file mode 100644 index 0000000000..05442fbe45 --- /dev/null +++ b/tests/unit/free-tier-providers-wave3-c.test.ts @@ -0,0 +1,41 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import { chatOripeProvider } from "../../open-sse/config/providers/registry/chat-oripe/index.ts"; +import { nagaAiProvider } from "../../open-sse/config/providers/registry/naga-ai/index.ts"; +import type { RegistryEntry } from "../../open-sse/config/providers/shared.ts"; + +const providers: Array<{ + entry: RegistryEntry; + id: string; + chatUrl: string; + modelsUrl: string; +}> = [ + { + entry: nagaAiProvider, + id: "naga-ai", + chatUrl: "https://api.naga.ac/v1/chat/completions", + modelsUrl: "https://api.naga.ac/v1/models", + }, + { + entry: chatOripeProvider, + id: "chat-oripe", + chatUrl: "https://api.oriper.com/v1/chat/completions", + modelsUrl: "https://api.oriper.com/v1/models", + }, +]; + +test("Wave 3-C providers expose OpenAI-compatible Bearer registries", () => { + for (const { entry, id, chatUrl, modelsUrl } of providers) { + assert.equal(entry.id, id); + assert.equal(entry.alias, id); + assert.equal(entry.format, "openai"); + assert.equal(entry.executor, "default"); + assert.equal(entry.authType, "apikey"); + assert.equal(entry.authHeader, "bearer"); + assert.equal(entry.baseUrl, chatUrl); + assert.equal(entry.modelsUrl, modelsUrl); + assert.equal(entry.passthroughModels, true); + assert.deepEqual(entry.models, []); + } +}); diff --git a/tests/unit/free-tier-providers-wave3-integration.test.ts b/tests/unit/free-tier-providers-wave3-integration.test.ts new file mode 100644 index 0000000000..ec8ae79cf3 --- /dev/null +++ b/tests/unit/free-tier-providers-wave3-integration.test.ts @@ -0,0 +1,53 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +const { REGISTRY } = await import("../../open-sse/config/providerRegistry.ts"); +const { DefaultExecutor, getExecutor } = await import("../../open-sse/executors/index.ts"); +const { PROVIDER_ENDPOINTS } = await import("../../src/shared/constants/config.ts"); +const { isValidModel } = await import("../../src/shared/constants/models.ts"); +const { AGGREGATOR_PROVIDER_IDS } = await import("../../src/shared/constants/providers.ts"); +const { APIKEY_PROVIDERS } = await import("../../src/shared/constants/providers/apikey/index.ts"); + +const providers = [ + ["ofoxai", "https://api.ofox.ai/v1/chat/completions"], + ["zerolimitai", "https://www.zerolimitai.com/api/v1/chat/completions"], + ["chatanywhere", "https://api.chatanywhere.org/v1/chat/completions"], + ["helyxai", "https://helyxai.space/v1/chat/completions"], + ["auriko", "https://api.auriko.ai/v1/chat/completions"], + ["poixe-ai", "https://api.poixe.com/v1/chat/completions"], + ["naga-ai", "https://api.naga.ac/v1/chat/completions"], + ["chat-oripe", "https://api.oriper.com/v1/chat/completions"], +] as const; + +for (const [id, endpoint] of providers) { + test(`${id} is wired through registry, metadata, endpoint and default executor`, () => { + const registry = REGISTRY[id]; + const metadata = APIKEY_PROVIDERS[id]; + + assert.ok(registry); + assert.ok(metadata); + assert.equal(registry.id, id); + assert.equal(registry.alias, id); + assert.equal(registry.baseUrl, endpoint); + assert.equal(PROVIDER_ENDPOINTS[id], endpoint); + assert.equal(metadata.id, id); + assert.equal(metadata.alias, id); + assert.equal(metadata.hasFree, true); + assert.equal(metadata.passthroughModels, true); + assert.ok(typeof metadata.freeNote === "string" && metadata.freeNote.length > 0); + assert.equal(AGGREGATOR_PROVIDER_IDS.has(id), true); + assert.ok(getExecutor(id) instanceof DefaultExecutor); + assert.equal(isValidModel(id, "future/live-catalog-model"), true); + assert.deepEqual(registry.models, []); + }); +} + +test("Wave 3 metadata preserves the audited legal, quota and privacy warnings", () => { + assert.match(APIKEY_PROVIDERS.chatanywhere.freeNote ?? "", /commercial traffic/i); + assert.match(APIKEY_PROVIDERS.zerolimitai.freeNote ?? "", /3 and 7 days/i); + assert.match(APIKEY_PROVIDERS.helyxai.freeNote ?? "", /100,000 tokens\/day/i); + assert.match(APIKEY_PROVIDERS.auriko.freeNote ?? "", /not a free-token pool/i); + assert.match(APIKEY_PROVIDERS["poixe-ai"].freeNote ?? "", /2 RPM\/5 RPD/i); + assert.match(APIKEY_PROVIDERS["naga-ai"].freeNote ?? "", /training/i); + assert.match(APIKEY_PROVIDERS["chat-oripe"].freeNote ?? "", /unconfirmed/i); +}); diff --git a/tests/unit/free-tier-providers-wave4-a.test.ts b/tests/unit/free-tier-providers-wave4-a.test.ts new file mode 100644 index 0000000000..277b9b2778 --- /dev/null +++ b/tests/unit/free-tier-providers-wave4-a.test.ts @@ -0,0 +1,27 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import { freeinferenceProvider } from "../../open-sse/config/providers/registry/freeinference/index.ts"; +import { + DefaultExecutor, + getExecutor, + hasSpecializedExecutor, +} from "../../open-sse/executors/index.ts"; + +test("FreeInference exposes an OpenAI-compatible Bearer registry", () => { + assert.equal(freeinferenceProvider.id, "freeinference"); + assert.equal(freeinferenceProvider.alias, "freeinference"); + assert.equal(freeinferenceProvider.format, "openai"); + assert.equal(freeinferenceProvider.executor, "default"); + assert.equal(freeinferenceProvider.authType, "apikey"); + assert.equal(freeinferenceProvider.authHeader, "bearer"); + assert.equal(freeinferenceProvider.baseUrl, "https://freeinference.org/v1/chat/completions"); + assert.equal(freeinferenceProvider.modelsUrl, "https://freeinference.org/v1/models"); + assert.deepEqual(freeinferenceProvider.models, []); + assert.equal(freeinferenceProvider.passthroughModels, true); +}); + +test("FreeInference uses DefaultExecutor without specialized behavior", () => { + assert.equal(hasSpecializedExecutor("freeinference"), false); + assert.ok(getExecutor("freeinference") instanceof DefaultExecutor); +}); diff --git a/tests/unit/free-tier-providers-wave4-b.test.ts b/tests/unit/free-tier-providers-wave4-b.test.ts new file mode 100644 index 0000000000..a547e150a0 --- /dev/null +++ b/tests/unit/free-tier-providers-wave4-b.test.ts @@ -0,0 +1,27 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import { freeAiProvider } from "../../open-sse/config/providers/registry/free-ai/index.ts"; +import { + DefaultExecutor, + getExecutor, + hasSpecializedExecutor, +} from "../../open-sse/executors/index.ts"; + +test("Free.ai exposes its exact OpenAI-compatible endpoint and live catalog", () => { + assert.equal(freeAiProvider.id, "free-ai"); + assert.equal(freeAiProvider.alias, "free-ai"); + assert.equal(freeAiProvider.format, "openai"); + assert.equal(freeAiProvider.executor, "default"); + assert.equal(freeAiProvider.authType, "apikey"); + assert.equal(freeAiProvider.authHeader, "bearer"); + assert.equal(freeAiProvider.baseUrl, "https://api.free.ai/v1/chat/"); + assert.equal(freeAiProvider.modelsUrl, "https://api.free.ai/v1/models"); + assert.deepEqual(freeAiProvider.models, []); + assert.equal(freeAiProvider.passthroughModels, true); +}); + +test("Free.ai uses DefaultExecutor without a specialized executor", () => { + assert.ok(getExecutor("free-ai") instanceof DefaultExecutor); + assert.equal(hasSpecializedExecutor("free-ai"), false); +}); diff --git a/tests/unit/free-tier-providers-wave4-integration.test.ts b/tests/unit/free-tier-providers-wave4-integration.test.ts new file mode 100644 index 0000000000..743e188271 --- /dev/null +++ b/tests/unit/free-tier-providers-wave4-integration.test.ts @@ -0,0 +1,64 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import { deriveConfigFromRegistryModelsUrl } from "../../src/app/api/providers/[id]/models/discoveryConfig.ts"; + +const { REGISTRY } = await import("../../open-sse/config/providerRegistry.ts"); +const { DefaultExecutor, getExecutor, hasSpecializedExecutor } = + await import("../../open-sse/executors/index.ts"); +const { PROVIDER_ENDPOINTS } = await import("../../src/shared/constants/config.ts"); +const { isValidModel } = await import("../../src/shared/constants/models.ts"); +const { AGGREGATOR_PROVIDER_IDS } = await import("../../src/shared/constants/providers.ts"); +const { APIKEY_PROVIDERS } = await import("../../src/shared/constants/providers/apikey/index.ts"); + +const providers = [ + ["freeinference", "https://freeinference.org/v1/chat/completions"], + ["free-ai", "https://api.free.ai/v1/chat/"], +] as const; + +for (const [id, endpoint] of providers) { + test(`${id} is fully wired without a specialized executor`, () => { + const registry = REGISTRY[id]; + const metadata = APIKEY_PROVIDERS[id]; + + assert.ok(registry); + assert.ok(metadata); + assert.equal(registry.id, id); + assert.equal(registry.alias, id); + assert.equal(registry.baseUrl, endpoint); + assert.equal(PROVIDER_ENDPOINTS[id], endpoint); + assert.equal(metadata.id, id); + assert.equal(metadata.alias, id); + assert.equal(metadata.hasFree, true); + assert.equal(metadata.passthroughModels, true); + assert.equal(AGGREGATOR_PROVIDER_IDS.has(id), true); + assert.equal(hasSpecializedExecutor(id), false); + const executor = getExecutor(id); + assert.ok(executor instanceof DefaultExecutor); + assert.equal(executor.buildUrl("live-model", false), endpoint); + assert.equal(isValidModel(id, "future/live-catalog-model"), true); + assert.deepEqual(registry.models, []); + }); +} + +test("Wave 4 model discovery accepts both public catalog response envelopes", () => { + const freeInferenceDiscovery = deriveConfigFromRegistryModelsUrl("freeinference"); + const freeAiDiscovery = deriveConfigFromRegistryModelsUrl("free-ai"); + + assert.ok(freeInferenceDiscovery); + assert.ok(freeAiDiscovery); + assert.deepEqual(freeInferenceDiscovery.parseResponse({ data: [{ id: "glm-5.1" }] }), [ + { id: "glm-5.1" }, + ]); + assert.deepEqual(freeAiDiscovery.parseResponse({ models: [{ id: "qwen7b" }] }), [ + { id: "qwen7b" }, + ]); +}); + +test("Wave 4 metadata preserves approval, logging and overage warnings", () => { + assert.match(APIKEY_PROVIDERS.freeinference.freeNote ?? "", /manual approval/i); + assert.match(APIKEY_PROVIDERS.freeinference.apiHint ?? "", /logging/i); + assert.match(APIKEY_PROVIDERS["free-ai"].freeNote ?? "", /30,000 tokens\/day/i); + assert.match(APIKEY_PROVIDERS["free-ai"].freeNote ?? "", /premium external models are paid/i); + assert.match(APIKEY_PROVIDERS["free-ai"].apiHint ?? "", /\/v1\/chat\//i); +}); diff --git a/tests/unit/managed-model-import.test.ts b/tests/unit/managed-model-import.test.ts index 5df2d935a3..24afe9f350 100644 --- a/tests/unit/managed-model-import.test.ts +++ b/tests/unit/managed-model-import.test.ts @@ -85,6 +85,55 @@ test("provider-level synced model deletion removes only that provider", async () ]); }); +test("OpenAI import excludes deprecated and shutdown models from new selections", async () => { + const result = await importManagedModels({ + providerId: "openai", + connectionId: "openai-conn", + mode: "sync", + fetchedModels: [ + { id: "gpt-5.6-sol", name: "GPT-5.6 Sol" }, + { id: "gpt-5.2-codex", name: "GPT-5.2 Codex" }, + { id: "gpt-5.3-chat-latest", name: "GPT-5.3 Chat" }, + ], + }); + + assert.deepEqual( + result.discoveredModels.map((model) => model.id), + ["gpt-5.6-sol"] + ); + assert.deepEqual( + (await modelsDb.getSyncedAvailableModels("openai")).map((model) => model.id), + ["gpt-5.6-sol"] + ); +}); + +test("OpenAI import excludes image and video generation models from chat selections", async () => { + const result = await importManagedModels({ + providerId: "openai", + connectionId: "openai-media-conn", + mode: "sync", + fetchedModels: [ + { id: "gpt-5.6-sol", name: "GPT-5.6 Sol" }, + { id: "gpt-image-2", name: "GPT Image 2" }, + { id: "sora-2-pro", name: "Sora 2 Pro" }, + { + id: "vendor-image-model", + name: "Vendor Image Model", + supportedEndpoints: ["/v1/images/generations"], + }, + ], + }); + + assert.deepEqual( + result.discoveredModels.map((model) => model.id), + ["gpt-5.6-sol"] + ); + assert.deepEqual( + (await modelsDb.getSyncedAvailableModels("openai")).map((model) => model.id), + ["gpt-5.6-sol"] + ); +}); + test("pruning stale connection available models during import", async () => { const db = core.getDbInstance(); // Insert connections diff --git a/tests/unit/migration-151-windsurf-to-devin-desktop.test.ts b/tests/unit/migration-151-windsurf-to-devin-desktop.test.ts new file mode 100644 index 0000000000..04d00b0a86 --- /dev/null +++ b/tests/unit/migration-151-windsurf-to-devin-desktop.test.ts @@ -0,0 +1,399 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import path from "node:path"; +import test from "node:test"; +import { fileURLToPath } from "node:url"; + +import Database from "better-sqlite3"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const migrationDir = path.join(__dirname, "../../src/lib/db/migrations"); +const migrationPath = path.join(migrationDir, "151_windsurf_to_devin_desktop.sql"); +const schemaMigrations = [ + "001_initial_schema.sql", + "002_mcp_a2a_tables.sql", + "008_registered_keys.sql", + "013_quota_snapshots.sql", + "017_version_manager_upstream_proxy.sql", + "050_session_account_affinity.sql", + "059_manifest_routing.sql", + "064_create_session_model_history.sql", + "066_api_key_groups.sql", + "074_discovery_results.sql", + "079_provider_plans.sql", + "108_provider_quota_reset_events.sql", + "110_model_context_overrides.sql", + "119_model_capability_overrides.sql", +]; + +test("migration 151 for the Devin Desktop provider exists", () => { + assert.equal(fs.existsSync(migrationPath), true); +}); + +function createDb(): Database.Database { + const db = new Database(":memory:"); + for (const filename of schemaMigrations) { + db.exec(fs.readFileSync(path.join(migrationDir, filename), "utf8")); + } + return db; +} + +function rows(db: Database.Database, table: string): unknown[] { + return db.prepare(`SELECT * FROM ${table} ORDER BY 1, 2`).all(); +} + +test("migration 151 moves provider aliases when the destination is absent", () => { + const migration = fs.readFileSync(migrationPath, "utf8"); + const db = createDb(); + db.prepare( + "INSERT INTO key_value (namespace, key, value) VALUES ('providerAliases', 'windsurf', ?)" + ).run('{"fast":"swe-1-7"}'); + + db.exec(migration); + + assert.deepEqual( + db.prepare("SELECT key, value FROM key_value WHERE namespace='providerAliases'").all(), + [{ key: "devin-desktop", value: '{"fast":"swe-1-7"}' }] + ); + db.close(); +}); + +test("migration 151 moves live key provisioning state with destination-wins collisions", () => { + const migration = fs.readFileSync(migrationPath, "utf8"); + const sourceOnly = createDb(); + sourceOnly + .prepare( + `INSERT INTO registered_keys + (id, key, key_prefix, name, provider, account_id) + VALUES ('key-1', 'hash-1', 'ork_test', 'Legacy key', 'windsurf', 'account-1')` + ) + .run(); + sourceOnly + .prepare( + `INSERT INTO provider_key_limits + (provider, max_active_keys, daily_issue_limit, hourly_issue_limit, + daily_issued, hourly_issued, last_reset_day, last_reset_hour) + VALUES ('windsurf', 5, 20, 4, 7, 2, '2026-01-01', '2026-01-01T01')` + ) + .run(); + + sourceOnly.exec(migration); + assert.equal( + sourceOnly.prepare("SELECT provider FROM registered_keys WHERE id='key-1'").pluck().get(), + "devin-desktop" + ); + assert.deepEqual( + sourceOnly + .prepare( + `SELECT provider, max_active_keys, daily_issue_limit, hourly_issue_limit, + daily_issued, hourly_issued + FROM provider_key_limits` + ) + .get(), + { + provider: "devin-desktop", + max_active_keys: 5, + daily_issue_limit: 20, + hourly_issue_limit: 4, + daily_issued: 7, + hourly_issued: 2, + } + ); + sourceOnly.exec(migration); + assert.equal(sourceOnly.prepare("SELECT COUNT(*) FROM provider_key_limits").pluck().get(), 1); + sourceOnly.close(); + + const collision = createDb(); + collision.exec(` + INSERT INTO provider_key_limits (provider, max_active_keys, daily_issued) + VALUES ('windsurf', 5, 7), ('devin-desktop', 9, 3); + `); + collision.exec(migration); + assert.deepEqual( + collision + .prepare("SELECT provider, max_active_keys, daily_issued FROM provider_key_limits") + .get(), + { provider: "devin-desktop", max_active_keys: 9, daily_issued: 3 } + ); + collision.exec(migration); + assert.equal(collision.prepare("SELECT COUNT(*) FROM provider_key_limits").pluck().get(), 1); + collision.close(); +}); + +test("migration 151 moves current settings safely and preserves historical records", () => { + const migration = fs.readFileSync(migrationPath, "utf8"); + const db = createDb(); + db.exec(` + INSERT INTO provider_connections + (id, provider, default_model, created_at, updated_at) VALUES + ('legacy-connection', 'windsurf', 'windsurf/swe-1-7', '2026-01-01', '2026-01-01'), + ('other-connection', 'github', 'github/gpt-5', '2026-01-01', '2026-01-01'); + + INSERT INTO key_value VALUES + ('customModels', 'windsurf', '["legacy-custom"]'), + ('customModels', 'devin-desktop', '["keep-destination"]'), + ('syncedAvailableModels', 'windsurf:legacy-connection', '[{"id":"source-collision"}]'), + ('syncedAvailableModels', 'devin-desktop:legacy-connection', '[{"id":"keep-destination"}]'), + ('syncedAvailableModels', 'windsurf:move-connection', '[{"id":"move-source"}]'), + ('modelCompatOverrides', 'windsurf', '{"swe-1-7":true}'), + ('providerAliases', 'windsurf', '{"fast":"swe-1-7"}'), + ('providerAliases', 'devin-desktop', '{"fast":"keep-destination"}'), + ('modelAliases', 'legacy-fast', '"windsurf/swe-1-7"'), + ('modelAliases', 'destination-fast', '"devin-desktop/swe-1-7"'), + ('modelAliases', 'other-fast', '"github/gpt-5"'); + + INSERT INTO combos (id, name, data, created_at, updated_at) VALUES + ('combo-1', 'Legacy combo', + '{"models":[{"provider":"windsurf","providerId":"windsurf","model":"windsurf/swe-1-7"}]}', + '2026-01-01', '2026-01-01'); + + INSERT INTO combo_adaptation_state + (combo_id, provider_id, learned_score, request_count, success_count, avg_latency_ms, + last_failure_at, excluded_until, updated_at) VALUES + ('combo-1', 'windsurf', 0.1, 10, 2, 900, '2026-01-01', '2026-01-02', '2026-01-03'), + ('combo-1', 'devin-desktop', 0.9, 20, 19, 100, NULL, NULL, '2026-02-03'), + ('combo-2', 'windsurf', 0.4, 5, 3, 300, NULL, NULL, '2026-01-04'); + + INSERT INTO tier_assignments + (provider, model, tier, reason, updated_at) VALUES + ('windsurf', 'swe-1-7', 'free', 'legacy', '2026-01-01'), + ('devin-desktop', 'swe-1-7', 'premium', 'keep-destination', '2026-02-01'), + ('windsurf', 'gpt-5-6-sol-high', 'premium', 'move', '2026-01-01'); + + INSERT INTO provider_plans VALUES + ('legacy-connection', 'windsurf', '[]', 'manual', '2026-01-01'); + + INSERT INTO model_context_overrides VALUES + ('windsurf', 'swe-1-7', 100, 'manual', '2026-01-01'), + ('devin-desktop', 'swe-1-7', 200, 'manual', '2026-02-01'); + + INSERT INTO model_capability_overrides VALUES + ('windsurf', 'swe-1-7', 'vision', 'false', '2026-01-01'), + ('devin-desktop', 'swe-1-7', 'vision', 'true', '2026-02-01'); + + INSERT INTO session_account_affinity VALUES + ('session-1', 'windsurf', 'legacy-connection', 1, 2), + ('session-1', 'devin-desktop', 'destination-connection', 3, 4); + + INSERT INTO key_groups (id, name, created_at, updated_at) VALUES + ('group-1', 'Legacy group', '2026-01-01', '2026-01-01'); + INSERT INTO group_model_permissions + (id, group_id, model_pattern, provider, access_type, created_at) VALUES + ('permission-1', 'group-1', 'swe-*', 'windsurf', 'allow', '2026-01-01'); + + INSERT INTO upstream_proxy_config + (provider_id, mode, native_priority, cliproxyapi_priority, enabled, created_at, updated_at) + VALUES + ('windsurf', 'native', 1, 2, 1, '2026-01-01', '2026-01-01'), + ('devin-desktop', 'fallback', 1, 2, 1, '2026-02-01', '2026-02-01'); + + INSERT INTO discovery_results + (provider_id, method, endpoint, status, notes) VALUES + ('windsurf', 'public_api', 'https://server.codeium.com', 'verified', 'legacy'), + ('devin-desktop', 'public_api', 'https://server.codeium.com', 'verified', 'keep'); + + INSERT INTO usage_history (id, provider, model, timestamp) VALUES + (1, 'windsurf', 'swe-1-7', '2026-01-01'); + INSERT INTO call_logs (id, timestamp, provider, model, requested_model) VALUES + ('call-1', '2026-01-01', 'windsurf', 'swe-1-7', 'windsurf/swe-1-7'); + INSERT INTO proxy_logs (id, timestamp, provider) VALUES + ('proxy-1', '2026-01-01', 'windsurf'); + INSERT INTO quota_snapshots (id, provider, connection_id, window_key) VALUES + (1, 'windsurf', 'legacy-connection', 'daily'); + INSERT INTO provider_quota_reset_events + (id, provider, connection_id, window_key, window_started_at, window_resets_at, observed_at) + VALUES + (1, 'windsurf', 'legacy-connection', 'daily', '2026-01-01', '2026-01-02', '2026-01-01'); + INSERT INTO session_model_history + (id, session_id, combo_name, model_str, provider, used_at) VALUES + (1, 'session-1', 'Legacy combo', 'windsurf/swe-1-7', 'windsurf', '2026-01-01'); + `); + + db.exec(migration); + + assert.deepEqual( + db.prepare("SELECT id, provider, default_model FROM provider_connections ORDER BY id").all(), + [ + { + id: "legacy-connection", + provider: "devin-desktop", + default_model: "devin-desktop/swe-1-7", + }, + { id: "other-connection", provider: "github", default_model: "github/gpt-5" }, + ] + ); + assert.deepEqual( + db + .prepare("SELECT value FROM key_value WHERE namespace='customModels' AND key='devin-desktop'") + .get(), + { value: '["keep-destination"]' } + ); + assert.deepEqual( + db + .prepare( + "SELECT key, value FROM key_value WHERE namespace='syncedAvailableModels' ORDER BY key" + ) + .all(), + [ + { + key: "devin-desktop:legacy-connection", + value: '[{"id":"keep-destination"}]', + }, + { key: "devin-desktop:move-connection", value: '[{"id":"move-source"}]' }, + ] + ); + assert.deepEqual( + db + .prepare( + "SELECT value FROM key_value WHERE namespace='providerAliases' AND key='devin-desktop'" + ) + .get(), + { value: '{"fast":"keep-destination"}' } + ); + assert.deepEqual( + db + .prepare("SELECT key, value FROM key_value WHERE namespace='modelAliases' ORDER BY key") + .all(), + [ + { key: "destination-fast", value: '"devin-desktop/swe-1-7"' }, + { key: "legacy-fast", value: '"devin-desktop/swe-1-7"' }, + { key: "other-fast", value: '"github/gpt-5"' }, + ] + ); + assert.equal( + db + .prepare( + `SELECT 1 FROM key_value + WHERE key = 'windsurf' + OR (namespace = 'syncedAvailableModels' AND key LIKE 'windsurf:%')` + ) + .get(), + undefined + ); + + const combo = db.prepare("SELECT data FROM combos WHERE id='combo-1'").get() as { data: string }; + assert.deepEqual(JSON.parse(combo.data), { + models: [ + { + provider: "devin-desktop", + providerId: "devin-desktop", + model: "devin-desktop/swe-1-7", + }, + ], + }); + assert.deepEqual( + db + .prepare( + `SELECT combo_id, provider_id, learned_score, request_count, success_count, avg_latency_ms, + last_failure_at, excluded_until, updated_at + FROM combo_adaptation_state + ORDER BY combo_id` + ) + .all(), + [ + { + combo_id: "combo-1", + provider_id: "devin-desktop", + learned_score: 0.9, + request_count: 20, + success_count: 19, + avg_latency_ms: 100, + last_failure_at: null, + excluded_until: null, + updated_at: "2026-02-03", + }, + { + combo_id: "combo-2", + provider_id: "devin-desktop", + learned_score: 0.4, + request_count: 5, + success_count: 3, + avg_latency_ms: 300, + last_failure_at: null, + excluded_until: null, + updated_at: "2026-01-04", + }, + ] + ); + + assert.deepEqual( + db + .prepare( + "SELECT tier, reason FROM tier_assignments WHERE provider='devin-desktop' AND model='swe-1-7'" + ) + .get(), + { tier: "premium", reason: "keep-destination" } + ); + assert.deepEqual( + db.prepare("SELECT provider, model FROM tier_assignments WHERE model='gpt-5-6-sol-high'").get(), + { provider: "devin-desktop", model: "gpt-5-6-sol-high" } + ); + assert.deepEqual( + db + .prepare("SELECT real_context FROM model_context_overrides WHERE provider='devin-desktop'") + .get(), + { real_context: 200 } + ); + assert.deepEqual( + db + .prepare( + "SELECT override_value FROM model_capability_overrides WHERE provider='devin-desktop'" + ) + .get(), + { override_value: "true" } + ); + assert.deepEqual( + db + .prepare( + "SELECT connection_id FROM session_account_affinity WHERE session_key='session-1' AND provider='devin-desktop'" + ) + .get(), + { connection_id: "destination-connection" } + ); + assert.deepEqual( + db.prepare("SELECT mode FROM upstream_proxy_config WHERE provider_id='devin-desktop'").get(), + { mode: "fallback" } + ); + assert.deepEqual( + db.prepare("SELECT notes FROM discovery_results WHERE provider_id='devin-desktop'").get(), + { notes: "keep" } + ); + assert.equal( + db + .prepare("SELECT provider FROM group_model_permissions WHERE id='permission-1'") + .pluck() + .get(), + "devin-desktop" + ); + + for (const table of [ + "usage_history", + "call_logs", + "proxy_logs", + "quota_snapshots", + "provider_quota_reset_events", + "session_model_history", + ]) { + assert.equal(db.prepare(`SELECT provider FROM ${table}`).pluck().get(), "windsurf"); + } + + const currentTables = [ + "provider_connections", + "key_value", + "combos", + "combo_adaptation_state", + "tier_assignments", + "provider_plans", + "model_context_overrides", + "model_capability_overrides", + "session_account_affinity", + "group_model_permissions", + "upstream_proxy_config", + "discovery_results", + ]; + const afterFirst = JSON.stringify(currentTables.map((table) => rows(db, table))); + db.exec(migration); + assert.equal(JSON.stringify(currentTables.map((table) => rows(db, table))), afterFirst); + + db.close(); +}); diff --git a/tests/unit/model-catalog-cache-swr-8728.test.ts b/tests/unit/model-catalog-cache-swr-8728.test.ts index 6bbcdbb4d1..5e5265b804 100644 --- a/tests/unit/model-catalog-cache-swr-8728.test.ts +++ b/tests/unit/model-catalog-cache-swr-8728.test.ts @@ -1,3 +1,20 @@ +/** + * Stale-while-revalidate for the /v1/models catalog cache (#8728). + * + * Contract note: #8728 originally shipped an injectable `CatalogCachePolicy` + * (a per-call SWR accessor + refresh scheduler) and an unbounded + * `CATALOG_STALE_WHILE_REVALIDATE_MS = Number.POSITIVE_INFINITY`. #9199 landed + * afterwards and deliberately replaced both: the window is now a fixed 30 s + * constant and the refresh is scheduled internally via `setTimeout(…, 0)`. + * See catalogCache.ts — an unbounded window let a refresh that kept failing pin + * an ancient catalog forever. + * + * These tests were left asserting the removed API, which is what broke the + * production build (catalog.ts re-exported three symbols that no longer exist). + * They are realigned here to the shipped contract: the BEHAVIOR #8728 added — + * an expired-but-recent successful entry is served immediately while a refresh + * runs behind it — is still fully covered. + */ import assert from "node:assert/strict"; import fs from "node:fs"; import os from "node:os"; @@ -7,10 +24,13 @@ import test from "node:test"; const TEST_DATA_DIR = fs.mkdtempSync(path.join(os.tmpdir(), "omniroute-catalog-cache-8728-")); process.env.DATA_DIR = TEST_DATA_DIR; -// Dynamic import required: DATA_DIR must be set before the module's top-level -// DB init runs (same pattern as tests/unit/account-fallback-service.test.ts). +const readCache = await import("../../src/lib/db/readCache.ts"); const catalogCache = await import("../../src/app/api/v1/models/catalogCache.ts"); +function request() { + return new Request("http://localhost/v1/models"); +} + function payload(body: string, status = 200): catalogCache.CatalogPayload { return { body, @@ -20,13 +40,6 @@ function payload(body: string, status = 200): catalogCache.CatalogPayload { }; } -let seq = 0; -/** Unique per call so tests never collide on the shared cache key. */ -function request() { - seq += 1; - return new Request(`http://localhost/v1/models?t=${seq}`); -} - async function resolve(build: (request: Request) => Promise) { return catalogCache.resolveCachedCatalogResponse( request(), @@ -43,52 +56,88 @@ test.after(() => { fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); }); -test("ordinary TTL expiry serves the last success while it is stale and schedules one refresh", async () => { - const initial = await resolve(async () => payload("old")); - assert.equal(await initial.text(), "old"); +test("the SWR window is a bounded constant, not an unbounded accessor", () => { + // #9199 replaced the injectable POSITIVE_INFINITY accessor with this bound so a + // refresh that keeps failing cannot pin an old catalog forever. + assert.equal(catalogCache.CATALOG_STALE_WHILE_REVALIDATE_MS, 30_000); + assert.ok(Number.isFinite(catalogCache.CATALOG_STALE_WHILE_REVALIDATE_MS)); +}); - catalogCache.__expireCatalogCacheForTest(1000); +test("a fresh entry is replayed without running the builder again", async () => { + const first = await resolve(async () => payload("fresh")); + assert.equal(await first.text(), "fresh"); + assert.equal(catalogCache.__getCatalogBuilderRunsForTest(), 1); - // Concurrent stale reads all serve the cached snapshot within the stale window. - const staleResponses = await Promise.all( - Array.from({ length: 5 }, () => resolve(async () => payload("new"))) - ); - assert.deepEqual( - await Promise.all(staleResponses.map((response) => response.text())), - Array(5).fill("old") - ); + const second = await resolve(async () => payload("SHOULD NOT BUILD")); + assert.equal(await second.text(), "fresh"); + assert.equal(catalogCache.__getCatalogBuilderRunsForTest(), 1); +}); + +test("an expired successful entry is served immediately while a refresh runs behind it", async () => { + await resolve(async () => payload("old")); + catalogCache.__expireCatalogCacheForTest(); + + // The stale body comes back on THIS call — the caller never waits for the rebuild. + const stale = await resolve(async () => payload("new")); + assert.equal(await stale.text(), "old", "the expired-but-recent entry must be served as-is"); + + await catalogCache.__flushCatalogBackgroundRefreshForTest(); + + const refreshed = await resolve(async () => payload("SHOULD NOT BUILD")); + assert.equal(await refreshed.text(), "new", "the background refresh must replace the snapshot"); +}); + +test("an entry aged past the SWR window is not served stale", async () => { + await resolve(async () => payload("ancient")); + catalogCache.__expireCatalogCacheForTest(catalogCache.CATALOG_STALE_WHILE_REVALIDATE_MS + 1_000); + + const rebuilt = await resolve(async () => payload("rebuilt")); + assert.equal(await rebuilt.text(), "rebuilt", "past the window the caller must wait for a build"); +}); + +test("a cached non-200 is never replayed as stale", async () => { + // Replaying a cached error as "stale" would mask an intermittent failure behind + // a fake success forever. + catalogCache.__setCatalogCacheEntryForTest(request(), { + body: "boom", + headers: {}, + status: 500, + expiresAt: Date.now() - 1, + }); + + const res = await resolve(async () => payload("recovered")); + assert.equal(res.status, 200); + assert.equal(await res.text(), "recovered"); +}); + +test("concurrent cold requests share a single builder run", async () => { + let release!: () => void; + const gate = new Promise((resolve) => { + release = resolve; + }); + + const build = async () => { + await gate; + return payload("coalesced"); + }; + + const inFlight = [resolve(build), resolve(build), resolve(build)]; + release(); + const bodies = await Promise.all((await Promise.all(inFlight)).map((r) => r.text())); + + assert.deepEqual(bodies, ["coalesced", "coalesced", "coalesced"]); assert.equal( catalogCache.__getCatalogBuilderRunsForTest(), 1, - "stale path must schedule exactly one background refresh" + "identical concurrent requests must coalesce onto one in-flight build (#6408)" ); }); -test("an error payload is returned, cached briefly, but rebuilds once it ages past the stale window", async () => { - const first = await resolve(async () => payload("temporary failure", 503)); - assert.equal(first.status, 503); - assert.equal(await first.text(), "temporary failure"); +test("a state change invalidates the cache so the next read rebuilds", async () => { + await resolve(async () => payload("before")); - // 503 is stored as a fresh entry: a follow-up in TTL serves the same error. - const withinTtl = await resolve(async () => payload("recovered")); - assert.equal(withinTtl.status, 503); - assert.equal(await withinTtl.text(), "temporary failure"); + readCache.invalidateDbCache(); - // Once past the stale-while-revalidate window the entry is dead and the next - // read rebuilds — it is never replayed as "stale". - catalogCache.__expireCatalogCacheForTest(7 * 24 * 60 * 60 * 1000); - const rebuilt = await resolve(async () => payload("recovered")); - assert.equal(rebuilt.status, 200); - assert.equal(await rebuilt.text(), "recovered"); + const after = await resolve(async () => payload("after")); + assert.equal(await after.text(), "after", "a write must be reflected on the very next read"); }); - -test("after the stale window a stale entry is not served; it rebuilds instead", async () => { - const first = await resolve(async () => payload("old")); - assert.equal(await first.text(), "old"); - - // 7 days >> 30s stale window: entry is dead, next read must rebuild. - catalogCache.__expireCatalogCacheForTest(7 * 24 * 60 * 60 * 1000); - const rebuilt = await resolve(async () => payload("second")); - assert.equal(await rebuilt.text(), "second"); - assert.equal(catalogCache.__getCatalogBuilderRunsForTest(), 2); -}); \ No newline at end of file diff --git a/tests/unit/model-deprecation.test.ts b/tests/unit/model-deprecation.test.ts index d498cacc72..7560a6afc2 100644 --- a/tests/unit/model-deprecation.test.ts +++ b/tests/unit/model-deprecation.test.ts @@ -37,9 +37,9 @@ test("resolveModelAlias: resolves deprecated Claude model", () => { assert.equal(resolveModelAlias("claude-3-5-sonnet-latest"), "claude-sonnet-4-20250514"); }); -test("resolveModelAlias: resolves deprecated OpenAI model", () => { - assert.equal(resolveModelAlias("gpt-4-turbo-preview"), "gpt-4-turbo"); - assert.equal(resolveModelAlias("gpt-3.5-turbo-0125"), "gpt-3.5-turbo"); +test("resolveModelAlias: does not silently reroute retired OpenAI models", () => { + assert.equal(resolveModelAlias("gpt-4-turbo-preview"), "gpt-4-turbo-preview"); + assert.equal(resolveModelAlias("gpt-3.5-turbo-0125"), "gpt-3.5-turbo-0125"); }); test("resolveModelAlias: handles null/empty", () => { diff --git a/tests/unit/model-endpoint-policy.test.ts b/tests/unit/model-endpoint-policy.test.ts new file mode 100644 index 0000000000..4f851c9fd8 --- /dev/null +++ b/tests/unit/model-endpoint-policy.test.ts @@ -0,0 +1,77 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +const { filterChatSelectableModels, getModelEndpointDecision, isChatSelectableModel } = + await import("../../open-sse/services/modelEndpointPolicy.ts"); + +test("OpenAI image models are not chat-selectable without upstream endpoint metadata", () => { + for (const modelId of [ + "gpt-image-2", + "gpt-image-1.5", + "gpt-image-1-mini", + "dall-e-3", + "chatgpt-image-latest", + ]) { + assert.deepEqual(getModelEndpointDecision("openai", modelId), { + kind: "image", + chatSelectable: false, + reason: "provider-policy", + }); + } +}); + +test("OpenAI video models are not chat-selectable without upstream endpoint metadata", () => { + assert.deepEqual(getModelEndpointDecision("openai", "sora-2-pro"), { + kind: "video", + chatSelectable: false, + reason: "provider-policy", + }); +}); + +test("provider policy is scoped and does not classify another provider by model name", () => { + assert.equal( + isChatSelectableModel("custom-provider", { id: "gpt-image-shaped-chat-model" }), + true + ); +}); + +test("explicit chat capability wins for a multi-endpoint model", () => { + assert.equal( + isChatSelectableModel("openai", { + id: "gpt-image-shaped-multimodal-model", + supportedEndpoints: ["/v1/images/generations", "/v1/responses"], + }), + true + ); +}); + +test("a synthetic chat default does not override a known OpenAI specialty model", () => { + assert.equal( + isChatSelectableModel("openai", { + id: "sora-2", + supportedEndpoints: ["chat"], + }), + false + ); +}); + +test("explicit non-chat endpoints are excluded even when the model ID is unknown", () => { + assert.equal( + isChatSelectableModel("openai-compatible", { + id: "vendor-specialty-model", + supportedEndpoints: ["videos/generations"], + }), + false + ); +}); + +test("chat import filtering keeps ordinary OpenAI models only", () => { + assert.deepEqual( + filterChatSelectableModels("openai", [ + { id: "gpt-5.6" }, + { id: "gpt-image-2" }, + { id: "sora-2" }, + ]).map((model) => model.id), + ["gpt-5.6"] + ); +}); diff --git a/tests/unit/model-lifecycle-integration.test.ts b/tests/unit/model-lifecycle-integration.test.ts new file mode 100644 index 0000000000..2676e0d880 --- /dev/null +++ b/tests/unit/model-lifecycle-integration.test.ts @@ -0,0 +1,143 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; + +const TEST_DATA_DIR = fs.mkdtempSync(path.join(os.tmpdir(), "omniroute-model-lifecycle-")); +process.env.DATA_DIR = TEST_DATA_DIR; +process.env.API_KEY_SECRET = process.env.API_KEY_SECRET || "model-lifecycle-test-secret"; + +const core = await import("../../src/lib/db/core.ts"); +const providersDb = await import("../../src/lib/db/providers.ts"); +const modelsDb = await import("../../src/lib/db/models.ts"); +const apiKeysDb = await import("../../src/lib/db/apiKeys.ts"); +const v1ModelsCatalog = await import("../../src/app/api/v1/models/catalog.ts"); +const providerModelsRoute = await import("../../src/app/api/providers/[id]/models/route.ts"); +const { handleChatCore } = await import("../../open-sse/handlers/chatCore.ts"); + +const originalFetch = globalThis.fetch; + +async function resetStorage() { + globalThis.fetch = originalFetch; + core.resetDbInstance(); + apiKeysDb.resetApiKeyState(); + fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); + fs.mkdirSync(TEST_DATA_DIR, { recursive: true }); + v1ModelsCatalog.__resetCatalogBuilderRunsForTest(); +} + +async function seedOpenAiConnection() { + return providersDb.createProviderConnection({ + provider: "openai", + authType: "apikey", + name: `openai-${Math.random().toString(16).slice(2, 8)}`, + apiKey: "sk-openai", + isActive: true, + testStatus: "active", + providerSpecificData: {}, + }); +} + +test.beforeEach(async () => { + await resetStorage(); +}); + +test.after(() => { + globalThis.fetch = originalFetch; + core.resetDbInstance(); + apiKeysDb.resetApiKeyState(); + fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); +}); + +test("chatCore rejects a shutdown OpenAI model before an upstream request", async () => { + const originalFetch = globalThis.fetch; + let upstreamCalls = 0; + globalThis.fetch = async () => { + upstreamCalls += 1; + return new Response("unexpected", { status: 200 }); + }; + + try { + const body = { + model: "gpt-5.2-codex", + messages: [{ role: "user", content: "hello" }], + }; + const result = await handleChatCore({ + body: structuredClone(body), + modelInfo: { + provider: "openai", + model: "gpt-5.2-codex", + extendedContext: false, + }, + credentials: { apiKey: "sk-test", providerSpecificData: {} }, + log: { debug() {}, info() {}, warn() {}, error() {} }, + clientRawRequest: { + endpoint: "/v1/chat/completions", + body: structuredClone(body), + headers: new Headers({ accept: "application/json" }), + }, + userAgent: "model-lifecycle-test", + }); + + assert.equal(result.success, false); + assert.equal(result.status, 410); + assert.equal(result.errorCode, "model_shutdown"); + assert.equal(upstreamCalls, 0); + + const responseBody = await result.response.json(); + assert.equal(responseBody.error.code, "model_shutdown"); + assert.match(responseBody.error.message, /openai\/gpt-5\.2-codex/); + assert.match(responseBody.error.message, /openai\/gpt-5\.6-sol/); + } finally { + globalThis.fetch = originalFetch; + } +}); + +test("unified catalog suppresses stale OpenAI chat rows but retains typed media", async () => { + const connection = await seedOpenAiConnection(); + await modelsDb.replaceSyncedAvailableModelsForConnection("openai", connection.id, [ + { id: "gpt-5.2-codex", name: "GPT-5.2 Codex", source: "imported" }, + { id: "gpt-image-2", name: "GPT Image 2", source: "imported" }, + { id: "sora-2-pro", name: "Sora 2 Pro", source: "imported" }, + ]); + await modelsDb.replaceCustomModels("openai", [ + { id: "sora-2", name: "Sora 2", source: "imported" }, + ]); + + const response = await v1ModelsCatalog.getUnifiedModelsResponse( + new Request("http://localhost/api/v1/models") + ); + const body = (await response.json()) as { data: Array<{ id: string; type?: string }> }; + const ids = new Set(body.data.map((item) => item.id)); + + assert.equal(response.status, 200); + assert.equal(ids.has("openai/gpt-5.2-codex"), false); + assert.equal(ids.has("openai/sora-2"), false); + assert.equal(ids.has("openai/sora-2-pro"), false); + assert.equal(ids.has("openai/gpt-5.6-sol"), true); + assert.equal(body.data.find((item) => item.id === "openai/gpt-image-2")?.type, "image"); +}); + +test("chat-only provider catalog excludes OpenAI lifecycle and media models", async () => { + const connection = await seedOpenAiConnection(); + await modelsDb.replaceSyncedAvailableModelsForConnection("openai", connection.id, [ + { id: "gpt-5.6-sol", name: "GPT-5.6 Sol", source: "imported" }, + { id: "gpt-5.2-codex", name: "GPT-5.2 Codex", source: "imported" }, + { id: "gpt-5.3-chat-latest", name: "GPT-5.3 Chat", source: "imported" }, + { id: "gpt-image-2", name: "GPT Image 2", source: "imported" }, + { id: "sora-2-pro", name: "Sora 2 Pro", source: "imported" }, + ]); + + const response = await providerModelsRoute.GET( + new Request(`http://localhost/api/providers/${connection.id}/models?chatOnly=true`), + { params: { id: connection.id } } + ); + const body = (await response.json()) as { models: Array<{ id: string }> }; + + assert.equal(response.status, 200); + assert.deepEqual( + body.models.map((model) => model.id), + ["gpt-5.6-sol"] + ); +}); diff --git a/tests/unit/model-lifecycle.test.ts b/tests/unit/model-lifecycle.test.ts new file mode 100644 index 0000000000..f88a18a1e7 --- /dev/null +++ b/tests/unit/model-lifecycle.test.ts @@ -0,0 +1,81 @@ +import test from "node:test"; +import assert from "node:assert/strict"; + +const { + MODEL_LIFECYCLE_RECORDS, + filterSelectableModels, + formatModelLifecycleMessage, + getModelLifecycleDecision, + isModelSelectable, +} = await import("../../open-sse/services/modelLifecycle.ts"); + +const CURRENT_DATE = new Date("2026-07-26T00:00:00.000Z"); + +test("shutdown OpenAI models are rejected with replacement guidance, not rewritten", () => { + const decision = getModelLifecycleDecision("openai", "gpt-5.2-codex", CURRENT_DATE); + + assert.equal(decision.status, "shutdown"); + assert.equal(decision.action, "reject"); + assert.equal(decision.model, "gpt-5.2-codex"); + assert.deepEqual(decision.replacement, { + provider: "openai", + model: "gpt-5.6-sol", + }); + assert.match(formatModelLifecycleMessage(decision) || "", /cannot be routed automatically/); +}); + +test("upcoming shutdowns warn before the shutdown date", () => { + const decision = getModelLifecycleDecision("openai", "gpt-5.3-chat-latest", CURRENT_DATE); + + assert.equal(decision.status, "deprecated"); + assert.equal(decision.action, "warn"); + assert.equal(decision.shutdownAt, "2026-08-10"); +}); + +test("lifecycle records are provider-scoped", () => { + const decision = getModelLifecycleDecision("opencode-zen", "gpt-5.2-codex", CURRENT_DATE); + + assert.equal(decision.status, "untracked"); + assert.equal(decision.action, "allow"); +}); + +test("catalog filtering hides deprecated and shutdown models by default", () => { + const models = [ + { id: "gpt-5.6-sol", name: "GPT-5.6 Sol" }, + { id: "gpt-5.2-codex", name: "GPT-5.2 Codex" }, + { id: "gpt-5.3-chat-latest", name: "GPT-5.3 Chat" }, + ]; + + assert.deepEqual( + filterSelectableModels("openai", models, { asOf: CURRENT_DATE }).map((model) => model.id), + ["gpt-5.6-sol"] + ); + assert.deepEqual( + filterSelectableModels("opencode-zen", models, { asOf: CURRENT_DATE }).map((model) => model.id), + models.map((model) => model.id) + ); +}); + +test("selectability can include deprecated models without reviving shutdown models", () => { + assert.equal( + isModelSelectable("openai", "gpt-5.3-chat-latest", { + asOf: CURRENT_DATE, + includeDeprecated: true, + }), + true + ); + assert.equal( + isModelSelectable("openai", "gpt-5.2-codex", { + asOf: CURRENT_DATE, + includeDeprecated: true, + }), + false + ); +}); + +test("the conflicted gpt-4-1106-preview date is not guessed", () => { + assert.equal( + MODEL_LIFECYCLE_RECORDS.some((record) => record.model === "gpt-4-1106-preview"), + false + ); +}); diff --git a/tests/unit/model-listing-capability-5420.test.ts b/tests/unit/model-listing-capability-5420.test.ts index 1ac26d7f1d..0c7a6777e6 100644 --- a/tests/unit/model-listing-capability-5420.test.ts +++ b/tests/unit/model-listing-capability-5420.test.ts @@ -30,9 +30,11 @@ describe("providerLacksModelListing (#5420)", () => { assert.equal(providerLacksModelListing("z", ["embedding"]), false); }); - it("keeps Kimi Web visible while marking its model catalog as curated-only", () => { + it("keeps curated web providers visible while disabling remote model import", () => { assert.equal(providerLacksModelListing("kimi-web", ["llm"]), false); + assert.equal(providerLacksModelListing("zai-web", ["llm"]), false); assert.equal(providerUsesCuratedModelsOnly("kimi-web"), true); + assert.equal(providerUsesCuratedModelsOnly("zai-web"), true); assert.equal(providerUsesCuratedModelsOnly("qwen-cloud"), false); assert.equal(providerUsesCuratedModelsOnly("kimi-coding"), false); }); diff --git a/tests/unit/model-test-runner.test.ts b/tests/unit/model-test-runner.test.ts index 79b130d330..7a19e67482 100644 --- a/tests/unit/model-test-runner.test.ts +++ b/tests/unit/model-test-runner.test.ts @@ -2,6 +2,8 @@ import { test } from "node:test"; import assert from "node:assert/strict"; import { createProviderConnection } from "@/lib/db/providers"; import { + classifyModelTestOutput, + createModelTestTimeoutError, parseRetryAfterHeader, detectTestKind, extractProviderErrorMessage, @@ -292,10 +294,29 @@ test("runSingleModelTest preserves slow timeout after chatCore converts AbortErr } }); +test("classifyModelTestOutput never treats partial text from an aborted stream as success", () => { + assert.equal(classifyModelTestOutput(true, "partial", false), "timeout"); + assert.equal(classifyModelTestOutput(false, "complete", false), "ok"); + assert.equal(classifyModelTestOutput(false, "", false), "empty"); + assert.equal(classifyModelTestOutput(false, "", true), "ok"); +}); + +test("createModelTestTimeoutError distinguishes test deadlines from client aborts", () => { + const error = createModelTestTimeoutError(60_000); + + assert.equal(error.name, "TimeoutError"); + assert.equal(error.message, "Model test deadline exceeded after 60000ms"); +}); + test("resolveModelTestTimeoutMs defaults ordinary model checks to 30 seconds", () => { assert.equal(resolveModelTestTimeoutMs("openai", "gpt-4.1"), 30_000); }); +test("resolveModelTestTimeoutMs gives zai-web checks up to 60 seconds", () => { + assert.equal(resolveModelTestTimeoutMs("zai-web", "glm-5.2", 30_000), 60_000); + assert.equal(resolveModelTestTimeoutMs("zai-web", "zai-web/GLM-5V-Turbo", 90_000), 90_000); +}); + // --------------------------------------------------------------------------- // classifyTestErrorQuota — #9511 quota classification for Test All auto-hide. // Distinguishes three outcomes: diff --git a/tests/unit/oauth-modal-grok-cli-browser-login-7013.test.ts b/tests/unit/oauth-modal-grok-cli-browser-login-7013.test.ts index 29066e3b46..825d544f76 100644 --- a/tests/unit/oauth-modal-grok-cli-browser-login-7013.test.ts +++ b/tests/unit/oauth-modal-grok-cli-browser-login-7013.test.ts @@ -27,9 +27,9 @@ test("grok-cli is NOT import-token-only — the Browser Login tab renders", () = assert.ok(!extractSet("IMPORT_TOKEN_ONLY_PROVIDERS").includes("grok-cli")); }); -test("windsurf/devin-cli stay import-token-only (no regression to the Phase-1 hotfix)", () => { +test("devin-desktop/devin-cli stay import-token-only", () => { const set = extractSet("IMPORT_TOKEN_ONLY_PROVIDERS"); - assert.ok(set.includes("windsurf")); + assert.ok(set.includes("devin-desktop")); assert.ok(set.includes("devin-cli")); }); diff --git a/tests/unit/oauth-providers-config.test.ts b/tests/unit/oauth-providers-config.test.ts index f5fffee13a..28f12d542d 100644 --- a/tests/unit/oauth-providers-config.test.ts +++ b/tests/unit/oauth-providers-config.test.ts @@ -2,7 +2,7 @@ import test from "node:test"; import assert from "node:assert/strict"; import * as os from "node:os"; -// Antigravity and Windsurf public defaults come from +// OAuth provider public defaults come from // open-sse/utils/publicCreds.ts — no env override needed in this suite. const originalEnv = { ...process.env }; Object.assign(process.env, { @@ -28,6 +28,7 @@ const { CLINE_CONFIG, CODEX_CONFIG, CODEBUDDY_CN_CONFIG, + DEVIN_DESKTOP_CONFIG, ZED_CONFIG, CURSOR_CONFIG, GHE_COPILOT_CONFIG, @@ -42,7 +43,6 @@ const { QODER_CONFIG, RAYCAST_CONFIG, TRAE_CONFIG, - WINDSURF_CONFIG, XAI_OAUTH_CONFIG, OPENFERENCE_CONFIG, ZED_HOSTED_CONFIG, @@ -69,7 +69,7 @@ const EXPECTED_PROVIDER_KEYS = [ "kilocode", "cline", "clinepass", - "windsurf", + "devin-desktop", "devin-cli", "grok-cli", "xai-oauth", @@ -102,8 +102,8 @@ const EXPECTED_CONFIG_BY_PROVIDER = { kilocode: KILOCODE_CONFIG, cline: CLINE_CONFIG, clinepass: CLINE_CONFIG, // reuses the Cline WorkOS flow (clinepass: cline in providers/index.ts) - windsurf: WINDSURF_CONFIG, - "devin-cli": WINDSURF_CONFIG, + "devin-desktop": DEVIN_DESKTOP_CONFIG, + "devin-cli": DEVIN_DESKTOP_CONFIG, raycast: RAYCAST_CONFIG, trae: TRAE_CONFIG, "grok-cli": GROK_BUILD_OAUTH_CONFIG, @@ -124,7 +124,6 @@ const KIRO_REQUIRED_FIELDS = [ "socialRefreshUrl", "authMethods", ]; - const REQUIRED_FIELDS_BY_PROVIDER = { claude: ["authorizeUrl", "tokenUrl", "redirectUri", "scopes", "clientId"], codex: ["authorizeUrl", "tokenUrl", "scope", "clientId"], @@ -151,8 +150,8 @@ const REQUIRED_FIELDS_BY_PROVIDER = { kilocode: ["apiBaseUrl", "initiateUrl", "pollUrlBase"], cline: ["appBaseUrl", "apiBaseUrl", "authorizeUrl", "tokenExchangeUrl", "refreshUrl"], clinepass: ["appBaseUrl", "apiBaseUrl", "authorizeUrl", "tokenExchangeUrl", "refreshUrl"], - windsurf: ["authorizeUrl", "apiServerUrl", "exchangePath", "inferenceUrl"], - "devin-cli": ["authorizeUrl", "apiServerUrl", "exchangePath", "inferenceUrl"], + "devin-desktop": ["apiServerUrl", "inferenceUrl", "ideName", "defaultVersion"], + "devin-cli": ["apiServerUrl", "inferenceUrl", "ideName", "defaultVersion"], trae: ["apiEndpoint", "chatEndpoint", "webUrl"], // prettier-ignore "xai-oauth": ["authorizeUrl", "tokenUrl", "scope", "codeChallengeMethod", "clientId", "loopbackPort", "callbackPath", "callbackHost"], @@ -465,6 +464,13 @@ test("device and import-token providers expose the flow-specific fields expected assert.equal(CURSOR_CONFIG.dbKeys.machineId, "storage.serviceMachineId"); assert.equal(PROVIDERS.trae.flowType, "import_token"); assert.equal(typeof TRAE_CONFIG.apiEndpoint, "string"); + assert.equal(PROVIDERS["devin-desktop"].flowType, "import_token"); + assert.equal(PROVIDERS["devin-cli"].flowType, "import_token"); + assert.equal(DEVIN_DESKTOP_CONFIG.apiServerUrl, "https://server.codeium.com"); + assert.equal(DEVIN_DESKTOP_CONFIG.inferenceUrl, "https://inference.codeium.com"); + assert.notEqual(DEVIN_DESKTOP_CONFIG.apiServerUrl, DEVIN_DESKTOP_CONFIG.inferenceUrl); + assert.equal("firebaseApiKey" in DEVIN_DESKTOP_CONFIG, false); + assert.equal("firebaseTokenUrl" in DEVIN_DESKTOP_CONFIG, false); assert.ok(Array.isArray(KIRO_CONFIG.authMethods)); assert.ok(KIRO_CONFIG.authMethods.includes("builder-id")); }); diff --git a/tests/unit/oauth-providers-error-handling.test.ts b/tests/unit/oauth-providers-error-handling.test.ts index 50bb3c486c..9840cab315 100644 --- a/tests/unit/oauth-providers-error-handling.test.ts +++ b/tests/unit/oauth-providers-error-handling.test.ts @@ -123,7 +123,7 @@ test("P1: tokenHealthCheck checks copilotTokenExpiresAt before refreshing", asyn assert.match( src, /toLowerCase\(\)\s*===\s*["']github["']|_PROVIDERS\.has\(\s*String\([^)]*\)\s*\.toLowerCase\(\)\s*\)/, - "must be gated on a lowercase-normalized provider check (=== \"github\" literal " + + 'must be gated on a lowercase-normalized provider check (=== "github" literal ' + "or a *_PROVIDERS Set membership test covering github/ghe-copilot)" ); }); @@ -233,22 +233,6 @@ test("P3: refreshClaudeOAuthToken normalizes invalid_grant to unrecoverable_refr ); }); -// ─── P3: Windsurf Firebase errors ──────────────────────────────────────────── - -test("P3: refreshWindsurfToken parses Firebase USER_DISABLED/TOKEN_EXPIRED errors", async () => { - // refreshWindsurfToken lives in its own co-located provider module since the - // tokenRefresh.ts provider-extraction (#7338, redone on tip). - const src = await read("open-sse/services/tokenRefresh/providers/windsurf.ts"); - const fnMatch = src.match(/export\s+async\s+function\s+refreshWindsurfToken\([\s\S]+?\n\}/); - assert.ok(fnMatch, "refreshWindsurfToken function body not found"); - assert.match( - fnMatch[0], - /USER_DISABLED|TOKEN_EXPIRED|INVALID_REFRESH_TOKEN/, - "must detect Firebase error codes" - ); - assert.match(fnMatch[0], /unrecoverable_refresh_error/, "must return unrecoverable sentinel"); -}); - // ─── isUnrecoverableRefreshError consistency ────────────────────────────────── // isUnrecoverableRefreshError moved to tokenRefresh/shared.ts in the god-file diff --git a/tests/unit/oauth-test-config-8408.test.ts b/tests/unit/oauth-test-config-8408.test.ts index 5ec04f1c94..1d5daed274 100644 --- a/tests/unit/oauth-test-config-8408.test.ts +++ b/tests/unit/oauth-test-config-8408.test.ts @@ -4,19 +4,13 @@ import assert from "node:assert/strict"; import { OAUTH_PROVIDERS } from "../../src/shared/constants/providers/oauth.ts"; import { OAUTH_TEST_CONFIG } from "../../src/app/api/providers/[id]/test/oauthTestConfig.ts"; -// NOT a design decision — this is a grandfathered backlog. These six ids are simply the +// NOT a design decision — this is a grandfathered backlog. These four ids are simply the // providers that still lack an OAUTH_TEST_CONFIG entry today, captured so this guard can be // enforced from now on without a big-bang change. Each one is a candidate for the same // treatment devin-cli and agy get here; removing an id from this list is the fix, not a // regression. Do not add new ids to it — a provider added without a test config should fail // this test at the time it is added, which is the entire point. -const GRANDFATHERED_WITHOUT_TEST_CONFIG = new Set([ - "qoder", - "zed", - "zed-hosted", - "trae", - "windsurf", -]); +const GRANDFATHERED_WITHOUT_TEST_CONFIG = new Set(["qoder", "zed", "zed-hosted", "trae"]); test("#8408: devin-cli and agy are present in OAUTH_TEST_CONFIG", () => { assert.ok( @@ -29,6 +23,12 @@ test("#8408: devin-cli and agy are present in OAUTH_TEST_CONFIG", () => { ); }); +test("devin-desktop connection test is import-only and not refreshable (#8228)", () => { + const config = (OAUTH_TEST_CONFIG as Record)["devin-desktop"]; + assert.ok(config, "devin-desktop must have an OAuth test config"); + assert.equal(config.refreshable, false); +}); + test("#8408: every OAuth provider ID has an OAUTH_TEST_CONFIG entry (or is grandfathered)", () => { const providerIds = Object.keys(OAUTH_PROVIDERS); const testConfigKeys = new Set(Object.keys(OAUTH_TEST_CONFIG)); diff --git a/tests/unit/passthrough-provider-aliases.test.ts b/tests/unit/passthrough-provider-aliases.test.ts new file mode 100644 index 0000000000..7ea409663e --- /dev/null +++ b/tests/unit/passthrough-provider-aliases.test.ts @@ -0,0 +1,15 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +const { isValidModel } = await import("../../src/shared/constants/models.ts"); + +test("passthrough providers accept live model ids through both provider id and alias", () => { + for (const [id, alias] of [ + ["zylo-api", "zylo"], + ["llm-kiwi", "llmkiwi"], + ["freetheai", "fta"], + ] as const) { + assert.equal(isValidModel(id, "future/live-catalog-model"), true); + assert.equal(isValidModel(alias, "future/live-catalog-model"), true); + } +}); diff --git a/tests/unit/production-build-module-integrity.test.ts b/tests/unit/production-build-module-integrity.test.ts new file mode 100644 index 0000000000..d2ad8f478c --- /dev/null +++ b/tests/unit/production-build-module-integrity.test.ts @@ -0,0 +1,142 @@ +/** + * Regression guard for the broken Turbopack production build on release/v3.8.50. + * + * Six independent module-level defects, each from a different PR, made `npm run build` + * fail. Most are *link-time* errors, so those cases are expressed as "this module must be + * importable / statically resolvable" rather than as behavioral assertions: + * + * 1. src/shared/components/modelSelectModalHelpers.ts — a lost `}` (#9011) left + * `export const PROVIDER_TEST_CHUNK_SIZE` inside a function body. + * 2. open-sse/handlers/videoGeneration.ts — `handleFalVideoGeneration` imported + * twice from two different modules (#9982 landed on top of #9969). + * 3. src/app/api/v1/models/catalog.ts — re-exported three SWR symbols that #9199 + * deliberately removed from ./catalogCache when it replaced #8728's injectable + * policy with a fixed 30 s bound. The consumer was never updated. + * 4. src/app/api/v1/models/catalogCache.ts — the same PR left two dangling statements + * referencing undeclared `inFlight` / `promise`, so every stale-while-revalidate + * read threw a ReferenceError at RUNTIME (this one the build never caught). + * 5. open-sse/executors/tinycmsSigner.ts — generated wasm-bindgen glue kept a + * `new URL('wasm_signer_bg.wasm', import.meta.url)` default that no file backs. + * 6. src/app/api/providers/[id]/models/conolDiscovery.ts — imported + * `getProviderOutboundGuard` from ./outboundUrlGuard, which does not export it (#8974). + */ +import test from "node:test"; +import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import path from "node:path"; + +const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); + +test("modelSelectModalHelpers exports survive isProviderModelHidden (#9011 missing brace)", async () => { + const helpers = await import("@/shared/components/modelSelectModalHelpers"); + + // The missing `}` swallowed everything after isProviderModelHidden into its body, + // so this constant stopped being a module-level export. + assert.equal(helpers.PROVIDER_TEST_CHUNK_SIZE, 3); + + const hidden = helpers.parseHiddenModelsByProvider({ openai: ["gpt-4o"] }); + assert.equal(helpers.isProviderModelHidden(hidden, "openai", "gpt-4o"), true); + assert.equal(helpers.isProviderModelHidden(hidden, "openai", "gpt-4o-mini"), false); + assert.equal(helpers.isProviderModelHidden(hidden, "anthropic", "gpt-4o"), false); +}); + +test("videoGeneration handler links with a single handleFalVideoGeneration binding (#9982)", async () => { + // A duplicate import binding is an ESM early SyntaxError, so the import itself is + // the assertion. The Fal video path must resolve to the provider-neutral module + // that #9982 added (it also covers the #9969 Grok Imagine routing). + const mod = await import("@omniroute/open-sse/handlers/videoGeneration.ts"); + assert.equal(typeof mod.handleVideoGeneration, "function"); + + const source = readFileSync(path.join(repoRoot, "open-sse/handlers/videoGeneration.ts"), "utf8"); + const falImports = source.match(/import \{ handleFalVideoGeneration \}/g) ?? []; + assert.equal(falImports.length, 1, "handleFalVideoGeneration must be imported exactly once"); + assert.match(source, /handleFalVideoGeneration \} from "\.\/mediaGeneration\/fal\.ts"/); +}); + +test("catalog.ts re-exports only what catalogCache actually exports (#9199)", async () => { + // #9199 deliberately replaced #8728's injectable SWR policy with a fixed bound, but + // left catalog.ts re-exporting the three removed symbols. Re-exporting a binding the + // source module does not export is a link-time error, so this import IS the assertion. + const catalog = await import("@/app/api/v1/models/catalog"); + const catalogCache = await import("@/app/api/v1/models/catalogCache"); + + assert.equal(catalogCache.CATALOG_STALE_WHILE_REVALIDATE_MS, 30_000); + assert.equal(catalog.CATALOG_STALE_WHILE_REVALIDATE_MS, 30_000); + + // The accessor/policy trio must stay gone — re-adding it would resurrect the + // unbounded window #9199 removed (a failing refresh could pin an old catalog forever). + for (const removed of [ + "getCatalogStaleWhileRevalidateMs", + "__setCatalogStaleWhileRevalidateAccessorForTest", + "__setCatalogStaleWhileRevalidateMsForTest", + ]) { + assert.equal( + (catalogCache as Record)[removed], + undefined, + `${removed} was removed by #9199 and must not come back` + ); + } +}); + +test("the stale-while-revalidate path does not throw a ReferenceError (#9199 merge residue)", async () => { + // The mangled merge left `inFlight = { … promise }` referencing two undeclared + // identifiers inside scheduleBackgroundRefresh, so EVERY stale read crashed at runtime. + const catalogCache = await import("@/app/api/v1/models/catalogCache"); + catalogCache.__resetCatalogBuilderRunsForTest(); + + const payload = (body: string) => ({ + body, + headers: { "content-type": "application/json" }, + status: 200, + cacheTTL: 60_000, + }); + const call = (body: string) => + catalogCache.resolveCachedCatalogResponse( + new Request("http://localhost/v1/models"), + { corsHeaders: {}, diagnosticHeaders: {} }, + async () => payload(body) + ); + + await call("first"); + catalogCache.__expireCatalogCacheForTest(); + + const stale = await call("second"); + assert.equal(await stale.text(), "first", "the stale body must be served, not a crash"); + await catalogCache.__flushCatalogBackgroundRefreshForTest(); +}); + +test("conolDiscovery resolves getProviderOutboundGuard from the policy module (#8974)", async () => { + // outboundUrlGuard.ts does NOT export getProviderOutboundGuard — importing it from + // there is a link-time error, so the import below is the assertion. + const mod = await import("@/app/api/providers/[id]/models/conolDiscovery"); + assert.equal(typeof mod.maybeHandleConolModelDiscovery, "function"); + + // The fix must stay on the consumer side. outboundUrlGuard.ts is loaded by the packaged + // CLI, where no tsconfig resolves `@/*`, so re-exporting the policy helpers from it + // (they pull in featureFlags → the DB layer) would break `omniroute setup-opencode` + // (#7682). Guard that nobody "fixes" this by adding the re-export instead. + const guardSource = readFileSync( + path.join(repoRoot, "src/shared/network/outboundUrlGuard.ts"), + "utf8" + ); + assert.doesNotMatch( + guardSource, + /^\s*(import|export)[^\n]*from\s+["']@\//m, + "outboundUrlGuard.ts must stay free of @/-aliased imports/re-exports (#7682)" + ); +}); + +test("tinycmsSigner has no build-time-resolvable wasm sidecar URL (#8736/#10087)", () => { + const source = readFileSync(path.join(repoRoot, "open-sse/executors/tinycmsSigner.ts"), "utf8"); + + // The wasm binary ships inlined as WASM_BASE64; there is no wasm_signer_bg.wasm file. + // Turbopack statically resolves `new URL(, import.meta.url)`, so leaving the + // generated default in place fails `next build` with "Module not found". + assert.ok(source.includes("const WASM_BASE64 ="), "wasm binary must stay inlined"); + assert.doesNotMatch( + source, + /new URL\(\s*['"]wasm_signer_bg\.wasm['"]/, + "generated wasm-bindgen sidecar URL must not survive — Turbopack resolves it at build time" + ); +}); diff --git a/tests/unit/provider-icon-devin-desktop.test.ts b/tests/unit/provider-icon-devin-desktop.test.ts new file mode 100644 index 0000000000..a428f8b1f7 --- /dev/null +++ b/tests/unit/provider-icon-devin-desktop.test.ts @@ -0,0 +1,19 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { readFile } from "node:fs/promises"; + +const [providerIconSource, lobeProviderIconsSource] = await Promise.all([ + readFile(new URL("../../src/shared/components/ProviderIcon.tsx", import.meta.url), "utf8"), + readFile(new URL("../../src/shared/components/lobeProviderIcons.ts", import.meta.url), "utf8"), +]); + +test("devin-desktop skips the nonexistent local SVG on first render", () => { + const knownSvgs = providerIconSource.match(/const KNOWN_SVGS = new Set\(\[([\s\S]*?)\]\);/); + assert.ok(knownSvgs, "expected ProviderIcon KNOWN_SVGS declaration"); + assert.doesNotMatch(knownSvgs[1], /["']devin-desktop["']/); +}); + +test("devin-desktop resolves to the existing Devin lobe icon", () => { + assert.match(lobeProviderIconsSource, /["']devin-desktop["']:\s*["']Devin["']/); + assert.doesNotMatch(lobeProviderIconsSource, /["']devin-desktop["']:\s*["']Windsurf["']/); +}); diff --git a/tests/unit/provider-onboarding-wizard.test.ts b/tests/unit/provider-onboarding-wizard.test.ts index 688b738022..b3a7d4292c 100644 --- a/tests/unit/provider-onboarding-wizard.test.ts +++ b/tests/unit/provider-onboarding-wizard.test.ts @@ -19,6 +19,7 @@ test("provider onboarding catalog exposes API-key and OAuth providers for the wi assert.ok(oauthOptions.some((option) => option.id === "amazon-q")); assert.ok(oauthOptions.some((option) => option.id === "cursor")); assert.ok(!oauthOptions.some((option) => option.id === "zed")); + assert.ok(!oauthOptions.some((option) => option.id === "devin-desktop")); assert.ok(!oauthOptions.some((option) => option.id === "windsurf")); assert.ok(!oauthOptions.some((option) => option.id === "devin-cli")); assert.ok(!oauthOptions.some((option) => option.id === "qoder")); diff --git a/tests/unit/provider-tinycms-web.test.ts b/tests/unit/provider-tinycms-web.test.ts index 0731d742db..48c34614ef 100644 --- a/tests/unit/provider-tinycms-web.test.ts +++ b/tests/unit/provider-tinycms-web.test.ts @@ -17,10 +17,7 @@ import assert from "node:assert/strict"; import { WEB_COOKIE_PROVIDERS } from "../../src/shared/constants/providers/web-cookie.ts"; import { REGISTRY } from "../../open-sse/config/providers/index.ts"; import { getExecutor, TinyCmsExecutor } from "../../open-sse/executors/index.ts"; -import { - setupDomMocks, - type DomMockRestore, -} from "../../open-sse/executors/tinycmsSigner.ts"; +import { setupDomMocks, type DomMockRestore } from "../../open-sse/executors/tinycmsSigner.ts"; // tinycmsSigner.ts intentionally does NOT install its window/document/canvas // shims as a module-load side effect (see setupDomMocks() there) — doing so @@ -41,9 +38,10 @@ after(() => { // ── Catalog / WEB_COOKIE_PROVIDERS ──────────────────────────────────────────── test("tinycms-web is present in WEB_COOKIE_PROVIDERS", () => { - const p = (WEB_COOKIE_PROVIDERS as Record)[ - "tinycms-web" - ] as Record; + const p = (WEB_COOKIE_PROVIDERS as Record)["tinycms-web"] as Record< + string, + unknown + >; assert.ok(p, "WEB_COOKIE_PROVIDERS['tinycms-web'] must exist"); assert.equal(p.id, "tinycms-web"); assert.equal(p.alias, "tcw"); @@ -51,9 +49,10 @@ test("tinycms-web is present in WEB_COOKIE_PROVIDERS", () => { }); test("tinycms-web WEB_COOKIE_PROVIDERS entry is marked as free-tier", () => { - const p = (WEB_COOKIE_PROVIDERS as Record)[ - "tinycms-web" - ] as Record; + const p = (WEB_COOKIE_PROVIDERS as Record)["tinycms-web"] as Record< + string, + unknown + >; assert.equal(p.hasFree, true); assert.ok(typeof p.freeNote === "string" && (p.freeNote as string).length > 0); assert.ok(typeof p.authHint === "string" && (p.authHint as string).length > 0); @@ -79,10 +78,7 @@ test("tinycms-web registry has all expected models", () => { assert.ok(ids.includes("gpt-5-free"), "gpt-5-free must be registered"); assert.ok(ids.includes("gpt-5.3-free"), "gpt-5.3-free must be registered"); - assert.ok( - ids.includes("gpt-5.3-thinking-free"), - "gpt-5.3-thinking-free must be registered" - ); + assert.ok(ids.includes("gpt-5.3-thinking-free"), "gpt-5.3-thinking-free must be registered"); assert.ok(ids.includes("deepseek-v4-flash"), "deepseek-v4-flash must be registered"); assert.ok(ids.includes("claude-sonnet-5"), "claude-sonnet-5 must be registered"); assert.ok(ids.includes("gemini-3.5-flash"), "gemini-3.5-flash must be registered"); @@ -140,10 +136,7 @@ test("TinyCmsExecutor returns 401 when UUID is missing", async () => { assert.equal(result.response.status, 401); const body = await result.response.json(); const errMsg = body?.error?.message || ""; - assert.ok( - errMsg.includes("Invalid or missing device UUID"), - "error must mention missing UUID" - ); + assert.ok(errMsg.includes("Invalid or missing device UUID"), "error must mention missing UUID"); // Hard Rule #12: must NOT leak stack traces assert.ok(!errMsg.includes("at /"), "error must not contain a stack trace path"); }); @@ -161,21 +154,60 @@ test("TinyCmsExecutor returns 401 when UUID does not start with 'R'", async () = assert.equal(result.response.status, 401); const body = await result.response.json(); const errMsg = body?.error?.message || ""; - assert.ok( - errMsg.includes("Invalid or missing device UUID"), - "error must mention missing UUID" - ); + assert.ok(errMsg.includes("Invalid or missing device UUID"), "error must mention missing UUID"); assert.ok(!errMsg.includes("at /"), "error must not contain a stack trace path"); }); +test("TinyCmsExecutor returns the standard executor response envelope on success", async () => { + const originalFetch = globalThis.fetch; + globalThis.fetch = async (input) => { + const url = String(input); + if (new URL(url).hostname === "api64.ipify.org") { + return new Response(JSON.stringify({ ip: "127.0.0.1" }), { + headers: { "Content-Type": "application/json" }, + }); + } + if (url.includes("/api/challenge")) { + return new Response( + JSON.stringify({ + challenge: "test", + challengeId: "challenge-id", + expiresAt: Date.now() + 60_000, + version: "1", + difficulty: 0, + }), + { headers: { "Content-Type": "application/json" } } + ); + } + return new Response("upstream body", { + status: 200, + headers: { "X-TinyCMS-Test": "yes" }, + }); + }; + + try { + const requestBody = { messages: [{ role: "user", content: "hi" }] }; + const result = await new TinyCmsExecutor().execute({ + model: "gpt-5-free", + body: requestBody, + stream: false, + credentials: { apiKey: "Rtest-device" }, + }); + + assert.ok(!(result instanceof Response), "TinyCMS must preserve executor metadata"); + assert.equal(result.response.status, 200); + assert.equal(result.headers?.["x-tinycms-test"], "yes"); + assert.deepEqual(result.transformedBody, requestBody); + } finally { + globalThis.fetch = originalFetch; + } +}); + // ── WASM initialization ─────────────────────────────────────────────────────── test("initTinyCmsWasm module exports expected functions", async () => { const signer = await import("../../open-sse/executors/tinycmsSigner.ts"); - assert.ok( - typeof signer.initTinyCmsWasm === "function", - "must export initTinyCmsWasm function" - ); + assert.ok(typeof signer.initTinyCmsWasm === "function", "must export initTinyCmsWasm function"); assert.ok( typeof signer.generateSecurePayload === "function", "must export generateSecurePayload function" @@ -209,10 +241,7 @@ test("TinyCmsExecutor sanitizes errors (no stack traces in error response)", asy assert.ok(result.response, "response must be present"); const body = await result.response.json(); const errMsg = body?.error?.message || ""; - assert.ok( - errMsg.includes("Invalid or missing device UUID"), - "error must mention missing UUID" - ); + assert.ok(errMsg.includes("Invalid or missing device UUID"), "error must mention missing UUID"); assert.ok(!errMsg.includes("at /"), "error must not contain a stack trace path (Hard Rule #12)"); }); @@ -229,12 +258,6 @@ test("tinycms-web credential requirement is kind: token with app-config-uuid", a assert.equal(req.credentialName, "app-config-uuid"); assert.equal(req.acceptsFullCookieHeader, false); assert.ok(Array.isArray(req.storageKeys), "must have storageKeys array"); - assert.ok( - (req.storageKeys as string[]).includes("apiKey"), - "apiKey must be in storageKeys" - ); - assert.ok( - (req.storageKeys as string[]).includes("uuid"), - "uuid must be in storageKeys" - ); + assert.ok((req.storageKeys as string[]).includes("apiKey"), "apiKey must be in storageKeys"); + assert.ok((req.storageKeys as string[]).includes("uuid"), "uuid must be in storageKeys"); }); diff --git a/tests/unit/publicCreds.test.ts b/tests/unit/publicCreds.test.ts index 422e285eeb..681711b60b 100644 --- a/tests/unit/publicCreds.test.ts +++ b/tests/unit/publicCreds.test.ts @@ -1,7 +1,7 @@ /** * Covers the public credentials helper (XOR mask wrapper) used to embed - * Gemini / Antigravity OAuth client_id/secret and Windsurf Firebase Web API - * key without tripping pattern-based secret scanners. + * public OAuth client_id/secret values without tripping pattern-based secret + * scanners. * * Tests validate the *shape* of the resolved values instead of the literal * plaintext, so this file itself never embeds known secret patterns. Use the @@ -46,11 +46,6 @@ test("resolvePublicCred('antigravity_alt') returns a GOCSPX-style client secret" assert.ok(v.startsWith("G" + "OCSPX-")); }); -test("resolvePublicCred('windsurf_fb') returns an AIza-style Google API key", () => { - const v = resolvePublicCred("windsurf_fb"); - assert.match(v, /^A[I]za[A-Za-z0-9_-]{20,}$/); -}); - // Gap-fix (#7013): grok_id already backs GROK_CLI_CONFIG/GROK_BUILD_OAUTH_CONFIG/ // XAI_OAUTH_CONFIG's clientId in production, but had no shape assertion here. test("resolvePublicCred('grok_id') returns a UUID-shaped xAI OAuth client id", () => { @@ -93,11 +88,11 @@ test("resolvePublicCred prefers env override over embedded default", () => { const ENV_NAME = "OMNIROUTE_TEST_PUBLIC_CRED_OVERRIDE"; const original = process.env[ENV_NAME]; try { - process.env[ENV_NAME] = FAKE_AIZA; - assert.equal(resolvePublicCred("windsurf_fb", ENV_NAME), FAKE_AIZA); + process.env[ENV_NAME] = FAKE_GOCSPX; + assert.equal(resolvePublicCred("gemini_alt", ENV_NAME), FAKE_GOCSPX); process.env[ENV_NAME] = ""; - assert.notEqual(resolvePublicCred("windsurf_fb", ENV_NAME), ""); - assert.match(resolvePublicCred("windsurf_fb", ENV_NAME), /^A[I]za/); + assert.notEqual(resolvePublicCred("gemini_alt", ENV_NAME), ""); + assert.match(resolvePublicCred("gemini_alt", ENV_NAME), /^GOCSPX-/); } finally { if (original === undefined) delete process.env[ENV_NAME]; else process.env[ENV_NAME] = original; diff --git a/tests/unit/quality-rail-gate-membership.test.ts b/tests/unit/quality-rail-gate-membership.test.ts index 7ebde99616..e3e66603c0 100644 --- a/tests/unit/quality-rail-gate-membership.test.ts +++ b/tests/unit/quality-rail-gate-membership.test.ts @@ -55,6 +55,7 @@ test("fast-gates carries the deterministic ratchets and security scanners from t "secrets vuln-ratchet workflows openapi-breaking", "typecheck:core", "check:dashboard-typecheck", + "check:ts7-diagnostics-ratchet", ]) { assert.ok(block.includes(needle), `fast-gates must contain "${needle}"`); } @@ -87,6 +88,20 @@ test("the complexity ratchet stays on the release rail (G0's written validation ); }); +test("the TS7 shadow and zero-new-diagnostics ratchet use one pinned compiler and core scope", () => { + const block = jobBlock("fast-gates"); + assert.match(block, /typescript@7\.0\.2/, "TS7 diagnostics must use the reviewed compiler"); + assert.match( + block, + /TS7_BASE_REF:\s*\$\{\{ github\.event\.pull_request\.base\.sha \}\}/, + "the ratchet must compare against the exact pull-request base commit" + ); + assert.ok( + block.includes("tsconfig.typecheck-core.json"), + "the advisory shadow must use the same core scope as the blocking ratchet" + ); +}); + test("the new gates run on jobs that stay pinned to hosted runners", () => { // Complements tests/unit/vps-runner-variable-scope.test.ts: neither gate job // may pick up a USE_VPS_RUNNER switch (setup-node measured 20m06s on .113 vs 16s hosted). diff --git a/tests/unit/quota-exclusive-catalog-short-circuit.test.ts b/tests/unit/quota-exclusive-catalog-short-circuit.test.ts index f6b786d643..a20cb9ee60 100644 --- a/tests/unit/quota-exclusive-catalog-short-circuit.test.ts +++ b/tests/unit/quota-exclusive-catalog-short-circuit.test.ts @@ -134,8 +134,11 @@ await test("chave quota-exclusive não constrói o catálogo completo", async (t process.env.EXPOSE_CC_DISCOVERY_ALIASES = "1"; // A chave do cache é `prefix|isCodex|apiKey|configuredOnly` — um query param // qualquer NÃO a invalida, então a resposta do subteste anterior seria servida. - v1ModelsCatalog.__setCatalogStaleWhileRevalidateMsForTest(0); - v1ModelsCatalog.__expireCatalogCacheForTest(1); + // #9199 removed the injectable SWR window; age the entry past the fixed + // 30 s constant instead so the next read rebuilds rather than serving stale. + v1ModelsCatalog.__expireCatalogCacheForTest( + v1ModelsCatalog.CATALOG_STALE_WHILE_REVALIDATE_MS + 1_000 + ); try { const res = await v1ModelsCatalog.getUnifiedModelsResponse( new Request("http://localhost/api/v1/models", { @@ -151,9 +154,6 @@ await test("chave quota-exclusive não constrói o catálogo completo", async (t `ids=${JSON.stringify(body.data.map((m) => m.id).slice(0, 6))}` ); } finally { - v1ModelsCatalog.__setCatalogStaleWhileRevalidateMsForTest( - v1ModelsCatalog.CATALOG_STALE_WHILE_REVALIDATE_MS - ); if (prev === undefined) delete process.env.EXPOSE_CC_DISCOVERY_ALIASES; else process.env.EXPOSE_CC_DISCOVERY_ALIASES = prev; } diff --git a/tests/unit/ratelimit-admission-control-6593.test.ts b/tests/unit/ratelimit-admission-control-6593.test.ts index 521d6c6561..80d3af4007 100644 --- a/tests/unit/ratelimit-admission-control-6593.test.ts +++ b/tests/unit/ratelimit-admission-control-6593.test.ts @@ -175,7 +175,7 @@ test("#6593 withRateLimit: default maxQueueDepth=0 preserves unbounded-queue beh assert.deepEqual(results, ["job1", "job2", "job3", "job4"]); }); -// --- Default maxWaitMs lowered 120000 -> 15000 ---------------------------- +// --- Default maxWaitMs ---------------------------------------------------- test("#6593 DEFAULT_REQUEST_QUEUE_MAX_WAIT_MS is 15s absent RATE_LIMIT_MAX_WAIT_MS", () => { assert.equal(process.env.RATE_LIMIT_MAX_WAIT_MS, undefined); @@ -183,6 +183,12 @@ test("#6593 DEFAULT_REQUEST_QUEUE_MAX_WAIT_MS is 15s absent RATE_LIMIT_MAX_WAIT_ assert.equal(resilienceSettings.DEFAULT_RESILIENCE_SETTINGS.requestQueue.maxWaitMs, 15000); }); +test("#6593 zai-web receives a provider-scoped 60s scheduling budget", () => { + assert.equal(rateLimitManager.resolveRequestQueueMaxWaitMs("openai", 15_000), 15_000); + assert.equal(rateLimitManager.resolveRequestQueueMaxWaitMs("zai-web", 15_000), 60_000); + assert.equal(rateLimitManager.resolveRequestQueueMaxWaitMs("ZAI-WEB", 90_000), 90_000); +}); + test("#6593 DEFAULT_REQUEST_QUEUE_MAX_DEPTH defaults to 0 (disabled) absent an env override", () => { assert.equal(process.env.RATE_LIMIT_MAX_QUEUE_DEPTH, undefined); assert.equal(resilienceSettings.DEFAULT_REQUEST_QUEUE_MAX_DEPTH, 0); diff --git a/tests/unit/security-alerts-0812.test.ts b/tests/unit/security-alerts-0812.test.ts new file mode 100644 index 0000000000..79d66fd3c5 --- /dev/null +++ b/tests/unit/security-alerts-0812.test.ts @@ -0,0 +1,57 @@ +import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; +import { join } from "node:path"; +import test from "node:test"; + +const REPO_ROOT = join(import.meta.dirname, "..", ".."); + +/** + * Regression guards for the CodeQL alerts triaged on 2026-08-12. + * + * Both are source-level invariants rather than behavioral round-trips: the functions they + * protect are module-private (`decodeXmlText`) or only reachable through a live upstream + * handshake (`tinycms` nonce), so the guard asserts the property on the source itself. + */ + +test("decodeXmlText decodes & last so encoded entities do not double-unescape", () => { + const source = readFileSync( + join(REPO_ROOT, "open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/environment.ts"), + "utf8" + ); + const body = /function decodeXmlText\(value: string\): string \{([\s\S]*?)\n\}/.exec(source)?.[1]; + assert.ok(body, "decodeXmlText not found — update this guard if the helper was renamed"); + + const order = [...body.matchAll(/replaceAll\("(&[^"]+;)"/g)].map((match) => match[1]); + assert.ok(order.length >= 2, `expected several entity replacements, got ${order.length}`); + assert.equal( + order.at(-1), + "&", + `"&" must be the LAST entity decoded, otherwise "&quot;" decodes to '"' instead ` + + `of the literal """. Current order: ${order.join(" -> ")}` + ); + + // Mirror the implementation to document the property the ordering buys us. + const decode = (value: string) => + order.reduce((acc, entity) => { + const plain = { "<": "<", ">": ">", """: '"', "'": "'", "&": "&" }[entity]; + return plain === undefined ? acc : acc.replaceAll(entity, plain); + }, value); + assert.equal(decode("&quot;"), """); + assert.equal(decode("&#39;"), "'"); + assert.equal(decode("&lt;"), "<"); +}); + +test("tinycms signs its anti-replay nonce with a CSPRNG, never Math.random", () => { + const source = readFileSync(join(REPO_ROOT, "open-sse/executors/tinycms.ts"), "utf8"); + + assert.match( + source, + /const nonceJs = randomUUID\(\)/, + "the tinycms nonce must come from node:crypto randomUUID" + ); + assert.doesNotMatch( + source, + /Math\.random\(\)/, + "Math.random() is not a CSPRNG — the nonce is signed into the anti-replay payload" + ); +}); diff --git a/tests/unit/service-token-refresh.test.ts b/tests/unit/service-token-refresh.test.ts index 939928b615..d60e1898ad 100644 --- a/tests/unit/service-token-refresh.test.ts +++ b/tests/unit/service-token-refresh.test.ts @@ -53,7 +53,9 @@ describe("tokenRefresh helpers", () => { assert.equal(mod.supportsTokenRefresh("github"), true); assert.equal(mod.supportsTokenRefresh("kiro"), true); assert.equal(mod.supportsTokenRefresh("cline"), true); - assert.equal(mod.supportsTokenRefresh("windsurf"), true); + assert.equal(mod.supportsTokenRefresh("devin-desktop"), false); + assert.equal(mod.supportsTokenRefresh("devin-cli"), false); + assert.equal(mod.supportsTokenRefresh("windsurf"), false); }); it("returns false for unknown providers without refreshUrl/tokenUrl", () => { diff --git a/tests/unit/sidebar-visibility.test.ts b/tests/unit/sidebar-visibility.test.ts index 61e5b01f8e..49332f9568 100644 --- a/tests/unit/sidebar-visibility.test.ts +++ b/tests/unit/sidebar-visibility.test.ts @@ -65,6 +65,7 @@ test("primary sidebar items place limits after cache", () => { "cli-agents", "acp-agents", "cloud-agents", + "conductor", "agent-bridge", "traffic-inspector", "discovery", diff --git a/tests/unit/sse-error-passthrough-3324.test.ts b/tests/unit/sse-error-passthrough-3324.test.ts index 7ba2cac0f2..4dbaa3cc21 100644 --- a/tests/unit/sse-error-passthrough-3324.test.ts +++ b/tests/unit/sse-error-passthrough-3324.test.ts @@ -130,35 +130,30 @@ test("parseSSEToOpenAIResponse still returns null for an error-only SSE (boundar assert.equal(parseSSEToOpenAIResponse(rawSSE, "fallback-model"), null); }); -// ─── PART 1: windsurf instruction text references the IDE command-palette flow ─ +// ─── PART 1: Devin Desktop instruction text is version-honest ───────────────── -test("PART 1: windsurf authHint references the `Windsurf: Provide Auth Token` command", () => { +test("PART 1: Devin Desktop authHint describes importing an existing key", () => { const here = path.dirname(fileURLToPath(import.meta.url)); - // After the providers.ts oauth-constants split, the windsurf authHint moved to + // After the providers.ts oauth-constants split, the Devin Desktop authHint moved to // src/shared/constants/providers/oauth.ts. const providers = readFileSync( path.join(here, "../../src/shared/constants/providers/oauth.ts"), "utf8" ); - // The windsurf authHint must lead with the IDE command-palette flow. - assert.match( - providers, - /Windsurf: Provide Auth Token/, - "providers.ts windsurf authHint should reference the `Windsurf: Provide Auth Token` command" - ); + assert.match(providers, /Paste an existing Devin API key/); + assert.match(providers, /vary by Devin version and account/); + assert.doesNotMatch(providers, /Devin: Copy API Key to Clipboard/); }); -test("PART 1: oauth route 410 errors reference the IDE command-palette flow", () => { +test("PART 1: oauth route 410 errors avoid promising a universal copy command", () => { const here = path.dirname(fileURLToPath(import.meta.url)); const route = readFileSync( path.join(here, "../../src/app/api/oauth/[provider]/[action]/route.ts"), "utf8" ); - assert.match( - route, - /Windsurf: Provide Auth Token/, - "oauth route should direct users to the `Windsurf: Provide Auth Token` command" - ); + assert.match(route, /Paste an existing Devin API key/); + assert.match(route, /vary by Devin version and account/); + assert.doesNotMatch(route, /Devin: Copy API Key to Clipboard/); }); diff --git a/tests/unit/stream-handler-deadline.test.ts b/tests/unit/stream-handler-deadline.test.ts new file mode 100644 index 0000000000..354ff3f806 --- /dev/null +++ b/tests/unit/stream-handler-deadline.test.ts @@ -0,0 +1,30 @@ +import test from "node:test"; +import assert from "node:assert/strict"; + +import { createStreamController } from "../../open-sse/utils/streamHandler.ts"; + +test("createStreamController records deadline abort signals as 504 errors, not 499 disconnects", async () => { + const clientAbortController = new AbortController(); + let disconnectEvent = null; + let errorEvent = null; + const controller = createStreamController({ + clientAbortSignal: clientAbortController.signal, + onDisconnect(event) { + disconnectEvent = event; + }, + onError(event) { + errorEvent = event; + return true; + }, + }); + const timeoutError = new Error("Model test deadline exceeded after 60000ms"); + timeoutError.name = "TimeoutError"; + + clientAbortController.abort(timeoutError); + await Promise.resolve(); + + assert.equal(disconnectEvent, null); + assert.equal(errorEvent?.statusCode, 504); + assert.equal(errorEvent?.message, "Model test deadline exceeded after 60000ms"); + assert.equal(controller.signal.aborted, true); +}); diff --git a/tests/unit/t30-kiro-400-model-unavailable.test.ts b/tests/unit/t30-kiro-400-model-unavailable.test.ts index e59cde1035..75af66344b 100644 --- a/tests/unit/t30-kiro-400-model-unavailable.test.ts +++ b/tests/unit/t30-kiro-400-model-unavailable.test.ts @@ -7,7 +7,8 @@ const { isModelUnavailableError, getNextFamilyFallback } = test("T30: Kiro 'improperly formed request' 400 is treated as model-unavailable", () => { const unavailable = isModelUnavailableError( 400, - "Bad Request: improperly formed request for selected model" + "Bad Request: improperly formed request for selected model", + "kiro" ); assert.equal(unavailable, true); }); @@ -30,10 +31,12 @@ test("T30: a missing Files API resource does not trigger model-family fallback", assert.equal(unavailable, false); }); -test("T30: model family helper returns a sibling candidate when available", () => { - const next = getNextFamilyFallback("gemini-3.1-pro-high", new Set(["gemini-3.1-pro-high"])); - assert.equal(typeof next, "string"); - assert.notEqual(next, "gemini-3.1-pro-high"); +test("T30: bare model IDs require an explicit provider scope", () => { + assert.equal(getNextFamilyFallback("claude-opus-5", new Set(["claude-opus-5"])), null); + assert.equal( + getNextFamilyFallback("claude-opus-5", new Set(["claude-opus-5"]), "anthropic"), + "claude-opus-4.8" + ); }); test('T30: Kiro exact "Invalid model. Please select a different model to continue." 400 is treated as model-unavailable', () => { @@ -43,3 +46,25 @@ test('T30: Kiro exact "Invalid model. Please select a different model to continu ); assert.equal(unavailable, true); }); + +test("T30: Kiro-only malformed-request signal is not global", () => { + assert.equal( + isModelUnavailableError( + 400, + "Bad Request: improperly formed request for selected model", + "anthropic" + ), + false + ); +}); + +test("T30: capability errors do not trigger model substitution", () => { + assert.equal( + isModelUnavailableError(400, "This model does not support tool calling", "anthropic"), + false + ); +}); + +test("T30: retired OpenAI GPT chains are not fallback policies", () => { + assert.equal(getNextFamilyFallback("gpt-5.1", new Set(["gpt-5.1"]), "openai"), null); +}); diff --git a/tests/unit/tinycms-secure-nonce-randomness.test.ts b/tests/unit/tinycms-secure-nonce-randomness.test.ts new file mode 100644 index 0000000000..ebc30cb13a --- /dev/null +++ b/tests/unit/tinycms-secure-nonce-randomness.test.ts @@ -0,0 +1,142 @@ +/** + * CodeQL alert 806 — js/insecure-randomness (HIGH) on + * `open-sse/executors/tinycms.ts`. + * + * The TinyCMS executor derives `x-secure-nonce` / `x-session-id` from a nonce + * that is fed into the upstream request signature (`generateSecurePayload`). + * That is a security context, so the nonce must never fall back to + * `Math.random()` — a predictable nonce lets an observer replay or forge a + * signed request. + * + * The regression guard runs the executor with a `globalThis.crypto` that has no + * `randomUUID` (the exact condition that used to select the `Math.random()` + * fallback) and asserts the emitted nonce is still a cryptographically strong + * UUID. + */ +import test, { before, after } from "node:test"; +import assert from "node:assert/strict"; + +import { TinyCmsExecutor } from "../../open-sse/executors/index.ts"; +import { setupDomMocks, type DomMockRestore } from "../../open-sse/executors/tinycmsSigner.ts"; + +let restoreDomMocks: DomMockRestore; + +before(() => { + restoreDomMocks = setupDomMocks(); +}); + +after(() => { + restoreDomMocks(); +}); + +const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; + +test("TinyCMS nonce stays cryptographically strong when globalThis.crypto has no randomUUID", async () => { + const originalFetch = globalThis.fetch; + const originalCryptoDescriptor = Object.getOwnPropertyDescriptor(globalThis, "crypto")!; + const realCrypto = globalThis.crypto; + + // Keep every other WebCrypto capability, drop only `randomUUID`. This is the + // branch that previously fell back to `Math.random()`. + Object.defineProperty(globalThis, "crypto", { + configurable: true, + value: { + getRandomValues: (array: ArrayBufferView) => realCrypto.getRandomValues(array as never), + subtle: realCrypto.subtle, + }, + }); + + const seenHeaders: Record[] = []; + + globalThis.fetch = (async (input: unknown, init?: RequestInit) => { + const url = String(input); + if (new URL(url).hostname === "api64.ipify.org") { + return new Response(JSON.stringify({ ip: "127.0.0.1" }), { + headers: { "Content-Type": "application/json" }, + }); + } + if (new URL(url).pathname === "/api/challenge") { + return new Response( + JSON.stringify({ + challenge: "test", + challengeId: "challenge-id", + expiresAt: Date.now() + 60_000, + version: "1", + difficulty: 0, + }), + { headers: { "Content-Type": "application/json" } } + ); + } + seenHeaders.push((init?.headers ?? {}) as Record); + return new Response("upstream body", { status: 200 }); + }) as typeof fetch; + + try { + await new TinyCmsExecutor().execute({ + model: "gpt-5-free", + body: { messages: [{ role: "user", content: "hi" }] }, + stream: false, + credentials: { apiKey: "Rtest-device" }, + }); + + assert.equal(seenHeaders.length, 1, "the executor must reach the chat endpoint exactly once"); + const headers = seenHeaders[0]!; + assert.match( + headers["x-secure-nonce"] ?? "", + UUID_RE, + "x-secure-nonce must be a crypto-strong UUID, never a Math.random() fallback" + ); + assert.match( + headers["x-session-id"] ?? "", + UUID_RE, + "x-session-id must be a crypto-strong UUID, never a Math.random() fallback" + ); + } finally { + globalThis.fetch = originalFetch; + Object.defineProperty(globalThis, "crypto", originalCryptoDescriptor); + } +}); + +test("consecutive TinyCMS nonces are unique", async () => { + const originalFetch = globalThis.fetch; + const nonces: string[] = []; + + globalThis.fetch = (async (input: unknown, init?: RequestInit) => { + const url = String(input); + if (new URL(url).hostname === "api64.ipify.org") { + return new Response(JSON.stringify({ ip: "127.0.0.1" }), { + headers: { "Content-Type": "application/json" }, + }); + } + if (new URL(url).pathname === "/api/challenge") { + return new Response( + JSON.stringify({ + challenge: "test", + challengeId: "challenge-id", + expiresAt: Date.now() + 60_000, + version: "1", + difficulty: 0, + }), + { headers: { "Content-Type": "application/json" } } + ); + } + nonces.push(((init?.headers ?? {}) as Record)["x-secure-nonce"] ?? ""); + return new Response("upstream body", { status: 200 }); + }) as typeof fetch; + + try { + const executor = new TinyCmsExecutor(); + for (let i = 0; i < 3; i += 1) { + await executor.execute({ + model: "gpt-5-free", + body: { messages: [{ role: "user", content: "hi" }] }, + stream: false, + credentials: { apiKey: "Rtest-device" }, + }); + } + assert.equal(nonces.length, 3); + assert.equal(new Set(nonces).size, 3, "each request must carry a distinct nonce"); + } finally { + globalThis.fetch = originalFetch; + } +}); diff --git a/tests/unit/token-health-check-devin-cli-8407.test.ts b/tests/unit/token-health-check-devin-cli-8407.test.ts index 9812b21615..312b61df65 100644 --- a/tests/unit/token-health-check-devin-cli-8407.test.ts +++ b/tests/unit/token-health-check-devin-cli-8407.test.ts @@ -1,5 +1,6 @@ -// #8407: devin-cli must not be treated as refresh-capable, so the health sweep -// never force-expires local CLI connections that legitimately have no refresh token. +// Devin CLI and Devin Desktop use CLI-owned/import-only credentials. Neither provider +// should be treated as refresh-capable, so the health sweep must not force-expire +// connections that legitimately have no refresh token. import test from "node:test"; import assert from "node:assert/strict"; import fs from "node:fs"; @@ -34,16 +35,17 @@ test.after(async () => { fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); }); -test("supportsTokenRefresh excludes devin-cli (#8407)", () => { - // Root fix: drop "devin-cli" from the explicit set so the health sweep's - // supportsTokenRefresh=false guard applies (same idea as not listing a - // non-refresh local-CLI provider). windsurf stays refresh-capable. +test("supportsTokenRefresh excludes import-only Devin providers", () => { assert.equal( supportsTokenRefresh("devin-cli"), false, "devin-cli is local import-token / CLI-owned — not refresh-capable" ); - assert.equal(supportsTokenRefresh("windsurf"), true); + assert.equal( + supportsTokenRefresh("devin-desktop"), + false, + "devin-desktop accepts an imported API key — not a refreshable OAuth token" + ); }); test("checkConnection leaves a devin-cli connection with no refresh token untouched (#8407)", async () => { @@ -63,5 +65,35 @@ test("checkConnection leaves a devin-cli connection with no refresh token untouc const updated = await providersDb.getProviderConnectionById(getCreatedConnectionId(connection)); assert.equal(updated?.testStatus, "active", "devin-cli testStatus must remain active"); - assert.notEqual(updated?.errorCode, "no_refresh_token", "devin-cli must not be marked no_refresh_token"); + assert.notEqual( + updated?.errorCode, + "no_refresh_token", + "devin-cli must not be marked no_refresh_token" + ); +}); + +test("checkConnection leaves an import-only devin-desktop connection active (#8228)", async () => { + await resetStorage(); + + const connection = await providersDb.createProviderConnection({ + provider: "devin-desktop", + authType: "oauth", + name: "Devin Desktop Imported Account", + accessToken: "imported-desktop-access-token", + refreshToken: null, + tokenExpiresAt: null, + apiKey: null, + testStatus: "active", + isActive: true, + }); + + await tokenHealthCheck.checkConnection(connection); + + const updated = await providersDb.getProviderConnectionById(getCreatedConnectionId(connection)); + assert.equal(updated?.testStatus, "active", "devin-desktop testStatus must remain active"); + assert.notEqual( + updated?.errorCode, + "no_refresh_token", + "import-only devin-desktop must not be marked no_refresh_token" + ); }); diff --git a/tests/unit/tokenExtractionConfig.test.ts b/tests/unit/tokenExtractionConfig.test.ts index 2119084165..76333c459f 100644 --- a/tests/unit/tokenExtractionConfig.test.ts +++ b/tests/unit/tokenExtractionConfig.test.ts @@ -106,6 +106,12 @@ describe("tokenExtractionConfig", () => { assert.doesNotMatch(cfg?.instructions || "", /RPSCAuth/i); }); + it("extracts zai-web auth from localStorage rather than a cookie", () => { + const cfg = getExtractionConfig("zai-web"); + assert.deepEqual(cfg?.tokenSources, [{ type: "localStorage", key: "token" }]); + assert.match(cfg?.instructions ?? "", /CAPTCHA/); + }); + it("listExtractionConfigs returns all configs as an array", () => { const all = listExtractionConfigs(); assert.ok(Array.isArray(all)); diff --git a/tests/unit/ui/kimiSponsorBanner.test.tsx b/tests/unit/ui/kimiSponsorBanner.test.tsx index ab70935753..91a5f77e4a 100644 --- a/tests/unit/ui/kimiSponsorBanner.test.tsx +++ b/tests/unit/ui/kimiSponsorBanner.test.tsx @@ -10,8 +10,9 @@ import { act } from "react"; import { createRoot } from "react-dom/client"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -const STORAGE_KEY = "omniroute-kimi-sponsor-banner-dismissed-v1"; -const KIMI_CODING_AFF_URL = "https://www.kimi.com/code?aff=omniroute"; +const STORAGE_KEY = "omniroute-kimi-sponsor-banner-dismissed-v2"; +const LEGACY_V1_STORAGE_KEY = "omniroute-kimi-sponsor-banner-dismissed-v1"; +const KIMI_PLATFORM_AFF_URL = "https://platform.kimi.ai?aff=omniroute"; vi.mock("next-intl", () => ({ useTranslations: () => (k: string) => k })); vi.mock("@/shared/components/ProviderIcon", () => ({ default: () => null })); @@ -21,9 +22,8 @@ async function renderBanner(version: string): Promise { vi.doMock("@/shared/constants/appConfig", () => ({ APP_CONFIG: { name: "OmniRoute", description: "AI Gateway", version }, })); - const { default: KimiSponsorBanner } = await import( - "../../../src/app/(dashboard)/dashboard/KimiSponsorBanner" - ); + const { default: KimiSponsorBanner } = + await import("../../../src/app/(dashboard)/dashboard/KimiSponsorBanner"); const container = document.createElement("div"); document.body.appendChild(container); @@ -48,13 +48,13 @@ describe("KimiSponsorBanner", () => { vi.doUnmock("@/shared/constants/appConfig"); }); - it("renders with the CTA pointing at the Kimi Coding aff link inside the version window", async () => { + it("renders with the CTA pointing at the Kimi API Platform aff link inside the version window", async () => { const container = await renderBanner("3.8.49"); - expect(container.textContent).toContain("title"); + expect(container.textContent).toContain("foundingFriendTitle"); expect(container.textContent).toContain("cta"); const link = container.querySelector("a[href]"); expect(link).not.toBeNull(); - expect(link?.getAttribute("href")).toBe(KIMI_CODING_AFF_URL); + expect(link?.getAttribute("href")).toBe(KIMI_PLATFORM_AFF_URL); expect(link?.getAttribute("target")).toBe("_blank"); expect(link?.getAttribute("rel")).toContain("noopener"); }); @@ -98,4 +98,13 @@ describe("KimiSponsorBanner", () => { const container = await renderBanner("3.8.49"); expect(container.querySelector("[role='complementary']")).toBeNull(); }); + + it("re-shows the retargeted banner to users who dismissed the v1 (Get Kimi Code) version", async () => { + // 2026-08 CTA retarget (coding plan -> API platform) bumped the dismissal + // key to -v2 so the whole install base gets one fresh impression. + localStorage.setItem(LEGACY_V1_STORAGE_KEY, "true"); + const container = await renderBanner("3.8.50"); + expect(container.querySelector("[role='complementary']")).not.toBeNull(); + localStorage.removeItem(LEGACY_V1_STORAGE_KEY); + }); }); diff --git a/tests/unit/web-cookie-validation-proxy-7058.test.ts b/tests/unit/web-cookie-validation-proxy-7058.test.ts index 9c573020bc..d63bbfaf97 100644 --- a/tests/unit/web-cookie-validation-proxy-7058.test.ts +++ b/tests/unit/web-cookie-validation-proxy-7058.test.ts @@ -42,10 +42,17 @@ test.after(() => { }); test("zai-web cookie validation routes through the configured HTTP_PROXY (#7058)", async () => { - assert.ok(zaiWebEntry, "zai-web must have a providerRegistry entry for this test to be meaningful"); + assert.ok( + zaiWebEntry, + "zai-web must have a providerRegistry entry for this test to be meaningful" + ); // Stand-in for chat.z.ai's /models probe target. - const target = http.createServer((_req, res) => { + let targetPath = ""; + let targetAuthorization = ""; + const target = http.createServer((req, res) => { + targetPath = req.url ?? ""; + targetAuthorization = req.headers.authorization ?? ""; res.writeHead(200, { "content-type": "application/json" }); res.end("{}"); }); @@ -90,6 +97,8 @@ test("zai-web cookie validation routes through the configured HTTP_PROXY (#7058) "(bypassProxyPatch:true unconditionally uses the native, unpatched fetch)" ); assert.equal(result.valid, true, `expected a valid session, got ${JSON.stringify(result)}`); + assert.equal(targetPath, "/api/models"); + assert.equal(targetAuthorization, "Bearer fake"); } finally { target.close(); proxy.close(); diff --git a/tests/unit/web-session-credentials.test.ts b/tests/unit/web-session-credentials.test.ts index f6dc1ba019..04035c459f 100644 --- a/tests/unit/web-session-credentials.test.ts +++ b/tests/unit/web-session-credentials.test.ts @@ -42,6 +42,18 @@ test("web session credential metadata identifies cookie, token, and no-auth prov acceptsFullCookieHeader: false, storageKeys: ["token", "userToken"], }); + { + const req = webSessionCredentials.getWebSessionCredentialRequirement("zai-web"); + assert.ok(req && req.kind === "token"); + assert.equal(req.credentialName, 'Local Storage value named "token"'); + assert.equal(req.acceptsFullCookieHeader, false); + assert.deepEqual(req.storageKeys, ["token"]); + assert.equal(req.hintKey, "zaiWebCredentialHint"); + assert.ok(req.hintFallback?.includes("Do not copy a Cookie header")); + assert.equal(req.guideSteps?.length, 4); + assert.ok(req.guideSteps?.some((step) => step.includes("Local Storage"))); + assert.ok(req.guideSteps?.some((step) => step.includes("browser transport"))); + } // Arena (lmarena): assert contract/intent only — do not freeze UX copy. // #3810 chunk name, #4271 split SSR cookies, full Cookie header paste. { diff --git a/tests/unit/windsurf-devin-executors.test.ts b/tests/unit/windsurf-devin-executors.test.ts index 9d89c45679..fd27062aa8 100644 --- a/tests/unit/windsurf-devin-executors.test.ts +++ b/tests/unit/windsurf-devin-executors.test.ts @@ -1,208 +1,48 @@ import { test, describe } from "node:test"; import assert from "node:assert/strict"; -// ─── Model alias resolution (windsurf) ─────────────────────────────────────── -// We exercise the alias map indirectly through the exported class because -// resolveWsModelId is not exported. WindsurfExecutor.buildRequest() calls it. +// ─── Devin Desktop raw model IDs ──────────────────────────────────────────── -describe("Windsurf MODEL_ALIAS_MAP", () => { - const ALIAS_CASES: [string, string][] = [ - // SWE dot→dash conversions - ["swe-1.6-fast", "swe-1-6-fast"], - ["swe-1.6", "swe-1-6"], - ["swe-1.5", "swe-1p5"], - ["swe-1.5-fast", "swe-1p5"], - // GPT-5.5 default effort - ["gpt-5.5", "gpt-5-5-medium"], - // GPT-5.4 default effort - ["gpt-5.4", "gpt-5-4-medium"], - // GPT-5.3-codex default - ["gpt-5.3-codex", "gpt-5-3-codex-medium"], - // Claude aliases - ["claude-sonnet-4.6", "claude-sonnet-4-6"], - ["claude-opus-4.7-max", "claude-opus-4-7-max"], - // Gemini aliases - ["gemini-2.5-pro", "MODEL_GOOGLE_GEMINI_2_5_PRO"], - ]; +import { getExecutor } from "../../open-sse/executors/index.ts"; - const PASSTHROUGH_CASES = [ - "gpt-5", - "gpt-5-codex", - "grok-code-fast-1", - "deepseek-v4", - "some-unknown-model", - // These aliases were removed from MODEL_ALIAS_MAP in v3.8.x — pass through unchanged: - "claude-3.7-sonnet-thinking", - "gemini-3.0-pro", - "kimi-k2", - ]; - - // Load the alias map from the module source — we parse it at test time to - // avoid importing the full executor (which would require provider registry). - let aliasMap: Record; - - test("setup: parse MODEL_ALIAS_MAP from executor source", async () => { - const fs = await import("node:fs/promises"); - const src = await fs.readFile( - new URL("../../open-sse/executors/windsurf.ts", import.meta.url), - "utf8" - ); - const match = src.match(/const MODEL_ALIAS_MAP[^=]*=\s*(\{[\s\S]*?\n\})/); - assert.ok(match, "MODEL_ALIAS_MAP block should be found in source"); - // Safe eval via Function constructor replacement — build a JS object literal - const objSrc = match[1] - .replace(/\/\/[^\n]*/g, "") // strip line comments - .trim(); - // Parse using JSON after stripping trailing commas (simple approach) - const jsonLike = objSrc - .replace(/,\s*([\]}])/g, "$1") // trailing commas - .replace(/'/g, '"'); // single → double quotes - aliasMap = JSON.parse(jsonLike); - assert.ok(typeof aliasMap === "object"); - }); - - for (const [input, expected] of ALIAS_CASES) { - test(`alias: "${input}" → "${expected}"`, () => { - const result = aliasMap[input] ?? input; - assert.equal(result, expected); - }); - } - - for (const model of PASSTHROUGH_CASES) { - test(`passthrough: "${model}" has no alias (returns itself)`, () => { - const result = aliasMap[model] ?? model; - assert.equal(result, model); - }); - } -}); - -// ─── openAIMessagesToWs message conversion ──────────────────────────────────── -// Tests the message role/content extraction logic. Since the function is not -// exported, we test via a re-implementation that mirrors the source exactly. - -function openAIMessagesToWsLocal( - messages: Array<{ role?: string; content?: unknown; tool_call_id?: string }> -): Array<{ role: string; content: string; toolCallId?: string }> { - const out: Array<{ role: string; content: string; toolCallId?: string }> = []; - for (const m of messages) { - const role = String(m.role || "user"); - let content = ""; - if (typeof m.content === "string") { - content = m.content; - } else if (Array.isArray(m.content)) { - for (const part of m.content) { - if (part && typeof part === "object" && (part as Record).type === "text") { - content += String((part as Record).text || ""); - } - } +function containsBytes(haystack: Uint8Array, needle: Uint8Array): boolean { + outer: for (let i = 0; i <= haystack.length - needle.length; i++) { + for (let j = 0; j < needle.length; j++) { + if (haystack[i + j] !== needle[j]) continue outer; } - out.push({ role, content, toolCallId: m.tool_call_id }); + return true; } - return out; + return false; } -describe("openAIMessagesToWs", () => { - test("string content is passed through", () => { - const result = openAIMessagesToWsLocal([{ role: "user", content: "Hello" }]); - assert.equal(result[0].content, "Hello"); - assert.equal(result[0].role, "user"); - }); +test("Devin Desktop sends the curated raw model id without alias rewriting", async () => { + const executor = getExecutor("devin-desktop"); + const originalFetch = globalThis.fetch; + let requestBody: Uint8Array | null = null; + globalThis.fetch = async (url, init) => { + if (String(url).endsWith("/exa.auth_pb.AuthService/GetUserJwt")) { + const jwt = new TextEncoder().encode("test-jwt"); + return new Response(new Uint8Array([0x0a, jwt.length, ...jwt])); + } + requestBody = new Uint8Array(init?.body as ArrayBuffer); + return new Response("expected test stop", { status: 418 }); + }; - test("multi-part array content: only text parts are concatenated", () => { - const result = openAIMessagesToWsLocal([ - { - role: "user", - content: [ - { type: "text", text: "Part A " }, - { type: "image_url", url: "https://example.com/img.png" }, - { type: "text", text: "Part B" }, - ], - }, - ]); - assert.equal(result[0].content, "Part A Part B"); - }); + try { + const model = "gpt-5-6-sol-high"; + const result = await executor.execute({ + model, + body: { messages: [{ role: "user", content: "hello" }] }, + stream: true, + credentials: { accessToken: "test-devin-desktop-token" }, + }); - test("missing role defaults to 'user'", () => { - const result = openAIMessagesToWsLocal([{ content: "Hi" }]); - assert.equal(result[0].role, "user"); - }); - - test("tool_call_id is mapped to toolCallId", () => { - const result = openAIMessagesToWsLocal([ - { role: "tool", content: "result", tool_call_id: "call_abc" }, - ]); - assert.equal(result[0].toolCallId, "call_abc"); - }); - - test("null/undefined content yields empty string", () => { - const result = openAIMessagesToWsLocal([{ role: "assistant", content: undefined }]); - assert.equal(result[0].content, ""); - }); -}); - -// ─── gRPC-web frame parser (Windsurf) ──────────────────────────────────────── - -function* parseGrpcWebFramesLocal( - buf: Uint8Array -): Generator<{ flag: number; payload: Uint8Array }> { - let offset = 0; - while (offset + 5 <= buf.length) { - const flag = buf[offset]; - const len = - (buf[offset + 1] << 24) | (buf[offset + 2] << 16) | (buf[offset + 3] << 8) | buf[offset + 4]; - offset += 5; - if (len < 0 || offset + len > buf.length) break; - yield { flag, payload: buf.slice(offset, offset + len) }; - offset += len; + assert.equal(result.response.status, 418); + assert.ok(requestBody); + assert.equal(containsBytes(requestBody, new TextEncoder().encode(model)), true); + } finally { + globalThis.fetch = originalFetch; } -} - -describe("parseGrpcWebFrames", () => { - function makeFrame(flag: number, payload: Uint8Array): Uint8Array { - const header = new Uint8Array(5); - header[0] = flag; - const len = payload.length; - header[1] = (len >>> 24) & 0xff; - header[2] = (len >>> 16) & 0xff; - header[3] = (len >>> 8) & 0xff; - header[4] = len & 0xff; - const frame = new Uint8Array(5 + payload.length); - frame.set(header); - frame.set(payload, 5); - return frame; - } - - test("parses a single data frame (flag=0x00)", () => { - const payload = new TextEncoder().encode("hello"); - const buf = makeFrame(0x00, payload); - const frames = [...parseGrpcWebFramesLocal(buf)]; - assert.equal(frames.length, 1); - assert.equal(frames[0].flag, 0x00); - assert.deepEqual(frames[0].payload, payload); - }); - - test("parses multiple frames in sequence", () => { - const p1 = new TextEncoder().encode("frame1"); - const p2 = new TextEncoder().encode("frame2"); - const buf = new Uint8Array([...makeFrame(0x00, p1), ...makeFrame(0x80, p2)]); - const frames = [...parseGrpcWebFramesLocal(buf)]; - assert.equal(frames.length, 2); - assert.equal(frames[0].flag, 0x00); - assert.equal(frames[1].flag, 0x80); - }); - - test("returns empty for truncated frame header", () => { - const buf = new Uint8Array([0x00, 0x00]); // only 2 bytes, needs 5 - const frames = [...parseGrpcWebFramesLocal(buf)]; - assert.equal(frames.length, 0); - }); - - test("stops if payload length exceeds buffer", () => { - // Frame claims 100 bytes of payload but buf only has 10 - const buf = new Uint8Array([0x00, 0x00, 0x00, 0x00, 100, 0, 1, 2, 3, 4]); - const frames = [...parseGrpcWebFramesLocal(buf)]; - assert.equal(frames.length, 0); - }); }); // ─── Devin CLI binary resolution ───────────────────────────────────────────── @@ -235,24 +75,30 @@ describe("DevinCli binary resolution", () => { }); }); -// ─── Phase 1 hotfix: windsurf/devin-cli import-token flow ──────────────────── +// ─── Devin Desktop / CLI import-token flow ─────────────────────────────────── import { generateAuthData, getProvider } from "@/lib/oauth/providers"; -test("windsurf provider: flowType is import_token (PKCE disabled post-rebrand)", () => { - const provider = getProvider("windsurf"); +test("devin-desktop provider: flowType is import_token", () => { + const provider = getProvider("devin-desktop"); assert.equal(provider.flowType, "import_token"); }); -test("devin-cli provider: flowType is import_token (shares windsurf config)", () => { +test("devin-cli provider: flowType is import_token (shares Devin token config)", () => { const provider = getProvider("devin-cli"); assert.equal(provider.flowType, "import_token"); }); -test("windsurf provider: generateAuthData returns no authUrl (PKCE flow disabled)", () => { - const data = generateAuthData("windsurf", "http://localhost:0/auth/callback"); +test("legacy windsurf provider is no longer public", () => { + assert.throws(() => getProvider("windsurf"), /Unknown provider/i); +}); + +test("devin-desktop provider: generateAuthData returns no authUrl", () => { + const data = generateAuthData("devin-desktop", "http://localhost:0/auth/callback"); assert.equal(data.authUrl, undefined); assert.equal(data.supported, false); - assert.match(data.error ?? "", /import-token|disabled|app\.devin\.ai/i); + assert.match(data.error ?? "", /import-token|disabled/i); + assert.match(data.error ?? "", /vary by Devin version and account/i); + assert.doesNotMatch(data.error ?? "", /Copy API Key to Clipboard/i); }); test("devin-cli provider: generateAuthData returns no authUrl", () => { @@ -264,15 +110,17 @@ test("devin-cli provider: generateAuthData returns no authUrl", () => { // ─── Phase 1 hotfix: retired PKCE actions return 410 Gone ──────────────────── import { GET as oauthGet, POST as oauthPost } from "@/app/api/oauth/[provider]/[action]/route"; -test("OAuth route: GET windsurf/start-callback-server returns 410 Gone", async () => { - const url = "http://localhost:20128/api/oauth/windsurf/start-callback-server"; +test("OAuth route: GET devin-desktop/start-callback-server returns Devin guidance", async () => { + const url = "http://localhost:20128/api/oauth/devin-desktop/start-callback-server"; const request = new Request(url, { method: "GET" }); const response = await oauthGet(request, { - params: Promise.resolve({ provider: "windsurf", action: "start-callback-server" }), + params: Promise.resolve({ provider: "devin-desktop", action: "start-callback-server" }), } as never); assert.equal(response.status, 410); const body = await response.json(); - assert.match(body.error, /import-token|disabled|410|show-auth-token/i); + assert.match(body.error, /Paste an existing Devin API key/); + assert.match(body.error, /vary by Devin version and account/); + assert.doesNotMatch(body.error, /Devin: Copy API Key to Clipboard/); }); test("OAuth route: GET devin-cli/authorize returns 410 Gone", async () => { @@ -286,24 +134,24 @@ test("OAuth route: GET devin-cli/authorize returns 410 Gone", async () => { assert.match(body.error, /import-token|disabled|410|show-auth-token/i); }); -test("OAuth route: GET windsurf/poll-callback returns 410 Gone", async () => { - const url = "http://localhost:20128/api/oauth/windsurf/poll-callback"; +test("OAuth route: GET devin-desktop/poll-callback returns 410 Gone", async () => { + const url = "http://localhost:20128/api/oauth/devin-desktop/poll-callback"; const request = new Request(url, { method: "GET" }); const response = await oauthGet(request, { - params: Promise.resolve({ provider: "windsurf", action: "poll-callback" }), + params: Promise.resolve({ provider: "devin-desktop", action: "poll-callback" }), } as never); assert.equal(response.status, 410); }); -test("OAuth route: POST windsurf/poll-callback returns 410 Gone", async () => { - const url = "http://localhost:20128/api/oauth/windsurf/poll-callback"; +test("OAuth route: POST devin-desktop/poll-callback returns 410 Gone", async () => { + const url = "http://localhost:20128/api/oauth/devin-desktop/poll-callback"; const request = new Request(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({}), }); const response = await oauthPost(request, { - params: Promise.resolve({ provider: "windsurf", action: "poll-callback" }), + params: Promise.resolve({ provider: "devin-desktop", action: "poll-callback" }), } as never); assert.equal(response.status, 410); }); @@ -322,8 +170,8 @@ test("OAuth route: GET codex/authorize is NOT retired (regression check)", async // bind layer when the route called `mapTokens({ accessToken })`: the object // got stored as accessToken and SQLite rejected it with // "SQLite3 can only bind numbers, strings, bigints, buffers, and null". -test("windsurf mapTokens: accepts object {accessToken} and returns string accessToken", () => { - const provider = getProvider("windsurf"); +test("devin-desktop mapTokens: accepts object {accessToken} and returns string accessToken", () => { + const provider = getProvider("devin-desktop"); const mapped = provider.mapTokens({ accessToken: "sk-ws-test-token-1234567890" }); assert.equal(typeof mapped.accessToken, "string"); assert.equal(mapped.accessToken, "sk-ws-test-token-1234567890"); diff --git a/tests/unit/zai-web-chat-endpoint-8014-probe.test.ts b/tests/unit/zai-web-chat-endpoint-8014-probe.test.ts index 82394c4e46..926697d31e 100644 --- a/tests/unit/zai-web-chat-endpoint-8014-probe.test.ts +++ b/tests/unit/zai-web-chat-endpoint-8014-probe.test.ts @@ -3,14 +3,38 @@ import assert from "node:assert/strict"; const mod = await import("../../open-sse/executors/zai-web.ts"); -test("#8014 RED: ZaiWebExecutor must POST to the current chat.z.ai v2 chat-completions endpoint, not the stale unversioned path", async () => { +const STALE_URL = "https://chat.z.ai/api/chat/completions"; +const TEST_TOKEN = "e30.eyJpZCI6InVzZXItMTIzIn0.sig"; + +/** + * #8014 guard: the executor must target the versioned v2 completions endpoint, + * never the stale unversioned `/api/chat/completions` path, which 404s + * model-independently as of 2026-07. + * + * Setup notes for this flow (the executor now creates a remote chat first and + * signs the completion request): + * - a `captcha_verify_param` is required to take the direct HTTP path; without + * one the executor routes through the browser transport and never calls + * fetch at all, so the probe would capture nothing. + * - the completion URL carries the signature payload as a query string, so the + * assertion matches on pathname rather than the whole URL. + */ +test("#8014: ZaiWebExecutor must POST to the current chat.z.ai v2 chat-completions endpoint, not the stale unversioned path", async () => { const originalFetch = globalThis.fetch; - let capturedUrl = ""; + const requested: string[] = []; + globalThis.fetch = (async (url: string) => { - capturedUrl = String(url); - if (capturedUrl === "https://chat.z.ai/api/chat/completions") { + const target = String(url); + requested.push(target); + + if (target === STALE_URL) { return new Response(JSON.stringify({ detail: "Not Found" }), { status: 404 }); } + if (target.startsWith("https://chat.z.ai/api/v1/chats/new")) { + return new Response(JSON.stringify({ id: "chat-1" }), { + headers: { "Content-Type": "application/json" }, + }); + } return new Response("data: [DONE]\n\n", { headers: { "Content-Type": "text/event-stream" }, }); @@ -22,15 +46,34 @@ test("#8014 RED: ZaiWebExecutor must POST to the current chat.z.ai v2 chat-compl model: "glm-4.6", body: { messages: [{ role: "user", content: "hello" }] }, stream: false, - credentials: { apiKey: "token=abc123" }, + credentials: { + apiKey: JSON.stringify({ token: TEST_TOKEN, captcha_verify_param: "captcha-proof" }), + }, signal: null, }); - assert.equal( - capturedUrl, - "https://chat.z.ai/api/v2/chat/completions", - `zai-web executor POSTed to a stale endpoint (${capturedUrl}) — matches #8014's model-independent 404 "Not Found"` + assert.ok(requested.length > 0, "the direct path must actually reach fetch"); + + assert.ok( + // Exact-URL match (not a substring test): `requested` holds whole URLs. + !requested.some((url) => url === STALE_URL), + `zai-web executor POSTed to the stale endpoint — matches #8014's model-independent 404 "Not Found"` ); + + // The executor also probes the homepage for the frontend version and calls + // /api/v1/chats/new first, so pick the completions request by its path. + const completions = requested.filter((u) => new URL(u).pathname.endsWith("/chat/completions")); + assert.equal( + completions.length, + 1, + `expected exactly one completions request, got ${requested}` + ); + assert.equal( + new URL(completions[0]).pathname, + "/api/v2/chat/completions", + `completions must target the v2 path, got ${completions[0]}` + ); + assert.notEqual( result.response.status, 404, diff --git a/tests/unit/zai-web-model-sync-route.test.ts b/tests/unit/zai-web-model-sync-route.test.ts new file mode 100644 index 0000000000..58f340198e --- /dev/null +++ b/tests/unit/zai-web-model-sync-route.test.ts @@ -0,0 +1,94 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; + +const TEST_DATA_DIR = fs.mkdtempSync(path.join(os.tmpdir(), "omniroute-zai-model-sync-")); +process.env.DATA_DIR = TEST_DATA_DIR; +if (!process.env.API_KEY_SECRET) { + process.env.API_KEY_SECRET = `test-zai-model-sync-${Date.now()}`; +} + +const core = await import("../../src/lib/db/core.ts"); +const apiKeysDb = await import("../../src/lib/db/apiKeys.ts"); +const modelsDb = await import("../../src/lib/db/models.ts"); +const providersDb = await import("../../src/lib/db/providers.ts"); +const modelSyncRoute = await import("../../src/app/api/providers/[id]/sync-models/route.ts"); +const scheduler = await import("../../src/shared/services/modelSyncScheduler.ts"); +const originalFetch = globalThis.fetch; + +async function resetStorage() { + delete process.env.INITIAL_PASSWORD; + globalThis.fetch = originalFetch; + modelSyncRoute.__resetLoopbackReadinessForTests(); + core.resetDbInstance(); + apiKeysDb.resetApiKeyState(); + fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); + fs.mkdirSync(TEST_DATA_DIR, { recursive: true }); +} + +test.after(() => { + globalThis.fetch = originalFetch; + core.resetDbInstance(); + apiKeysDb.resetApiKeyState(); + fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); +}); + +test("curated zai-web sync removes stale imported models without touching manual models", async () => { + await resetStorage(); + + const connection = await providersDb.createProviderConnection({ + provider: "zai-web", + authType: "apikey", + name: "Z.ai Web", + apiKey: "current-local-storage-token", + }); + await modelsDb.replaceSyncedAvailableModelsForConnection("zai-web", connection.id, [ + { id: "glm-4.6v", name: "GLM-4.6V", source: "imported" }, + { id: "deep-research", name: "Z1-Rumination", source: "imported" }, + ]); + await modelsDb.addCustomModel("zai-web", "glm-4-air-250414", "GLM-4-32B", "imported"); + await modelsDb.addCustomModel("zai-web", "manual-keep", "Manual Keep", "manual"); + + let fetchCalls = 0; + globalThis.fetch = (async () => { + fetchCalls += 1; + throw new Error("curated provider sync must not fetch a remote model catalog"); + }) as typeof globalThis.fetch; + + const response = await modelSyncRoute.POST( + new Request(`http://localhost/api/providers/${connection.id}/sync-models`, { + method: "POST", + headers: scheduler.buildModelSyncInternalHeaders(), + }), + { params: { id: connection.id } } + ); + const body = (await response.json()) as { + source: string; + skipped: string; + cleanup: { + removedSyncedLists: number; + removedImportedModels: number; + }; + }; + const syncedModels = await modelsDb.getSyncedAvailableModels("zai-web"); + const customModels = (await modelsDb.getCustomModels("zai-web")) as Array<{ + id: string; + source: string; + }>; + + assert.equal(response.status, 200); + assert.equal(body.source, "curated"); + assert.equal(body.skipped, "curated-models-only"); + assert.deepEqual(body.cleanup, { + removedSyncedLists: 1, + removedImportedModels: 1, + }); + assert.deepEqual(syncedModels, []); + assert.deepEqual( + customModels.map((model) => ({ id: model.id, source: model.source })), + [{ id: "manual-keep", source: "manual" }] + ); + assert.equal(fetchCalls, 0); +}); diff --git a/tests/unit/zai-web-models-discovery-7678.test.ts b/tests/unit/zai-web-models-discovery-7678.test.ts index 2aedf1a76f..678bddee88 100644 --- a/tests/unit/zai-web-models-discovery-7678.test.ts +++ b/tests/unit/zai-web-models-discovery-7678.test.ts @@ -1,39 +1,19 @@ -/** - * TDD regression for #7678: `zai-web` (chat.z.ai) had no entry in - * PROVIDER_MODELS_CONFIG (`src/app/api/providers/[id]/models/discovery/providerModelsConfig.ts`), - * so the model-discovery page always fell through to the 400 - * "does not support models listing" error — the hardcoded 3-model registry - * catalog (glm-4.6/glm-4.5/glm-4.5v, one or more now 404 upstream) was the - * only source and the provider had no way to pick up new upstream models. - * - * Fix: add a `zai-web` PROVIDER_MODELS_CONFIG entry pointing at the - * undocumented `https://chat.z.ai/api/models` endpoint (same category as the - * `qwen-web` precedent — #3931), building a Bearer header from the stored - * cookie via the executor's own `extractZaiToken()`, and parsing the - * `{ data: { data: [{ id, name, owned_by }] } }` shape with a flatter - * `{ data: [...] }` fallback. - * - * IMPORTANT: the exact response shape and whether a bare - * `Authorization: Bearer ` is accepted by chat.z.ai/api/models (vs the - * full Cookie header the chat-completions endpoint requires) is UNVERIFIED — - * no live z.ai session was available during research (plan-file Step 4). - * These tests only prove the pipeline (auth-header construction, parsing, - * cache, local-catalog fallback) against the assumed/qwen-web-shaped - * response; they are not a substitute for the mandatory live check before - * merge. - */ import test from "node:test"; import assert from "node:assert/strict"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; -const TEST_DATA_DIR = fs.mkdtempSync(path.join(os.tmpdir(), "omniroute-7678-")); +const TEST_DATA_DIR = fs.mkdtempSync(path.join(os.tmpdir(), "omniroute-zai-web-models-")); process.env.DATA_DIR = TEST_DATA_DIR; const core = await import("../../src/lib/db/core.ts"); +const modelsDb = await import("../../src/lib/db/models.ts"); const providersDb = await import("../../src/lib/db/providers.ts"); const modelsRoute = await import("../../src/app/api/providers/[id]/models/route.ts"); +const registry = await import("../../open-sse/config/providers/registry/zai-web/index.ts"); + +const CURATED_ZAI_WEB_MODEL_IDS = ["glm-5.2", "GLM-5.1", "GLM-5-Turbo", "GLM-5v-Turbo"]; async function resetStorage() { core.resetDbInstance(); @@ -46,40 +26,65 @@ test.after(() => { fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); }); -interface ModelsBody { - provider: string; - connectionId: string; - models: Array<{ id: string; name?: string; owned_by?: string }>; - source?: string; -} +test("zai-web publishes the live reasoning and vision capabilities", () => { + assert.deepEqual( + registry.zai_webProvider.models.map((model) => ({ + id: model.id, + supportsReasoning: model.supportsReasoning === true, + supportsVision: model.supportsVision === true, + toolCalling: model.toolCalling === true, + })), + [ + { + id: "glm-5.2", + supportsReasoning: true, + supportsVision: false, + toolCalling: false, + }, + { + id: "GLM-5.1", + supportsReasoning: true, + supportsVision: false, + toolCalling: false, + }, + { + id: "GLM-5-Turbo", + supportsReasoning: true, + supportsVision: false, + toolCalling: false, + }, + { + id: "GLM-5v-Turbo", + supportsReasoning: true, + supportsVision: true, + toolCalling: false, + }, + ] + ); +}); -const ZAI_WEB_MODELS_URL = "https://chat.z.ai/api/models"; - -test("#7678 zai-web model discovery fetches the live /api/models catalog with a Bearer header", async () => { +test("zai-web exposes only its curated public models without remote discovery", async () => { await resetStorage(); const connection = await providersDb.createProviderConnection({ provider: "zai-web", authType: "apikey", - name: "zai-web-discovery", - apiKey: "token=abc123; other=xyz", + name: "zai-web-curated", + apiKey: "current-local-storage-token", }); - let fetchedUrl: string | null = null; - let capturedAuthHeader: string | null = null; + await modelsDb.replaceSyncedAvailableModelsForConnection("zai-web", connection.id, [ + { id: "glm-4.6v", name: "GLM-4.6V", source: "imported" }, + { id: "0727-106B-API", name: "GLM-4.5-Air", source: "imported" }, + { id: "deep-research", name: "Z1-Rumination", source: "imported" }, + ]); + await modelsDb.addCustomModel("zai-web", "glm-4-air-250414", "GLM-4-32B", "imported"); + await modelsDb.addCustomModel("zai-web", "manual-test-model", "Manual test model", "manual"); + + let fetchCalls = 0; const originalFetch = globalThis.fetch; - globalThis.fetch = (async (url: string | URL | Request, init?: RequestInit) => { - const u = String(url); - if (u.startsWith(ZAI_WEB_MODELS_URL)) { - fetchedUrl = u; - const headers = new Headers(init?.headers); - capturedAuthHeader = headers.get("Authorization"); - return Response.json({ - data: { - data: [{ id: "glm-5.0", name: "GLM-5.0", owned_by: "zai-web" }], - }, - }); - } - return new Response("not found", { status: 404 }); + globalThis.fetch = (async () => { + fetchCalls += 1; + throw new Error("zai-web curated catalog must not perform remote discovery"); }) as typeof globalThis.fetch; try { @@ -87,143 +92,15 @@ test("#7678 zai-web model discovery fetches the live /api/models catalog with a new Request(`http://localhost/api/providers/${connection.id}/models?refresh=true`), { params: { id: connection.id } } ); + assert.equal(response.status, 200); - const body = (await response.json()) as ModelsBody; - assert.equal(body.provider, "zai-web"); - assert.equal(body.source, "api", "should serve the live zai-web catalog, not local_catalog"); - assert.ok(fetchedUrl, `should have probed ${ZAI_WEB_MODELS_URL}`); - const ids = body.models.map((m) => m.id); - assert.ok(ids.includes("glm-5.0"), `live ids missing: ${ids.join(",")}`); - assert.equal( - capturedAuthHeader, - "Bearer abc123", - "extractZaiToken should strip the cookie down to the bare token= value" + const body = await response.json(); + assert.equal(body.source, "local_catalog"); + assert.deepEqual( + body.models.map((model: { id: string }) => model.id), + CURATED_ZAI_WEB_MODEL_IDS ); - } finally { - globalThis.fetch = originalFetch; - } -}); - -test("#7678 zai-web parseResponse tolerates the flatter { data: [...] } shape", async () => { - await resetStorage(); - const connection = await providersDb.createProviderConnection({ - provider: "zai-web", - authType: "apikey", - name: "zai-web-flat", - apiKey: "token=def456", - }); - - const originalFetch = globalThis.fetch; - globalThis.fetch = (async (url: string | URL | Request) => { - if (String(url).startsWith(ZAI_WEB_MODELS_URL)) { - return Response.json({ data: [{ id: "glm-4.6", name: "GLM-4.6" }] }); - } - return new Response("not found", { status: 404 }); - }) as typeof globalThis.fetch; - - try { - const response = await modelsRoute.GET( - new Request(`http://localhost/api/providers/${connection.id}/models?refresh=true`), - { params: { id: connection.id } } - ); - assert.equal(response.status, 200); - const body = (await response.json()) as ModelsBody; - assert.equal(body.source, "api"); - assert.ok(body.models.map((m) => m.id).includes("glm-4.6")); - } finally { - globalThis.fetch = originalFetch; - } -}); - -test("#7678 zai-web discovery failure falls back to the hardcoded local catalog", async () => { - await resetStorage(); - const connection = await providersDb.createProviderConnection({ - provider: "zai-web", - authType: "apikey", - name: "zai-web-fallback", - apiKey: "token=expired", - }); - - const originalFetch = globalThis.fetch; - globalThis.fetch = (async (url: string | URL | Request) => { - if (String(url).startsWith(ZAI_WEB_MODELS_URL)) { - return new Response("unauthorized", { status: 401 }); - } - return new Response("not found", { status: 404 }); - }) as typeof globalThis.fetch; - - try { - const response = await modelsRoute.GET( - new Request(`http://localhost/api/providers/${connection.id}/models?refresh=true`), - { params: { id: connection.id } } - ); - assert.equal(response.status, 200); - const body = (await response.json()) as ModelsBody; - assert.equal( - body.source, - "local_catalog", - "a failed live fetch must degrade to the hardcoded catalog, never an empty list" - ); - const ids = body.models.map((m) => m.id); - assert.ok(ids.length > 0, "local_catalog fallback must not be empty"); - assert.ok( - ids.includes("glm-4.6"), - `expected the registry's static zai-web catalog, got: ${ids.join(",")}` - ); - } finally { - globalThis.fetch = originalFetch; - } -}); - -test("#7678 zai-web second call without ?refresh uses the cache, not a new live fetch", async () => { - await resetStorage(); - const connection = await providersDb.createProviderConnection({ - provider: "zai-web", - authType: "apikey", - name: "zai-web-cache", - apiKey: "token=cached", - }); - - const originalFetch = globalThis.fetch; - let liveFetchCount = 0; - globalThis.fetch = (async (url: string | URL | Request) => { - if (String(url).startsWith(ZAI_WEB_MODELS_URL)) { - liveFetchCount++; - return Response.json({ - data: { data: [{ id: "glm-4.6", name: "GLM-4.6", owned_by: "zai-web" }] }, - }); - } - return new Response("not found", { status: 404 }); - }) as typeof globalThis.fetch; - - try { - const first = await modelsRoute.GET( - new Request(`http://localhost/api/providers/${connection.id}/models?refresh=true`), - { params: { id: connection.id } } - ); - assert.equal(first.status, 200); - const firstBody = (await first.json()) as ModelsBody; - assert.equal(firstBody.source, "api"); - assert.equal(liveFetchCount, 1); - - // Second call: fetch mock would fail if hit again — proves the cache short-circuits it. - globalThis.fetch = (async (url: string | URL | Request) => { - if (String(url).startsWith(ZAI_WEB_MODELS_URL)) { - liveFetchCount++; - return new Response("should not be called", { status: 500 }); - } - return new Response("not found", { status: 404 }); - }) as typeof globalThis.fetch; - - const second = await modelsRoute.GET( - new Request(`http://localhost/api/providers/${connection.id}/models`), - { params: { id: connection.id } } - ); - assert.equal(second.status, 200); - const secondBody = (await second.json()) as ModelsBody; - assert.equal(secondBody.source, "cache", "second call without ?refresh must be served from cache"); - assert.equal(liveFetchCount, 1, "the cache must short-circuit the live fetch entirely"); - assert.ok(secondBody.models.map((m) => m.id).includes("glm-4.6")); + assert.equal(fetchCalls, 0); } finally { globalThis.fetch = originalFetch; } diff --git a/tests/unit/zai-web-silent-empty-repro.test.ts b/tests/unit/zai-web-silent-empty-repro.test.ts new file mode 100644 index 0000000000..60e2be4d64 --- /dev/null +++ b/tests/unit/zai-web-silent-empty-repro.test.ts @@ -0,0 +1,157 @@ +import test from "node:test"; +import assert from "node:assert/strict"; + +const { buildZaiStreamingBody, parseZaiFrame, collectZaiNonStreaming } = await import( + "../../open-sse/executors/zai-web/stream.ts" +); + +/** + * Hard Rule #6 — "never silently swallow errors in SSE streams". + * + * HTTP-level failures are already handled: `fetchUpstream` turns any `!ok` + * response into a `makeErrorResult` with the sanitized body. The gap is a + * **200 whose SSE body carries an error payload** — `parseZaiFrame` returns + * null for it, `drainSseDeltas` drops it, and the stream closes with an empty + * assistant message + stop + [DONE]. The caller sees a successful empty + * completion: HTTP 200, `out=0`, "complete". That is the shape reported on + * #8451, and it makes a rejected signature, an expired captcha and a stale + * token all look identical. + * + * Scope note: returning null for a *contentless* frame is deliberate and + * live-validated — z.ai sends phase frames with no `delta_content`, and + * `executor-zai-web.test.ts` pins that ("returns null for frames with no usable + * delta"). So this only adds recognition of affirmatively error-shaped frames; + * "nothing parseable arrived" is left alone, because on this protocol that is + * not by itself evidence of failure. + */ + +function sseStream(...frames: string[]): ReadableStream { + const enc = new TextEncoder(); + return new ReadableStream({ + start(c) { + for (const f of frames) c.enqueue(enc.encode(`data: ${f}\n\n`)); + c.close(); + }, + }); +} + +async function readAll(stream: ReadableStream): Promise { + const reader = stream.getReader(); + const dec = new TextDecoder(); + let out = ""; + for (;;) { + const { done, value } = await reader.read(); + if (done) break; + out += dec.decode(value as Uint8Array, { stream: true }); + } + return out; +} + +const emitChunk = ( + controller: ReadableStreamDefaultController, + delta: Record, + finish?: string +) => { + const payload = JSON.stringify({ + choices: [{ index: 0, delta, finish_reason: finish ?? null }], + }); + controller.enqueue(new TextEncoder().encode(`data: ${payload}\n\n`)); +}; + +const contentOf = (sse: string) => + [...sse.matchAll(/"content":"([^"]*)"/g)].map((m) => m[1]).join(""); + +test("parseZaiFrame classifies an error-shaped frame instead of discarding it", () => { + assert.equal(parseZaiFrame({ error: "captcha expired" })?.error, "captcha expired"); + assert.equal( + parseZaiFrame({ error: { detail: "signature invalid" } })?.error, + "signature invalid" + ); + assert.equal( + parseZaiFrame({ data: { error: { message: "token expired" } } })?.error, + "token expired" + ); +}); + +test("an error frame is terminal", () => { + assert.equal(parseZaiFrame({ error: "nope" })?.done, true); +}); + +test("REGRESSION GUARD: contentless frames are still skipped, not reported as errors", () => { + // Live-validated behaviour — z.ai emits phase frames with no delta_content. + // Pinned by executor-zai-web.test.ts; re-asserted here because the error path + // added below runs in the same function. + assert.equal(parseZaiFrame({ data: { phase: "answer" } }), null); + assert.equal(parseZaiFrame({ type: "chat:completion", data: { phase: "thinking" } }), null); + assert.equal(parseZaiFrame({}), null); + assert.equal(parseZaiFrame(null), null); + assert.equal(parseZaiFrame("not-an-object"), null); +}); + +test("a 200 stream carrying an error frame surfaces it instead of finishing empty", async () => { + const upstream = sseStream(JSON.stringify({ error: { detail: "signature invalid" } })); + const out = await readAll(buildZaiStreamingBody(upstream, emitChunk, null)); + + assert.match(contentOf(out), /signature invalid/, "the upstream's diagnosis must reach the caller"); + assert.match(contentOf(out), /\[Z\.ai error\]/, "tagged like the other web executors"); + assert.ok(out.includes('"finish_reason":"stop"')); + assert.ok(out.includes("[DONE]"), "the stream still terminates cleanly for the client"); +}); + +test("an error frame after partial content still surfaces, keeping what was streamed", async () => { + const upstream = sseStream( + JSON.stringify({ type: "chat:completion", data: { delta_content: "partial", phase: "answer" } }), + JSON.stringify({ error: "stream aborted upstream" }) + ); + const out = await readAll(buildZaiStreamingBody(upstream, emitChunk, null)); + + assert.match(contentOf(out), /partial/, "already-streamed content is preserved"); + assert.match(contentOf(out), /stream aborted upstream/, "and the failure is appended, not dropped"); +}); + +test("control: a well-formed stream is untouched", async () => { + const upstream = sseStream( + JSON.stringify({ type: "chat:completion", data: { delta_content: "hello", phase: "answer" } }), + JSON.stringify({ type: "chat:completion", data: { phase: "done", done: true } }) + ); + const out = await readAll(buildZaiStreamingBody(upstream, emitChunk, null)); + + assert.equal(contentOf(out), "hello"); + assert.ok(!out.includes("[Z.ai error]"), "the happy path must stay clean"); +}); + +test("control: a phase-only stream is not turned into an error", async () => { + // The exact case the deliberate-null design exists for. + const upstream = sseStream( + JSON.stringify({ type: "chat:completion", data: { phase: "answer" } }), + JSON.stringify({ type: "chat:completion", data: { delta_content: "hi", phase: "answer" } }), + JSON.stringify({ type: "chat:completion", data: { phase: "done", done: true } }) + ); + const out = await readAll(buildZaiStreamingBody(upstream, emitChunk, null)); + + assert.equal(contentOf(out), "hi"); + assert.ok(!out.includes("[Z.ai error]")); +}); + +// ── Non-streaming path (collectZaiNonStreaming) ─────────────────────────────── + +test("collectZaiNonStreaming rejects on an error frame instead of returning empty", async () => { + const upstream = sseStream(JSON.stringify({ error: { detail: "captcha expired" } })); + await assert.rejects( + () => collectZaiNonStreaming(upstream), + (err: Error) => { + assert.match(err.message, /captcha expired/); + return true; + } + ); +}); + +test("collectZaiNonStreaming returns content when no error frame is present", async () => { + const upstream = sseStream( + JSON.stringify({ type: "chat:completion", data: { delta_content: "hello", phase: "answer" } }), + JSON.stringify({ type: "chat:completion", data: { phase: "done", done: true } }) + ); + const result = await collectZaiNonStreaming(upstream); + assert.equal(result.answer, "hello"); + assert.equal(result.reasoning, ""); +}); diff --git a/vitest.config.ts b/vitest.config.ts index d602eecb71..49856274a5 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -40,7 +40,6 @@ export default defineConfig({ "tests/e2e/protocol-clients.test.ts", // ── Pre-existing failures tracked by #8618 ─────────────────────────────── "open-sse/services/autoCombo/__tests__/providerDiversity.test.ts", // #8618 — pre-existing failure; remove this exclusion when fixed - "tests/unit/ui/kimiSponsorBanner.test.tsx", // #8618 — pre-existing failure; remove this exclusion when fixed "tests/unit/ui/compareView.test.tsx", // #8618 — pre-existing failure; remove this exclusion when fixed "tests/unit/ui/model-select-modal-keep-open.test.tsx", // #8618 — pre-existing failure; remove this exclusion when fixed "tests/unit/ui/model-select-field-6540.test.tsx", // #8618 — pre-existing failure; remove this exclusion when fixed